PageSourceSearch

http://annhri.org/wp-content/plugins/video-embed-thumbnail-generator/js/kgvid_video_embed.js?ver=4.6.25

js annhri.org collected 2026-10-07 18:59:27 UTC 41,819 bytes, 1,183 lines download raw bytes

1jQuery(document).ready(kgvid_document_ready());
2jQuery(window).on("load", kgvid_window_load);
3
4function kgvid_document_ready() {
5
6	jQuery('.kgvid_videodiv').each(function(){ //setup individual videos. WordPress Default has its own success callback
7
8		var video_vars = jQuery(this).data('kgvid_video_vars');
9
10		if ( video_vars.player_type == "Video.js" ) {
11
12			kgvid_load_videojs(video_vars);
13	
14		}
15
16		if ( video_vars.player_type == "JWPlayer" ) {
17			var player_id = jQuery('#video_'+video_vars.id+'_div').children('div[id^="jwplayer"]').attr('id');
18			player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
19			var player = jwplayer(player_id);
20			player.onReady( kgvid_setup_video(video_vars.id) );
21		}
22
23		if ( video_vars.player_type == "StrobeMediaPlayback" ) {
24			swfobject.embedSWF(video_vars.swfurl, 'video_'+video_vars.id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
25			kgvid_setup_video(video_vars.id);
26		}
27
28	});
29
30}
31
32function kgvid_window_load() {
33
34	jQuery('.kgvid_gallerywrapper').each(function(){ //setup gallery thumbnails
35
36		var gallery_id = this.id;
37		kgvid_resize_gallery_play_button(gallery_id);
38		jQuery(window).resize( function(){ kgvid_resize_gallery_play_button(gallery_id) } );
39		setTimeout(function(){ kgvid_resize_gallery_play_button(gallery_id) }, 200);
40
41	});
42
43}
44
45function kgvid_mejs_success(mediaElement, domObject) {
46	if ( domObject.nodeName == "VIDEO" ) {
47		var id = jQuery(domObject).parents('.kgvid_videodiv').data('id');
48		if ( id != undefined ) { //make sure we're using KGVID shortcode
49			kgvid_setup_video(id);
50		}
51	}
52}
53
54function kgvid_convert_to_timecode(time) {
55
56	var minutes = Math.floor(time / 60);
57	var seconds = Math.round((time - (minutes * 60))*100)/100;
58	if (minutes < 10) {minutes = "0"+minutes;}
59	if (seconds < 10) {seconds = "0"+seconds;}
60	var time_display = minutes+':'+seconds;
61	return time_display;
62
63}
64
65function kgvid_convert_from_timecode(timecode) {
66
67	var timecode_array = timecode.split(":");
68	timecode_array = timecode_array.reverse();
69	if ( timecode_array[1] ) { timecode_array[1] = timecode_array[1] * 60; }
70	if ( timecode_array[2] ) { timecode_array[2] = timecode_array[2] * 3600; }
71	var thumbtimecode = 0;
72	jQuery.each(timecode_array,function() {
73		thumbtimecode += parseFloat(this);
74	});
75	return thumbtimecode;
76
77}
78
79function kgvid_SetVideo(id) { //for galleries
80
81	//set the viewport meta tag so the gallery fits in iOS
82	var viewport_meta = jQuery('meta[name="viewport"]').first();
83	var viewport_original = "";
84	if ( viewport_meta.length == 1 ) {
85		var viewport_original = viewport_meta.attr('content');
86		viewport_meta.attr('content', 'width=device-width, initial-scale=1');
87	}
88	else { jQuery('head').append('<meta name="viewport" content="width=device-width, initial-scale=1" id="kgvid_gallery_viewport">'); }
89
90	var gallery_id = jQuery('#kgvid_video_gallery_thumb_'+id).parent().attr('id');
91
92	var width = jQuery('#kgvid_video_gallery_thumb_'+id).data('width');
93	var height = jQuery('#kgvid_video_gallery_thumb_'+id).data('height');
94	var aspect_ratio = Math.round(height/width*1000)/1000
95	var window_width = window.outerWidth;
96	if ( window.outerWidth == 0 ) { window_width = window.innerWidth; }
97	if ( width > window_width ) {
98		width = window_width-60;
99		height = Math.round(width * aspect_ratio);
100	}
101	if ( height > (jQuery(window).height() - 20) ) {
102		height = jQuery(window).height() - 20;
103		width = Math.round(height / aspect_ratio);
104	}
105
106	var frame_height = height;
107	var meta = jQuery('#kgvid_video_gallery_thumb_'+id).data('meta');
108	if ( meta > 0 ) { frame_height = parseInt(height)+Math.round(28*meta); }
109	var frame_width = parseInt(width) + 10;
110	frame_height = parseInt(frame_height) + 10;
111
112	jQuery.modal("", {
113		overlayId: 'kgvid-simplemodal-overlay',
114		containerId: 'kgvid-simplemodal-container',
115		opacity:70,
116		minWidth:frame_width,
117		minHeight:frame_height,
118		autoResize: false,
119		overlayClose:true,
120		closeHTML:'<a class="modalCloseImg simplemodal-close" title="Close"><span class="dashicons dashicons-no-alt"></span></a>',
121		zIndex:10000,
122		onShow: function(dialog) {
123
124			//build next/previous buttons
125
126			var is_paginated = jQuery('#'+gallery_id+' .kgvid_gallery_pagination span').length > 0;
127
128			var nav_code = '';
129			if ( jQuery('#kgvid_video_gallery_thumb_'+id).prev('#'+gallery_id+' .kgvid_video_gallery_thumb').length  > 0 ||
130				( is_paginated && jQuery('#'+gallery_id+' .kgvid_gallery_pagination_selected').html() != "1" )
131			) {
132				nav_code += '<a class="kgvid_gallery_nav kgvid_gallery_prev" title="'+kgvidL10n_frontend.previous+'">&#8592;</a>';
133			}
134			if ( jQuery('#kgvid_video_gallery_thumb_'+id).next('#'+gallery_id+' .kgvid_video_gallery_thumb').length  > 0 ||
135				( is_paginated && jQuery('#'+gallery_id+' .kgvid_gallery_pagination span a').last().html() > jQuery('#'+gallery_id+' .kgvid_gallery_pagination_selected').html() )
136			) {
137				nav_code += '<a class="kgvid_gallery_nav kgvid_gallery_next" title="'+kgvidL10n_frontend.next+'">&#8594;</a>';
138			}
139
140			jQuery('#kgvid-simplemodal-container').prepend(nav_code);
141
142			jQuery('.kgvid_gallery_next').click( function() {
143
144				var next_thumb = jQuery('#kgvid_video_gallery_thumb_'+id).next('.kgvid_video_gallery_thumb');
145
146				if ( next_thumb.length == 0 && is_paginated ) {
147					var next_page = jQuery('#'+gallery_id+' .kgvid_gallery_pagination_selected').next();
148					kgvid_switch_gallery_page(next_page[0], 'next');
149				}
150				else { //not switching pages
151					jQuery.modal.close();
152					next_thumb.trigger('click');
153				}
154
155			});
156
157			jQuery('.kgvid_gallery_prev').click( function() {
158
159				var prev_thumb = jQuery('#kgvid_video_gallery_thumb_'+id).prev('.kgvid_video_gallery_thumb');
160
161				if ( prev_thumb.length == 0 && is_paginated ) {
162					var prev_page = jQuery('#'+gallery_id+' .kgvid_gallery_pagination_selected').prev();
163					kgvid_switch_gallery_page(prev_page[0], 'prev');
164				}
165				else { //not switching pages
166					jQuery.modal.close();
167					prev_thumb.trigger('click');
168				}
169
170			});
171			jQuery('#simplemodal-data').prepend('<div id="kgvid_popup_video_holder_'+id+'"></div>');
172
173			jQuery(document).on('keydown.kgvid', function(e) {
174				switch(e.which) {
175					case 37: // left
176					jQuery('.kgvid_gallery_prev').click();
177					break;
178
179					case 39: // right
180					jQuery('.kgvid_gallery_next').click();
181					break;
182
183					default: return; // exit this handler for other keys
184				}
185				e.preventDefault(); // prevent the default action (scroll / move caret)
186			});
187
188			//load the video player embed code
189
190			if ( jQuery('#kgvid_popup_video_holder_'+id).length == 1 ) { //make sure the user hasn't moved on to another video
191
192				var popup_code = jQuery('#kgvid_video_gallery_thumb_'+id).data('popupcode');
193				var video_vars = jQuery('#kgvid_video_gallery_thumb_'+id).data('kgvid_video_vars');
194
195				jQuery('#kgvid_popup_video_holder_'+id).html(popup_code);
196				jQuery('#video_'+id+'_div').data('kgvid_video_vars', video_vars);
197
198				if ( video_vars.player_type == "StrobeMediaPlayback" ) {
199					swfobject.embedSWF(video_vars.swfurl, 'video_'+id, video_vars.width, video_vars.height, '10.1.0', video_vars.expressinstallswfurl, video_vars.flashvars, video_vars.params);
200				}
201
202				if ( video_vars.player_type == "Video.js" ) {
203					setTimeout(function() { kgvid_load_videojs(video_vars); }, 0);
204				}
205				else { setTimeout(function() { kgvid_setup_video(id); }, 0); }
206
207				dialog.wrap.css('overflow', 'hidden'); //disable scroll bars
208				if ( meta > 0 ) {
209					jQuery('#kgvid-simplemodal-container').css('color','white'); //show text if there's anything to see below the video
210					meta_bump = 5;
211					if ( video_vars.player_type == "JWPlayer" ) { meta_bump = 15; }
212					jQuery('#kgvid-simplemodal-container').height(jQuery('#kgvid-simplemodal-container').height() + meta_bump);
213					jQuery.modal.setPosition();
214				}
215
216				if ( video_vars.player_type == "WordPressDefault" ) {
217					jQuery('#kgvid_'+id+'_wrapper video').mediaelementplayer({
218						success: function(mediaElement, domObject) {
219							if (mediaElement.pluginType == 'flash' || mediaElement.pluginType == 'silverlight') {
220								mediaElement.addEventListener('canplay', function() {
221									// Player is ready
222									mediaElement.play();
223								}, false);
224
225								mediaElement.addEventListener('ended', function() {
226									if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
227										kgvid_video_gallery_end_action(id, jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end'));
228									}
229								}, false);
230							}//end if flash or silverlight
231							else { mediaElement.play(); }
232						},
233						features : [ 'playpause', 'progress', 'volume', 'tracks', 's
233ourcechooser', 'fullscreen' ]
234					});
235				}//end if WordPress Default
236			}//end check to make sure video still needs to load
237
238		}, //end onShow function
239		onClose: function(dialog) {
240
241			if ( viewport_original != "" ) { viewport_meta.attr('content', viewport_original); }
242			else { jQuery('#kgvid_gallery_viewport').remove(); }
243
244			var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
245
246			if ( video_vars !== undefined ) {
247				if ( video_vars.player_type == "Video.js" ) {
248					eval('videojs.players.video_'+id).pause();
249					setTimeout(function() { eval('videojs.players.video_'+id).dispose(); }, 0);
250				}
251				if ( video_vars.player_type == "JWPlayer" ) {
252					jwplayer(jQuery('#kgvid_'+id+'_wrapper .jwplayer').attr('id')).stop();
253				}
254			}
255
256			jQuery(window).off('resize', kgvid_resize_video(id));
257			jQuery(document).off('keydown.kgvid'); //disable left/right navigation
258			jQuery.modal.close();
259		}
260	}); //end modal call
261
262}
263
264function kgvid_video_gallery_end_action(id, action) {
265	jQuery.modal.close();
266	if ( action == "next" ) {
267		jQuery('#kgvid_video_gallery_thumb_'+id).next('#'+jQuery('#kgvid_video_gallery_thumb_'+id).parent().attr('id')+' .kgvid_video_gallery_thumb').trigger('click')
268	}
269}
270
271function kgvid_timeupdate_poster() {
272	jQuery('#'+this.id()+' > .vjs-poster').fadeOut();
273}
274
275function kgvid_add_hover(id) {
276
277	jQuery('#video_'+id+'_div').hover(
278		function(){
279			jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
280		},
281		function(){
282			jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
283		}
284	);
285
286	jQuery('#video_'+id+'_div').focus(
287		function(){
288			jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
289		}
290	)
291	.focusout(
292		function(){
293			jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
294		}
295	);
296
297}
298
299function kgvid_load_videojs(video_vars) {
300
301	var videojs_options = { "language": video_vars.locale };
302
303	if ( videojs.browser.IS_IPHONE == true ) {
304		videojs_options.html5 = { "nativeTextTracks" : true };
305	}
306	else { videojs_options.html5 = { "nativeTextTracks" : false }; }
307
308	if ( video_vars.resize == "true" || video_vars.fullwidth == "true" ) {
309		videojs_options.fluid = true;
310	}
311	else {
312		videojs_options.fluid = false;
313	}
314	if ( videojs_options.fluid == true && video_vars.width != undefined && video_vars.width.indexOf('%') === -1 && video_vars.height != undefined ) {
315		videojs_options.aspectRatio = video_vars.width + ':' + video_vars.height;
316	}
317	if ( video_vars.nativecontrolsfortouch == "true" ) {
318		videojs_options.nativeControlsForTouch = true;
319	}
320	if ( video_vars.playback_rate == "true" ) {
321		videojs_options.playbackRates = [0.5, 1, 1.25, 1.5, 2];
322	}
323	if ( video_vars.enable_resolutions_plugin == "true" ) {
324		
325		kgvid_load_video_quality_selector(); //defined in video-quality-selector.js
326
327		if ( videojs.VERSION.split('.')[0] >= 5 ) {
328
329			videojs_options.plugins = { "resolutionSelector" : { "force_types" : ["video/mp4"] } };
330			if ( video_vars.default_res ) {
331				videojs_options.plugins.resolutionSelector.default_res = video_vars.default_res;
332			}
333
334		}
335
336		else {
337			console.warn('Video Embed & Thumbnail Generator: Video.js version '+videojs.VERSION+' is loaded by another application. Resolution selection is not compatible with this older version and has been disabled.');
338		}
339	}
340
341	videojs('video_'+video_vars.id, videojs_options ).ready(function(){ kgvid_setup_video(video_vars.id); });
342
343}
344
345function kgvid_setup_video(id) {
346
347	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
348
349	if ( typeof (jQuery) == 'function' ) { jQuery.fn.fitVids=function(){}; }; //disable fitvids
350
351	var iOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false );
352	if (iOS && video_vars.player_type == "StrobeMediaPlayback" ) { video_vars.player_type = "Video.js"; }
353
354	jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_watermark'));
355	jQuery('#video_'+id+'_watermark').attr('style', ''); //shows the hidden watermark div
356	jQuery('#video_'+id+'_div').prepend(jQuery('#video_'+id+'_meta'));
357	jQuery('#video_'+id+'_embed, #click_trap_'+id).appendTo('#video_'+id+'_div');
358	jQuery('#click_trap_'+id).on('click', function(){ kgvid_share_icon_click(id); });
359	jQuery('#video_'+id+'_meta').attr('style', ''); //shows the hidden meta div
360	if ( video_vars.autoplay == "true" ) {
361		kgvid_video_counter(id, 'play');
362		jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
363	}
364
365	if ( video_vars.right_click != "on" ) {
366		jQuery('#video_'+id+'_div').bind('contextmenu',function() { return false; });
367	}
368
369	if ( video_vars.player_type == "Video.js" ) {
370
371		var player = eval('videojs.players.video_'+id);
372
373		if ( jQuery('#video_'+id+'_flash_api').parent().is('.fluid-width-video-wrapper') ) { //disables fitVids.js
374			jQuery('#video_'+id+'_flash_api').unwrap();
375		}
376
377		jQuery('#video_'+id).append(jQuery('#video_'+id+'_watermark'));
378
379		if ( videojs.VERSION.split('.')[0] >= 5 && videojs.browser.TOUCH_ENABLED == true ) {
380
381			if ( video_vars.nativecontrolsfortouch == "true" && videojs.browser.IS_ANDROID ) {
382				jQuery('.vjs-big-play-button').hide();
383			}
384
385			if ( player.controls() == false && player.muted() == false ) { //mobile browsers allow auto
385play only if the player is muted
386				player.controls(true);
387			}
388		}
389
390		if ( video_vars.autoplay == "true" && !player.paused() && player.hasClass('vjs-paused') ) {
391			player.pause();
392			player.play();
393		}
394
395		player.on('loadedmetadata', function(){
396
397			if ( videojs.VERSION.split('.')[0] >= 5 ) {
398
399				var text_tracks = player.textTracks();
400				var track_elements = player.options_.tracks;
401				var played = jQuery('#video_'+id+'_div').data("played") || "not played";
402
403				if ( played == "not played" ) { //only turn on the default captions on first load
404
405					if ( track_elements != null ) {
406						jQuery(text_tracks).each(function(index, track) {
407							if ( track_elements[index].default == true && track.mode != 'showing' ) { player.textTracks()[index].mode = 'showing'; }
408						});
409					}
410
411					if ( video_vars.start != '' ) {
412						player.currentTime(kgvid_convert_from_timecode(video_vars.start));
413					}
414
415				}
416
417			}
418
419			if ( video_vars.set_volume != "" ) { player.volume(video_vars.set_volume); }
420
421			if ( video_vars.autoplay == "true" && player.paused() ) { player.play(); }
422
423		});
424
425		player.on('play', function kgvid_play_start(){
426			player.off('timeupdate', kgvid_timeupdate_poster);
427			if ( video_vars.meta ) {
428				kgvid_add_hover(id);
429				jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
430			}
431			if ( video_vars.autoplay == "true" ) { jQuery('#video_'+id+' > .vjs-control-bar').removeClass('vjs-fade-in'); }
432			if ( video_vars.endofvideooverlay != "" ) { jQuery('#video_'+id+' > .vjs-poster').hide(); }
433
434			if ( video_vars.pauseothervideos == "true" && videojs.VERSION.split('.')[0] >= 5 ) {
435				jQuery.each(videojs.getPlayers(), function(otherPlayerId, otherPlayer) {
436					if ( player.id() != otherPlayerId 
437					&& otherPlayer != null
438					&& !otherPlayer.paused() 
439					&& !otherPlayer.autoplay() ) {
440						otherPlayer.pause();
441					}
442				});
443			}
444
445			kgvid_video_counter(id, 'play');
446
447			player.on('timeupdate', function(){
448
449				var percent_duration = Math.round(player.currentTime() / player.duration() * 100);
450
451				if ( jQuery('#video_'+id+'_div').data("25") == undefined && percent_duration >= 25 && percent_duration < 50 ) {
452					jQuery('#video_'+id+'_div').data("25", true);
453					kgvid_video_counter(id, '25');
454				}
455				else if ( jQuery('#video_'+id+'_div').data("50") == undefined && percent_duration >= 50 && percent_duration < 75 ) {
456					jQuery('#video_'+id+'_div').data("50", true);
457					kgvid_video_counter(id, '50');
458				}
459				else if ( jQuery('#video_'+id+'_div').data("75") == undefined && percent_duration >= 75 && percent_duration < 100 ) {
460					jQuery('#video_'+id+'_div').data("75", true);
461					kgvid_video_counter(id, '75');
462
463				}
464
465			});
466
467		});
468
469		player.on('pause', function kgvid_play_pause(){
470			jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
471		});
472
473		player.on('ended', function kgvid_play_end(){
474			if ( jQuery('#video_'+id+'_div').data("end") == undefined ) {
475				jQuery('#video_'+id+'_div').data("end", true);
476				kgvid_video_counter(id, 'end');
477			}
478			setTimeout(function() { jQuery('#video_'+id+' > .vjs-loading-spinner').hide(); }, 250);
479			if ( video_vars.endofvideooverlay != "" ) {
480				jQuery('#video_'+id+' > .vjs-poster').css({
481				'background-image':'url('+video_vars.endofvideooverlay+')'
482				}).fadeIn();
483
484				setTimeout(function() { player.on('timeupdate', kgvid_timeupdate_poster); }, 500);
485
486			}
487			if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
488				kgvid_video_gallery_end_action(id, jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end'));
489			}
490		});
491
492		player.on('fullscreenchange', function(){
493
494			var
495				fullScreenApi = {
496					supportsFullScreen: false,
497					isFullScreen: function() { return false; },
498					requestFullScreen: function() {},
499					cancelFullScreen: function() {},
500					fullScreenEventName: '',
501					prefix: ''
502				},
503				browserPrefixes = 'webkit moz o ms khtml'.split(' ');
504
505			// check for native support
506			if (typeof document.cancelFullScreen != 'undefined') {
507				fullScreenApi.supportsFullScreen = true;
508			} else {
509				// check for fullscreen support by vendor prefix
510				for (var i = 0, il = browserPrefixes.length; i < il; i++ ) {
511					fullScreenApi.prefix = browserPrefixes[i];
512					if (typeof document[fullScreenApi.prefix + 'CancelFullScreen' ] != 'undefined' ) {
513						fullScreenApi.supportsFullScreen = true;
514						break;
515					}
516				}
517			}
518
519			if ( player.availableRes != undefined ) {
520				 kgvid_resize_video(id);
521			}
522
523			if ( fullScreenApi.supportsFullScreen == false ) {
524				if ( jQuery('#video_'+id).hasClass('vjs-fullscreen') ) {
525					jQuery('#video_'+id+'_meta').hide();
526					jQuery('#video_'+id+'_watermark img').css('position', 'fixed');
527				}
528				else {
529					jQuery('#video_'+id+'_meta').show();
530					jQuery('#video_'+id+'_watermark img').css('position', 'absolute');
531				}
532			}
533
534		});
535
536	} //end if Video.js
537
538	if ( video_vars.player_type == "WordPressDefault" ) {
539
540		var player = jQuery('#video_'+id+'_div video');
541		var mejs_id = jQuery('#video_'+id+'_div .mejs-container').attr('id');
542		var played = jQuery('#video_'+id+'_div').data("played") || "not played";
543
544		jQuery('.wp-video').removeAttr('style');
545		jQuery('#video_'+id+'_div .mejs-container').append(jQuery('#video_'+id+'_watermark'));
546
547		if ( played == "not played" ) { //only turn on the default captions on first load
548
549			var mejs_player = eval('mejs.players.'+mejs_id);
550
551			jQuery.each(mejs_player.tracks, function(key, item) {
552				if ( item.srclang == jQuery('#'+mejs_id+' track[default]').attr('srclang').toLowerCase() ) {
553					mejs_player.setTrack(item.trackId);
554					jQuery('#'+mejs_id+' .mejs-captions-selector input[value="en"]').prop('checked',true);
555				}
556			});
557
558			if ( video_vars.start != '' ) {
559				player[0].setCurrentTime(kgvid_convert_from_timecode(video_vars.start));
560			}
561
562		}
563
564		player.on('loadedmetadata', function() {
565
566			var played = jQuery('#video_'+id+'_div').data("played") || "not played";
567
568			if ( video_vars.set_volume != "" ) { player[0].volume = video_vars.set_volume; }
569			if ( video_vars.mute == "true" ) { player[0].setMuted(true); }
570			if ( video_vars.pauseothervideos == "false" ) { mejs_player.options.pauseOtherPlayers = false; }
571			
572			if ( played == "not played" ) { //only fast forward to start time on first play
573
574				if ( video_vars.start != '' ) {
575					player[0].setCurrentTime(kgvid_convert_from_timecode(video_vars.start));
576				}
577
578			}
579
580		});
581
582		player.on('play', function(){
583			kgvid_add_hover(id);
584			jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
585
586			kgvid_video_counter(id, 'play');
587
588			player.on('timeupdate', function(){
589
590				var percent_duration = Math.round(player[0].currentTime / player[0].duration * 100);
591
592				if ( jQuery('#video_'+id+'_div').data("25") == undefined && percent_duration >= 25 && percent_duration < 50 ) {
593					jQuery('#video_'+id+'_div').data("25", true);
594					kgvid_video_counter(id, '25');
595				}
596				else if ( jQuery('#video_'+id+'_div').data("50") == undefined && percent_duration >= 50 && percent_duration < 75 ) {
597					jQuery('#video_'+id+'_div').data("50", true);
598					kgvid_video_counter(id, '50');
599				}
600				else if ( jQuery('#video_'+id+'_div').data("75") == undefined && percent_duration >= 75 && percent_duration < 100 ) {
601					jQuery('#video_'+id+'_div').data("75", true);
602					kgvid_video_counter(id, '75');
603				}
604
605			});
606
607		});
608
609		player.on('pause', function(){
610			jQuery('#video_'+id+'_meta').addClass('kgvid_video_meta_hover');
611		});
612
613		jQuery(document).on('mozfullscreenchange webkitfullscreenchange fullscreenchange', function(){
614
615			var mejs_player = eval('mejs.players.'+mejs_id);
616
617			if ( mejs_player.isFullScreen ) {
618				//mejs_player.enterFullScreen();
619			}
620		});
621
622		player.on('ended', function(){
623			if ( jQuery('#video_'+id+'_div').data("end") == undefined ) {
624				jQuery('#video_'+id+'_div').data("end", true);
625				kgvid_video_counter(id, 'end');
626			}
627			if ( video_vars.endofvideooverlay != "" ) {
628				jQuery('#video_'+id+'_div .mejs-poster').css({
629				'background-image':'url('+video_vars.endofvideooverlay+')'
630				}).fadeIn();
631
632				player.on('seeking.kgvid', function() {
633					player = jQuery('#video_'+id+'_div video');
634					if ( player[0].currentTime != 0) {
635						jQuery('#video_'+id+'_div .mejs-poster').fadeOut();
636						player.off('seeking.kgvid');
637					}
638				} );
639			}
640			if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
641				kgvid_video_gallery_end_action(id, jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end'));
642			}
643		});
644
645
646	} //end if WordPress Default
647
648	if (  video_vars.player_type == "JWPlayer" ) {
649		var player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
650		player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
651		var player = jwplayer(player_id);
652
653		if ( video_vars.set_volume != "" ) { player.setVolume(Math.round(video_vars.set_volume*100)); }
654		if ( video_vars.mute == "true" ) { player.setMute(true); }
655
656		player.onPlay( function() {
657			kgvid_video_counter(id, 'play');
658
659			if ( video_vars.meta ) {
660				kgvid_add_hover(id);
661				jQuery('#video_'+id+'_meta').removeClass('kgvid_video_meta_hover');
662			}
663
664			if ( video_vars.pauseothervideos == "true" ) {
665				var i = 0;
666				while (true) {
667					var testplayer = jwplayer(i);
668					if (!testplayer.id) {
669						break;
670					}
671					else if ( testplayer.id == player.id ) {
672						i++;
673					}
674					else {
675						testplayer.pause(true);
676						i++;
677					}
678				}//end loop through jwplayers
679			}
680
681			player.onTime( function(e){
682
683				if ( jQuery('#video_'+id+'_div').data("25") == undefined && Math.round(e.position / e.duration * 100) == 25 ) {
684					jQuery('#video_'+id+'_div').data("25", true);
685					kgvid_video_counter(id, '25');
686				}
687				else if ( jQuery('#video_'+id+'_div').data("50") == undefined && Math.round(e.position / e.duration * 100) == 50 ) {
688					jQuery('#video_'+id+'_div').data("50", true);
689					kgvid_video_counter(id, '50');
690				}
691				else if ( jQuery('#video_'+id+'_div').data("75") == undefined && Math.round(e.position / e.duration * 100) == 75 ) {
692					jQuery('#video_'+id+'_div').data("75", true);
693					kgvid_video_counter(id, '75');
694
695				}
696
697			});
698
699		});
700
701		player.onComplete( function() {
702
703			if ( jQuery('#video_'+id+'_div').data("end") == undefined ) {
704				jQuery('#video_'+id+'_div').data("end", true);
705				kgvid_video_counter(id, 'end');
706			}
707
708			if ( jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != "" && jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end') != null ) {
709				kgvid_video_gallery_end_action(id, jQuery('#kgvid_video_gallery_thumb_'+id).data('gallery_end'));
710			}
711
712		});
713
714		if ( video_vars.right_click != "on" ) {
715			player.onReady( function() {
716				jQuery('#video_'+id+'_div .jwclick').remove();
717			});
718		}
719
720	}
721
722	if ( video_vars.resize == "true" 
723		|| video_vars.auto_res == "automatic"
724		|| window.location.search.indexOf("kgvid_video_embed[enable]=true") !== -1 
725	) {
726		kgvid_resize_video(id);
727		var resizeId;
728		jQuery(window).resize( function(){ 
729			clearTimeout(resizeId);
730    		resizeId = setTimeout(function(){kgvid_resize_video(id)}, 500);
731		} );
732	}
733
734	if ( typeof jQuery.modal !== "undefined" && jQuery('#kgvid-simplemodal-container').length > 0 ) { jQuery.modal.setPosition(); }
735
736}
737
738function kgvid_resize_video(id) {
739
740	if ( typeof kgvid_resize_video.counter == 'undefined' ) {
741		kgvid_resize_video.counter = 0;
742	}
743
744	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
745
746	if ( video_vars !== undefined ) {
747
748		var set_width = video_vars.width;
749		var set_height = video_vars.height;
750		var aspect_ratio = Math.round(set_height/set_width*1000)/1000
751		var reference_div = jQuery('#kgvid_'+id+'_wrapper').parent();
752		var window_width = jQuery(window).width();
753		var window_height = jQuery(window).height();
754
755		if ( reference_div.is('body') ) { //if the video is embedded
756			parent_width = window.innerWidth;
757			set_width = window.innerWidth;
758		}
759		else if ( reference_div.attr('id') == 'kgvid_popup_video_holder_'+id ) { //if it's a pop-up video
760			parent_width = window_width-40;
761		}
762		else {
763			parent_width = reference_div.width();
764			if ( video_vars['fullwidth'] == 'true' ) { set_width = parent_width; }
765		}
766		if ( parent_width < set_width ) { set_width = parent_width; }
767
768		if ( set_width != 0 && set_width < 30000 ) {
769
770			jQuery('#kgvid_'+id+'_wrapper').width(set_width);
771			var set_height = Math.round(set_width * aspect_ratio);
772
773			if ( reference_div.attr('id') == 'kgvid_popup_video_holder_'+id && set_height > window_height-60 ) { //if it's a popup video
774				set_height = window_height-60;
775				set_width = Math.round(set_height / aspect_ratio);
776			}
777
778			if ( reference_div.is('body') && set_height > window.innerHeight ) { //if it's a tall embedded video
779				set_height = window.innerHeight;
780				var change_aspect = true;
781
782			} //if the video is embedded
783
784			if ( ( video_vars.player_type == "Video.js" && eval('videojs.players.video_'+id) != null ) ) {
785
786				video_vars.player_type == "Video.js"
787
788				var player = eval('videojs.players.video_'+id);
789				if ( change_aspect ) { player.aspectRatio(Math.floor(set_width)+':'+Math.floor(set_height)); }
790
791				if ( set_width < 500 ) {
792					var scale = Math.round(100*set_width/500)/100;
793					jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').css('-webkit-transform','scale('+scale+')').css('-o-transform','scale('+scale+')').css('-ms-transform','scale('+scale+')').css('transform','scale('+scale+')');
794					if ( set_width < 261 ) {
795						jQuery('#video_'+id+' > .vjs-control-bar > .vjs-mute-control').css('display', 'none');
796						if ( set_width < 221 ) {
797							jQuery('#video_'+id+' > .vjs-control-bar > .vjs-volume-control').css('display', 'none');
798							if ( set_width < 171 ) {
799								jQuery('#video_'+id+' > .vjs-control-bar > .vjs-duration, #video_'+id+' > .vjs-control-bar > .vjs-time-divider').css('display', 'none');
800							}
801						}
802					}
803				}
804				else { jQuery('#kgvid_'+id+'_wrapper .vjs-big-play-button').css('transform', ''); }
805			}
806
807			if ( video_vars.player_type == "StrobeMediaPlayback" ) {
808				jQuery('#video_'+id+'_div').height(set_height);
809				jQuery('#video_'+id).attr('width',set_width).attr('height',set_height);
810				jQuery('#video_'+id+'_html5_api').attr('width',set_width).attr('height',set_height);
811			}
812
813			if ( video_vars.player_type == "WordPressDefault" && typeof mejs !== 'undefined' ) {
814
815					player = eval('mejs.players.'+jQuery('#kgvid_'+id+'_wrapper div.wp-video-shortcode').attr('id'));
816
817					if ( change_aspect ) {
818						player.options.setDimensions = false;
819						jQuery('#kgvid_'+id+'_wrapper div.wp-video-shortcode').css('height', set_height+'px');
820					}
821
822			}
823
824			if ( ( video_vars.player_type == "Video.js" && eval('videojs.players.video_'+id) != null )
825				||  ( video_vars.player_type == "WordPressDefault" && typeof mejs !== 'undefined' )
826			) {
827				if ( video_vars.auto_res == 'automatic' && player.availableRes !== undefined ) {
828
829					var resolutions = player.availableRes;
830					var resNumbers = new Array();
831
832					jQuery.each(resolutions, function(key, value){
833						if ( typeof key !== 'undefined' && !isNaN(parseInt(key)) ) {
834							resNumbers.push(parseInt(key));
835						}
836					});
837					var current_resolution = parseInt(player.getCurrentRes());
838
839					if ( !isNaN(current_resolution) ) {
840						if ( video_vars.pixel_ratio == "true" && window.devicePixelRatio != undefined ) {
841							var pixel_ratio = window.devicePixelRatio;
842						} //for retina displays
843						else { pixel_ratio = 1; }
844
845						if ( jQuery('#video_'+id).hasClass('vjs-fullscreen') || jQuery('#video_'+id+'_div .mejs-container').hasClass('mejs-container-fullscreen') ) {
846							pixel_height = window_width * aspect_ratio * pixel_ratio;
847						}
848						else { pixel_height = set_width * aspect_ratio * pixel_ratio; }
849
850						var res_options = jQuery.map(resNumbers, function(n) {
851							if ( n >= pixel_height ) { return n; }
852						});
853						var set_res = Math.min.apply(Math,res_options);
854
855						if ( set_res != current_resolution ) {
856
857							if ( video_vars.player_type == "Video.js" ) {
858
859								if ( player.paused() ) {
860									player.one('play', function() {
861										player.changeRes(set_res+'p');
862										player.play();
863									});
864								}
865								else {
866									player.changeRes(set_res+'p');
867								}
868
869							}
870
871							if ( video_vars.player_type == "WordPressDefault" ) {
872
873								if ( player.media.paused ) {
874									if ( player.media.preload == 'none' ) {
875										jQuery(player.media).one('canplay', function() {
876											player.changeRes(set_res+'p');
877										});
878									}
879									else {
880										jQuery(player.media).one('play', function() {
881											player.changeRes(set_res+'p');
882										});
883									}
884								}
885								else {
886									player.changeRes(set_res+'p');
887								}
888
889							}
890
891						}
892
893						if (  video_vars.player_type == "Video.js" && jQuery('#video_'+id).hasClass('vjs-has-started') == false ) {
894							if ( player.muted() == true ) {
895								player.muted(false);
896								player.muted(true);
897							} // reset volume and mute otherwise player doesn't display properly
898							if ( player.volume() != 1 ) {
899								var current_volume = player.volume();
900								player.volume(1);
901								player.volume(current_volume);
902							}
903						}
904
905					} //automatic
906				}
907			}
908
909			var meta = jQuery('#kgvid_video_gallery_thumb_'+id).data('meta');
910			var extra_meta_height = Math.round(20*meta);
911			jQuery('#kgvid-simplemodal-container').width(parseInt(set_width)+10);
912			jQuery('#kgvid-simplemodal-container').height(parseInt(set_height)+10+extra_meta_height);
913			jQuery('.simplemodal-wrap').css('overflow', 'hidden');
914
915		}
916		else if ( kgvid_resize_video.counter < 3 ) { setTimeout(function() { kgvid_resize_video(id); }, 250); } //if it's a wacky result, wait 1/4 second
917	}
918
919	++kgvid_resize_video.counter;
920
921}
922
923function kgvid_resize_gallery_play_button(gallery_id) {
924
925	var video_vars = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().data('kgvid_video_vars');
926	var thumb_width = jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().width();
927
928	if ( video_vars.player_type == "Video.js" || video_vars.player_type == "WordPressDefault" ) {
929
930		var max_percent = 0.17;
931
932
933		if ( video_vars.player_type == "Video.js" ) {
934			var button_selector = '.vjs-big-play-button';
935			var translate_y = 30;
936		}
937
938		if ( video_vars.player_type == "WordPressDefault" ) {
939			var button_selector = '.mejs-overlay-button';
940			var translate_y = 5;
941		}
942
943		var play_button_percent = jQuery('#'+gallery_id+' '+button_selector).width()/thumb_width;
944
945		var unscaled_width = jQuery('#'+gallery_id+' '+button_selector)[0].offsetWidth;
946		var scale_value = Math.round(thumb_width * max_percent / unscaled_width * 1000)/1000;
947
948		if ( scale_value < 1 ) {
949			var css_text = 'scale('+scale_value+') translateY(-'+translate_y+'px)';
950
951			jQuery('#'+gallery_id+' '+button_selector).css({
952				'transform' : css_text,
953				'-webkit-transform' : css_text,
954				'-o-transform' : css_text,
955				'-ms-transform': css_text
956			});
957		}
958		else { jQuery('#'+gallery_id+' '+button_selector).removeAttr('style'); }
959
960	}
961
962}
963
964function kgvid_strobemedia_callback(id) {
965
966	var player = document.getElementById('video_'+id);
967	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
968
969	if ( player.getState() == 'buffering' || player.getState() == 'playing' ) {
970		kgvid_video_counter(video_vars.id, 'play');
971	}
972
973	if ( player.getState() == 'uninitialized' && video_vars.set_volume != "" ) {
974		player.setVolume(video_vars.set_volume);
975	}
976
977}
978
979function kgvid_video_counter(id, event) {
980
981	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
982	var changed = false;
983
984	var played = jQuery('#video_'+id+'_div').data("played") || "not played";
985	if ( played == "not played" ) {
986		if (video_vars.countable) { //video is in the db
987			changed = true;
988			jQuery('#video_'+id+'_div').data("played", "played");
989		}
990		if (typeof gtag != "undefined") { 
991			gtag("event", kgvidL10n_frontend.playstart, {
992				'event_category': "Videos", 
993				'event_label': video_vars.title
994			}); 
995		}
996		else if (typeof ga != "undefined") { ga("send", "event", "Videos", kgvidL10n_frontend.playstart, video_vars.title); }
997		else if (typeof __gaTracker != "undefined") { __gaTracker("send", "event", "Videos", kgvidL10n_frontend.playstart, video_vars.title); } // Yoast renamed ga function
998		else if (typeof _gaq != "undefined") { _gaq.push(["_trackEvent", "Videos", kgvidL10n_frontend.playstart, video_vars.title]); }
999
1000	}
1001
1002	if ( !isNaN(event) ) {
1003
1004		if (video_vars.countable) { //video is in the db
1005			changed = true;
1006		}
1007		if (typeof gtag != "undefined") {
1008			gtag("event", event+"%", {
1009				'event_category': "Videos", 
1010				'event_label': video_vars.title
1011			}); 
1012		}
1013		else if (typeof ga != "undefined") { ga("send", "event", "Videos", event+"%", video_vars.title); }
1014		else if (typeof __gaTracker != "undefined") { __gaTracker("send", "event", "Videos", event+"%", video_vars.title); } // Yoast renamed ga function
1015		else if (typeof _gaq != "undefined") { _gaq.push(["_trackEvent", "Videos", event+"%", video_vars.title]); }
1016
1017	}
1018
1019	if ( event == "end" ) {
1020
1021		if (video_vars.countable) { //video is in the db
1022			changed = true;
1023		}
1024		if (typeof gtag != "undefined") { 
1025			gtag("event", kgvidL10n_frontend.completeview, {
1026				'event_category': "Videos", 
1027				'event_label': video_vars.title
1028			}); 
1029		}
1030		if (typeof ga != "undefined") { ga("send", "event", "Videos", kgvidL10n_frontend.completeview, video_vars.title); }
1031		if (typeof __gaTracker != "undefined") { __gaTracker("send", "event", "Videos", kgvidL10n_frontend.completeview, video_vars.title); } // Yoast renamed ga function
1032		else if (typeof _gaq != 'undefined') { _gaq.push(['_trackEvent', 'Videos', kgvidL10n_frontend.completeview, video_vars.title]); }
1033
1034	}
1035
1036	if ( changed == true
1037		&& video_vars.count_views != 'false'
1038		&& (
1039			video_vars.count_views == 'quarters'
1040			|| ( video_vars.count_views == 'start_complete' && ( event == 'play' || event == 'end' ) )
1041			|| ( video_vars.count_views == 'start' && event == 'play' )
1042		)
1043	) {
1044		jQuery.post(kgvidL10n_frontend.ajaxurl, {
1045			action: 'kgvid_count_play',
1046			security: kgvidL10n_frontend.ajax_nonce,
1047			post_id: video_vars.attachment_id,
1048			video_event: event,
1049			show_views: jQuery('#video_'+id+'_viewcount').length
1050		}, function(data) {
1051			if ( event == "play" ) { jQuery('#video_'+id+'_viewcount').html(data); }
1052		});
1053	}
1054}
1055
1056function kgvid_switch_gallery_page(obj, post_action) {
1057
1058	var gallery_id = jQuery(obj).parents('.kgvid_gallerywrapper').attr('id');
1059	var query_atts = jQuery('#'+gallery_id).data('query_atts');
1060	var page = jQuery(obj).children().first().html();
1061	var last_id = jQuery('.kgvid_videodiv, .kgvid_video_gallery_thumb').last().data('id').substr(6);
1062
1063	jQuery('#'+gallery_id).fadeTo("fast", 0.5);
1064
1065	jQuery.post(kgvidL10n_frontend.ajaxurl, {
1066		action: 'kgvid_switch_gallery_page',
1067		security: kgvidL10n_frontend.ajax_nonce,
1068		page: page,
1069		query_atts: query_atts,
1070		last_video_id: last_id
1071	}, function(data) {
1072		jQuery('#'+gallery_id).html(data);
1073		kgvid_document_ready();
1074		jQuery('#'+gallery_id).fadeTo("fast", 1);
1075		if ( post_action == "next" ) {
1076			jQuery.modal.close();
1077			jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').first().trigger('click');
1078		}
1079		if ( post_action == "prev" ) {
1080			jQuery.modal.close();
1081			jQuery('#'+gallery_id+' .kgvid_video_gallery_thumb').last().trigger('click');
1082		}
1083	}, "json");
1084
1085}
1086
1087function kgvid_share_icon_click(id) {
1088
1089	var player_element;
1090	var event;
1091
1092	if ( jQuery('#kgvid_'+id+'_shareicon').hasClass('dashicons-share') ) {
1093		event = 'turn on';
1094		jQuery('#kgvid_'+id+'_shareicon').removeClass('dashicons-share').addClass('dashicons-no');
1095	}
1096	else {
1097		event = 'turn off';
1098		jQuery('#kgvid_'+id+'_shareicon').removeClass('dashicons-no').addClass('dashicons-share');
1099	}
1100
1101	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
1102
1103	if ( video_vars.player_type == "Video.js" ) {
1104
1105		eval('videojs.players.video_'+id).pause();
1106
1107		if ( jQuery('#video_'+id).hasClass('vjs-has-started') ) {
1108			player_element = ' .vjs-control-bar';
1109		}
1110		else { //hasn't started playing yet
1111			player_element = ' .vjs-big-play-button';
1112		}
1113
1114		if ( jQuery('#video_'+id+'_div'+player_element).attr('style') == undefined ) {
1115		jQuery('#video_'+id+'_div'+player_element).hide();
1116		}
1117		else {
1118			jQuery('#video_'+id+'_div'+player_element).removeAttr('style');
1119		}
1120
1121	}// if Video.js player
1122	else if ( video_vars.player_type == "WordPressDefault" ) {
1123
1124		jQuery('#video_'+id+'_div video')[0].pause();
1125		jQuery('#video_'+id+'_div .mejs-overlay-button').toggle();
1126
1127	}//if WordPress Default player
1128	else if ( video_vars.player_type == "JWPlayer" ) {
1129		var player_id = jQuery('#video_'+id+'_div').children('div[id^="jwplayer"]').attr('id');
1130		player_id = player_id.replace('_wrapper', ''); //Flash JW Players have wrapper in the id
1131		var player = jwplayer(player_id);
1132		player.pause(true);
1133	}
1134
1135	if ( event == 'turn on' ) { jQuery('#video_'+id+'_div').off('mouseenter mouseleave focus focusout').addClass('kgvid_video_meta_hover'); }
1136	else { kgvid_add_hover(id); }
1137
1138	jQuery('#video_'+id+'_embed, #click_trap_'+id).slideToggle();
1139
1140}
1141
1142function kgvid_set_start_at(id) {
1143
1144	var video_vars = jQuery('#video_'+id+'_div').data('kgvid_video_vars');
1145
1146	if ( jQuery('#video_'+id+'_embed .kgvid_start_at_enable').prop('checked') ) {
1147
1148		if ( video_vars.player_type == "Video.js" ) {
1149			var current_time = eval('videojs.players.video_'+id).currentTime();
1150		}
1151		else if ( video_vars.player_type == "WordPressDefault" ) {
1152			var current_time = jQuery('#video_'+id+'_div video')[0].getCurrentTime();
1153		}
1154
1155		jQuery('#video_'+id+'_embed .kgvid_start_at').val(kgvid_convert_to_timecode(Math.floor(current_time)));
1156
1157	}
1158
1159	kgvid_change_start_at(id);
1160
1161}
1162
1163function kgvid_change_start_at(id) {
1164
1165	var embed_code = jQuery('#video_'+id+'_embed .kgvid_embedcode').val();
1166	parsed_embed_code = jQuery.parseHTML(embed_code);
1167	var old_src = jQuery(parsed_embed_code).attr('src');
1168
1169	if ( old_src.indexOf('&kgvid_video_embed[start]=') !== -1 ) { //start value exists
1170		var src_array = old_src.split('&');
1171		old_src = src_array[0] + '&' + src_array[1];
1172	}
1173
1174	if ( jQuery('#video_'+id+'_embed .kgvid_start_at_enable').prop('checked') ) {
1175		var new_src = old_src + '&kgvid_video_embed[start]='+jQuery('#video_'+id+'_embed .kgvid_start_at').val();
1176	}
1177	else {
1178		var new_src = old_src;
1179	}
1180
1181	jQuery('#video_'+id+'_embed .kgvid_embedcode').val("<iframe allowfullscreen src='"+new_src+"' frameborder='0' scrolling='no' width='640' height='360'></iframe>");
1182
1183}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.