PageSourceSearch

https://www.hotelkaiserhof.de/(cms)/module/static/default/content/media_frame/js/mediaframe.js

js hotelkaiserhof.de collected 2026-09-26 17:01:06 UTC 4,366 bytes, 157 lines download raw bytes

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.