PageSourceSearch

https://www.schaarschmidt-gerueste.de/js/custom.220222082036.js

js schaarschmidt-gerueste.de collected 2026-10-07 05:40:10 UTC 23,555 bytes, 851 lines download raw bytes

1$(function() {
2	initMenu();
3});
4
5// Make :active pseudo classes work on iOS
6document.addEventListener("touchstart", function() {}, false);
7
8var initMenu = function() {
9    //Temporary JS start
10	$('.menu-wrapper-js-anchor').each(function() {
11    //Temporary JS end
12		if ($(this)[0].getAttribute('class').match(/(?:^| )preset\-/) === null) {
13			return;
14		}
15
16		// Commonly used elements  
17		var $menu = $('.ed-menu', this);
18		var $menuLinks = $('a', $menu);
19		var $menuTrigger = $('.menu-trigger', this);
20		var menuWrapperHeight = $(this).outerHeight();
21		var $banner = $(this).next('.banner');
22
23		if (!$banner.length) {
24			$banner = $(this).closest('.banner');
25		}
26
27		var bannerHeight = $banner.length ? $banner.outerHeight() : 0;
28		var smoothScrollOffset = 20;
29
30		toggleClassOnClick($menu, $menuTrigger, $(), 'open');
31
32		// getComputedStyle(elm).fill returns rgb(0,0,0) by default. it's a useless property on a non-svg, so if we have activated sticky in preset settings we set it to the color red
33		var isSticky = getComputedStyle($(this)[0]).fill !== 'rgb(0, 0, 0)' ? true : false;
34		
35		if (isSticky) {
36			activateSticky($(this), 'sticky', $banner.length ? Math.max(menuWrapperHeight, bannerHeight - menuWrapperHeight - 10) : $(this).offset().top, undefined, $banner.length);
37		}
38
39		activateSmoothScroll($menuLinks.add($('.scroll a')), smoothScrollOffset);
40		addClassOnVisibleLinkTargets($menuLinks, 'active', 2 / 3);
41	});
42
43};
44
45/**
46 * Toggles class on a target when a trigger is clicked
47 * 
48 * @param {jQuery} The target to apply the CSS class to
49 * @param {jQuery} The Trigger
50 * @param {string} CSS Class to toggle on the target
51 * @param {Boolean} If off canvas menu is used
52 */
53var toggleClassOnClick = function($target, $trigger, $closeTrigger, cssClass) {
54	// Reset in case class "open" was saved accidentally
55	$target.removeClass(cssClass);
56	$trigger.removeClass(cssClass);
57
58	// Click on trigger toggles class "open"
59	$trigger.off('.toggle').on('click.toggle', function() {
60		$(this).toggleClass(cssClass);
61		$target.toggleClass(cssClass);
62	});
63
64	// Close target when link inside is clicked
65	$target.find('a').click(function() {
66		$target.removeClass(cssClass);
67		$trigger.removeClass(cssClass);
68	});
69
70	if (!$closeTrigger) {
71		return;
72	}
73
74	$closeTrigger.on('click', function() {
75		$target.removeClass(cssClass); 
76		$trigger.removeClass(cssClass);
77	});
78};
79
80/**
81 * Smooth scroll to link targets
82 * 
83 * @param {jQuery} The links
84 * @param {jQuery} Offset to subtract from the scroll target position (e.g. for fixed positioned elements like a menu)
85 */
86var activateSmoothScroll = function($scrollLinks, scrollOffset) {
87	if (typeof scrollOffset === 'undefined') {
88		scrollOffset = 0;
89	}
90
91	var determineTarget = function($trigger, hash) {
92		if (hash == '#!next') {
93			return $trigger.parents('.ed-element').last().next();
94		}
95
96		return $(hash);
97	}
98
99	$scrollLinks.click(function(e) {
100		var $target = determineTarget($(this), this.hash);
101		if (!$target.length) return;
102		
103		e.preventDefault();
104		if ($(this.hash).parent().offset().top === 0){
105		    viewport.scrollTo($target, 'top', 500, 0); 
106		}else{
107		    viewport.scrollTo($target, 'top', 500, scrollOffset);
108		}
109	});
110};
111
112/**
113 * Adds a class to an element when not currently visible
114 * 
115 * @param {jQuery} Element
116 * @param {string} CSS class to be applied to the element when it's outside the viewport
117 * @param {string} Can be set to 'top', 'bottom' or 'full'
118 * @param {int|function} Custom offset after which cssClass is applied. If not set, default to $element's position
119 */
120var activateSticky = function($element, cssClass, offset, mode, hasBanner) {
121	var self = this;
122	self.offset = offset;
123	$element.removeClass(cssClass);
124
125	var updateOffset = function() {
126		if ($element.hasClass('sticky') || hasBanner) {
127			self.offset = offset;
128		} else {
129			self.offset = $element.offset().top;
130		}
131	}
132
133	viewport.observe('resize', updateOffset);
134	viewport.observe('animation.end', updateOffset);
135	updateOffset();
136	
137	var isVisible = function(mode) {
138		return (
139			(typeof mode === 'undefined' && (self.offset) > viewport.getScrollTop()) ||
140			((mode === true || mode == 'full') && self.offset > viewport.getScrollTop()) ||
141			(mode == 'top' && self.offset > viewport.getScrollTop()) ||
142			(mode == 'bottom' && (self.offset) > viewport.getScrollTop())
143		);
144	};
145
146	var mwh = $element.outerHeight();
147
148	var addMargin = function() {
149		if (!$element.length || !$element.next().length) {
150			return;
151		}
152
153		$element.next().get(0).style.setProperty("--spacer-height", mwh + 'px');
154
155		if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
156			return;
157		}
158		$element.next().css('margin-top', mwh);
159	}
160	var removeMargin = function() {
161		if (!$element.length || !$element.next().length) {
162			return;
163		}
164		$element.next().get(0).style.setProperty("--spacer-height", '');
165		if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
166			return;
167		}
168		$element.next().css('margin-top', '');
169	}
170
171	viewport.observe('scroll', function() {
172		if (!$element.length) return;
173		if (!isVisible(mode)) {
174			$element.addClass(cssClass);
175			addMargin();
176		} else {
177			$element.removeClass(cssClass);
178			removeMargin();
179		}
180	});
181};
182
183/**
184 * Adds a class to links whose target is currently inside the viewport
185 * 
186 * @param {jQuery} Link(s) to be observed
187 * @param {string} CSS Class to be applied
188 * @param {float} Ratio by which the target should be within the viewport
189 */
190var addClassOnVisibleLinkTargets = function($links, cssClass, sectionViewportRatio) {
191	if (typeof sectionViewportRatio === 'undefined') {
192		sectionViewportRatio = 1 / 2;
193	}
194
195	var menuTargets = [];
196	var activeLink = $links.filter('.active:not(.wv-link-elm)').eq(0);
197
198	var links = $links.filter(function() {
199		var $target = $(this.hash);
200		if (!$target.length) {
201			return false;
202		}
203
204		// Cache offset position to improve performance (update on resize)		
205		var updateOffset = function() {
206			$target.data('offset', $target.offset().top);
207		};
208
209		viewport.observe('resize', updateOffset);
210		viewport.observe('animation.end', updateOffset);
211		updateOffset();
212
213		menuTargets.push($target);
214		return true;
215	});
216
217	// No hash links found, so don't handle it at all
218	if (!links.length) {
219		return;
220	}
221
222	var checkVisibility = function() {
223		$links.removeClass('active');
224
225		// Check section position reversely
226		for (var i = menuTargets.length - 1; i >= 0; i--) {
227			var desiredScrollPosition = menuTargets[i].data('offset') - viewport.getHeight() * (1 - sectionViewportRatio);
228			if (viewport.getScrollTop() >= desiredScrollPosition) {
229				links.eq(i).addClass(cssClass);
230				return;
231			}
232		}
233
234		// Fallback to originally active item
235		activeLink.addClass(cssClass);
236	};
237
238	viewport.observe('scroll', checkVisibility);
239	checkVisibility();
240};
241
242/* JS for preset "Menu" */
243$(function() {
244	initMenu();
245});
246
247// Make :active pseudo classes work on iOS
248document.addEventListener("touchstart", function() {}, false);
249
250var initMenu = function() {
251    //Temporary JS start
252	$('.menu-wrapper-js-anchor').each(function() {
253    //Temporary JS end
254		if ($(this)[0].getAttribute('class').match(/(?:^| )preset\-/) === null) {
255			return;
256		}
257
258		// Commonly used elements  
259		var $menu = $('.ed-menu', this);
260		var $menuLinks = $('a', $menu);
261		var $menuTrigger = $('.menu-trigger', this);
262		var menuWrapperHeight = $(this).outerHeight();
263		var $banner = $(this).next('.banner');
264
265		if (!$banner.length) {
266			$banner = $(this).closest('.banner');
267		}
268
269		var bannerHeight = $banner.length ? $banner.outerHeight() : 0;
270		var smoothScrollOffset = 20;
271
272		toggleClassOnClick($menu, $menuTrigger, $(), 'open');
273
274		// getComputedStyle(elm).fill returns rgb(0,0,0) by default. it's a useless property on a non-svg, so if we have activated sticky in preset settings we set it to the color red
275		var isSticky = getComputedStyle($(this)[0]).fill !== 'rgb(0, 0, 0)' ? true : false;
276		
277		if (isSticky) {
278			activateSticky($(this), 'sticky', $banner.length ? Math.max(menuWrapperHeight, bannerHeight - menuWrapperHeight - 10) : $(this).offset().top, undefined, $banner.length);
279		}
280
281		activateSmoothScroll($menuLinks.add($('.scroll a')), smoothScrollOffset);
282		addClassOnVisibleLinkTargets($menuLinks, 'active', 2 / 3);
283	});
284
285};
286
287/**
288 * Toggles class on a target when a trigger is clicked
289 * 
290 * @param {jQuery} The target to apply the CSS class to
291 * @param {jQuery} The Trigger
292 * @param {string} CSS Class to toggle on the target
293 * @param {Boolean} If off canvas menu is used
294 */
295var toggleClassOnClick = function($target, $trigger, $closeTrigger, 
295cssClass) {
296	// Reset in case class "open" was saved accidentally
297	$target.removeClass(cssClass);
298	$trigger.removeClass(cssClass);
299
300	// Click on trigger toggles class "open"
301	$trigger.off('.toggle').on('click.toggle', function() {
302		$(this).toggleClass(cssClass);
303		$target.toggleClass(cssClass);
304	});
305
306	// Close target when link inside is clicked
307	$target.find('a').click(function() {
308		$target.removeClass(cssClass);
309		$trigger.removeClass(cssClass);
310	});
311
312	if (!$closeTrigger) {
313		return;
314	}
315
316	$closeTrigger.on('click', function() {
317		$target.removeClass(cssClass); 
318		$trigger.removeClass(cssClass);
319	});
320};
321
322/**
323 * Smooth scroll to link targets
324 * 
325 * @param {jQuery} The links
326 * @param {jQuery} Offset to subtract from the scroll target position (e.g. for fixed positioned elements like a menu)
327 */
328var activateSmoothScroll = function($scrollLinks, scrollOffset) {
329	if (typeof scrollOffset === 'undefined') {
330		scrollOffset = 0;
331	}
332
333	var determineTarget = function($trigger, hash) {
334		if (hash == '#!next') {
335			return $trigger.parents('.ed-element').last().next();
336		}
337
338		return $(hash);
339	}
340
341	$scrollLinks.click(function(e) {
342		var $target = determineTarget($(this), this.hash);
343		if (!$target.length) return;
344		
345		e.preventDefault();
346		if ($(this.hash).parent().offset().top === 0){
347		    viewport.scrollTo($target, 'top', 500, 0); 
348		}else{
349		    viewport.scrollTo($target, 'top', 500, scrollOffset);
350		}
351	});
352};
353
354/**
355 * Adds a class to an element when not currently visible
356 * 
357 * @param {jQuery} Element
358 * @param {string} CSS class to be applied to the element when it's outside the viewport
359 * @param {string} Can be set to 'top', 'bottom' or 'full'
360 * @param {int|function} Custom offset after which cssClass is applied. If not set, default to $element's position
361 */
362var activateSticky = function($element, cssClass, offset, mode, hasBanner) {
363	var self = this;
364	self.offset = offset;
365	$element.removeClass(cssClass);
366
367	var updateOffset = function() {
368		if ($element.hasClass('sticky') || hasBanner) {
369			self.offset = offset;
370		} else {
371			self.offset = $element.offset().top;
372		}
373	}
374
375	viewport.observe('resize', updateOffset);
376	viewport.observe('animation.end', updateOffset);
377	updateOffset();
378	
379	var isVisible = function(mode) {
380		return (
381			(typeof mode === 'undefined' && (self.offset) > viewport.getScrollTop()) ||
382			((mode === true || mode == 'full') && self.offset > viewport.getScrollTop()) ||
383			(mode == 'top' && self.offset > viewport.getScrollTop()) ||
384			(mode == 'bottom' && (self.offset) > viewport.getScrollTop())
385		);
386	};
387
388	var mwh = $element.outerHeight();
389
390	var addMargin = function() {
391		if (!$element.length || !$element.next().length) {
392			return;
393		}
394
395		$element.next().get(0).style.setProperty("--spacer-height", mwh + 'px');
396
397		if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
398			return;
399		}
400		$element.next().css('margin-top', mwh);
401	}
402	var removeMargin = function() {
403		if (!$element.length || !$element.next().length) {
404			return;
405		}
406		$element.next().get(0).style.setProperty("--spacer-height", '');
407		if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
408			return;
409		}
410		$element.next().css('margin-top', '');
411	}
412
413	viewport.observe('scroll', function() {
414		if (!$element.length) return;
415		if (!isVisible(mode)) {
416			$element.addClass(cssClass);
417			addMargin();
418		} else {
419			$element.removeClass(cssClass);
420			removeMargin();
421		}
422	});
423};
424
425/**
426 * Adds a class to links whose target is currently inside the viewport
427 * 
428 * @param {jQuery} Link(s) to be observed
429 * @param {string} CSS Class to be applied
430 * @param {float} Ratio by which the target should be within the viewport
431 */
432var addClassOnVisibleLinkTargets = function($links, cssClass, sectionViewportRatio) {
433	if (typeof sectionViewportRatio === 'undefined') {
434		sectionViewportRatio = 1 / 2;
435	}
436
437	var menuTargets = [];
438	var activeLink = $links.filter('.active:not(.wv-link-elm)').eq(0);
439
440	var links = $links.filter(function() {
441		var $target = $(this.hash);
442		if (!$target.length) {
443			return false;
444		}
445
446		// Cache offset position to improve performance (update on resize)		
447		var updateOffset = function() {
448			$target.data('offset', $target.offset().top);
449		};
450
451		viewport.observe('resize', updateOffset);
452		viewport.observe('animation.end', updateOffset);
453		updateOffset();
454
455		menuTargets.push($target);
456		return true;
457	});
458
459	// No hash links found, so don't handle it at all
460	if (!links.length) {
461		return;
462	}
463
464	var checkVisibility = function() {
465		$links.removeClass('active');
466
467		// Check section position reversely
468		for (var i = menuTargets.length - 1; i >= 0; i--) {
469			var desiredScrollPosition = menuTargets[i].data('offset') - viewport.getHeight() * (1 - sectionViewportRatio);
470			if (viewport.getScrollTop() >= desiredScrollPosition) {
471				links.eq(i).addClass(cssClass);
472				return;
473			}
474		}
475
476		// Fallback to originally active item
477		activeLink.addClass(cssClass);
478	};
479
480	viewport.observe('scroll', checkVisibility);
481	checkVisibility();
482};
483/* End JS for preset "Menu" */
484
485
486
487/* JS for preset "Back to top button" */
488$(function() {
489	initBackToTop();
490});
491
492var initBackToTop = function() {
493
494	$('body').each(function() {
495		var $backToTop = $('.back-to-top-button-icon', this);
496		clickToTop($backToTop);
497
498	});
499};
500
501var clickToTop = function($trigger) {
502	$trigger.removeClass('show');
503
504	$trigger.click(function(e) {
505		e.preventDefault();
506		viewport.scrollTo(0, 'top', 500, 0);
507	});
508
509	// Show back to top only below the fold
510	viewport.observe('scroll', function() {
511		if (viewport.getScrollTop() > (viewport.getHeight() / 3)) {
512			$trigger.addClass('show');
513		} else {
514			$trigger.removeClass('show');
515		}
516	});
517}
518
519/* End JS for preset "Back to top button" */
520
521/* JS for preset "Header Loki" */
522$(function() {
523	init();
524});
525
526// Make :active pseudo classes work on iOS
527document.addEventListener("touchstart", function() {}, false);
528
529var init = function() {
530	// menu-wrapper-spacer height calc for non-jumpy sticky
531	var menuSpacer = function() {
532		$('.menu-wrapper-spacer').each(function() {
533			var mwh = $('.menu-wrapper', this).outerHeight();
534			$(this).get(0).style.setProperty("--spacer-height", mwh + 'px'); 
535			// dont write inline css in cms because it will get saved
536			if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
537				return;
538			}
539			$(this).css('height', mwh); 
540		});
541	}
542
543	// call initial and then call on every resize
544	menuSpacer();
545
546	$(window).resize(function() {
547		menuSpacer();
548	});
549
550	// scope 
551	$('.header').each(function() {
552
553		var isOnePager = true;
554
555		// Commonly used elements 
556		var $menu = $('.ed-menu', this);
557		var $menuLinks = $('a', $menu); 
558		var $menuTrigger = $('.menu-trigger', this);
559		var $backToTop = $('.back-to-top', this);
560		var $menuWrapper = $('.menu-wrapper', this);
561
562		var headerHeight = $(this).outerHeight();
563		var menuWrapperHeight = $menuWrapper.outerHeight() || 0;
564
565		// if gefion check for nav and add additional classes  
566		var $closeTrigger = $('.nav').length ? $('.menu-backdrop, .logo', this) : $();
567		var $toggleClasses = $('.nav').length ? $('.nav', this).add($('body')) : $menu;
568
569		toggleClassOnClick($toggleClasses, $menuTrigger, $closeTrigger, 'open');
570
571		clickToTop($backToTop);
572		activateSticky($menuWrapper, 'sticky', function(params) {
573		    menuWrapperHeight = $menuWrapper.outerHeight() || 0;
574			params.offset = Math.max(menuWrapperHeight, headerHeight - menuWrapperHeight - 2);
575		});
576
577		// Activate functions that are needed for one-pagers
578		if (isOnePager) {
579			activateSmoothScroll($menuLinks.add($('.scroll a')));
580			addClassOnVisibleLinkTargets($menuLinks, 'active', 2 / 3);
581		}
582	});
583
584};
585
586/**
587 * Toggles class on a target when a trigger is clicked
588 * 
589 * @param {jQuery} The target to apply the CSS class to
590 * @param {jQuery} The Trigger
591 * @param {string} CSS Class to toggle on the target
592 * @param {Boolean} If off canvas menu is used
593 */
594var toggleClassOnClick = function($target, $trigger, $closeTrigger, cssClass) {
595	// Reset in case class "open" was saved accidentally
596	$target.removeClass(cssClass);
597	$trigger.removeClass(cssClass);
598	
599	// Click on trigger toggles class "open"
600	$trigger.off('.toggle').on('click.toggle', function() {
601		$(this).toggleClass(cssClass);
602		$target.toggleClass(cssClass);
603	});
604
605	// Close target when link inside is clicked
606	$target.find('a').click(function() {
607		$target.removeClass(cssClass);
608		$trigger.removeClass(cssClass);
609	});
610	
611	$closeTrigger.on('click', function() { 
612		$target.removeClass(cssClass);
613        $trigger.removeClass(cssClass);
614	})
615};
616
617/**
618 * Scroll to the top of the page when element is clicked
619 * 
620 * @param {jQuery} The element which triggers scroll to top
621 */
622var clickToTop = function($trigger) {
623	$trigger.removeClass('show');
624
625	$trigger.click(function(e) {
626		e.preventDefault();
627		viewport.scrollTo(0, 'top', 500, 0);
628	});
629
630	// Show back to top only below the fold
631	viewport.observe('scroll', function() {
632		if (viewport.getScrollTop() > viewport.getHeight()) {
633			$trigger.addClass('show');
634		} else {
635			$trigger.removeClass('show');
636		}
637	});
638}
639
640/**
641 * Smooth scroll to link targets
642 * 
643 * @param {jQuery} The links
644 * @param {jQuery} Offset to subtract from the scroll target position (e.g. for fixed positioned elements like a menu)
645 */
646var activateSmoothScroll = function($scrollLinks, scrollOffset) {
647	if (typeof scrollOffset === 'undefined') {
648		scrollOffset = 0;
649	}
650
651	var determineTarget = function($trigger, hash) {
652		if (hash == '#!next') {
653			return $trigger.parents('.ed-element').last().next();
654		}
655
656		return $(hash);
657	}
658
659	$scrollLinks.click(function(e) {
660		var $target = determineTarget($(this), this.hash);
661		if (!$target.length) return;
662
663		e.preventDefault();
664		viewport.scrollTo($target, 'top', 500, -scrollOffset);
665	});
666};
667
668/**
669 * Adds a class to an element when not currently visible
670 * 
671 * @param {jQuery} Element
672 * @param {string} CSS class to be applied to the element when it's outside the viewport
673 * @param {string} Can be set to 'top', 'bottom' or 'full'
674 * @param {int|function} Custom offset after which cssClass is applied. If not set, default to $element's position
675 */
676var activateSticky = function($element, cssClass, offset, mode) {
677	var self = this;
678
679	self.offset = 0;
680	self.height = 0;
681
682	$element.removeClass(cssClass);
683
684	var updateOffset = function() {
685		if (typeof offset === 'undefined') {
686			self.offset = $element.offset().top;
687			self.height = $element.outerHeight();
688		} else if (typeof offset === 'function') {
689			offset(self);
690		} else {
691			self.offset = offset;
692			self.height = 0;
693		}
694	}
695	viewport.observe('resize', updateOffset);
696	viewport.observe('animation.end', updateOffset);
697	updateOffset();
698
699	var isVisible = function(mode) {
700		return (
701			(typeof mode === 'undefined' && (self.offset + self.height) > viewport.getScrollTop()) ||
702			((mode === true || mode == 'full') && self.offset > viewport.getScrollTop()) ||
703			(mode == 'top' && self.offset > viewport.getScrollTop()) ||
704			(mode == 'bottom' && (self.offset + self.height) > viewport.getScrollTop())
705		);
706	};
707
708	viewport.observe('scroll', function() {
709	    if (!$element.length) return;
710		if (!isVisible(mode)) {
711			$element.addClass(cssClass);
712		} else {
713			$element.removeClass(cssClass);
714		}
715	});
716};
717
718/**
719 * Adds a class to links whose target is currently inside the viewport
720 * 
721 * @param {jQuery} Link(s) to be observed
722 * @param {string} CSS Class to be applied
723 * @param {float} Ratio by which the target should be within the viewport
724 */
725var addClassOnVisibleLinkTargets = function($links, cssClass, sectionViewportRatio) {
726	if (typeof sectionViewportRatio === 'undefined') {
727		sectionViewportRatio = 1 / 2;
728	}
729
730	var menuTargets = [];
731	var activeLink = $links.filter('.active:not(.wv-link-elm)').eq(0);
732
733	var links = $links.filter(function() {
734		var $target = $(this.hash);
735		if (!$target.length) {
736			return false;
737		}
738
739		// Cache offset position to improve performance (update on resize)		
740		var updateOffset = function() {
741			$target.data('offset', $target.offset().top);
742		};
743
744		viewport.observe('resize', updateOffset);
745		viewport.observe('animation.end', updateOffset);
746		updateOffset();
747
748		menuTargets.push($target);
749		return true;
750	});
751
752	// No hash links found, so don't handle it at all
753	if (!links.length) {
754		return;
755	}
756
757	var checkVisibility = function() {
758		$links.removeClass('active');
759
760		// Check section position reversely
761		for (var i = menuTargets.length - 1; i >= 0; i--) {
762			var desiredScrollPosition = menuTargets[i].data('offset') - viewport.getHeight() * (1 - sectionViewportRatio);
763			if (viewport.getScrollTop() >= desiredScrollPosition) {
764				links.eq(i).addClass(cssClass);
765				return;
766			}
767		}
768
769		// Fallback to originally active item
770		activeLink.addClass(cssClass);
771	};
772
773	viewport.observe('scroll', checkVisibility);
774	checkVisibility();
775};
776/* End JS for preset "Header Loki" */
777
778/* JS for preset "Cookie Consent Bar V3" */
779$(function() {
780	$('#cookieClose').click(function(e) {
781		e.preventDefault();
782		createCookie('cookieConsentBar', "rejected", 0.5);
783		$('.cookie-consent-bar').hide();
784	});
785
786	$('#acceptCookie').click(function(e) {
787		e.preventDefault();
788		createCookie('cookieConsentBar', "accepted", 0.5);
789		$('.cookie-consent-bar').hide();
790		ThirdPartyScripts.unblock();
791	});
792
793	var preview = false;
794	
795	var listener = function() {
796		if (!preview && document.body.classList.contains('preview')) {
797			console.log("entering preview");
798			preview = true;
799		} else if (preview && !document.body.classList.contains('preview')) {
800			console.log("leaving preview");
801			$('.cookie-consent-bar').show();
802			preview = false;
803		}
804		requestAnimationFrame(listener);
805	};
806	
807	requestAnimationFrame(listener);
808
809	if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
810		return;
811	}
812
813	
814	// Cookie bar
815	if (readCookie('cookieConsentBar') == "accepted") {
816		$('.cookie-consent-bar').hide();
817		window.setTimeout(function() {
818			ThirdPartyScripts.unblock();
819		}, 100);
820	} else if (readCookie('cookieConsentBar') == "rejected") {
821		$('.cookie-consent-bar').hide();
822	} else {
823		$('.cookie-consent-bar').show();
824	}
825	
826	function readCookie(name) {
827		var nameEQ = name + "=";
828		var ca = document.cookie.split(';');
829		for (var i = 0; i < ca.length; i++) {
830			var c = ca[i];
831			while (c.charAt(0) == ' ') c = c.substring(1, c.length);
832			if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
833		}
834		return null;
835	}   
836    
837	function createCookie(name, value, days) {
838		if (days) {
839			var date = new Date();
840			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
841			var expires = "; expires=" + date.toGMTString();
842		} else expires = "";
843		document.cookie = name + "=" + value + expires + "; path=/";
844	}
845	
846    // Fix for hiding Content till page is loaded
847	$(document).ready(function() {
848		$('.hide-cookie-content').removeClass("hide-cookie-content");
849	});
850});   
851/* End JS for preset "Cookie Consent Bar V3" */

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.