PageSourceSearch

https://www.nwb.de/js/functions.js

js nwb.de collected 2026-10-02 05:10:00 UTC 30,703 bytes, 1,077 lines download raw bytes

1( function (global, factory) {
2
3	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4	typeof define === 'function' && define.amd ? define(factory) :
5	( global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SEMICOLON = factory() );
6
7} ( this, ( () => {
8
9	// USE STRICT
10	"use strict";
11
12	const options = {
13		pageTransition: false,
14		cursor: false,
15		headerSticky: true,
16		headerMobileSticky: false,
17		menuBreakpoint: 992,
18		pageMenuBreakpoint: 992,
19		gmapAPI: '',
20		scrollOffset: 60,
21		scrollExternalLinks: true,
22		jsFolder: '/js/',
23		cssFolder: '/css/',
24		jsLoadType: false,
25	};
26
27	const vars = {
28		baseEl: document,
29		elRoot: document.documentElement,
30		elHead: document.head,
31		elBody: document.body,
32		hash: window.location.hash,
33		topScrollOffset: 0,
34		elWrapper: document.getElementById('wrapper'),
35		elHeader: document.getElementById('header'),
36		headerClasses: '',
37		elHeaderWrap: document.getElementById('header-wrap'),
38		headerWrapClasses: '',
39		headerHeight: 0,
40		headerOffset: 0,
41		headerWrapHeight: 0,
42		headerWrapOffset: 0,
43		elPrimaryMenus: document.querySelectorAll('.primary-menu'),
44		elPrimaryMenuTriggers: document.querySelectorAll('.primary-menu-trigger'),
45		elPageMenu: document.getElementById('page-menu'),
46		pageMenuOffset: 0,
47		elSlider: document.getElementById('slider'),
48		elFooter: document.getElementById('footer'),
49		portfolioAjax: {},
50		sliderParallax: {
51			el: document.querySelector('.slider-parallax'),
52			caption: document.querySelector('.slider-parallax .slider-caption'),
53			inner: document.querySelector('.slider-inner'),
54			offset: 0,
55		},
56		get menuBreakpoint() {
57			return this.elBody.getAttribute('data-menu-breakpoint') || options.menuBreakpoint;
58		},
59		get pageMenuBreakpoint() {
60			return this.elBody.getAttribute('data-pagemenu-breakpoint') || options.pageMenuBreakpoint;
61		},
62		get customCursor() {
63			let value = this.elBody.getAttribute('data-custom-cursor') || options.cursor;
64			return value == 'true' || value === true ? true : false;
65		},
66		get pageTransition() {
67			let value = this.elBody.classList.contains('page-transition') || options.pageTransition;
68			return value == 'true' || value === true ? true : false;
69		},
70		scrollPos: {
71			x: 0,
72			y: 0,
73		},
74		$jq: typeof jQuery !== "undefined" ? jQuery.noConflict() : '',
75		resizers: {},
76		recalls: {},
77		debounced: false,
78		events: {},
79		modules: {},
80		fn: {},
81		required: {
82			jQuery: {
83				plugin: 'jquery',
84				fn: () => typeof jQuery !== 'undefined',
85				file: options.jsFolder+'jquery.js',
86				id: 'canvas-jquery',
87			}
88		},
89		fnInit: () => {
90			DocumentOnReady.init();
91			DocumentOnLoad.init();
92			DocumentOnResize.init();
93		}
94	};
95
96	const Core = function() {
97		return {
98			getOptions: options,
99			getVars: vars,
100
101			run: obj => {
102				Object.values(obj).map(fn => typeof fn === 'function' && fn.call() );
103			},
104
105			runBase: () => {
106				Core.run( Base );
107			},
108
109			runModules: () => {
110				Core.run( Modules );
111			},
112
113			runContainerModules: parent => {
114				if( typeof parent === 'undefined' ) {
115					return false;
116				}
117
118				Core.getVars.baseEl = parent;
119				Core.runModules();
120				Core.getVars.baseEl = document;
121			},
122
123			breakpoints: () => {
124				let viewWidth = Core.viewport().width;
125
126				const breakpoint = {
127					xxl: {
128						enter: 1400,
129						exit: 99999
130					},
131					xl: {
132						enter: 1200,
133						exit: 1399
134					},
135					lg: {
136						enter: 992,
137						exit: 1199.98
138					},
139					md: {
140						enter: 768,
141						exit: 991.98
142					},
143					sm: {
144						enter: 576,
145						exit: 767.98
146					},
147					xs: {
148						enter: 0,
149						exit: 575.98
150					}
151				};
152
153				let previous = '';
154
155				Object.keys( breakpoint ).forEach( key => {
156					if ( (viewWidth > breakpoint[key].enter) && (viewWidth <= breakpoint[key].exit) ) {
157						vars.elBody.classList.add( 'device-'+key );
158					} else {
159						vars.elBody.classList.remove( 'device-'+key );
160						if( previous != '' ) {
161							vars.elBody.classList.remove( 'device-down-'+previous );
162						}
163					}
164
165					if ( viewWidth <= breakpoint[key].exit ) {
166						if( previous != '' ) {
167							vars.elBody.classList.add( 'device-down-'+previous );
168						}
169					}
170
171					previous = key;
172
173					if ( viewWidth > breakpoint[key].enter ) {
174						vars.elBody.classList.add( 'device-up-'+key );
175						return;
176					} else {
177						vars.elBody.classList.remove( 'device-up-'+key );
178					}
179				});
180			},
181
182			colorScheme: () => {
183				if( vars.elBody.classList.contains('adaptive-color-scheme') ) {
184					window.matchMedia('(prefers-color-scheme: dark)').matches ? vars.elBody.classList.add( 'dark' ) : vars.elBody.classList.remove('dark');
185				}
186
187				const bodyColorScheme = localStorage.getItem('cnvsBodyColorScheme');
188
189				if( bodyColorScheme && bodyColorScheme != '' ) {
190					bodyColorScheme.split(" ").includes('dark') ? vars.elBody.classList.add( 'dark' ) : vars.elBody.classList.remove( 'dark' );
191				}
192			},
193
194			throttle: (callback, delay) => {
195				let throttle = false;
196				if (throttle) {
197					return;
198				}
199
200				callback();
201				throttle = true;
202
203				setTimeout(function () {
204					throttle = false;
205				}, delay);
206			},
207
208			debounce: (callback, delay) => {
209				clearTimeout(vars.debounced);
210				vars.debounced = setTimeout(callback, delay);
211			},
212
213			debouncedResize: (func, delay) => {
214				let timeoutId;
215				return function () {
216					const context = this;
217					const args = arguments;
218					clearTimeout(timeoutId);
219					timeoutId = setTimeout(() => {
220						func.apply(context, args);
221					}, delay);
222				};
223			},
224
225			addEvent: ( el, event, args = {} ) => {
226				if( typeof el === "undefined" || typeof event === "undefined" ) {
227					return;
228				}
229
230				var createEvent = new CustomEvent( event, {
231					detail: args
232				});
233
234				el.dispatchEvent( createEvent );
235				vars.events[event] = true;
236			},
237
238			scrollEnd: (callback, refresh = 199) => {
239				if (!callback || typeof callback !== 'function') return;
240
241				window.addEventListener( 'scroll', () => {
242					Core.debounce( callback, refresh );
243				}, { passive: true });
244			},
245
246			viewport: () => {
247				const viewport = {
248					width: window.innerWidth || vars.elRoot.clientWidth,
249					height: window.innerHeight || vars.elRoot.clientHeight
250				};
251
252				return viewport;
253			},
254
255			getSelector: ( selector, jquery = true, customjs = true ) => {
256				if( jquery ) {
257					if( Core.getVars.baseEl !== document ) {
258						selector = jQuery(Core.getVars.baseEl).find(selector);
259					} else {
260						selector = jQuery(selector);
261					}
262
263					if( customjs ) {
264						if( typeof customjs == 'string' ) {
265							selector = selector.filter(':not('+ customjs +')');
266						} else {
267							selector = selector.filter(':not(.customjs)');
268						}
269					}
270				} else {
271					if( customjs ) {
272						if( typeof customjs == 'string' ) {
273							selector = Core.getVars.baseEl.querySelectorAll(selector+':not('+customjs+')');
274						} else {
275							selector = Core.getVars.baseEl.querySelectorAll(selector+':not(.customjs)');
276						}
277					} else {
278						selector = Core.getVars.baseEl.querySelectorAll(selector);
279					}
280				}
281
282				return selector;
283			},
284
285			onResize: (callback, refresh = 333) => {
286				if (!callback || typeof callback !== 'function') return;
287
288				window.onresize = () => {
289					Core.debounce( callback, refresh );
290				};
291			},
292
293			imagesLoaded: el => {
294				let imgs = el.getElementsByTagName('img') || document.images,
295					len = imgs.length,
296					counter = 0;
297
298				if( len < 1 ) {
299					Core.addEvent( el, 'CanvasImagesLoaded' );
300				}
301
302				const incrementCounter = async function() {
303					counter++;
304					if ( counter === len ) {
305						Core.addEvent( el, 'CanvasImagesLoaded' );
306					}
307				};
308
309				[].forEach.call( imgs, function( img ) {
310					if( img.complete ) {
311						incrementCounter();
312					} else {
313						img.addEventListener( 'load', incrementCounter, false );
314					}
315				});
316			},
317
318			contains: (classes, selector) => {
319				let classArray = classes.split(" ");
320				let hasClass = false;
321
322				classArray.forEach( classTxt => {
323					if( vars.elBody.classList.contains(classTxt) ) {
324						hasClass = true;
325					}
326				});
327
328				return hasClass;
329			},
330
331			has: (nodeList, selector) => {
332				return [...nodeList]?.filter(e => e.querySelector(selector));
333			},
334
335			filtered: (nodeList, selector) => {
336				return [...nodeList]?.filter(e => e.matches(selector));
337			},
338
339			parents: (elem, selector) => {
340				if (!Element.prototype.matches) {
341					Element.prototype.matches =
342						Element.prototype.matchesSelector ||
343						Element.prototype.mozMatchesSelector ||
344						Element.prototype.msMatchesSelector ||
345						Element.prototype.oMatchesSelector ||
346						Element.prototype.webkitMatchesSelector ||
347						function(s) {
348							let matches = (this.document || this.ownerDocument).querySelectorAll(s),
349								i = matches.length;
350							while (--i >= 0 && matches.item(i) !== this) {}
351							return i > -1;
352						};
353				}
354
355				let parents = [];
356
357				for ( ; elem && elem !== document; elem = elem.parentNode ) {
358					if (selector) {
359						if (elem.matches(selector)) {
360							parents.push(elem);
361						}
362						continue;
363					}
364					parents.push(elem);
365				}
366
367				return parents;
368			},
369
370			siblings: (elem, nodes = false) => {
371				if( nodes ) {
372					return [...nodes].filter( sibling => {
373						return sibling !== elem;
374					});
375				} else {
376					return [...elem.parentNode.children].filter( sibling => {
377						return sibling !== elem;
378					});
379				}
380			},
381
382			getNext: (elem, selector) => {
383				let nextElem = elem.nextElementSibling;
384
385				if( !selector ) {
386					return nextElem;
387				}
388
389				if( nextElem && nextElem.matches(selector) ) {
390					return nextElem;
391				}
392
393				return null;
394			},
395
396			offset: el => {
397				let rect = el.getBoundingClientRect(),
398					scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
399					scrollTop = window.pageYOffset || document.documentElement.scrollTop;
400
401				return { top: rect.top + scrollTop, left: rect.left + scrollLeft }
402			},
403
404			isHidden: el => {
405				return (el.offsetParent === null);
406			},
407
408			classesFn: (func, classes, selector) => {
409				let classArray = classes.split(" ");
410				classArray.forEach( classTxt => {
411					if( func == 'add' ) {
412						selector.classList.add(classTxt);
413					} else if( func == 'toggle' ) {
414						selector.classList.toggle(classTxt);
415					} else {
416						selector.classList.remove(classTxt);
417					}
418				});
419			},
420
421			loadCSS: params => {
422				const file = params.file;
423				const htmlID = params.id || false;
424				const cssFolder = params.cssFolder || false;
425
426				if( !file ) {
427					return false;
428				}
429
430				if( htmlID && document.getElementById(htmlID) ) {
431					return false;
432				}
433
434				const htmlStyle = document.createElement('link');
435
436				htmlStyle.id = htmlID;
437				htmlStyle.href = cssFolder ? options.cssFolder+file : file;
438				htmlStyle.rel = 'stylesheet';
439				htmlStyle.type = 'text/css';
440
441				vars.elHead.appendChild(htmlStyle);
442				return true;
443			},
444
445			loadJS: params => {
446				const file = params.file;
447				const htmlID = params.id || false;
448				const type = params.type || false;
449				const callback = params.callback;
450				const async = params.async || true;
451				const defer = params.defer || true;
452				const jsFolder = params.jsFolder || false;
453
454				if( ! file ) {
455					return false;
456				}
457
458				if( htmlID && document.getElementById(htmlID) ) {
459					return false;
460				}
461
462				const htmlScript = document.createElement('script');
463
464				if ( typeof callback !== 'undefined' ) {
465					if( typeof callback != 'function' ) {
466						throw new Error('Not a valid callback!');
467					} else {
468						htmlScript.onload = callback;
469					}
470				}
471
472				htmlScript.id = htmlID;
473				htmlScript.src = jsFolder ? options.jsFolder+file : file;
474				if( type ) {
475					htmlScript.type = type;
476				}
477				htmlScript.async = async ? true : false;
478				htmlScript.defer = defer ? true : false;
479
480				vars.elBody.appendChild(htmlScript);
481				return true;
482			},
483
484			isFuncTrue: async fn => {
485				if( 'function' !== typeof fn ) {
486					return false;
487				}
488
489				var counter = 0;
490
491				return new Promise((resolve, reject) => {
492					if( fn() ) {
493						resolve(true);
494					} else {
495						var int = setInterval( () => {
496							if( fn() ) {
497								clearInterval( int );
498								resolve(true);
499							} else {
500								if( counter > 30 ) {
501									clearInterval( int );
502									reject(true);
503								}
504							}
505							counter++;
506						}, 333);
507					}
508				}).catch( error => console.log('Function does not exist: ' + fn) );
509			},
510
511			initFunction: params => {
512				vars.elBody.classList.add( params.class );
513				Core.addEvent( window, params.event );
514				vars.events[params.event] = true;
515			},
516
517			runModule: params => {
518				let type = (window.location.protocol == 'http:' || window.location.protocol == 'https:') ? 'module' : 'fn';
519
520				if( options.jsLoadType && (options.jsLoadType == 'fn' || options.jsLoadType == 'module') ) {
521					type = options.jsLoadType;
522				}
523
524				let moduleFile = (type == 'fn' ? options.jsFolder : './')+ type +'.' + params.plugin + '.js';
525
526				if( params.file ) {
527					moduleFile = params.file;
528				}
529
530				if( type == 'module' ) {
531					import( moduleFile )
532					.then( module => module.default(params.selector))
533					.catch( error => {
534						console.log( params.plugin + ': Module could not be loaded' );
535						console.log( error );
536					});
537				} else {
538					let pluginCheck = () => typeof Core.getVars.fn[params.plugin] !== 'undefined';
539					if( !pluginCheck() ) {
540						Core.loadJS({ file: moduleFile, id: 'canvas-'+params.plugin+'-fn' });
541						Core.isFuncTrue(pluginCheck).then( cond => {
542							if( !cond ) {
543								return false;
544							}
545							Core.getVars.fn[params.plugin](params.selector);
546						});
547					} else {
548						Core.getVars.fn[params.plugin](params.selector);
549					}
550				}
551
552				return true;
553			},
554
555			initModule: params => {
556				if( 'dependent' != params.selector ) {
557					if( typeof params.selector === 'object' ) {
558						if( params.selector instanceof jQuery ){
559							params.selector = params.selector[0];
560						}
561
562						var _el = params.selector;
563					} else {
564						var _el = Core.getVars.baseEl.querySelectorAll( params.selector );
565					}
566
567					if( _el.length < 1 ) {
568						return false;
569					}
570				}
571
572				var required = true;
573				var dependentActive = true;
574
575				if( params.required && Array.isArray( params.required ) ) {
576					var requireAll = {};
577					params.required.forEach( req => requireAll[req.plugin] = !req.fn() ? false : true );
578
579					params.required.forEach( req => {
580						if( !req.fn() ) {
581							required = false;
582							const getjQuery = async function() {
583								Core.loadJS({ file: req.file, id: req.id });
584
585								var funcAvailable = new Promise( resolve => {
586									var int = setInterval( () => {
587										if( req.fn() ) {
588											requireAll[req.plugin] = true;
589											const allTrue = Object.values(requireAll).every( value => value === true );
590											if( allTrue ) {
591												clearInterval(int);
592												resolve(true);
593											}
594										}
595									}, 333);
596								});
597
598								required = await funcAvailable;
599								Core.runModule( params );
600							}();
601						}
602					});
603				}
604
605				if( typeof params.dependency !== 'undefined' && typeof params.dependency === 'function' ) {
606					dependentActive = false;
607					const runDependent = async function() {
608						let depAvailable = new Promise( resolve => {
609							if( params.dependency.call( params, 'dependent' ) == true ) {
610								resolve(true);
611							}
612						});
613						return await depAvailable;
614					};
615					dependentActive = runDependent();
616				}
617
618				if( required && dependentActive ) {
619					Core.runModule( params );
620				}
621
622				return true;
623			},
624
625			topScrollOffset: () =>  {
626				let topOffsetScroll = 0;
627				let pageMenuOffset = vars.elPageMenu?.querySelector('#page-menu-wrap')?.offsetHeight || 0;
628
629				if( vars.elBody.classList.contains('is-expanded-menu') ) {
630					if( vars.elHeader?.classList.contains('sticky-header') ) {
631						topOffsetScroll = vars.elHeaderWrap.offsetHeight;
632					}
633
634					if( vars.elPageMenu?.classList.contains('dots-menu') ) {
635						pageMenuOffset = 0;
636					}
637				}
638
639				topOffsetScroll = topOffsetScroll + pageMenuOffset;
640
641				Core.getVars.topScrollOffset = topOffsetScroll + options.scrollOffset;
642			},
643		};
644	}();
645
646	const Base = function() {
647		return {
648			init: () => {
649				SEMICOLON.Mobile.any() && vars.elBody.classList.add('device-touch');
650			},
651
652			menuBreakpoint: () => {
653				if( Core.getVars.menuBreakpoint <= Core.viewport().width ) {
654					vars.elBody.classList.add( 'is-expanded-menu' );
655				} else {
656					vars.elBody.classList.remove( 'is-expanded-menu' );
657				}
658
659				if( vars.elPageMenu ) {
660					if( typeof Core.getVars.pageMenuBreakpoint === 'undefined' ) {
661						Core.getVars.pageMenuBreakpoint = Core.getVars.menuBreakpoint;
662					}
663
664					if( Core.getVars.pageMenuBreakpoint <= Core.viewport().width ) {
665						vars.elBody.classList.add( 'is-expanded-pagemenu' );
666					} else {
667						vars.elBody.classList.remove( 'is-expanded-pagemenu' );
668					}
669				}
670			},
671
672			goToTop: () => {
673				return Core.initModule({ selector: '#gotoTop', plugin: 'gototop' });
674			},
675
676			stickFooterOnSmall: () => {
677				return Core.initModule({ selector: '#footer', plugin: 'stickfooteronsmall' });
678			},
679
680			logo: () => {
681				return Core.initModule({ selector: '#logo', plugin: 'logo' });
682			},
683
684			setHeaderClasses: () => {
685				Core.getVars.headerClasses = vars.elHeader?.className || '';
686				Core.getVars.headerWrapClasses = vars.elHeaderWrap?.className || '';
687			},
688
689			headers: () => {
690				return Core.initModule({ selector: '#header', plugin: 'headers' });
691			},
692
693			menus: () => {
694				return Core.initModule({ selector: '#header', plugin: 'menus' });
695			},
696
697			pageMenu: () => {
698				return Core.initModule({ selector: '#page-menu', plugin: 'pagemenu' });
699			},
700
701			sliderDimensions: () => {
702				return Core.initModule({ selector: '.slider-element', plugin: 'sliderdimensions' });
703			},
704
705			sliderMenuClass: () => {
706				return Core.initModule({ selector: '.transparent-header + .swiper_wrapper,.swiper_wrapper + .transparent-header,.transparent-header + .revslider-wrap,.revslider-wrap + .transparent-header', plugin: 'slidermenuclass' });
707			},
708
709			topSearch: () => {
710				return Core.initModule({ selector: '#top-search-trigger', plugin: 'search' });
711			},
712
713			topCart: () => {
714				return Core.initModule({ selector: '#top-cart', plugin: 'topcart' });
715			},
716
717			sidePanel: () => {
718				return Core.initModule({ selector: '#side-panel', plugin: 'sidepanel' });
719			},
720
721			adaptiveColorScheme: () => {
722				return Core.initModule({ selector: '.adaptive-color-scheme', plugin: 'adaptivecolorscheme' });
723			},
724
725			portfolioAjax: () => {
726				return Core.initModule({ selector: '.portfolio-ajax', plugin: 'ajaxportfolio' });
727			},
728
729			cursor: () => {
730				if( vars.customCursor ) {
731					return Core.initModule({ selector: 'body', plugin: 'cursor' });
732				}
733			},
734
735			setBSTheme: () => {
736				if( vars.elBody.classList.contains('dark') ) {
737					document.querySelector('html').setAttribute('data-bs-theme', 'dark');
738				} else {
739					document.querySelector('html').removeAttribute('data-bs-theme');
740					document.querySelectorAll('.dark')?.forEach(el => el.setAttribute('data-bs-theme', 'dark'));
741				}
742
743				vars.elBody.querySelectorAll('.not-dark')?.forEach(el => el.setAttribute('data-bs-theme', 'light'));
744			}
745		}
746	}();
747
748	const Modules = function() {
749		return {
750			easing: () => {
751				return Core.initModule({ selector: '[data-easing]', plugin: 'easing', required: [ vars.required.jQuery ] });
752			},
753
754			bootstrap: () => {
755				let notExec = true;
756				document.querySelectorAll('*').forEach( el => notExec && el.getAttributeNames().some( text => {
757					if( text.includes('data-bs') ) {
758						notExec = false;
759						return Core.initModule({ selector: 'body', plugin: 'bootstrap' });
760					}
761				}));
762			},
763
764			resizeVideos: element => {
765				return Core.initModule({ selector: element ? element : 'iframe[src*="youtube"],iframe[src*="vimeo"],iframe[src*="dailymotion"],iframe[src*="maps.google.com"],iframe[src*="google.com/maps"]', plugin: 'fitvids', required: [ vars.required.jQuery ] });
766			},
767
768			pageTransition: () => {
769				if( vars.pageTransition ) {
770					return Core.initModule({ selector: 'body', plugin: 'pagetransition' });
771				}
772			},
773
774			lazyLoad: element => {
775				return Core.initModule({ selector: element ? element : '.lazy:not(.lazy-loaded)', plugin: 'lazyload' });
776			},
777
778			dataClasses: () => {
779				return Core.initModule({ selector: '[data-class]', plugin: 'dataclasses' });
780			},
781
782			dataHeights: () => {
783				return Core.initModule({ selector: '[data-height-xxl],[data-height-xl],[data-height-lg],[data-height-md],[data-height-sm],[data-height-xs]', plugin: 'dataheights' });
784			},
785
786			lightbox: element => {
787				return Core.initModule({ selector: element ? element : '[data-lightbox]', plugin: 'lightbox', required: [ vars.required.jQuery ] });
788			},
789
790			modal: element => {
791				return Core.initModule({ selector: element ? element : '.modal-on-load', plugin: 'modal', required: [ vars.required.jQuery ] });
792			},
793
794			parallax: element => {
795				return Core.initModule({ selector: element ? element : '.parallax .parallax-bg,.parallax .parallax-element', plugin: 'parallax' });
796			},
797
798			animations: element => {
799				return Core.initModule({ selector: element ? element : '[data-animate]', plugin: 'animations' });
800			},
801
802			hoverAnimations: element => {
803				return Core.initModule({ selector: element ? element : '[data-hover-animate]', plugin: 'hoveranimation' });
804			},
805
806			gridInit: element => {
807				return Core.initModule({ selector: element ? element : '.grid-container', plugin: 'isotope', required: [ vars.required.jQuery ] });
808			},
809
810			filterInit: element => {
811				return Core.initModule({ selector: element ? element : '.grid-filter,.custom-filter', plugin: 'gridfilter', required: [ vars.required.jQuery ] });
812			},
813
814			canvasSlider: element => {
815				return Core.initModule({ selector: element ? element : '.swiper_wrapper', plugin: 'swiper' });
816			},
817
818			sliderParallax: () => {
819				return Core.initModule({ selector: '.slider-parallax', plugin: 'sliderparallax' });
820			},
821
822			flexSlider: element => {
823				return Core.initModule({ selector: element ? element : '.fslider', plugin: 'flexslider', required: [ vars.required.jQuery ] });
824			},
825
826			html5Video: element => {
827				return Core.initModule({ selector: element ? element : '.video-wrap', plugin: 'html5video' });
828			},
829
830			youtubeBgVideo: element => {
831				return Core.initModule({ selector: element ? element : '.yt-bg-player', plugin: 'youtube', required: [ vars.required.jQuery ] });
832			},
833
834			toggle: element => {
835				return Core.initModule({ selector: element ? element : '.toggle', plugin: 'toggles' });
836			},
837
838			accordion: element => {
839				return Core.initModule({ selector: element ? element : '.accordion', plugin: 'accordions', required: [ vars.required.jQuery ] });
840			},
841
842			counter: element => {
843				return Core.initModule({ selector: element ? element : '.counter', plugin: 'counter', required: [ vars.required.jQuery ] });
844			},
845
846			countdown: element => {
847				return Core.initModule({ selector: element ? element : '.countdown', plugin: 'countdown', required: [ vars.required.jQuery ] });
848			},
849
850			gmap: element => {
851				return Core.initModule({ selector: element ? element : '.gmap', plugin: 'gmap', required: [ vars.required.jQuery ] });
852			},
853
854			roundedSkill: element => {
855				return Core.initModule({ selector: element ? element : '.rounded-skill', plugin: 'piechart', required: [ vars.required.jQuery ] });
856			},
857
858			progress: element => {
859				return Core.initModule({ selector: element ? element : '.skill-progress', plugin: 'progress' });
860			},
861
862			twitterFeed: element => {
863				return Core.initModule({ selector: element ? element : '.twitter-feed', plugin: 'twitter', required: [ vars.required.jQuery ] });
864			},
865
866			flickrFeed: element => {
867				return Core.initModule({ selector: element ? element : '.flickr-feed', plugin: 'flickrfeed', required: [ vars.required.jQuery ] });
868			},
869
870			instagram: element => {
871				return Core.initModule({ selector: element ? element : '.instagram-photos', plugin: 'instagram' });
872			},
873
874			// Dribbble Pending
875
876			navTree: element => {
877				return Core.initModule({ selector: element ? element : '.nav-tree', plugin: 'navtree', required: [ vars.required.jQuery ] });
878			},
879
880			carousel: element => {
881				return Core.initModule({ selector: element ? element : '.carousel-widget', plugin: 'carousel', required: [ vars.required.jQuery ] });
882			},
883
884			masonryThumbs: element => {
885				return Core.initModule({ selector: element ? element : '.masonry-thumbs', plugin: 'masonrythumbs', required: [ vars.required.jQuery ] });
886			},
887
888			notifications: element => {
889				return Core.initModule({ selector: element ? element : false, plugin: 'notify', required: [ vars.required.jQuery ] });
890			},
891
892			textRotator: element => {
893				return Core.initModule({ selector: element ? element : '.text-rotater', plugin: 'textrotator', required: [ vars.required.jQuery ] });
894			},
895
896			onePage: element => {
897				return Core.initModule({ selector: element ? element : '[data-scrollto],.one-page-menu', plugin: 'onepage' });
898			},
899
900			ajaxForm: element => {
901				return Core.initModule({ selector: element ? element : '.form-widget', plugin: 'ajaxform', required: [ vars.required.jQuery ] });
902			},
903
904			subscribe: element => {
905				return Core.initModule({ selector: element ? element : '.subscribe-widget', plugin: 'subscribe', required: [ vars.required.jQuery ] });
906			},
907
908			conditional: element => {
909				return Core.initModule({ selector: element ? element : '.form-group[data-condition],.form-group[data-conditions]', plugin: 'conditional' });
910			},
911
912			shapeDivider: element => {
913				return Core.initModule({ selector: element ? element : '.shape-divider', plugin: 'shapedivider' });
914			},
915
916			stickySidebar: element => {
917				return Core.initModule({ selector: element ? element : '.sticky-sidebar-wrap', plugin: 'stickysidebar', required: [ vars.required.jQuery ] });
918			},
919
920			cookies: element => {
921				return Core.initModule({ selector: element ? element : '.gdpr-settings,[data-cookies]', plugin: 'cookie' });
922			},
923
924			quantity: element => {
925				return Core.initModule({ selector: element ? element : '.quantity', plugin: 'quantity' });
926			},
927
928			readmore: element => {
929				return Core.initModule({ selector: element ? element : '[data-readmore]', plugin: 'readmore' });
930			},
931
932			pricingSwitcher: element => {
933				return Core.initModule({ selector: element ? element : '.pts-switcher', plugin: 'pricingswitcher' });
934			},
935
936			ajaxButton: element => {
937				return Core.initModule({ selector: element ? element : '[data-ajax-loader]', plugin: 'ajaxbutton' });
938			},
939
940			videoFacade: element => {
941				return Core.initModule({ selector: element ? element : '.video-facade', plugin: 'videofacade' });
942			},
943
944			schemeToggler: element => {
945				return Core.initModule({ selector: element ? element : '.body-scheme-toggle', plugin: 'schemetoggler' });
946			},
947
948			clipboardCopy: element => {
949				return Core.initModule({ selector: element ? element : '.clipboard-copy', plugin: 'clipboard' });
950			},
951
952			codeHighlight: element => {
953				return Core.initModule({ selector: element ? element : '.code-highlight', plugin: 'codehighlight' });
954			},
955
956			viewportDetect: element => {
957				return Core.initModule({ selector: element ? element : '.viewport-detect', plugin: 'viewportdetect' });
958			},
959
960			bsComponents: element => {
961				return Core.initModule({ selector: element ? element : '[data-bs-toggle="tooltip"],[data-bs-toggle="popover"],[data-bs-toggle="tab"],[data-bs-toggle="pill"],.style-msg', plugin: 'bscomponents' });
962			}
963		};
964	}();
965
966	const Mobile = function() {
967		return {
968			Android: () =>  {
969				return navigator.userAgent.match(/Android/i);
970			},
971			BlackBerry: () =>  {
972				return navigator.userAgent.match(/BlackBerry/i);
973			},
974			iOS: () =>  {
975				return navigator.userAgent.match(/iPhone|iPad|iPod/i);
976			},
977			Opera: () =>  {
978				return navigator.userAgent.match(/Opera Mini/i);
979			},
980			Windows: () =>  {
981				return navigator.userAgent.match(/IEMobile/i);
982			},
983			any: () =>  {
984				return (Mobile.Android() || Mobile.BlackBerry() || Mobile.iOS() || Mobile.Opera() || Mobile.Windows());
985			}
986		}
987	}();
988
989	// Add your Custom JS Codes here
990	const Custom = function() {
991		return {
992			onReady: () => {
993				// Add JS Codes here to Run on Document Ready
994			},
995
996			onLoad: () => {
997				// Add JS Codes here to Run on Window Load
998			},
999
1000			onResize: () => {
1001				// Add JS Codes here to Run on Window Resize
1002			}
1003		}
1004	}();
1005
1006	const DocumentOnResize = function() {
1007		return {
1008			init: () => {
1009				Core.viewport();
1010				Core.breakpoints();
1011				Base.menuBreakpoint();
1012
1013				Core.run( vars.resizers );
1014
1015				Custom.onResize();
1016
1017				Core.addEvent( window, 'cnvsResize' );
1018			}
1019		}
1020	}();
1021
1022	const DocumentOnReady = function() {
1023		return {
1024			init: () => {
1025				Core.breakpoints();
1026				Core.colorScheme();
1027				Core.runBase();
1028				Core.runModules();
1029				Core.topScrollOffset();
1030
1031				DocumentOnReady.windowscroll();
1032
1033				Custom.onReady();
1034			},
1035
1036			windowscroll: () => {
1037				Core.scrollEnd( () => {
1038					Base.pageMenu();
1039				});
1040			}
1041		}
1042	}();
1043
1044	const DocumentOnLoad = function() {
1045		return {
1046			init: () => {
1047				Custom.onLoad();
1048			}
1049		};
1050	}();
1051
1052	document.addEventListener( 'DOMContentLoaded', () => {
1053		DocumentOnReady.init();
1054	});
1055
1056	window.onload = () => {
1057		DocumentOnLoad.init();
1058	};
1059
1060	const resizeFunctions = Core.debouncedResize(() => {
1061		DocumentOnResize.init();
1062	}, 250);
1063
1064	window.addEventListener('resize', () => {
1065		resizeFunctions();
1066	});
1067
1068	const canvas_umd = {
1069		Core,
1070		Base,
1071		Modules,
1072		Mobile,
1073		Custom,
1074	};
1075	
1076	return canvas_umd;
1077})));

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.