1if (!Element.prototype.matches) { 2 Element.prototype.matches = 3 Element.prototype.msMatchesSelector || 4 Element.prototype.webkitMatchesSelector; 5} 6 7if (!Element.prototype.closest) { 8 Element.prototype.closest = function (s) { 9 var el = this; 10 11 do { 12 if (Element.prototype.matches.call(el, s)) return el; 13 el = el.parentElement || el.parentNode; 14 } while (el !== null && el.nodeType === 1); 15 return null; 16 }; 17} 18 19!(function (opt) { 20 opt.containerSelector = ".cms-media-frame"; 21 opt.buttonSelector = ".cms-media-frame-hint-button"; 22 23 function mediaFrameInit(mediaFrame) { 24 for (var i = 0, len = mediaFrame.length; i < len; i++) { 25 if (!mediaFrame[i].mediaFrameInit) { 26 mediaFrame[i].mediaFrameInit = true; 27 if (mediaFrame[i].dataset.html) { 28 mediaFrame[i] 29 .querySelectorAll(".cms-media-frame-hint-button")[0] 30 .addEventListener("click", mediaFrameHTML); 31 } else if (mediaFrame[i].dataset.usefancybox == 1) { 32 mediaFrame[i] 33 .querySelectorAll(".cms-media-frame-hint-button")[0] 34 .addEventListener("click", mediaFrameFancybox); 35 } else { 36 mediaFrame[i] 37 .querySelectorAll(".cms-media-frame-hint-button")[0] 38 .addEventListener("click", mediaFrameInline); 39 } 40 } 41 } 42 } 43 44 function mediaFrameSrc( v ){ 45 var url = v.dataset.url; 46 var type = v.dataset.type; 47 if( type == 'youtube' ) { 48 url += '?autoplay=1&rel=0'; 49 } 50 return url; 51 } 52 53 function b64_decode(str) { 54 // base64 to unicode 55 return decodeURIComponent(atob(str).split('').map(function (c) { 56 return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); 57 }).join('')); 58 } 59 60 function mediaFrameHTML(ev) { 61 var $container = jQuery(ev.target.closest(opt.containerSelector)); 62 var $html = jQuery(b64_decode($container.data('html'))); 63 var scripts = []; 64 $container.empty(); 65 $html.each(function(){ 66 if (this.nodeName === 'SCRIPT') { 67 scripts.push(this); 68 } 69 else { 70 $container.append(this); 71 } 72 }); 73 mediaFrameScript(scripts.reverse(), $container); 74 } 75 76 /* recursive function to load scripts sequentially and ensure everything loads and run in the correct order */ 77 function mediaFrameScript(scripts, $container) { 78 var nextScript, hasSrc; 79 if (scripts.length === 0) { return; } 80 nextScript = scripts.pop(); 81 hasSrc = (typeof nextScript.src == 'string' && nextScript.src); 82 if (!hasSrc || scripts.length === 0) { // append inline JS and last script 83 $container.append(nextScript); 84 mediaFrameScript(scripts, $container); 85 } 86 else { 87 jQuery.getScript( 88 nextScript.src, 89 function(){ mediaFrameScript(scripts, $container); } 90 ); 91 } 92 } 93 94 function mediaFrameInline(ev) { 95 var v = ev.target.closest(opt.containerSelector); 96 var i = v.getElementsByTagName("img"); 97 var h = v.getElementsByClassName("cms-media-frame-hint")[0]; 98 var d = document.createElement("div"); 99 var f = document.createElement("iframe"); 100 101 f.className = "cms-media-frame-iframe"; 102 v.className += " cms-media-frame-loaded"; 103 d.className = "cms-media-frame-wrap"; 104 f.src = mediaFrameSrc(v); 105 f.setAttribute("allowfullscreen", "allowfullscreen"); 106 f.setAttribute("allowtransparency", "true"); 107 if (v.dataset.type !== "youtube") { 108 f.setAttribute("referrerpolicy", "no-referrer"); 109 } 110 f.setAttribute("sandbox", "allow-presentation allow-scripts allow-same-origin"); 111 if( v.dataset.scrolling === "0" ){ 112 f.setAttribute("scrolling", "no"); 113 } 114 d.appendChild(f); 115 h.parentElement.insertBefore(d, h); 116 if( i.length ){ 117 i[0].parentElement.removeChild(i[0]); 118 } 119 } 120 121 function mediaFrameFancybox(ev) { 122 var v = ev.target.closest(opt.containerSelector); 123 var src = mediaFrameSrc(v); 124 if ( 125 window.jQuery && 126 jQuery.fn.fancybox &&
127 parseInt(jQuery.fancybox.version) == 2 128 ) { 129 jQuery.fancybox.open({ 130 href: src, 131 type: "iframe", 132 }); 133 } else if ( 134 window.jQuery && 135 jQuery.fn.fancybox && 136 parseInt(jQuery.fancybox.version) == 3 137 ) { 138 jQuery.fancybox.open({ 139 src: src, 140 type: "iframe", 141 }); 142 } else if (window.hs) { 143 var link = document.createElement("a"); 144 link.href = src; 145 v.appendChild(link); 146 hs.htmlExpand(link, { 147 objectType: "iframe", 148 width: Math.round(0.8 * window.innerWidth), 149 height: Math.round(0.8 * window.innerHeight), 150 }); 151 } else { 152 window.open(src); 153 } 154 } 155 156 mediaFrameInit(document.querySelectorAll(opt.containerSelector)); 157})({});
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.