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.