PageSourceSearch

https://www.ema-eda.com/wp-content/plugins/grassblade/js/script.js?ver=6.2.13

js ema-eda.com collected 2026-10-02 11:06:15 UTC 57,569 bytes, 1,639 lines download raw bytes

1var GB = [];
2	function showHideOptional(id) {
3		var table = document.getElementById(id);
4		var display_status = table.style.display;
5
6
7		if(display_status == "none")
8		{
9			table.style.display = "block";
10		}
11		else
12			table.style.display = "none";
13	}
14	function grassblade_show_lightbox(id, src, completion_data, width, height, aspect) {
15
16		if(document.getElementById("grassblade_lightbox") == null)
17			jQuery("body").append("<div id='grassblade_lightbox'></div>");
18
19		window.grassblade_lightbox = {};
20		window.grassblade_lightbox[id] = {id: id, src:src, width:width, height:height, aspect:aspect};
21
22		var sizes = grassblade_lightbox_get_sizes(window.grassblade_lightbox[id]);
23		src += (src.search(/[?]/) < 0)? "?":"&";
24		src += "h=" + encodeURI(sizes.inner_height) + "&w=" + encodeURI(sizes.inner_width);
25		html = "<div class='grassblade_lightbox_overlay' onClick='return grassblade_hide_lightbox("+id+");'></div><div id='" + id + "' class='grassblade_lightbox'  style='top:" + sizes.top + ";bottom:" + sizes.top + ";left:" + sizes.left + ";right:" + sizes.left + ";width:" + sizes.width + "; height:" + sizes.height + ";'>" +
26					"<div class='grassblade_close'><a class='grassblade_close_btn' href='#' onClick='return grassblade_hide_lightbox("+completion_data+");'>X</a></div>" +
27					"<iframe class='grassblade_lightbox_iframe' data-completion='" + completion_data + "' frameBorder='0' src='" + src + "' style='height: 100%; width: 100%;position: absolute; left: 0;top: 0;border: 0;' webkitallowfullscreen mozallowfullscreen allowfullscreen allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' onLoad='grassblade_get_lightbox_iframe();'></iframe>" +
28				"</div>";
29
30		jQuery("#grassblade_lightbox").html(html);
31		jQuery("#grassblade_lightbox").show();
32	}
33	function grassblade_lightbox_get_sizes(options) {
34		var width = options.width;
35		var height = options.height;
36		var aspect = options.aspect;
37
38		var window_width = Math.ceil(jQuery(window).width() * 1) - 22; //Available width and height is less by 22px, because there is 11px border.  onClick='return grassblade_hide_lightbox();'
39		var window_height = Math.ceil(jQuery(window).height() * 1) - 22;
40
41
42		if(aspect > 0)
43		{
44			if(width.indexOf("%") > 0)
45			var width_number = Math.ceil(window_width * parseFloat(width)/100);
46			else
47			var width_number = Math.ceil(parseFloat(width));
48
49			var height_number = Math.ceil(parseFloat(width_number / aspect));
50
51			if(width_number > window_width) {
52				height_number = Math.ceil(window_width  * height_number / width_number);
53				width_number = window_width;
54			}
55
56			if(height_number > window_height) {
57				width_number = Math.ceil( window_height * width_number / height_number );
58				height_number = window_height;
59			}
60		}
61		else
62		{
63			if(width.indexOf("%") > 0)
64			var width_number = Math.ceil(window_width * parseFloat(width)/100);
65			else
66			var width_number = Math.ceil(parseFloat(width));
67
68			if(height.indexOf("%") > 0)
69			var height_number = Math.ceil(window_height * parseFloat(height)/100);
70			else
71			var height_number = Math.ceil(parseFloat(height));
72		}
73
74		//console.log({window_width:window_width, window_height:window_height, width_number:width_number, height_number:height_number, width:width, height:height, aspect:aspect});
75
76		var top = ((window_height - height_number) / 2 );
77		var left = ((window_width - width_number) / 2 );
78		var top = top < 0? 0:top + "px";
79		var left = left < 0? 0:left + "px";
80		var h = (height_number + 22) + "px"; //Increase width and height by 22 for the border.
81		var w = (width_number + 22) + "px";
82		//console.log({top:top, height:h, width:w});
83
84		return {top:top,left:left, height:h, width:w, inner_height: height_number, inner_width: width_number};
85	}
86	function gb_is_completion_behaviour_enabled( completion_data ) {
87		var completion_behaviour_enabled =  ( typeof gb_data != 'undefined' && gb_data.completion_tracking_enabled && (gb_data.completion_type != 'hide_button' || is_grassblade_voc_enabled() ) && gb_data.is_guest == '' && !gb_data.is_admin );
88
89		if( !completion_behaviour_enabled || typeof completion_data != "object" && completion_data == null )
90			return completion_behaviour_enabled;
91
92		return ((completion_data.completion_type != 'hide_button' || is_grassblade_voc_enabled() ) && completion_data.completion_tracking != false  && ( completion_data.completion_without_lrs || gb_data.lr
92s_exists ));
93	}
94	function grassblade_hide_lightbox(completion_data) {
95		if(!jQuery("body").hasClass("gb-fullscreen")) {
96			jQuery("#grassblade_lightbox").hide();
97			jQuery("#grassblade_lightbox").html('');
98		}
99		if(gb_is_completion_behaviour_enabled(completion_data)) {
100			grassblade_content_completion_request(completion_data.content_id,completion_data.registration,2);
101		}
102		return false;
103	}
104
105	function show_xapi_content_meta_box_change() {
106		var show_xapi_content = jQuery("#show_xapi_content");
107		if(show_xapi_content.length == 0)
108			return;
109
110		edit_link = jQuery('#grassblade_add_to_content_edit_link');
111		if(show_xapi_content.val() > 0) {
112			edit_link.show();
113			jQuery("body").addClass("has_xapi_content");
114		}
115		else {
116			jQuery("body").removeClass("has_xapi_content");
117			edit_link.hide();
118		}
119
120		jQuery("#completion_tracking_enabled").hide();
121		jQuery("#completion_tracking_disabled").hide();
122
123		if(jQuery("#show_xapi_content option:selected").attr("completion-tracking") == "1") {
124			jQuery("#completion_tracking_enabled").show();
125		}
126		else if(jQuery("#show_xapi_content option:selected").attr("completion-tracking") == "")
127		{
128			jQuery("#completion_tracking_disabled").show();
129		}
130	}
131
132	function grassblade_reigster_gb_search_table() {
133		jQuery(".gb_table_search").on("keyup", function() {
134			var search = jQuery(this).val();
135			var id = jQuery(this).data("tableid");
136			var myHilitor = new Hilitor(id); // id of the element to parse
137			myHilitor.apply(search);
138
139			if(search.length < 3)
140			{
141				jQuery("#" + id + " tr").show();
142				return;
143			}
144			jQuery("#" + id + " tbody").find("tr").each(function(i, v) {
145				if(jQuery(v).find("mark").length)
146					jQuery(v).show();
147				else
148					jQuery(v).hide();
149			});
150		});
151	}
152	function grassblade_register_folder_delete_buttons() {
153		jQuery("#grassblade_delete_folders_table .delete_folder_button").on("click", function() {
154			var button = jQuery(this);
155			var path = button.data("path");
156
157			var ok = confirm("Are you sure you want to delete the folder '" + path +"'?");
158			if(ok) {
159				var nonce = jQuery("#gb_folder_delete").val();
160				if(typeof path == "string" && typeof nonce == "string") {
161					var data = {
162						"path": path,
163						"nonce": nonce
164					};
165					button.html("Deleting...");
166					jQuery.ajax({
167						type: "GET",
168						url: ajaxurl + "?action=gb_folder_delete",
169						data: data,
170						contentType: "json",
171						dataType: "json",
172						success: function(response){
173
174							if(typeof response.message == "string")
175								button.html(response.message);
176							if(response.status)
177								button.css("background-color", "orange");
178							else
179								button.css("background-color", "black");
180
181							console.log(response);
182						}
183					});
184				}
185			}
186		});
187	}
188
189	function grassblade_table_colors_changed() {
190		if(jQuery("#table_th_bg_color").length == 0)
191			return;
192
193		var styles = " .grassblade_table th { background: " + jQuery("#table_th_bg_color").val() + " !important; color: " + jQuery("#table_th_txt_color").val() + " !important; }";
194		styles += " .grassblade_table td { background: " + jQuery("#table_tb_color1").val() + " !important; color: " + jQuery("#table_tb_txt_color").val() + " !important; }";
195		styles += " .grassblade_table tr.tr_odd td { background: " + jQuery("#table_tb_color2").val() + " !important; }";
196		jQuery("#grassblade_table_styles").html(styles);
197	}
198	function grassblade_learndash_focusmode_switching() {
199		jQuery(".ld-focus-sidebar-trigger .ld-icon-arrow-left").on("click", function() { setTimeout(function() { grassblade_xapi_content_autosize_content();}, 500) });
200	}
201
202	function grassblade_show_errors() {
203		if(jQuery(".grassblade_errors").length <= 0 || typeof window.wp != "object" || typeof window.wp.data != "object"  || typeof window.wp.data.select != "function"  || typeof window.wp.data.dispatch != "function")
204			return;
205
206		jQuery(".grassblade_errors").each(function(i, v) {
207			var text = jQuery(v).text();
208			var actions = [];
209			jQuery(v).find("a").each(function(i, v) {console.log(i, v); actions.push({url:jQuery(v).attr("href"), "label": jQuery(v).text()}); });
210
211			wp.data.dispatch( 'core/notices' ).createNotice(
212				'notice', // Can be one of: success, info, warning, error.
213				text, // Text string to display.
214				{
215					isDismissible: true, // Whether the user can dismiss the notice.
216					// Any actions the user can perform.
217					actions: actions,
218				}
219			);
220		});
221
222	}
223	function grassblade_xapi_content_autosize_content() {
224		jQuery(".grassblade_iframe").each(function(i, element) {
225			var width = parseInt(jQuery(element).width());
226			var width_parent = jQuery(element).parent().width();
227
228			if(jQuery(element).attr("height").indexOf("%") > 0) {
229				var configured_height = parseInt(jQuery(element).attr("height"));
230				var configured_width = parseInt(jQuery(element).attr("width"));
231				var height = Math.ceil(width * configured_height / configured_width) + 1;
232				jQuery(element).height(height);
233				jQuery(element).attr("height", height);
234			}
235
236			var aspect = jQuery(element).data('aspect');
237			if(aspect != undefined && aspect > 0) {
238				var height = Math.ceil(width / aspect);
239				jQuery(element).height(height);
240				jQuery(element).attr("height", height);
241			}
242
243			/* Center width */
244			var left_diff = (width_parent - width) * 1;
245			if(left_diff > 4)
246			{
247				var left = Math.ceil(left_diff/2);
248				jQuery(element).css('left', left);
249			}
250
251			var src = jQuery(element).attr('src');
252			if( typeof src == "undefined" || src == "" ) {
253				if(height == undefined)
254					height = jQuery(element).height();
255
256				var src = jQuery(element).data('src');
257				if( typeof src == "undefined" )
258				var src = jQuery(element).data('data-src'); //To fix iframe lazyloading conflict with SD Optimizer (SiteGround)
259
260				src += (src.search(/[?]/) < 0)? "?":"&";
261				src += "h=" + height + "&w=" + width;
262				jQuery(element).attr("src", src);
263			}
264			//console.log({height:height, width:width, left:left, width_parent:width_parent});
265			//grassblade_add_completion_script_to_iframe('grassblade_iframe');
266		});
267	}
268	function grassblade_xapi_content_edit_script() {
269		grassblade_enable_button_selector();
270
271		jQuery("h2.gb-content-selector a").on("click", function() {
272			jQuery("h2.gb-content-selector a").removeClass("nav-tab-active");
273			jQuery(this).addClass("nav-tab-active");
274			if(jQuery(this).hasClass("nav-tab-content-url")) {
275				jQuery("#field-src").show();
276				jQuery("#field-activity_id").show();
277				jQuery("#field-xapi_content").hide();
278				jQuery("#field-video, #field-video_hide_controls, #field-video_autoplay, #field-interactive_video").hide();
279				jQuery("#field-dropbox").hide();
280				jQuery("#field-h5p_content").hide();
281			}
282			else if(jQuery(this).hasClass("nav-tab-video")) {
283				jQuery("#field-src").hide();
284				jQuery("#field-activity_id").hide();
285				jQuery("#field-xapi_content").show();
286				jQuery("#field-video, #field-video_hide_controls, #field-video_autoplay, #field-interactive_video").show();
287				jQuery("#field-dropbox").hide();
288				jQuery("#field-h5p_content").hide();
289			}
290			else if(jQuery(this).hasClass("nav-tab-h5p")) {
291				jQuery("#field-src").hide();
292				jQuery("#field-activity_id").hide();
293				jQuery("#field-xapi_content").hide();
294				jQuery("#field-video, #field-video_hide_controls, #field-video_autoplay, #field-interactive_video").hide();
295				jQuery("#field-dropbox").hide();
296				jQuery("#field-h5p_content").show();
297			}
298			else if(jQuery(this).hasClass("nav-tab-upload")) {
299				jQuery("#field-src").hide();
300				jQuery("#field-activity_id").show();
301				jQuery("#field-xapi_content").show();
302				jQuery("#field-video, #field-video_hide_controls, #field-video_autoplay, #field-interactive_video").hide();
303				jQuery("#field-dropbox").hide();
304				jQuery("#field-h5p_content").hide();
305			}
306			else if(jQuery(this).hasClass("nav-tab-dropbox")) {
307				jQuery("#field-src").hide();
308				jQuery("#field-activity_id").show();
309				jQuery("#field-xapi_content").hide();
310				jQuery("#field-video, #field-video_hide_controls, #field-video_autoplay, #field-interactive_video").hide();
311				jQuery("#field-dropbox").show();
312				jQuery("#field-h5p_content").hide();
313			}
314			return false;
315		});
316
317		if(jQuery("#xapi_content[type=file]").length > 0)
318			gb_xapi_content_uploader('xapi_content');
319
320		if(jQuery("#field-dropbox").length > 0)
321			grassblade_dropbox_init();
322
323		if(jQuery("input#video").val().trim() != "")
324			jQuery("a.nav-tab-video").trigger('click');
325		else if(jQuery("input#src").val().trim() != "")
326			jQuery("a.nav-tab-content-url").trigger('click');
327		else
328			jQuery("a.nav-tab-upload").trigger('click');
329
330		jQuery("select#button_type").on("change", function() {
331			if(jQuery(this).val() == "0")
332			{
333				jQuery("#field-text").show();
334				jQuery("#field-link_button_image").hide();
335			}
336			else if(jQuery(this).val() == "1"){
337				jQuery("#field-text").hide();
338				jQuery("#field-link_button_image").show();
339			}
340		});
341		jQuery("select#button_type").trigger('change');
342
343		jQuery("select#target").on("change", function() {
344			if(jQuery(this).val() == "")
345			{
346				jQuery("#field-button_type").hide();
347				jQuery("#field-text").hide();
348				jQuery("#field-link_button_image").hide();
349			}
350			else
351			{
352				jQuery("#field-button_type").show();
353				jQuery("select#button_type").trigger('change');
354			}
355
356		});
357		jQuery("select#target").trigger('change');
358
359		jQuery("#completion_tracking").on("change", function() {
360			if (jQuery("#completion_tracking").is(":checked")) {
361				jQuery("#field-completion_type").show();
362				jQuery("#field-completion_by_module").show();
363			} else {
364				jQuery("#field-completion_type").hide();
365				jQuery("#field-completion_by_module").hide();
366			}
367		});
368		jQuery("#completion_tracking").trigger('change');
369
370		jQuery("#resume_behaviour").on("change", function() {
371			if(jQuery(this).val() == "auto") {
372				jQuery("#registration").data("original_value", jQuery("#registration").val().trim());
373				jQuery("#registration").val("auto");
374				jQuery("#field-registration").hide();
375			}
376			else
377			{
378				var original_value = jQuery("#registration").data("original_value");
379				var current_value = jQuery("#registration").val().trim()
380				original_value = ( typeof original_value == "string" && original_value.length == 36 )? original_value : ((current_value != "auto" && current_value.length > 0)? current_value : grassblade_gen_uuid());
381
382				jQuery("#registration").val(original_value);
383				jQuery("#field-registration").show();
384			}
385		});
386		jQuery("#resume_behaviour").trigger('change');
387
388		/* Add aspect ratio options */
389		var aspect = (parseFloat(jQuery("#field-width #width").val()) / parseFloat(jQuery("#field-height #height").val())).toFixed(4);
390		aspect = (aspect == "NaN")? 0:aspect;
391		jQuery(".grassblade_aspect_ratios").html("<span class='grassblade_aspect_ratio' data-aspect='1.7777' onClick='grassblade_set_aspect(this)'>16:9</span> | <span class='grassblade_aspect_ratio'  data-aspect='1.3333' onClick='grassblade_set_aspect(this)'>4:3</span> | <span class='grassblade_aspect_ratio'  data-aspect='1' onClick='grassblade_set_aspect(this)'>1:1</span> | <span id='aspect_slider_span'><input type='range' min='0' max='6' value='" + aspect + "' id='aspect_slider'  step='0.001'  onChange='grassblade_set_aspect(this)'/> <input type='text' id='aspect_slider_value' value='" + aspect + "'  maxlength='5' onChange='grassblade_set_aspect(this)' onkeyup='grassblade_set_aspect(this)' /></span>");
392		jQuery("#field-width #width, #field-height #height").on("keyup", function(event) {
393			if(jQuery("#aspect_lock").is(":checked")) {
394				grassblade_size_setting_changed(event.target);
395			}
396		});
397
398		grassblade_add_content_change();
399		//grassblade_form_submit_refresh();
400
401	}
402	function grassblade_size_setting_changed(el) {
403		if(jQuery("#aspect_lock").is(":checked")) {
404			var param = jQuery(el).attr("id");
405			var width = jQuery("#field-width #width").val();
406			var height = jQuery("#field-height #height").val();
407			var aspect = jQuery("#aspect_slider_value").val();
408			aspect = (aspect > 0)? aspect:1.7777;
409
410			if(param == "width") {
411				var unit = width.replace(parseFloat(width), '');
412
413				h = parseFloat( parseFloat(width) / aspect ).toFixed(2);
414				h = (h == NaN || h == "NaN")? "":h;
415				h = h + unit;
416				jQuery("#field-height #height").val(h);
417
418				if(unit == "%" && parseFloat(h) > 100)
419					jQuery("#field-height #height").css('background', 'red');
420				else
421				{
422					jQuery("#field-height #height").css('background', 'yellow');
423					setTimeout(function() {
424						jQuery("#field-height #height").css('background', 'none');
425					}, 200);
426				}
427			}
428			else
429			{
430				var unit = height.replace(parseFloat(height), '');
431
432				w = parseFloat( parseFloat(height) * aspect ).toFixed(2);
433				w = (w == NaN || w == "NaN")? "":w;
434				w = w + unit;
435				jQuery("#field-width #width").val(w);
436
437				if(unit == "%" && parseFloat(w) > 100)
438					jQuery("#field-width #width").css('background', 'red');
439				else
440				{
441					jQuery("#field-width #width").css('background', 'yellow');
442					setTimeout(function() {
443						jQuery("#field-width #width").css('background', 'none');
444					}, 200);
445				}
446			}
447		}
448	}
449	function grassblade_set_aspect(el) {
450		if(typeof el == "number" || jQuery(el).attr("class") == "grassblade_aspect_ratio") { 			//Ratio click
451			if(typeof el == "number")
452			var aspect = el;
453			else
454			var aspect = jQuery(el).data("aspect") * 1;
455
456			jQuery("#aspect_slider").val(aspect);
457			jQuery("#aspect_slider_value").val(aspect);
458
459			jQuery("#aspect_slider_value").css('background', 'yellow');
460			setTimeout(function() {
461				jQuery("#aspect_slider_value").css('background', 'none');
462			}, 200);
463
464			jQuery("#aspect_slider_span").css('background', 'yellow');
465			setTimeout(function() {
466				jQuery("#aspect_slider_span").css('background', 'none');
467			}, 200);
468		}
469		if(jQuery(el).attr("id") == "aspect_slider") {	// Slider Change
470			var aspect = jQuery(el).val() * 1;
471			jQuery("#aspect_slider_value").val(aspect);
472
473			jQuery("#aspect_slider_value").css('background', 'yellow');
474			setTimeout(function() {
475				jQuery("#aspect_slider_value").css('background', 'none');
476			}, 200);
477		}
478		else
479		if(jQuery(el).attr("id") == "aspect_slider_value") { // Input Change
480			var aspect = jQuery(el).val() * 1;
481			jQuery("#aspect_slider").val(aspect);
482
483			jQuery("#aspect_slider_span").css('background', 'yellow');
484			setTimeout(function() {
485				jQuery("#aspect_slider_span").css('background', 'none');
486			}, 200);
487		}
488
489		var width = jQuery("#field-width #width").val();
490		var height = jQuery("#field-height #height").val();
491
492		var w, unit;
493
494		if(jQuery("#aspect_lock").is(":checked"))
495		{	//Aspect Locked
496
497			if(width == "" ||  parseFloat(width) > 100  ||  parseFloat(width) == 0 )
498				w = "100%";
499			else
500				w = parseFloat(width) + "%";
501
502			h = parseFloat( parseFloat(w) / aspect ).toFixed(2);
503
504			if(h > 100)
505			{
506				h = 100;
507				w = 100 * aspect + "%";
508			}
509			h = h + "%";
510		}
511		else
512		{ //Aspect Not Locked.
513			if(width == "" || width == "0" || width == "0%")
514				w = "100%";
515			else
516				w = width;
517
518			var unit = w.replace(parseFloat(w), '');
519			h = parseFloat( parseFloat(w) / aspect ).toFixed(2);
520			if(unit == "%" && h > 100) {
521				h = 100;
522				w = 100 * aspect + "%";
523			}
524			h = h + unit;
525		}
526
527		if(width != w)
528		{
529			jQuery("#field-width #width").val(w);
530			jQuery("#field-width #width").css('background', 'yellow');
531			setTimeout(function() {
532				jQuery("#field-width #width").css('background', 'none');
533			}, 200);
534		}
535		if(height != h)
536		{
537			jQuery("#field-height #height").val(h);
538			jQuery("#field-height #height").css('background', 'yellow');
539			setTimeout(function() {
540				jQuery("#field-height #height").css('background', 'none');
541			}, 200);
542		}
543	}
544
545	/* Add gb-fullscreen class when video is in fullscreen */
546	function gb_fullscreen_class() {
547		if (document.fullscreenElement ||
548			document.mozFullScreenElement ||
549			document.webkitFullscreenElement ||
550			document.msFullscreenElement ) {
551		  if(!jQuery("body").hasClass("gb-fullscreen"))
552			jQuery("body").addClass("gb-fullscreen");
553		}
554		else
555		  jQuery("body").removeClass("gb-fullscreen");
556	}
557
558	function grassblade_enable_button_selector() {
559	  var _custom_media = true,
560		  _orig_send_attachment = wp.media.editor.send.attachment;
561
562	  jQuery('.gb_upload_button').on("click", function(e) {
563		var send_attachment_bkp = wp.media.editor.send.attachment;
564		var button = jQuery(this);
565		var id = button.attr('id');
566		_custom_media = true;
567		wp.media.editor.send.attachment = function(props, attachment){
568		  if ( _custom_media ) {
569			jQuery("#"+id+"-url").val(attachment.url);
570			jQuery("#"+id+"-src").attr("src", attachment.url);
571		  } else {
572			return _orig_send_attachment.apply( this, [props, attachment] );
573		  };
574		}
575
576		wp.media.editor.open(button);
577		return false;
578	  });
579
580	  jQuery('.add_media').on('click', function(){
581		_custom_media = false;
582	  });
583	}
584	function grassblade_update() {
585		if(jQuery("#src").val().length > 0 || jQuery("#video").val().length > 0 )
586		{
587			jQuery("#gb_upload_message").addClass("has_content");
588			jQuery("#gb_preview_message").addClass("has_content");
589		}
590		gb_save_post();
591	}
592	function gb_remove_upload_progress_bar() {
593		jQuery("#gb_progress_text").html('');
594		jQuery("#gb_progress").removeClass();
595	}
596	function gb_save_post() {
597		if(typeof wp == "object" &&
598		   wp != null &&
599		   typeof wp.data == "object" &&
600		   typeof wp.data.dispatch == "function" &&
601		   wp.data.dispatch("core/editor") != null &&
602		   typeof wp.data.dispatch("core/editor").savePost == "function")
603
604			wp.data.dispatch("core/editor").savePost();
605		else
606			jQuery(".is-primary").trigger('click');
607	}
608
609function grassblade_add_content_change() {
610
611	jQuery("select#h5p_content").on("change", function() {
612		if(jQuery("select#h5p_content").val() > 0)
613		{
614			var h5p_content_id = jQuery("select#h5p_content").val();
615			var url = gb_data.ajax_url + "?action=h5p_embed&id=" + parseInt(h5p_content_id);
616			jQuery("#activity_id").val(url);
617			jQuery("#src").val(url);
618			jQuery("#video").val('');
619			grassblade_update();
620		}
621	});
622
623	jQuery("input#video").on("change", function() {
624		jQuery("input#activity_id").val(jQuery("input#video").val());
625
626		if(jQuery("input#video").val().length > 0)
627		{
628			var url = jQuery("input#video").val();
629			jQuery("#activity_id").val(url);
630			jQuery("#video").val(url);
631			jQuery("#src").val('');
632			jQuery("#h5p_content").val(0);
633			grassblade_update();
634		}
635
636		/* Default value for MP3 player height */
637		if(jQuery("input#height").val() == "" && jQuery("input#video").val().split(".").pop().split("?")[0] == "mp3") {
638			jQuery("input#height").val("50px");
639		}
640
641	});
642}
643
644function gb_xapi_content_uploader(id) {
645
646	var upload_msg = "";
647	const gb_uploader = new plupload.Uploader({
648			runtimes: 'html5,flash,silverlight,html4',
649			'browse_button': id,
650			url: gb_data.ajax_url + "?action=gb_upload_content_file&gb_nonce=" + jQuery("[name=gb_xapi_content_box_content_nonce]").val(),
651			'max_retries': content_data.plupload.max_retries,
652			'dragdrop': true,
653			'drop_element': id,
654			'multi_selection': false,
655			'file_data_name': 'xapi_content',
656			filters: {
657				'max_file_size': content_data.uploadSize,
658				'mime_types': [
659					{
660						title: 'Zip files',
661						extensions: 'zip'
662					},
663					{
664						title: 'MP4 files',
665						extensions: 'mp4'
666					},
667					{
668						title: 'MP3 files',
669						extensions: 'mp3'
670					},
671					{
672						title: 'WebM files',
673						extensions: 'webm'
674					},
675					{
676						title: 'Mov files',
677						extensions: 'mov'
678					}
679					// {
680					// 	title: 'Mkv files',
681					// 	extensions: 'mkv'
682					// },
683					// {
684					// 	title: 'Ogg files',
685					// 	extensions: 'ogg,ogv'
686					// },
687					// {
688					// 	title: 'Flac files',
689					// 	extensions: 'flac'
690					// },
691					// {
692					// 	title: 'Wav files',
693					// 	extensions: 'wav'
694					// },
695					// {
696					// 	title: 'M4a files',
697					// 	extensions: 'm4a'
698					// },
699					// {
700					// 	title: 'Avi files',
701					// 	extensions: 'avi'
702					// }
703				]
704			},
705			multipart_params : {
706				"post_id" :  gb_data.post_id,
707			},
708			init: {
709				PostInit: function() {},
710
711				UploadProgress: function( up, file ) {
712					if(file.percent < 100)
713					upload_msg = content_data.uploading;
714					else
715					upload_msg = content_data.processing;
716
717					upload_msg = upload_msg.replace("[file_name]", file.name +' ('+ ( ( file.size / 1024 ) / 1024 ).toFixed( 1 ) +' mb) ').replace( "[percent]", file.percent+'%');
718
719					document.getElementById( 'gb_progress_text' ).innerHTML = upload_msg;
720					jQuery("#gb_progress_bar").css("background-color" , "#62A21D");
721					var percent = (file.percent > 95)? 95:file.percent;
722					jQuery("#gb_progress_bar").width(percent+'%');
723				},
724
725				FileUploaded: function( upldr, file, object ) {
726
727					const info = jQuery.parseJSON( object.response );
728
729					if ( info.response == 'success' ) {
730						upload_msg = content_data.processed;
731						upload_msg = upload_msg.replace("[file_name]", file.name);
732						document.getElementById( 'gb_progress_text' ).innerHTML = upload_msg;
733
734						jQuery("#gb_progress_bar").width('100%');
735						grassblade_content_success_handling(info);
736					}
737
738					if ( info.response == 'error' ) {
739						grassblade_content_error_handling(info);
740					}
741				},
742
743				FilesAdded: function( up, files ) {
744					if ( 1 < gb_uploader.files.length ) {
745						gb_uploader.removeFile( gb_uploader.files[0]);
746					}
747
748					jQuery('#gb_progress').addClass('upload_progress');
749					document.getElementById( 'gb_progress_text' ).innerHTML = gb_uploader.files[0].name +'('+( ( gb_uploader.files[0].size / 1024 ) / 1024 ).toFixed( 1 )+'mb)';
750					gb_uploader.start();
751				},
752
753				Error: function( up, err ) {
754					jQuery('#gb_progress').addClass('upload_progress');
755					document.getElementById( 'gb_progress_text' ).innerHTML = err.message;
756					jQuery("#gb_progress_bar").css("background-color" , "red");
757					jQuery("#gb_progress_text").css("color" , "white");
758					//console.log( err );
759				}
760			}
761		});
762
763	gb_uploader.init();
764}
765
766function grassblade_dropbox_init() {
767	if (typeof Dropbox != 'undefined') {
768		options = {
769			success: function(files){
770				grassblade_upload_dropbox(files);
771			},
772			linkType: "direct",
773		};
774		var button = Dropbox.createChooseButton(options);
775		document.getElementById("dropbox").appendChild(button);
776	}
777}
778
779function grassblade_upload_dropbox(files){
780	var file = files[0].name;
781	var link = files[0].link;
782	var nonce = jQuery("[name=gb_xapi_content_box_content_nonce]").val();
783
784	jQuery('#gb_progress').addClass('upload_progress');
785
786	jQuery('#gb_progress_text').text(content_data.dropbox_uploading.replace("[file_name]", file));
787
788	jQuery("#gb_progress_bar").css("background-color" , "#62A21D");
789	jQuery("#gb_progress_bar").width('95%');
790
791	var form_data = new FormData();
792
793	form_data.append("file", file);
794	form_data.append("link", link);
795	form_data.append("post_id", gb_data.post_id);
796	form_data.append('action', 'dropbox_upload_file');
797	form_data.append('gb_nonce', nonce);
798
799	jQuery.ajax({
800		type: 'POST',
801		url: gb_data.ajax_url,
802		data: form_data,
803		contentType: false,
804		processData: false,
805		success: function(response){
806			const info = JSON.parse(response);
807
808			if ( info.response == 'success' ) {
809				jQuery('#gb_progress_text').text(content_data.processed.replace("[file_name]", file));
810
811				jQuery("#gb_progress_bar").width('100%');
812
813				grassblade_content_success_handling(info);
814			}
815			if ( info.response == 'error' ) {
816				grassblade_content_error_handling(info);
817			}
818		}
819	});
820}
821
822function grassblade_content_success_handling(info) {
823	if (info.data.src) {
824		jQuery('#src').val(info.data.src);
825	} else
826		jQuery('#src').val('');
827
828	if (info.data.video) {
829		jQuery('#video').val(info.data.video);
830	} else
831		jQuery('#video').val('');
832
833	if (info.data.version) {
834		jQuery('#version').val(info.data.version);
835	} else
836		jQuery('#version').val('');
837
838	if (jQuery('#passing_percentage').val() == "" && info.data.passing_percentage) {
839		jQuery('#passing_percentage').val(info.data.passing_percentage);
840	}
841
842	if (info.data.target) {
843		jQuery('#target').val(info.data.target);
844	}
845
846	if (typeof(info.data.h5p_content_id) == "undefined" || !(info.data.h5p_content_id > 0) )
847		jQuery('select#h5p_content').val(0);
848
849	jQuery('#activity_id').val(info.data.activity_id);
850
851	if( typeof  info.switch_tab == "string")
852		jQuery(info.switch_tab).trigger('click');
853
854	if(typeof info.data.title == "string" && info.data.title.length > 0 && typeof  wp.data == "object" && typeof  wp.data.select("core/editor") == "object" && wp.data.select("core/editor") != null && wp.data.select("core/editor").getCurrentPost().title == "")
855		wp.data.dispatch( 'core/editor' ).editPost( { title: info.data.title  } );
856
857	if(typeof info.data.description == "string" && info.data.description.length > 0 && typeof  wp.data == "object" && typeof  wp.data.select("core/editor") == "object" && wp.data.select("core/editor") != null && wp.data.select("core/editor").getCurrentPost().content == "")
858	{
859		const newBlock = wp.blocks.createBlock( "core/paragraph", {
860		    content: info.data.description,
861		});
862		wp.data.dispatch( "core/editor" ).insertBlocks( newBlock );
863	}
864	jQuery("#gb_upload_message").addClass("has_content");
865	jQuery("#gb_preview_message").addClass("has_content");
866}
867
868function grassblade_content_error_handling(info){
869	document.getElementById( 'gb_progress_text' ).innerHTML = info.info;
870	jQuery("#gb_progress_bar").css("background-color" , "red");
871	jQuery("#gb_progress_text").css("color" , "white");
872}
873function grassblade_launch_link_click(event) {
874	window.open(event.href, "_blank");
875	console_log('Window Launch');
876	var completion_data = JSON.parse(event.getAttribute('data-completion'));
877	if(gb_is_completion_behaviour_enabled(completion_data)) {
878		setTimeout(function () {
879			grassblade_content_completion_request( completion_data.content_id , completion_data.registration, 0 );
880		}, 3000);
881	}
882	return false;
883}
884function is_grassblade_voc_enabled() {
885	return jQuery(".gb_voc").length > 0;
886}
887function grassblade_voc_show(content_id) {
888	if(content_id == "all")
889		jQuery(".gb_voc").removeClass("gb_voc");
890	else
891		jQuery(".gb_voc_"+content_id).removeClass("gb_voc").removeClass("gb_voc_" + content_id);
892}
893function grassblade_voc_init() {
894	jQuery.each(jQuery(".grassblade_iframe,.grassblade_launch_link"), function(i, content) {
895		var completion_data = grassblade_get_data_attribute(content, 'completion');
896		if(completion_data.completed) {
897			grassblade_voc_show(completion_data.content_id);
898			setTimeout(function () { grassblade_voc_show(completion_data.content_id); }, 2000);
899		}
900	});
901}
902
903function grassblade_find_iframes_and_add_completion_script(){
904	console_log("grassblade_find_iframes_and_add_completion_script")
905	if(gb_is_completion_behaviour_enabled()) {
906		var inpage_content = document.querySelectorAll('iframe.grassblade_iframe');
907		for (var i = 0; i < inpage_content.length; i++) {
908			var completion_data = grassblade_get_data_attribute(inpage_content[i], 'completion');
909			if(gb_is_completion_behaviour_enabled(completion_data)) {
910				grassblade_add_completion_script_to_iframe( document.querySelectorAll('iframe.grassblade_iframe')[i] );
911			}
912		}
913	}
914}
915
916function grassblade_get_lightbox_iframe() {
917	if(gb_is_completion_behaviour_enabled()) {
918		var lightbox_content = document.querySelectorAll('iframe.grassblade_lightbox_iframe');
919		for (var i = 0; i < lightbox_content.length; i++) {
920			var completion_data = grassblade_get_data_attribute(lightbox_content[i], 'completion');
921			if(gb_is_completion_behaviour_enabled(completion_data)) {
922				grassblade_add_completion_script_to_iframe( document.querySelectorAll('iframe.grassblade_lightbox_iframe')[i] );
923			}
924
925		}
926	}
927}
928
929function grassblade_add_completion_script_to_iframe(iframe_content){
930	console_log("grassblade_add_completion_script_to_iframe");
931	if( iframe_content.contentDocument != null ) { // adding script to iframe to trigger completion
932		if (iframe_content.contentDocument.querySelectorAll("script[src='"+gb_data.plugin_dir_url+"js/completion.js']").length <= 0){
933			if(iframe_content.contentDocument.querySelector('body') != null){
934				iframe_content_selector = iframe_content.contentDocument.querySelector('body');
935			} else {
936				iframe_content_selector = iframe_content.contentDocument.querySelector('head');
937			}
938			gb_scriptAppender(gb_data.plugin_dir_url+'js/completion.js', iframe_content_selector);
939		}
940	} else { // When not able to add or read script to iframe eg. external contents we start completion checking long pooling
941		var completion_data = grassblade_get_data_attribute(iframe_content, 'completion');
942		if ((completion_data.completion_tracking != false) && (completion_data.completion_type != 'hide_button' || is_grassblade_voc_enabled() )) {
943			grassblade_content_completion_request( completion_data.content_id , completion_data.registration , 0);
944		}
945	}
946}
947
948function gb_scriptAppender(src_path, selector) {
949	var script = document.createElement("script");
950	script.type = "text/javascript";
951	script.src = src_path;
952
953	if (selector != null) {
954		selector.appendChild(script);
955	}
956}
957
958function grassblade_content_completion_request(content_id,registration,n) {
959	console_log('grassblade_content_completion_request');
960	console_log(n);
961
962	if (gb_data.is_guest) {
963		return;
964	}
965	jQuery('#grassblade_remark'+content_id).empty();
966
967	if ( n != 0 && gb_data.is_guest == '') { // Show Loader Only for in Page and Lightbox content , Not for New Window and guest user
968		var result_loader = "<div><strong> " + gb_data.labels.content_getting_result + " </strong><div class='gb-loader'></div></div>";
969		jQuery('#grassblade_remark'+content_id).append(result_loader);
970	}
971
972	var activity_id = get_activity_id_by_content_id(content_id);
973	if ((typeof(GB.completion) != "undefined") && GB.completion.disable_polling[activity_id]) {
974		return; // if completion Code exist inside the content
975	}
976
977	var data = {"content_id" : content_id , "registration" : registration, "post_id" :gb_data.post_id}
978
979	jQuery.ajax({
980		type : "POST",
981		dataType : "json",
982		url : gb_data.ajax_url,
983		data : { action: "grassblade_content_completion", data : data },
984		success:function(data){
985			console_log('success');
986			console_log(data);
987
988			console_log('Value of n');
989			console_log(n);
990
991			if (data != 0 && typeof(data.score_table) != "undefined") {
992				// Get content Score and completion
993				grassblade_show_completion(data,content_id);
994			} else {
995				console_log('Result Not Found Yet');
996				if (n == 0) {
997					grassblade_content_completion_request(content_id,registration,0);
998				} else if(n == 1){
999					jQuery('#grassblade_remark'+content_id).empty();
1000					return;
1001				} else{
1002					grassblade_content_completion_request(content_id,registration,n-1);
1003				}
1004			}
1005		},
1006		error: function(errorThrown){
1007			console_log('error');
1008			console_log(errorThrown);
1009			if (n = 0) {
1010				grassblade_content_completion_request(content_id,registration,1);
1011			} else if(n=1){
1012				return;
1013			} else{
1014				grassblade_content_completion_request(content_id,registration,n-1);
1015			}
1016		}
1017	});
1018}
1019
1020function grassblade_show_completion(data,content_id){
1021	console_log('grassblade_show_completion');
1022	console_log(data);
1023
1024	jQuery('#grassblade_remark'+content_id).empty();
1025
1026	if (jQuery('#grassblade_result-'+content_id).length) {
1027		jQuery('#grassblade_result-'+content_id).replaceWith(data.score_table);
1028	}
1029
1030	if (data.completion_result.status == 'Failed') {
1031		var result_msg = "<strong>" + gb_data.labels.content_failed_message + "</strong>";
1032		result_msg = result_msg.replace("%s", gb_data.labels.failed.toLowerCase());
1033	}
1034	console_log(data.completion_result);
1035	console_log(data.completion_result.status);
1036
1037	if (data.completion_result.status == 'Passed' || data.completion_result.status == 'Completed') {
1038		var result_msg = "<strong>" + gb_data.labels.content_passed_message + "</strong>";
1039		var status = data.completion_result.status.toLowerCase();
1040		result_msg = result_msg.replace("%s", gb_data.labels[status].toLowerCase());
1041
1042		grassblade_voc_show(content_id);
1043	}
1044
1045	if (data.post_completion == true)
1046		grassblade_voc_show("all");
1047
1048	if (data.post_completion == true && data.is_show_hide_button == true) {
1049		var post_completion_type = get_post_completion_type();
1050		grassblade_lms_content_completion(post_completion_type);
1051	}
1052	jQuery('#grassblade_remark'+content_id).append(result_msg);
1053}
1054
1055function grassblade_lms_content_completion(completion_type){
1056	if (completion_type == 'disable_until_complete') {
1057		//jQuery(gb_data.mark_complete_button).prop('disabled', false);
1058		jQuery(gb_data.mark_complete_button).removeAttr('disabled');
1059		jQuery(gb_data.mark_complete_button).removeClass('grassblade-button-disabled');
1060
1061	} else if (completion_type == 'hidden_until_complete') {
1062		jQuery(gb_data.mark_complete_button).show();
1063
1064	} else if (completion_type == 'completion_move_nextlevel') {
1065		setTimeout(function () {
1066			if (typeof gb_data.next_link == 'string' && gb_data.next_link.length > 1) {
1067				window.location.href = gb_data.next_link;
1068			} else if (typeof gb_data.next_button == 'string' && gb_data.next_button.length > 1) {
1069				if(typeof jQuery(gb_data.next_button).attr("href") == "string")
1070				window.location.href = jQuery(gb_data.next_button).attr("href");
1071				else
1072				jQuery(gb_data.next_button).trigger('click');
1073			}
1074		}, 3000);
1075
1076	} else if (completion_type == 'hide_button'){
1077		// we can add next button for this condition auto_completion
1078	} else {
1079		jQuery(gb_data.mark_complete_button).hide();
1080	}
1081}
1082
1083function grassblade_control_lms_mark_complete_btn(){
1084	if(!gb_data.is_admin && gb_data.completion_tracking_enabled && gb_data.mark_complete_button != ''){
1085		console_log(gb_data.completion_type);
1086		if (gb_data.completion_type == 'disable_until_complete') {
1087			jQuery(gb_data.mark_complete_button).attr('disabled','disabled');
1088		} else {
1089			jQuery(gb_data.mark_complete_button).hide();
1090		}
1091	}
1092}
1093
1094function gb_IsJsonString(str) {
1095	try {
1096		JSON.parse(str);
1097	} catch (e) {
1098		return false;
1099	}
1100	return true;
1101}
1102
1103function get_post_completion_type(){
1104	var all_contents = document.querySelectorAll('.grassblade');
1105	for (var i = all_contents.length - 1; i >= 0 ; i--) {
1106		var attributes_data = grassblade_get_data_attribute(all_contents[i].firstElementChild, 'completion');
1107		if (attributes_data.completion_tracking) {
1108			return attributes_data.completion_type;
1109		}
1110	}
1111}
1112
1113function get_completion_data_by_object_id(object_id){
1114	var all_contents = document.querySelectorAll('.grassblade');
1115	for (var i = 0; i < all_contents.length; i++) {
1116		var attributes_data = grassblade_get_data_attribute(all_contents[i].firstElementChild, 'completion');
1117		if (attributes_data.activity_id == object_id ) {
1118			return attributes_data;
1119		}
1120	}
1121}
1122
1123function get_activity_id_by_content_id(content_id){
1124	var all_contents = document.querySelectorAll('.grassblade');
1125	for (var i = 0; i < all_contents.length; i++) {
1126		var attributes_data = grassblade_get_data_attribute(all_contents[i].firstElementChild, 'completion');
1127		if (attributes_data.content_id == content_id ) {
1128			return attributes_data.activity_id;
1129		}
1130	}
1131}
1132
1133function grassblade_get_data_attribute(el, key, key2) {
1134	var el_val = jQuery(el).data(key);
1135	if(typeof key2 == "string")
1136	{
1137		return el_val[key2];
1138	}
1139	else
1140		return el_val;
1141}
1142
1143function call_grassblade_get_completion(data){
1144	if (typeof(data.statement) != "undefined"){
1145		var completion_data = get_completion_data_by_object_id(data.statement.object.id);
1146		if ((typeof(GB.completion) != "undefined") && GB.completion.disable_polling[data.statement.object.id]) {
1147			GB.completion.disable_polling[data.statement.object.id] = false;
1148		}
1149		console_log(completion_data);
1150		if (completion_data) {
1151			if ((completion_data.completion_tracking != false) && (completion_data.completion_type != 'hide_button' || is_grassblade_voc_enabled())){
1152				grassblade_content_completion_request(completion_data.content_id,completion_data.registration,2);
1153			}
1154		}
1155	}
1156}
1157
1158function console_log(arguments) {
1159  if(typeof window.gbdebug != "undefined")
1160  console.error(arguments);
1161}
1162
1163function get_gb_quiz_report(content_id,user_id,registration,statement_id) {
1164	var src = gb_data.ajax_url+'?action=gb_rich_quiz_report&id='+content_id;
1165
1166	if (typeof registration == "string" && registration.length > 1)
1167		src += '&registration='+registration;
1168
1169	if (typeof statement_id == "string" && statement_id.length > 1)
1170		src += '&statement_id='+statement_id;
1171
1172	if (!isNaN(user_id) && user_id != null)
1173		src += '&user_id='+user_id;
1174
1175	var quiz_report_iframe = '<div id="grassblade_quiz_report"><iframe id="xapi_quiz_report" class="gb_iframe_loader" style="width: 100%; height: 100%; border: none; overflow-x:hidden;" src='+src+'></iframe></div>';
1176	show_grassblade_reports_popup( quiz_report_iframe );
1177
1178	return false;
1179}
1180
1181function get_gb_question_report(content_id, group_id = '', group_type = '') {
1182	var src = gb_data.ajax_url+'?action=gb_question_report&id='+content_id;
1183	if(group_id)
1184	src = src + "&group_id=" + group_id;
1185	if(group_type)
1186	src = src + "&group_type=" + encodeURIComponent(group_type);
1187
1188	var quiz_report_iframe = '<div id="grassblade_question_report"><iframe id="xapi_quiz_report" class="gb_iframe_loader" style="width: 100%; height: 100%; border: none; overflow-x:hidden;" src='+src+'></iframe></div>';
1189	show_grassblade_reports_popup( quiz_report_iframe );
1190
1191	return false;
1192}
1193
1194function get_gb_quiz_report_request(context) {
1195	var content_id = jQuery(context).data("id");
1196	var user_id = jQuery(context).data("user");
1197	var statement_id = jQuery(context).data("statement");
1198	var registration = jQuery(context).data("registration");
1199
1200	if(!isNaN(content_id) && (typeof statement_id == "string" || typeof registration == "string"))
1201	{
1202		get_gb_quiz_report(content_id, user_id, registration, statement_id);
1203	}
1204}
1205
1206function grassblade_enable_quiz_report_links() {
1207	if( jQuery("#ld-profile").length > 0 )
1208	jQuery("#ld-profile").on("click", function(e) {
1209		if(jQuery(e.target).parent(".gb-quiz-report").length) {
1210			get_gb_quiz_report_request(jQuery(e.target).parent(".gb-quiz-report"));
1211		}
1212	});
1213	else
1214	jQuery("a.gb-quiz-report").on("click", function() {
1215		get_gb_quiz_report_request(this);
1216	});
1217}
1218function grassblade_hide_popup(){
1219	jQuery("#grassblade_quiz_report").hide();
1220	jQuery("#grassblade_quiz_report").html('');
1221	jQuery("#grassblade_reports_popup").hide();
1222}
1223function show_grassblade_reports_popup( body, header = "" ) {
1224	if(jQuery("#grassblade_reports_popup").length == 0) {
1225		const grassblade_reports_popup_html = `<div id="grassblade_reports_popup" style="display: none;" >
1226						<div class='grassblade_lightbox_overlay' onClick='return grassblade_hide_popup();'></div>
1227						<div class='grassblade_popup'>
1228							<span class='grassblade_close' onClick='return grassblade_hide_popup();' style="background: none;padding: 7px;position: sticky;top: 0; z-index: 10000;">X</span>
1229							<div class="gb-popup-body"></div>
1230						</div>
1231					</div>`;
1232		jQuery("body").append(grassblade_reports_popup_html);
1233	}
1234
1235	if( header.length > 0 ) {
1236		body = `<div class="gb-popup-header"><span class="gb-section-title">${header}</span></div>
1237				<div class="gb-section-body"><div id="grassblade_reports_popup_content">${body}</div></div>`;
1238	}
1239	jQuery("#grassblade_reports_popup .gb-popup-body").html( body );
1240	jQuery("#grassblade_reports_popup").show();
1241}
1242
1243function gb_highlight_text(search){
1244	var myHilitor = new Hilitor("grassblade_settings_form"); // id of the element to parse
1245	myHilitor.apply(search);
1246}
1247function gb_is_gutenberg_edit() {
1248	return (typeof wp == "object" && typeof wp.data == "object" && typeof wp.data.select("core/editor") == "object");
1249}
1250function gb_update_activity_id_field() {
1251	var activity_id_field = jQuery('#activity_id');
1252	var permalink = gb_get_permalink();
1253	if(permalink)
1254	permalink = permalink.replace('…','').replace(/\/$/, '');
1255	else {
1256		permalink = "[GENERATE]";
1257		activity_id_field.attr('readonly', 'readonly');
1258	}
1259	activity_id_field.val(permalink);
1260	return false;
1261}
1262function gb_get_permalink() {
1263	var permalink = "";
1264
1265	if(jQuery('#sample-permalink').text())
1266		permalink = jQuery('#sample-permalink').text();
1267	else if(gb_is_gutenberg_edit()) {
1268		permalink = wp.data.select("core/editor").getCurrentPostAttribute('link').replace('…','').replace(/\/$/, '');
1269	}
1270
1271	return permalink;
1272	// document.getElementById('activity_id').value =
1273
1274	// jQuery('#sample-permalink,.components-external-link.edit-post-post-link__link').text()?
1275	// jQuery('#sample-permalink,.components-external-link.edit-post-post-link__link').text().replace('…','').replace(/\/$/, ''):'[GENERATE]';
1276
1277	// if(jQuery('#activity_id').val() == '[GENERATE]')
1278	// 	jQuery('#activity_id').attr('readonly', 'readonly');
1279
1280	// return false;
1281}
1282
1283function grassblade_elementor_open_edit_page(c) {
1284	var id = jQuery(c).closest("#elementor-controls").find("select[data-setting='content_id']").val();
1285	if(typeof id != "undefined" && id != "") {
1286		window.open(ajaxurl.replace("admin-ajax.php", "post.php?action=edit&post=" + id));
1287	}
1288}
1289
1290function gb_content_copy_protect(context, post_id, enable) {
1291	jQuery(context).prop("onclick", null).off("click");
1292
1293	var data = {
1294		"enable": enable,
1295		"post_id": post_id,
1296		"gb_nonce": jQuery("[name=gb_xapi_content_box_content_nonce]").val()
1297	};
1298	jQuery.ajax({
1299		type: 'GET',
1300		url: gb_data.ajax_url + "?action=gb_content_enable_copy_protect",
1301		data: data,
1302		contentType: "json",
1303		success: function(response){
1304			const info = JSON.parse(response);
1305			jQuery(context).html(info.info).css("color", "gray");
1306		}
1307	});
1308}
1309function gb_reset_learner_progress(context, post_id) {
1310	var yes = confirm(gb_data.lang.confirm_reset_learner_progress);
1311
1312	if(!yes)
1313		return;
1314
1315	jQuery(context).prop("onclick", null).off("click");
1316
1317	var data = {
1318		"post_id": post_id,
1319		"gb_nonce": jQuery("[name=gb_xapi_content_box_content_nonce]").val()
1320	};
1321	jQuery.ajax({
1322		type: 'GET',
1323		url: gb_data.ajax_url + "?action=gb_reset_learner_progress",
1324		data: data,
1325		contentType: "json",
1326		success: function(response){
1327			const info = JSON.parse(response);
1328			if(typeof info.registration == "string" && info.registration.length == 36)
1329				jQuery("#registration").val(info.registration);
1330
1331			jQuery(context).html(info.info).css("color", "gray");
1332		}
1333	});
1334}
1335function gb_src_tools_show() {
1336	jQuery("#src").animate({width: 0}, 200, function() {
1337		jQuery(this).hide();
1338		jQuery(".gb_src_tools").show();
1339		jQuery("#field-src .dashicons-admin-tools").hide();
1340
1341	});
1342}
1343function gb_src_tools_hide() {
1344	jQuery(".gb_src_tools").hide();
1345	jQuery("#src").show().animate({width: "80%"}, 200, function() {
1346		jQuery("#field-src .dashicons-admin-tools").show();
1347	});
1348}
1349function gb_switch_revision(context) {
1350	var settings = jQuery(context).data("settings");
1351	jQuery.each(jQuery("#grassblade_xapi_content_form").find("input, select, textarea, checkbox"), function(i, v) {
1352		var name = jQuery(v).attr("name");
1353		if( jQuery(v).attr("type") == "file" || typeof name == "undefined")
1354			return;
1355		var new_val = typeof settings[name] == "undefined"? "":settings[name];
1356		//console.log(i, jQuery(v).prop('nodeName'), jQuery(v).attr("type"),jQuery(v).attr("name"),  jQuery(v).val(), new_val);
1357		if(jQuery(v).attr("type") == "checkbox")
1358			jQuery(v).prop('checked', new_val).trigger("change");
1359		else
1360			jQuery(v).val(new_val).trigger("change");
1361
1362		if(jQuery(v).attr("type") == "hidden" && jQuery("#" + name + "-src").length)
1363			jQuery("#" + name + "-src").attr("src", new_val);
1364	});
1365	jQuery(context).closest(".tooltiptext").find("div.gb_revisions").removeClass("switched_to");
1366	if(jQuery(context).hasClass("gb_revisions_reset"))
1367		jQuery(context).hide();
1368	else {
1369		jQuery(context).closest(".gb_revisions").addClass("switched_to");
1370		jQuery(context).closest(".tooltiptext").find(".gb_revisions_reset").show();
1371	}
1372}
1373function gb_delete_revisions(context, post_id, revision, path) {
1374	//console.log(context, revision);
1375	var count_of_revision = jQuery(context).closest(".tooltiptext").find("div.gb_revisions.gb_file_version_"+revision).length;
1376	var count_of_selected_revision = jQuery(context).closest(".tooltiptext").find("div.gb_revisions.file_version_selected.gb_file_version_"+revision).length;
1377
1378	if(count_of_revision <= 0 || count_of_revision != count_of_selected_revision)
1379	{
1380		alert("Invalid selection.");
1381		return;
1382	}
1383	var path = decodeURIComponent(path);
1384	var msg_template = "This will delete the files at: [path] \n\nThis will also delete the following revisions: [revisions]\n\nPlease click OK to confirm. Click CANCEL to stop this deletion.";
1385	var msg = msg_template.replace("[path]", "wp-content" + path);
1386	var revisions = "";
1387	jQuery.each(jQuery(context).closest(".tooltiptext").find("div.gb_revisions.gb_file_version_"+revision), function(i, v) {
1388		var v2 = jQuery(v).clone();
1389		v2.find("span").remove();
1390		revisions = revisions + "\n" + v2.text().trim();
1391		//console.log(i, v, v2.text().trim());
1392	});
1393	msg = msg.replace("[revisions]", revisions);
1394	var confirmed_deletion = confirm(msg);
1395
1396	if( confirmed_deletion ) {
1397		var data = {
1398			"revision": revision,
1399			"post_id": post_id,
1400			"path": path,
1401			"gb_nonce": jQuery("[name=gb_xapi_content_box_content_nonce]").val()
1402		};
1403		jQuery.ajax({
1404			type: 'GET',
1405			url: gb_data.ajax_url + "?action=gb_delete_revisions",
1406			data: data,
1407			contentType: "json",
1408			success: function(response){
1409				const info = JSON.parse(response);
1410				var msg = info.response == "success"? "(deleted)":"(delete failed)";
1411				jQuery(context).html(msg).css("color", "gray");
1412			}
1413		});
1414	}
1415}
1416function gb_select_file_versions(context, file_version, is_current_file_version) {
1417	//console.log(context, file_version);
1418	if(file_version > 0) {
1419		if(jQuery(context).parent().hasClass("file_version_selected")) //reset
1420			jQuery(context).closest(".tooltiptext").find("div.gb_revisions").removeClass("file_version_selected");
1421		else
1422			jQuery(context).closest(".tooltiptext").find("div.gb_revisions").removeClass("file_version_selected").siblings(".gb_file_version_" + file_version).addClass("file_version_selected");
1423	}
1424}
1425
1426/* function to compare versions */
1427function gb_version_compare(v1, v2) {
1428	if (typeof v1 !== 'string') return false;
1429	if (typeof v2 !== 'string') return false;
1430	v1 = v1.split('.');
1431	v2 = v2.split('.');
1432	var k = Math.min(v1.length, v2.length);
1433	for (var i = 0; i < k; ++ i) {
1434		v1[i] = parseInt(v1[i], 10);
1435		v2[i] = parseInt(v2[i], 10);
1436		if (v1[i] > v2[i]) return 1;
1437		if (v1[i] < v2[i]) return -1;
1438	}
1439	return v1.length == v2.length ? 0: (v1.length < v2.length ? -1 : 1);
1440}
1441
1442function grassblade_gen_uuid() {
1443	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
1444			var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
1445			return v.toString(16);
1446	});
1447}
1448
1449function gb_get_value(o, k, d) {
1450    const first_part = k.split(".")[0];
1451    const remaining_key = k.substr(first_part.length + 1);
1452    return ( !o || !o[first_part])? d:((typeof o[first_part] != "object" || remaining_key == "")? o[first_part] : gb_get_value(o[first_part], remaining_key, d));
1453}
1454function gb_localize( text ) {
1455	return gb_get_value(gb_data, "lang." + text, text);
1456}
1457
1458if( typeof String.prototype.replaceAll != "function" )
1459String.prototype.replaceAll = function(search, replacement) {
1460	var target = this;
1461	return target.split(search).join(replacement);
1462};
1463
1464jQuery(function() {
1465	if(jQuery("#show_xapi_content").length > 0) {
1466		jQuery("#show_xapi_content").on("change", function() {
1467			show_xapi_content_meta_box_change();
1468		});
1469		show_xapi_content_meta_box_change();
1470	}
1471	if (typeof jQuery.fn.select2 == 'function') {
1472		jQuery('select#xapi_content').select2();
1473		jQuery('select#show_xapi_content').select2();
1474	}
1475	if(jQuery("#grassblade_xapi_content_form").length > 0)
1476		grassblade_xapi_content_edit_script();
1477	jQuery(".grassblade_field_group > div.grassblade_field_group_label").on("click", function() {
1478		//console.log(jQuery(this).parent().children("div.grassblade_field_group_fields").css("display"));
1479		if(jQuery(this).parent().children("div.grassblade_field_group_fields").css("display") != "none") {
1480			jQuery(this).parent().children("div.grassblade_field_group_label").children(".dashicons").addClass("dashicons-arrow-right-alt2");
1481			jQuery(this).parent().children("div.grassblade_field_group_label").children(".dashicons").removeClass("dashicons-arrow-down-alt2");
1482		}
1483		else
1484		{
1485			jQuery(this).parent().children("div.grassblade_field_group_label").children(".dashicons").removeClass("dashicons-arrow-right-alt2");
1486			jQuery(this).parent().children("div.grassblade_field_group_label").children(".dashicons").addClass("dashicons-arrow-down-alt2");
1487		}
1488		jQuery(this).parent().children("div.grassblade_field_group_fields").slideToggle();
1489	});
1490	jQuery(".grassblade_field_group > div.grassblade_field_group_label").trigger('click');
1491	jQuery(".grassblade_field_group.default_open > div.grassblade_field_group_label").trigger('click');
1492
1493	grassblade_xapi_content_autosize_content();
1494
1495	jQuery(window).on("resize", function() {
1496		if (document.fullscreenElement ||
1497			document.mozFullScreenElement ||
1498			document.webkitFullscreenElement ||
1499			document.msFullscreenElement ) {
1500		  //Full Screen. ignore change
1501		}
1502		else
1503		{
1504			grassblade_xapi_content_autosize_content();
1505			var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
1506
1507			if(!iOS && window.grassblade_lightbox != undefined)
1508			jQuery.each(window.grassblade_lightbox, function(id,options) {
1509				//console.log(options);
1510				var sizes = grassblade_lightbox_get_sizes(options);
1511				//console.log(sizes);
1512				jQuery("#" + id).css("height", sizes.height);
1513				jQuery("#" + id).css("width", sizes.width);
1514				jQuery("#" + id).css("top", sizes.top);
1515				jQuery("#" + id).css("bottom", sizes.top);
1516				jQuery("#" + id).css("left", sizes.left);
1517				jQuery("#" + id).css("right", sizes.left);
1518			});
1519		}
1520	});
1521
1522	jQuery(window).on("click", function(e) {
1523			//Added to fix: When closing full screen from Vimeo Video on Android.
1524			//The touching the fullscreen(close) button also clicks the links below it in the main page.
1525			//Preventing clicks during fullscreen will disable all click actions on main page but will allow clicks inside the iframe.
1526			if(jQuery('body').hasClass('gb-fullscreen')) {
1527				e.preventDefault();
1528				return;
1529			}
1530	});
1531
1532
1533	if(jQuery("#grassblade_settings_form").length) {
1534
1535		jQuery('#grassblade_setting_search').on('keyup', function() {
1536			var search = jQuery("#grassblade_setting_search").val();
1537			//console.log(search);
1538			jQuery("#grassblade_xapi_settings_form td .grassblade_field_group_fields").hide();
1539			jQuery("#grassblade_xapi_settings_form td .grassblade_field_group_fields tr").hide();
1540			jQuery("#grassblade_xapi_settings_form td .grassblade_field_group_fields tr:contains('"+search+"')").show();
1541			jQuery("#grassblade_xapi_settings_form td .grassblade_field_group_fields:contains('"+search+"')").show();
1542
1543			gb_highlight_text(search);
1544		});
1545
1546		jQuery(".wp-color-picker").wpColorPicker({ 'change': function(event, ui) {
1547			var target_id = jQuery(event.target).attr('id');
1548
1549			if( ["table_th_bg_color", "table_th_txt_color", "table_tb_txt_color", "table_tb_color1", "table_tb_color2"].includes(target_id) ) {
1550				jQuery(event.target).val(ui.color.toString());
1551				grassblade_table_colors_changed();
1552			}
1553		}});
1554		grassblade_table_colors_changed();
1555	}
1556	if(jQuery(".grassblade_admin_wrap").length) {
1557		jQuery(".grassblade_admin_wrap .enable-select2").select2();
1558	}
1559
1560	grassblade_show_errors();
1561	grassblade_learndash_focusmode_switching();
1562
1563	grassblade_register_folder_delete_buttons();
1564	grassblade_reigster_gb_search_table();
1565});
1566
1567/* Standard syntax */
1568document.addEventListener("fullscreenchange", function() {
1569	gb_fullscreen_class();
1570});
1571
1572/* Firefox */
1573document.addEventListener("mozfullscreenchange", function() {
1574	gb_fullscreen_class();
1575});
1576
1577/* Chrome, Safari and Opera */
1578document.addEventListener("webkitfullscreenchange", function() {
1579gb_fullscreen_class();
1580});
1581
1582/* IE / Edge */
1583document.addEventListener("msfullscreenchange", function() {
1584	gb_fullscreen_class();
1585});
1586/* Add gb-fullscreen class when video is in fullscreen */
1587
1588if(typeof String.prototype.trim !== 'function') {
1589	String.prototype.trim = function() {
1590	return this.replace(/^\s+|\s+$/g, '');
1591	}
1592}
1593
1594jQuery(function() {
1595	if (typeof gb_data != 'undefined' && !gb_data.is_admin && gb_data.completion_tracking_enabled && gb_data.is_guest == '' && (gb_data.completion_type != 'hide_button' || is_grassblade_voc_enabled()) ) {
1596		grassblade_voc_init();
1597		if(gb_data.post_completion)
1598			grassblade_voc_show("all");
1599
1600		grassblade_control_lms_mark_complete_btn();
1601		setTimeout(function () {
1602			if(gb_data.post_completion)
1603				grassblade_voc_show("all");
1604
1605			grassblade_find_iframes_and_add_completion_script();
1606		}, 2000);
1607	}
1608});
1609
1610window.addEventListener( "message",
1611	function (event) {
1612		if(!gb_data.is_admin){
1613			//if(event.origin !== 'http://imac2.gblrs.com'){ return; }
1614			var data = event.data;
1615			console_log('received response:  ');
1616			console_log(data);
1617
1618			if (typeof(data.statement) === 'object') {
1619				call_grassblade_get_completion(data);
1620			}
1621
1622			if (data.msg == 'code_exist') {
1623				GB.completion =[];
1624				GB.completion.disable_polling =[];
1625				GB.completion.disable_polling[data.activity_id] = true;
1626				console_log(GB.completion.disable_polling[data.activity_id]);
1627			}
1628		}
1629	},
1630false);
1631
1632jQuery(function() {
1633	grassblade_enable_quiz_report_links();
1634});
1635
1636jQuery.expr.pseudos.contains = function(a, i, m) {
1637	return jQuery(a).text().toUpperCase()
1638		.indexOf(m[3].toUpperCase()) >= 0;
1639};

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.