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 += '®istration='+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.