1/*! jRespond.js v 0.10 | Author: Jeremy Fields [[email protected]], 2013 | License: MIT */ 2!function(a,b,c){"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=c:(a[b]=c,"function"==typeof define&&define.amd&&define(b,[],function(){return c}))}(this,"jRespond",function(a,b,c){"use strict";return function(a){var b=[],d=[],e=a,f="",g="",i=0,j=100,k=500,l=k,m=function(){var a=0;return a="number"!=typeof window.innerWidth?0!==document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth:window.innerWidth},n=function(a){if(a.length===c)o(a);else for(var b=0;b<a.length;b++)o(a[b])},o=function(a){var e=a.breakpoint,h=a.enter||c;b.push(a),d.push(!1),r(e)&&(h!==c&&h.call(null,{entering:f,exiting:g}),d[b.length-1]=!0)},p=function(){for(var a=[],e=[],h=0;h<b.length;h++){var i=b[h].breakpoint,j=b[h].enter||c,k=b[h].exit||c;"*"===i?(j!==c&&a.push(j),k!==c&&e.push(k)):r(i)?(j===c||d[h]||a.push(j),d[h]=!0):(k!==c&&d[h]&&e.push(k),d[h]=!1)}for(var l={entering:f,exiting:g},m=0;m<e.length;m++)e[m].call(null,l);for(var n=0;n<a.length;n++)a[n].call(null,l)},q=function(a){for(var b=!1,c=0;c<e.length;c++)if(a>=e[c].enter&&a<=e[c].exit){b=!0;break}b&&f!==e[c].label?(g=f,f=e[c].label,p()):b||""===f||(f="",p())},r=function(a){if("object"==typeof a){if(a.join().indexOf(f)>=0)return!0}else{if("*"===a)return!0;if("string"==typeof a&&f===a)return!0}},s=function(){var a=m();a!==i?(l=j,q(a)):l=k,i=a,setTimeout(s,l)};return s(),{addFunc:function(a){n(a)},getBreakpoint:function(){return f}}}}(this,this.document)); 3 4var $ = jQuery.noConflict(); 5 6// Scrolled 7$.fn.scrollEnd = function(callback, timeout) { 8 $(this).scroll(function(){ 9 let container = $(this); 10 if (container.data('scrollTimeout')) { 11 clearTimeout(container.data('scrollTimeout')); 12 } 13 container.data('scrollTimeout', setTimeout(callback,timeout)); 14 }); 15}; 16 17(function() { 18 let lastTime = 0; 19 let vendors = ['ms', 'moz', 'webkit', 'o']; 20 for(let x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 21 window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; 22 window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 23 || window[vendors[x]+'CancelRequestAnimationFrame']; 24 } 25 26 if (!window.requestAnimationFrame) 27 window.requestAnimationFrame = function(callback, element) { 28 let currTime = new Date().getTime(); 29 let timeToCall = Math.max(0, 16 - (currTime - lastTime)); 30 let id = window.setTimeout(function() { callback(currTime + timeToCall); }, 31 timeToCall); 32 lastTime = currTime + timeToCall; 33 return id; 34 }; 35 36 if (!window.cancelAnimationFrame) 37 window.cancelAnimationFrame = function(id) { 38 clearTimeout(id); 39 }; 40}()); 41 42 43 44function debounce(func, wait, immediate) { 45 let timeout, args, context, timestamp, result; 46 return function() { 47 context = this; 48 args = arguments; 49 timestamp = new Date(); 50 let later = function() { 51 let last = (new Date()) - timestamp; 52 if (last < wait) { 53 timeout = setTimeout(later, wait - last); 54 } else { 55 timeout = null; 56 if (!immediate) result = func.apply(context, args); 57 } 58 }; 59 let callNow = immediate && !timeout; 60 if (!timeout) { 61 timeout = setTimeout(later, wait); 62 } 63 if (callNow) result = func.apply(context, args); 64 return result; 65 }; 66} 67 68 69function onScrollSliderParallax() { 70 SEMICOLON.slider.sliderParallax(); 71 SEMICOLON.slider.sliderElementsFade(); 72} 73 74 75var SEMICOLON = SEMICOLON || {}; 76window.scwEvents = window.scwEvents || {}; 77 78(function($){ 79 80 // USE STRICT 81 "use strict"; 82 83 SEMICOLON.initialize = { 84 85 init: function(){ 86 87 SEMICOLON.initialize.defaults(); 88 SEMICOLON.initialize.pageTransition(); 89 SEMICOLON.initialize.goToTop(); 90 SEMICOLON.initialize.lazyLoad(); 91 SEMICOLON.initialize.lightbox(); 92 SEMICOLON.initialize.resizeVideos(); 93 SEMICOLON.initialize.dataResponsiveClasses(); 94 SEMICOLON.initialize.dataResponsiveHeights(); 95 SEMICOLON.initialize.stickFooterOnSmall(); 96 97 }, 98 99 execFunc: function( functionName, context ) { 100 let args = Array.prototype.slice.call( arguments, 2 ), 101 namespaces = functionName.split("."), 102 func = namespaces.pop(); 103 104 for( let i = 0; i < namespaces.length; i++ ) { 105 context = context[namespaces[i]]; 106 } 107 108 if( typeof context[func] !== 'undefined' ) { 109 return context[func].apply( context, args ); 110 } else { 111 console.log( functionName + ' Function does not exist' ); 112 } 113 }, 114 115 execPlugin: function( element, settings, available ) { 116 let pluginActive = false, 117 pluginLinkingInterval; 118 119 if( available ) { 120 121 if( settings.trigger && !scwEvents[settings.trigger] ) { 122 $window.trigger( settings.trigger ); 123 scwEvents[settings.trigger] = true; 124 } 125 126 if( settings.execfn ) { 127 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 128 } 129 130 if( settings.class ) { 131 $body.addClass( settings.class ); 132 } 133 134 } else { 135 if( settings.trigger && !scwEvents[settings.trigger] ) { 136 pluginLinkingInterval = setInterval( function plugFn(){ 137 let pluginFnExec = settings.pluginfn();
138 if( pluginFnExec ) { 139 $window.trigger( settings.trigger ); 140 scwEvents[settings.trigger] = true; 141 clearInterval( pluginLinkingInterval ); 142 } 143 return plugFn; 144 }(), 1000); 145 } else { 146 pluginActive = true; 147 } 148 149 if( settings.execfn ) { 150 if( settings.trigger && !pluginActive ) { 151 $window.on( settings.trigger, function(){ 152 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 153 }); 154 } else { 155 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 156 } 157 } 158 159 if( settings.class ) { 160 $body.addClass( settings.class ); 161 } 162 } 163 }, 164 165 jsLinking: function( element, settings ) { 166 if( element.length < 1 ){ 167 return false; 168 } 169 170 if( settings.hiddendisable && ( element.filter(':hidden').length == element.length ) ) { 171 return false; 172 } 173 174 let pluginFnExec = settings.pluginfn(), 175 jsPath = 'js/', file, 176 disableAJAX = false; 177 178 if( typeof scwJsPath !== 'undefined' ) { 179 jsPath = scwJsPath + '/'; 180 } 181 182 if( typeof scwDisableJsAJAX !== 'undefined' && scwDisableJsAJAX === true ) { 183 disableAJAX = true; 184 } 185 186 if( /^(f|ht)tps?:\/\//i.test( window.decodeURIComponent( settings.file ) ) ) { 187 file = settings.file; 188 } else { 189 file = jsPath + settings.file; 190 } 191 192 if( pluginFnExec ) { 193 SEMICOLON.initialize.execPlugin( element, settings, true ); 194 } else { 195 if( !disableAJAX ) { 196 $.ajax({
197 url: file, 198 dataType: "script", 199 cache: true, 200 crossDomain: true, 201 timeout: 5000, 202 }).done(function() { 203 SEMICOLON.initialize.execPlugin( element, settings, false ); 204 }).fail(function() { 205 console.log( settings.error ); 206 }); 207 } else { 208 console.log( settings.error ); 209 } 210 } 211 }, 212 213 functions: function( settings ){ 214 let element, parent, item; 215 216 if( typeof settings.element === 'object' && settings.element !== null ) { 217 if( settings.element.parent !== 'undefined' ) { 218 parent = settings.element.parent; 219 } 220 if( settings.element.el !== 'undefined' ) { 221 settings.element = settings.element.el; 222 } 223 } 224 225 if( settings.element ) { 226 item = settings.element; 227 } else { 228 item = settings.default; 229 } 230 231 if( typeof parent === 'object' ) { 232 element = parent.find( item ); 233 } else { 234 element = $( item ); 235 } 236 237 this.jsLinking( element, settings ); 238 }, 239 240 defaults: function(){ 241 let easingJs = { 242 default: 'body', 243 file: 'plugins.easing.js', 244 error: 'plugins.easing.js: Plugin could not be loaded', 245 pluginfn: () => typeof jQuery.easing["easeOutQuad"] !== "undefined", 246 trigger: 'pluginEasingReady', 247 class: 'has-plugin-easing' 248 }; 249 250 let bootstrapJs = { 251 default: 'body', 252 file: 'plugins.bootstrap.js', 253 error: 'plugins.bootstrap.js: Plugin could not be loaded', 254 pluginfn: () => typeof bootstrap !== "undefined", 255 trigger: 'pluginBootstrapReady', 256 class: 'has-plugin-bootstrap' 257 }; 258 259 let jRes = jRespond([ 260 { 261 label: 'smallest', 262 enter: 0, 263 exit: 575 264 },{ 265 label: 'handheld', 266 enter: 576, 267 exit: 767 268 },{ 269 label: 'tablet', 270 enter: 768, 271 exit: 991 272 },{ 273 label: 'laptop', 274 enter: 992, 275 exit: 1199 276 },{ 277 label: 'desktop', 278 enter: 1200, 279 exit: 10000 280 } 281 ]); 282 283 jRes.addFunc([ 284 { 285 breakpoint: 'desktop', 286 enter: function() { $body.addClass('device-xl'); }, 287 exit: function() { $body.removeClass('device-xl'); } 288 },{ 289 breakpoint: 'laptop', 290 enter: function() { $body.addClass('device-lg'); }, 291 exit: function() { $body.removeClass('device-lg'); } 292 },{ 293 breakpoint: 'tablet', 294 enter: function() { $body.addClass('device-md'); }, 295 exit: function() { $body.removeClass('device-md'); } 296 },{ 297 breakpoint: 'handheld', 298 enter: function() { $body.addClass('device-sm'); }, 299 exit: function() { $body.removeClass('device-sm'); } 300 },{ 301 breakpoint: 'smallest', 302 enter: function() { $body.addClass('device-xs'); }, 303 exit: function() { $body.removeClass('device-xs'); } 304 } 305 ]); 306 307 SEMICOLON.initialize.functions( easingJs ); 308 SEMICOLON.initialize.functions( bootstrapJs ); 309 310 if( ! 'IntersectionObserver' in window ){ 311 let intersectObserve = { 312 default: 'body', 313 file: 'intersection-observer.js', 314 error: 'intersection-observer.js: Plugin could not be loaded', 315 pluginfn: () => typeof window.IntersectionObserver !== "undefined", 316 trigger: 'intersectObservePolyfill', 317 class: 'has-polyfill-intersection-observer' 318 }; 319 320 SEMICOLON.initialize.functions( intersectObserve ); 321 } 322 }, 323 324 goToTop: function(){ 325 let elementScrollSpeed = $goToTopEl.attr('data-speed'), 326 elementScrollEasing = $goToTopEl.attr('data-easing'); 327 328 if( !elementScrollSpeed ) { elementScrollSpeed = 700; } 329 if( !elementScrollEasing ) { elementScrollEasing = 'easeOutQuad'; } 330 331 $goToTopEl.off( 'click' ).on( 'click', function() { 332 $('body,html').stop(true).animate({ 333 'scrollTop': 0 334 }, Number( elementScrollSpeed ), elementScrollEasing ); 335 return false; 336 }); 337 }, 338 339 goToTopScroll: function(){ 340 let elementMobile = $goToTopEl.attr('data-mobile'), 341 elementOffset = $goToTopEl.attr('data-offset'); 342 343 if( !elementOffset ) { elementOffset = 450; } 344 345 if( elementMobile != 'true' && ( $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { return true; } 346 347 if( $window.scrollTop() > Number(elementOffset) ) { 348 $goToTopEl.fadeIn(); 349 $body.addClass('gototop-active'); 350 } else { 351 $goToTopEl.fadeOut(); 352 $body.removeClass('gototop-active'); 353 } 354 }, 355 356 lightbox: function( element ){ 357 let settings = { 358 element: element, 359 default: '[data-lightbox]', 360 file: 'plugins.lightbox.js', 361 error: 'plugins.lightbox.js: Plugin could not be loaded', 362 execfn: 'SEMICOLON_lightboxInit', 363 pluginfn: () => $().magnificPopup, 364 trigger: 'pluginLightboxReady', 365 class: 'has-plugin-lightbox' 366 }; 367 368 SEMICOLON.initialize.functions( settings ); 369 }, 370 371 modal: function( element ){ 372 let settings = { 373 element: element, 374 default: '.modal-on-load', 375 file: 'plugins.lightbox.js', 376 error: 'plugins.lightbox.js: Plugin could not be loaded', 377 execfn: 'SEMICOLON_modalInit', 378 pluginfn: () => $().magnificPopup, 379 trigger: 'pluginLightboxReady', 380 class: 'has-plugin-lightbox' 381 }; 382 383 SEMICOLON.initialize.functions( settings ); 384 }, 385 386 resizeVideos: function(){ 387 let settings = { 388 default: 'iframe[src*="youtube"],iframe[src*="vimeo"],iframe[src*="dailymotion"],iframe[src*="maps.google.com"],iframe[src*="google.com/maps"]', 389 file: 'plugins.fitvids.js', 390 error: 'plugins.fitvids.js: Plugin could not be loaded', 391 execfn: 'SEMICOLON_resizeVideosInit', 392 pluginfn: () => $().fitVids, 393 trigger: 'pluginfitVidsReady', 394 class: 'has-plugin-fitvids' 395 }; 396 397 SEMICOLON.initialize.functions( settings ); 398 }, 399 400 pageTransition: function(){ 401 let settings = { 402 default: '.page-transition', 403 file: 'plugins.pagetransition.js', 404 error: 'plugins.pagetransition.js: Plugin could not be loaded', 405 execfn: 'SEMICOLON_pageTransitionInit', 406 pluginfn: () => $().animsition, 407 trigger: 'pluginPageTransitionReady', 408 class: 'has-plugin-animsition' 409 }; 410 411 SEMICOLON.initialize.functions( settings ); 412 }, 413 414 lazyLoad: function( element ) { 415 let settings = { 416 element: element, 417 default: '.lazy', 418 file: 'plugins.lazyload.js', 419 error: 'plugins.lazyload.js: Plugin could not be loaded', 420 execfn: 'SEMICOLON_lazyLoadInit', 421 pluginfn: () => typeof LazyLoad !== "undefined", 422 trigger: 'pluginlazyLoadReady', 423 class: 'has-plugin-lazyload' 424 }; 425 426 SEMICOLON.initialize.functions( settings ); 427 }, 428 429 topScrollOffset: function() { 430 let topOffsetScroll = 0; 431 432 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 433 if( $header.hasClass('sticky-header') ) { 434 if( $pagemenu.hasClass('dots-menu') ) { topOffsetScroll = 100; } else { topOffsetScroll = 144; } 435 } else { 436 if( $pagemenu.hasClass('dots-menu') ) { topOffsetScroll = 140; } else { topOffsetScroll = 184; } 437 } 438 439 if( !$pagemenu.length ) { 440 if( $header.hasClass('sticky-header') ) { topOffsetScroll = 100; } else { topOffsetScroll = 140; } 441 } 442 } else { 443 topOffsetScroll = 40; 444 } 445 446 return topOffsetScroll; 447 }, 448 449 dataResponsiveClasses: function(){ 450 let settings = { 451 default: '[data-class-xl],[data-class-lg],[data-class-md],[data-class-sm],[data-class-xs]',
452 file: 'plugins.dataclasses.js', 453 error: 'plugins.dataclasses.js: Plugin could not be loaded', 454 execfn: 'SEMICOLON_dataClassesInit', 455 pluginfn: () => typeof scwDataClassesPlugin !== "undefined", 456 trigger: 'pluginDataClassesReady', 457 class: 'has-plugin-dataclasses' 458 }; 459 460 SEMICOLON.initialize.functions( settings ); 461 }, 462 463 dataResponsiveHeights: function(){ 464 let settings = { 465 default: '[data-height-xl],[data-height-lg],[data-height-md],[data-height-sm],[data-height-xs]', 466 file: 'plugins.dataheights.js', 467 error: 'plugins.dataheights.js: Plugin could not be loaded', 468 execfn: 'SEMICOLON_dataHeightsInit', 469 pluginfn: () => typeof scwDataHeightsPlugin !== "undefined", 470 trigger: 'pluginDataHeightsReady', 471 class: 'has-plugin-dataheights' 472 }; 473 474 SEMICOLON.initialize.functions( settings ); 475 }, 476 477 stickFooterOnSmall: function(){ 478 $footer.css({ 'margin-top': '' }); 479 let windowH = $window.height(), 480 wrapperH = $wrapper.height(); 481 482 if( !$body.hasClass('sticky-footer') && $footer.length > 0 && $wrapper.has('#footer') ) { 483 if( windowH > wrapperH ) { 484 $footer.css({ 'margin-top': ( windowH - wrapperH ) }); 485 } 486 } 487 } 488 489 }; 490 491 SEMICOLON.header = { 492 493 init: function(){ 494 495 SEMICOLON.header.initialize(); 496 SEMICOLON.header.menufunctions(); 497 SEMICOLON.header.fullWidthMenu(); 498 SEMICOLON.header.stickyMenu(); 499 SEMICOLON.header.stickyPageMenu(); 500 SEMICOLON.header.sideHeader(); 501 SEMICOLON.header.sidePanel(); 502 SEMICOLON.header.onePageScroll(); 503 SEMICOLON.header.logo(); 504 SEMICOLON.header.topsearch(); 505 SEMICOLON.header.topcart(); 506 SEMICOLON.header.miscFunctions(); 507 508 }, 509 510 initialize: function() { 511 512 initHeaderHeight = $headerWrap.outerHeight(); 513 514 if( $headerWrap.length > 0 ) { 515 if( $('.header-wrap-clone').length < 1 ) { 516 $headerWrap.after('<div class="header-wrap-clone"></div>'); 517 } 518 $headerWrapClone = $('.header-wrap-clone'); 519 } 520 521 if( $pagemenu.length > 0 ) { 522 $pagemenu.find('#page-menu-wrap').after('<div class="page-menu-wrap-clone"></div>'); 523 $pageMenuClone = $('.page-menu-wrap-clone'); 524 } 525 526 let menuItemSubs = $( '.menu-item:has(.sub-menu-container)' ); 527 528 menuItemSubs.addClass('sub-menu'); // , .primary-menu.with-arrows > .menu-container > .menu-item:has(.sub-menu-container) > .menu-link > div:not(:has(.icon-angle-down)) 529 $( '.top-links-item:has(.top-links-sub-menu,.top-links-section) > a:not(:has(.icon-angle-down)), .menu-item:not(.mega-menu-title):has(.sub-menu-container) > .menu-link > div:not(:has(.icon-angle-down)), .page-menu-item:has(.page-menu-sub-menu) > a > div:not(:has(.icon-angle-down))' ).append( '<i class="icon-angle-down"></i>' ); 530 $( '.menu-item:not(.mega-menu-title):has(.sub-menu-container):not(:has(.sub-menu-trigger))' ).append( '<button class="sub-menu-trigger icon-chevron-right"></button>' ); 531 532 SEMICOLON.header.menuInvert(); 533 534 }, 535 536 menuInvert: function( subMenuEl ) { 537 let submenus = subMenuEl || $( '.mega-menu-content, .sub-menu-container, .top-links-section' ); 538 539 submenus.children().css({ 'display': 'block' }); 540 submenus.css({ 'display': 'block' }); 541 submenus.each( function( index, element ){ 542 let viewportOffset = element.getBoundingClientRect(); 543 544 if( $body.hasClass('rtl') ) { 545 if( viewportOffset.left < 0 ) { 546 element.classList.add('menu-pos-invert'); 547 } 548 } 549 550 if((viewportOffset.left + viewportOffset.width) - windowWidth > 0) { 551 element.classList.add('menu-pos-invert'); 552 } 553 }); 554 submenus.children().css({ 'display': '' }); 555 submenus.css({ 'display': '' }); 556 }, 557 558 includeOffset: function(){ 559 if( $headerInc.length < 1 ) { 560 return true; 561 } 562 563 let headerInc = $header.outerHeight(); 564 if( $header.hasClass('floating-header') || $headerInc.hasClass('include-topbar') ) { 565 headerInc = headerInc + $header.offset().top; 566 } 567 $headerInc.css({ 'margin-top': -headerInc }); 568 SEMICOLON.slider.sliderParallax(); 569 }, 570 571 menufunctions: function(){ 572
573 let menuItemSubs = $( '.menu-item:has(.sub-menu-container)' ), 574 menuItemSubsLinks = menuItemSubs.children( '.menu-link' ), 575 submenusT = '.mega-menu-content, .sub-menu-container', 576 submenus = $( submenusT ), 577 menuItemT = '.menu-item', 578 subMenuT = '.sub-menu', 579 menuSpeed = primaryMenu.attr( 'data-trigger-speed' ) || 200, 580 subMenuTriggerT = '.sub-menu-trigger', 581 menuItemTrigger; 582 583 menuSpeed = Number( menuSpeed ); 584 585 menuItemTrigger = menuItemSubs.children( subMenuTriggerT ); 586 587 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 588 setTimeout( function(){ 589 if( $headerWrapClone.length > 0 ) { 590 $headerWrapClone.css({ 'height': initHeaderHeight }); 591 } 592 SEMICOLON.header.includeOffset(); 593 }, 1000); 594 primaryMenu.find( submenus ).css({ 'display': '' }); 595 } else { 596 $headerInc.css({ 'margin-top': '' }); 597 } 598 599 if( ( $body.hasClass('overlay-menu') && primaryMenu.hasClass('on-click') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 600 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 601 let triggerEl = $(this); 602 triggerEl.parents( subMenuT ).siblings().find( submenus ).stop( true, true ).slideUp( menuSpeed ); 603 triggerEl.parent( menuItemT ).children( submenusT ).stop( true, true ).slideToggle( menuSpeed ); 604 e.preventDefault(); 605 }); 606 } else if( ( $body.hasClass('side-header') && primaryMenu.hasClass('on-click') ) || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 607 menuItemTrigger.removeClass('icon-rotate-90'); 608 $( menuItemT ).find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed , function(){ 609 $body.toggleClass("primary-menu-open", false); 610 }); 611 612 menuItemTrigger = menuItemTrigger.add( menuItemSubsLinks.filter('[href^="#"]') ); 613 614 menuItemTrigger.off( 'click' ).on( 'click', function(e){ 615 let triggerEl = $(this); 616 triggerEl.parents( subMenuT ).siblings().find( subMenuTriggerT ).removeClass('icon-rotate-90'); 617 triggerEl.parents( subMenuT ).siblings().find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed ); 618 triggerEl.parent( menuItemT ).children( submenusT ).filter(':not(:animated)').stop( true, true ).slideToggle( menuSpeed ); 619 620 let subMenuTriggerEl = triggerEl.parent( menuItemT ).children( subMenuTriggerT ); 621 622 if( !subMenuTriggerEl.hasClass( 'icon-rotate-90' ) ) { 623 subMenuTriggerEl.addClass('icon-rotate-90'); 624 } else { 625 subMenuTriggerEl.removeClass('icon-rotate-90'); 626 } 627 628 e.preventDefault(); 629 }); 630 } else if( ( $body.hasClass('overlay-menu') || $body.hasClass('side-header') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 631 primaryMenu.find( submenus ).stop( true, true ).slideUp( menuSpeed ); 632 $( menuItemT ).hover( function(e){ 633 $(this).children( submenusT ).stop( true, true ).slideDown( menuSpeed ); 634 }, function(){ 635 $(this).children( submenusT ).stop( true, true ).slideUp( menuSpeed ); 636 }); 637 } else { 638 if( primaryMenu.hasClass('on-click') ) { 639 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 640 let triggerEl = $(this); 641 triggerEl.parents( subMenuT ).siblings().find( submenus ).removeClass('d-block'); 642 triggerEl.parent( menuItemT ).children( submenusT ).toggleClass('d-block'); 643 triggerEl.parent( menuItemT ).siblings().removeClass('current'); 644 triggerEl.parent( menuItemT ).toggleClass('current'); 645 e.preventDefault(); 646 }); 647 } 648 } 649 650 if( $('.top-links').hasClass('on-click') || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 651 $('.top-links-item:has(.top-links-sub-menu,.top-links-section) > a').on( 'click', function(e){ 652 $(this).parents('li').siblings().find('.top-links-sub-menu,.top-links-section').removeClass('d-block'); 653 $(this).parent('li').children('.top-links-sub-menu,.top-links-section').toggleClass('d-block'); 654 e.preventDefault(); 655 }); 656 } 657 658 SEMICOLON.header.menuInvert( $('.top-links-section') ); 659 660 $('#primary-menu-trigger').off( 'click' ).on( 'click', function() { 661 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 662 if( primaryMenu.find('.mobile-primary-menu').length > 0 ) { 663 $( '.primary-menu:not(.mobile-menu-off-canvas) .mobile-primary-menu' ).stop( true, true ).slideToggle( menuSpeed ); 664 $( '.primary-menu.mobile-menu-off-canvas .mobile-primary-menu' ).toggleClass('d-block'); 665 } else { 666 $( '.primary-menu:not(.mobile-menu-off-canvas) .menu-container' ).stop( true, true ).slideToggle( menuSpeed ); 667 $( '.primary-menu.mobile-menu-off-canvas .menu-container' ).toggleClass('d-block'); 668 } 669 } 670 $body.toggleClass("primary-menu-open"); 671 return false; 672 }); 673 674 $( '.menu-container:not(.mobile-primary-menu)' ).css({ 'display': '' }); 675 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 676 primaryMenu.find('.mobile-primary-menu').removeClass('d-block'); 677 } 678 679 }, 680 681 fullWidthMenu: function(){ 682 683 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 684 $('.mega-menu-content, .top-search-form').css({ 'width': '' }); 685 return true; 686 } 687 688 let headerWidth = $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').parents('.header-row').width(); 689 690 if( $header.find('.container-fullwidth').length > 0 ) { 691 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth }); 692 } 693 694 if( $body.hasClass('stretched') ) { 695 if( $header.hasClass('floating-header') ) { 696 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth + 80 }); 697 } else { 698 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth }); 699 } 700 } else { 701 if( $header.hasClass('full-header') ) { 702 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth - 80 }); 703 } 704 } 705 706 if( $header.find('.header-row').length > 1 ) { 707 let megaMenuContent = $('.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content').eq(0), 708 offset = $headerWrap.outerHeight() - megaMenuContent.parents('.header-row').outerHeight(), 709 css = '.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content { top: calc( 100% - '+ offset +'px ); }', 710 head = document.head || document.getElementsByTagName('head')[0], 711 style = document.createElement('style'); 712 713 head.appendChild(style); 714 715 style.type = 'text/css'; 716 style.appendChild(document.createTextNode(css)); 717 } 718 }, 719 720 stickyMenu: function( headerOffset ){ 721 722 windowScrT = $window.scrollTop(); 723 724 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 725 if( windowScrT > headerOffset ) { 726 727 if( !$body.hasClass('side-header') ) { 728 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 729 // if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 730 SEMICOLON.header.stickyMenuClass(); 731 732 if( stickyShrink == 'true' && !$header.hasClass('no-sticky') ) { 733 if( ( windowScrT - headerOffset ) > Number( stickyShrinkOffset ) ) { 734 $header.addClass('sticky-header-shrink'); 735 if( headerSizeCustom ){ 736 logo.find('img').css({ 'height': Number( stickyLogoH ) }); 737 SEMICOLON.header.menuItemsSpacing( stickyMenuP ); 738 } 739 } else { 740 $header.removeClass('sticky-header-shrink'); 741 if( headerSizeCustom ){ 742 //logo.find('img').css({ 'height': Number( defLogoH ) }); 743 SEMICOLON.header.menuItemsSpacing( defMenuP ); 744 } 745 } 746 } 747 } 748 749 } else { 750 SEMICOLON.header.removeStickyness(); 751 if( headerSizeCustom ){ 752 //logo.find('img').css({ 'height': Number( defLogoH ) }); 753 SEMICOLON.header.menuItemsSpacing( defMenuP ); 754 } 755 } 756 } 757 758 if( $body.hasClass('device-xs') || $body.hasClass('device-sm') || $body.hasClass('device-md') ) { 759 if( mobileSticky == 'true' ) { 760 if( windowScrT > headerOffset ) { 761 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 762 SEMICOLON.header.stickyMenuClass(); 763 } else { 764 SEMICOLON.header.removeStickyness(); 765 SEMICOLON.header.responsiveMenuClass(); 766 } 767 } else { 768 SEMICOLON.header.removeStickyness(); 769 } 770 if( headerSizeCustom ){ 771 //logo.find('img').css({ 'height': Number( mobileLogoH ) }); 772 SEMICOLON.header.menuItemsSpacing( '' ); 773 } 774 } 775 }, 776 777 menuItemsSpacing: function( spacing ) { 778 779 let item = primaryMenuMainItems; 780 781 if( !$body.hasClass('side-header') && !$body.hasClass('overlay-menu') ) { 782 if( primaryMenu.hasClass('menu-spacing-margin') ) { 783 if( spacing == '' ) { 784 item.css({ 'margin-top': '', 'margin-bottom': '' }); 785 } else { 786 item.css({ 'margin-top': Number( spacing ), 'margin-bottom': Number( spacing ) }); 787 } 788 } else { 789 if( spacing == '' ) { 790 item.css({ 'padding-top': '', 'padding-bottom': '' }); 791 } else { 792 item.css({ 'padding-top': Number( spacing ), 'padding-bottom': Number( spacing ) }); 793 } 794 } 795 } 796 797 }, 798 799 stickyPageMenu: function( pageMenuOffset ){ 800 if( $window.scrollTop() > pageMenuOffset ) { 801 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 802 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 803 let headerHeight = $headerWrap.outerHeight(); 804 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 805 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 806 } 807 } else if( $body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md') ) { 808 if( $pagemenu.attr('data-mobile-sticky') == 'true' ) { 809 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 810 } 811 } 812 } else { 813 $pagemenu.removeClass('sticky-page-menu'); 814 $pagemenu.find( $pageMenuWrap ).css({ 'top': '' }); 815 } 816 }, 817 818 removeStickyness: function(){ 819 if( $header.hasClass('sticky-header') ){ 820 $header.removeClass('sticky-header'); 821 $header.removeClass().addClass(oldHeaderClasses); 822 $headerWrap.removeClass().addClass(oldHeaderWrapClasses); 823 if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 824 SEMICOLON.slider.swiperSliderMenu(); 825 SEMICOLON.slider.revolutionSliderMenu(); 826 } 827 if( ( $body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md') ) && ( typeof responsiveMenuClasses === 'undefined' ) ) { 828 $header.removeClass().addClass(oldHeaderClasses); 829 $headerWrap.removeClass().addClass(oldHeaderWrapClasses); 830 if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 831 } 832 }, 833 834 sideHeader: function(){ 835 $("#header-trigger").off( 'click' ).on( 'click', function(){ 836 $('body.open-header').toggleClass("side-header-open"); 837 return false; 838 }); 839 }, 840 841 sidePanel: function(){
842 $(".side-panel-trigger").off( 'click' ).on( 'click', function(){ 843 $body.toggleClass("side-panel-open"); 844 if( $body.hasClass('device-touch') && $body.hasClass('side-push-panel') ) { 845 $body.toggleClass("ohidden"); 846 } 847 return false; 848 }); 849 }, 850 851 onePageScroll: function( element ){ 852 let settings = { 853 element: element, 854 default: '.one-page-menu', 855 file: 'plugins.onepage.js', 856 error: 'plugins.onepage.js: Plugin could not be loaded', 857 execfn: 'SEMICOLON_onePageModule', 858 pluginfn: () => typeof scwOnePageModulePlugin !== "undefined", 859 trigger: 'pluginOnePageModuleReady', 860 class: 'has-plugin-onepagemodule' 861 }; 862 863 SEMICOLON.initialize.functions( settings ); 864 }, 865 866 logo: function(){ 867 let sLogo = defaultLogo.find('img'), 868 rLogo = retinaLogo.find('img'); 869 if( ( $header.hasClass('dark') || $body.hasClass('dark') ) && !$headerWrap.hasClass('not-dark') ) { 870 if( defaultDarkLogo && ( sLogo.attr('src') != defaultDarkLogo ) ){ 871 sLogo.attr('src', defaultDarkLogo); 872 } 873 874 if( retinaDarkLogo && ( rLogo.attr('src') != retinaDarkLogo ) ){ 875 rLogo.attr('src', retinaDarkLogo); 876 } 877 } else { 878 if( defaultLogoImg && ( sLogo.attr('src') != defaultLogoImg ) ){ 879 sLogo.attr('src', defaultLogoImg); 880 } 881 882 if( retinaLogoImg && ( rLogo.attr('src') != retinaLogoImg ) ){ 883 rLogo.attr('src', retinaLogoImg); 884 } 885 } 886 887 if( $header.hasClass('sticky-header') ) { 888 if( defaultStickyLogo && ( sLogo.attr('src') != defaultStickyLogo ) ){ 889 sLogo.attr('src', defaultStickyLogo); 890 } 891 892 if( retinaStickyLogo && ( rLogo.attr('src') != retinaStickyLogo ) ){ 893 rLogo.attr('src', retinaStickyLogo); 894 } 895 } 896 897 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 898 if( defaultMobileLogo && ( sLogo.attr('src') != defaultMobileLogo ) ){ 899 sLogo.attr('src', defaultMobileLogo); 900 } 901 902 if( retinaMobileLogo && ( rLogo.attr('src') != retinaMobileLogo ) ){ 903 rLogo.attr('src', retinaMobileLogo); 904 } 905 } 906 }, 907 908 stickyMenuClass: function(){ 909 let newClassesArray = ''; 910 911 if( stickyMenuClasses ) { 912 newClassesArray = stickyMenuClasses.split(/ +/); 913 } 914 915 let noOfNewClasses = newClassesArray.length; 916 917 if( noOfNewClasses > 0 ) { 918 let i = 0; 919 for( i=0; i<noOfNewClasses; i++ ) { 920 if( newClassesArray[i] == 'not-dark' ) { 921 $header.removeClass('dark'); 922 $headerWrap.filter(':not(.not-dark)').addClass('not-dark'); 923 } else if( newClassesArray[i] == 'dark' ) { 924 $headerWrap.removeClass('not-dark force-not-dark'); 925 if( !$header.hasClass( newClassesArray[i] ) ) { 926 $header.addClass( newClassesArray[i] ); 927 } 928 } else if( !$header.hasClass( newClassesArray[i] ) ) { 929 $header.addClass( newClassesArray[i] ); 930 } 931 } 932 } 933 }, 934 935 responsiveMenuClass: function(){ 936 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ){ 937 return true; 938 } 939 940 let newClassesArray = ''; 941 942 if( responsiveMenuClasses ) { 943 newClassesArray = responsiveMenuClasses.split(/ +/); 944 } 945 946 let noOfNewClasses = newClassesArray.length; 947 948 if( noOfNewClasses > 0 ) { 949 let i = 0; 950 for( i=0; i<noOfNewClasses; i++ ) { 951 if( newClassesArray[i] == 'not-dark' ) { 952 $header.removeClass('dark'); 953 $headerWrap.addClass('not-dark'); 954 } else if( newClassesArray[i] == 'dark' ) { 955 $headerWrap.removeClass('not-dark force-not-dark'); 956 if( !$header.hasClass( newClassesArray[i] ) ) { 957 $header.addClass( newClassesArray[i] ); 958 } 959 } else if( !$header.hasClass( newClassesArray[i] ) ) { 960 $header.addClass( newClassesArray[i] ); 961 } 962 } 963 } 964 965 SEMICOLON.header.logo(); 966 }, 967 968 topsearch: function(){ 969 $topSearch.parents('.header-row').addClass( 'top-search-parent' ); 970 let topSearchParent = $header.find('.top-search-parent'); 971 972 $("#top-search-trigger").off( 'click' ).on( 'click', function(e){ 973 clearTimeout( topSearchTimeOut ); 974 $body.toggleClass('top-search-open'); 975 $topCart.toggleClass('top-cart-open', false); 976 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 977 primaryMenu.filter( ':not(.mobile-menu-off-canvas)' ).find('.menu-container').slideUp(200); 978 primaryMenu.filter( '.mobile-menu-off-canvas' ).find('.menu-container').toggleClass('d-block', false); 979 } 980 if( $body.hasClass('top-search-open') ) { 981 topSearchParent.toggleClass('position-relative', true); 982 } else { 983 topSearchTimeOut = setTimeout( function(){ 984 topSearchParent.toggleClass('position-relative', false); 985 }, 750); 986 } 987 $body.toggleClass("primary-menu-open", false); 988 $pagemenu.toggleClass('page-menu-open', false); 989 if ($body.hasClass('top-search-open')){ 990 $topSearch.find('input').focus(); 991 } 992 e.stopPropagation(); 993 e.preventDefault(); 994 }); 995 }, 996 997 topcart: function(){ 998 if( $topCart.length < 1 ) { 999 return true; 1000 } 1001 1002 $("#top-cart-trigger").off( 'click' ).on( 'click', function(e){
1003 $pagemenu.toggleClass('page-menu-open', false); 1004 $topCart.toggleClass('top-cart-open'); 1005 e.stopPropagation(); 1006 e.preventDefault(); 1007 }); 1008 }, 1009 1010 miscFunctions: function(){ 1011 let topSearchParent = $header.find('.top-search-parent'); 1012 $(document).on('click', function(event) { 1013 if (!$(event.target).closest('.top-search-form').length) { 1014 $body.toggleClass('top-search-open', false); 1015 topSearchTimeOut = setTimeout( function(){ 1016 topSearchParent.toggleClass('position-relative', false); 1017 }, 750); 1018 } 1019 if (!$(event.target).closest('#top-cart').length) { 1020 $topCart.toggleClass('top-cart-open', false); 1021 } 1022 if (!$(event.target).closest('#page-menu').length) { $pagemenu.toggleClass('page-menu-open', false); } 1023 if (!$(event.target).closest('#side-panel').length) { $body.toggleClass('side-panel-open', false); } 1024 if (!$(event.target).closest('.primary-menu.on-click').length) { 1025 primaryMenu.filter('.on-click').find('.menu-container').find('.d-block').removeClass('d-block'); 1026 primaryMenu.filter('.on-click').find('.menu-item').removeClass('current'); 1027 } 1028 if( primaryMenu.hasClass('mobile-menu-off-canvas') ) { 1029 if (!$(event.target).closest('.primary-menu.mobile-menu-off-canvas .menu-container').length) { 1030 primaryMenu.filter('.mobile-menu-off-canvas').find('.menu-container').toggleClass('d-block', false); 1031 $body.toggleClass("primary-menu-open", false); 1032 } 1033 } 1034 if (!$(event.target).closest('.top-links.on-click').length) { 1035 $('.top-links.on-click').find('.top-links-sub-menu,.top-links-section').removeClass('d-block'); 1036 } 1037 }); 1038 } 1039 1040 }; 1041 1042 SEMICOLON.slider = { 1043 1044 init: function() { 1045 1046 SEMICOLON.slider.sliderDimensions(); 1047 SEMICOLON.slider.sliderRun(); 1048 SEMICOLON.slider.sliderParallax(); 1049 SEMICOLON.slider.sliderElementsFade(); 1050 1051 }, 1052 1053 sliderDimensions: function(){ 1054 1055 let parallaxElHeight = $sliderParallaxEl.outerHeight(), 1056 parallaxElWidth = $sliderParallaxEl.outerWidth(), 1057 slInner = $sliderParallaxEl.find('.slider-inner'), 1058 slSwiperW = $slider.find('.swiper-wrapper'), 1059 slSwiperS = $slider.find('.swiper-slide').first(), 1060 slFlexHeight = $slider.hasClass('h-auto') || $slider.hasClass('min-vh-0'); 1061 1062 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 1063 setTimeout( function(){ 1064 slInner.height( parallaxElHeight ); 1065 if( slFlexHeight ) { 1066 parallaxElHeight = $sliderParallaxEl.find('.slider-inner').children().first().outerHeight(); 1067 $sliderParallaxEl.height( parallaxElHeight ); 1068 slInner.height( parallaxElHeight ); 1069 } 1070 }, 500 ); 1071 1072 if( slFlexHeight ) { 1073 let slSwiperFC = slSwiperS.children().first(); 1074 if( slSwiperFC.hasClass('container') || slSwiperFC.hasClass('container-fluid') ) { 1075 slSwiperFC = slSwiperFC.children().first(); 1076 } 1077 if( slSwiperFC.outerHeight() > slSwiperW.outerHeight() ) { 1078 slSwiperW.css({ 'height': 'auto' }); 1079 } 1080 } 1081 1082 if( $body.hasClass('side-header') ) { 1083 slInner.width( parallaxElWidth ); 1084 } 1085 1086 if( !$body.hasClass('stretched') ) { 1087 parallaxElWidth = $wrapper.outerWidth(); 1088 slInner.width( parallaxElWidth ); 1089 } 1090 } else { 1091 slSwiperW.css({ 'height': '' }); 1092 $sliderParallaxEl.css({ 'height': '' }); 1093 slInner.css({ 'width': '', 'height': '' }); 1094 } 1095 }, 1096 1097 sliderRun: function( element ){ 1098 let settings = { 1099 element: element, 1100 default: '.swiper_wrapper', 1101 file: 'plugins.swiper.js', 1102 error: 'plugins.swiper.js: Plugin could not be loaded', 1103 execfn: 'SEMICOLON_swiperInit', 1104 pluginfn: () => typeof Swiper !== "undefined", 1105 trigger: 'pluginSwiperReady', 1106 class: 'has-plugin-swiper' 1107 }; 1108 1109 SEMICOLON.initialize.functions( settings ); 1110 }, 1111 1112 sliderParallaxOffset: function(){ 1113 let sliderParallaxOffsetTop = 0, 1114 headerHeight = $header.outerHeight(); 1115 if( $body.hasClass('side-header') || $header.next('.include-header').length > 0 ) { headerHeight = 0; } 1116 if( $pageTitle.length > 0 ) { 1117 sliderParallaxOffsetTop = $pageTitle.outerHeight() + headerHeight; 1118 } else { 1119 sliderParallaxOffsetTop = headerHeight; 1120 } 1121 1122 if( $slider.next('#header').length > 0 ) { sliderParallaxOffsetTop = 0; } 1123 1124 return sliderParallaxOffsetTop; 1125 }, 1126 1127 sliderParallaxSet: function( xPos, yPos, el ){ 1128 if( el ) { 1129 el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)"; 1130 } 1131 }, 1132 1133 sliderParallax: function(){ 1134 if( $sliderParallaxEl.length < 1 ) { 1135 return true; 1136 } 1137 1138 let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(), 1139 parallaxElHeight = $sliderParallaxEl.outerHeight(), 1140 transform, transform2; 1141 1142 xScrollPosition = window.pageXOffset; 1143 yScrollPosition = window.pageYOffset; 1144 1145 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 1146 if( ( parallaxElHeight + parallaxOffsetTop + 50 ) > yScrollPosition ){
1147 $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible'); 1148 if ( yScrollPosition > parallaxOffsetTop ) { 1149 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1150 1151 transform = ((yScrollPosition-parallaxOffsetTop) * -.4 ); 1152 transform2 = ((yScrollPosition-parallaxOffsetTop) * -.15 ); 1153 1154 SEMICOLON.slider.sliderParallaxSet( 0, transform, sliderParallaxElInner ); 1155 SEMICOLON.slider.sliderParallaxSet( 0, transform2, sliderParallaxElCaption ); 1156 } else { 1157 transform = ((yScrollPosition-parallaxOffsetTop) / 1.5 ); 1158 transform2 = ((yScrollPosition-parallaxOffsetTop) / 7 ); 1159 1160 SEMICOLON.slider.sliderParallaxSet( 0, transform, sliderParallaxEl ); 1161 SEMICOLON.slider.sliderParallaxSet( 0, transform2, sliderParallaxElCaption ); 1162 } 1163 } else { 1164 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1165 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElInner ); 1166 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1167 } else { 1168 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxEl ); 1169 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1170 } 1171 } 1172 } else { 1173 $sliderParallaxEl.addClass('slider-parallax-invisible').removeClass('slider-parallax-visible'); 1174 } 1175 1176 requestAnimationFrame(function(){ 1177 SEMICOLON.slider.sliderParallax(); 1178 SEMICOLON.slider.sliderElementsFade(); 1179 }); 1180 } else { 1181 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1182 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElInner ); 1183 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1184 } else { 1185 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxEl ); 1186 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1187 } 1188 $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible'); 1189 } 1190 }, 1191 1192 sliderElementsFade: function(){ 1193 if( $sliderParallaxEl.length < 1 ) { 1194 return true; 1195 } 1196 1197 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 1198 let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(), 1199 parallaxElHeight = $sliderParallaxEl.outerHeight(), 1200 tHeaderOffset; 1201 1202 if( $header.hasClass('transparent-header') || $body.hasClass('side-header') ) { 1203 tHeaderOffset = 100; 1204 } else { 1205 tHeaderOffset = 0; 1206 } 1207 $sliderParallaxEl.filter('.slider-parallax-visible').find('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').css({'opacity': 1 - ( ( ( yScrollPosition - tHeaderOffset ) * 1.85 ) / parallaxElHeight ) }); 1208 } else { 1209 $sliderParallaxEl.find('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').css({'opacity': 1}); 1210 } 1211 }, 1212 1213 swiperSliderMenu: function( onWinLoad ){ 1214 onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false; 1215 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || ( $header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open') ) ) { 1216 let activeSlide = $slider.find('.swiper-slide.swiper-slide-active'); 1217 SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad); 1218 } 1219 }, 1220 1221 revolutionSliderMenu: function( onWinLoad ){ 1222 onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false; 1223 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || ( $header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open') ) ) { 1224 let activeSlide = $slider.find('.active-revslide'); 1225 SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad); 1226 } 1227 }, 1228 1229 headerSchemeChanger: function( activeSlide, onWinLoad ){ 1230 if( activeSlide.length > 0 ) { 1231 let darkExists = false, 1232 oldClassesArray, noOfOldClasses; 1233 if( activeSlide.hasClass('dark') ){ 1234 if( oldHeaderClasses ) { 1235 oldClassesArray = oldHeaderClasses.split(/ +/); 1236 } else {
1237 oldClassesArray = ''; 1238 } 1239 1240 noOfOldClasses = oldClassesArray.length; 1241 1242 if( noOfOldClasses > 0 ) { 1243 let i = 0; 1244 for( i=0; i<noOfOldClasses; i++ ) { 1245 if( oldClassesArray[i] == 'dark' && onWinLoad == true ) { 1246 darkExists = true; 1247 break; 1248 } 1249 } 1250 } 1251 $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').addClass('dark'); 1252 if( !darkExists ) { 1253 $('#header.transparent-header.sticky-header,#header.transparent-header.semi-transparent.sticky-header,#header.transparent-header.floating-header.sticky-header').removeClass('dark'); 1254 } 1255 $headerWrap.removeClass('not-dark'); 1256 } else { 1257 if( $body.hasClass('dark') ) { 1258 activeSlide.addClass('not-dark'); 1259 $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark'); 1260 $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').find('#header-wrap').addClass('not-dark'); 1261 } else { 1262 $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark'); 1263 $headerWrap.removeClass('not-dark'); 1264 } 1265 } 1266 if( $header.hasClass('sticky-header') ) { 1267 SEMICOLON.header.stickyMenuClass(); 1268 } 1269 SEMICOLON.header.logo(); 1270 } 1271 } 1272 1273 }; 1274 1275 SEMICOLON.portfolio = { 1276 1277 init: function(){ 1278 1279 SEMICOLON.portfolio.revealDesc(); 1280 SEMICOLON.portfolio.ajaxload(); 1281 1282 }, 1283 1284 revealDesc: function(){ 1285 let $portfolioReveal = $('.portfolio-reveal'); 1286 1287 if( $portfolioReveal < 1 ) { 1288 return true; 1289 } 1290 1291 $portfolioReveal.each( function(){ 1292 let element = $(this), 1293 elementItems = element.find('.portfolio-item'); 1294 elementItems.each( function(){ 1295 let element = $(this).find('.portfolio-desc'), 1296 elementHeight = element.outerHeight(); 1297 element.css({ 'margin-top': '-'+elementHeight+'px' }); 1298 }); 1299 }); 1300 }, 1301 1302 ajaxload: function(){ 1303 let settings = { 1304 default: '.portfolio-ajax', 1305 file: 'plugins.ajaxportfolio.js', 1306 error: 'plugins.ajaxportfolio.js: Plugin could not be loaded', 1307 execfn: 'SEMICOLON_portfolioAjaxloadInit', 1308 pluginfn: () => typeof scwAjaxPortfolioPlugin !== "undefined", 1309 trigger: 'pluginAjaxPortfolioReady', 1310 class: 'has-plugin-ajaxportfolio' 1311 }; 1312 1313 SEMICOLON.initialize.functions( settings ); 1314 } 1315 1316 }; 1317 1318 SEMICOLON.widget = { 1319 1320 init: function(){ 1321 1322 SEMICOLON.widget.animations(); 1323 SEMICOLON.widget.hoverAnimation(); 1324 SEMICOLON.widget.youtubeBgVideo(); 1325 SEMICOLON.widget.tabs(); 1326 SEMICOLON.widget.toggles(); 1327 SEMICOLON.widget.accordions(); 1328 SEMICOLON.widget.counter(); 1329 SEMICOLON.widget.countdown(); 1330 SEMICOLON.widget.gmap(); 1331 SEMICOLON.widget.roundedSkill(); 1332 SEMICOLON.widget.progress(); 1333 SEMICOLON.widget.twitterFeed(); 1334 SEMICOLON.widget.flickrFeed(); 1335 SEMICOLON.widget.instagramPhotos(); 1336 SEMICOLON.widget.dribbbleShots(); 1337 SEMICOLON.widget.navTree(); 1338 SEMICOLON.widget.textRotator(); 1339 SEMICOLON.widget.carousel(); 1340 SEMICOLON.widget.linkScroll(); 1341 SEMICOLON.widget.ajaxForm(); 1342 SEMICOLON.widget.subscription(); 1343 SEMICOLON.widget.shapeDivider(); 1344 SEMICOLON.widget.stickySidebar(); 1345 SEMICOLON.widget.cookieNotify(); 1346 SEMICOLON.widget.cartQuantity(); 1347 SEMICOLON.widget.readmore(); 1348 SEMICOLON.widget.pricingSwitcher(); 1349 SEMICOLON.widget.extras(); 1350 1351 }, 1352 1353 parallax: function( element ){ 1354 let settings = { 1355 element: element, 1356 default: '.parallax,.page-title-parallax,.portfolio-parallax .portfolio-image', 1357 file: 'plugins.parallax.js', 1358 error: 'plugins.parallax.js: Plugin could not be loaded', 1359 execfn: 'SEMICOLON_parallaxInit', 1360 pluginfn: () => typeof skrollr !== "undefined", 1361 trigger: 'pluginParallaxReady', 1362 class: 'has-plugin-parallax' 1363 }; 1364 1365 SEMICOLON.initialize.functions( settings ); 1366 }, 1367 1368 animations: function( element ){ 1369 let settings = { 1370 element: element, 1371 default: '[data-animate]', 1372 file: 'plugins.animations.js', 1373 error: 'plugins.animations.js: Plugin could not be loaded', 1374 execfn: 'SEMICOLON_animationsInit', 1375 pluginfn: () => typeof scwAnimationsPlugin !== "undefined", 1376 trigger: 'pluginAnimationsReady', 1377 class: 'has-plugin-animations' 1378 }; 1379 1380 SEMICOLON.initialize.functions( settings ); 1381 }, 1382 1383 hoverAnimation: function( element ){ 1384 let settings = { 1385 element: element, 1386 default: '[data-hover-animate]', 1387 file: 'plugins.hoveranimation.js', 1388 error: 'plugins.hoveranimation.js: Plugin could not be loaded', 1389 execfn: 'SEMICOLON_hoverAnimationInit', 1390 pluginfn: () => typeof scwHoverAnimationPlugin !== "undefined", 1391 trigger: 'pluginHoverAnimationReady', 1392 class: 'has-plugin-hoveranimation' 1393 }; 1394 1395 SEMICOLON.initialize.functions( settings ); 1396 }, 1397 1398 gridInit: function( element ){ 1399 let settings = { 1400 element: element, 1401 default: '.grid-container', 1402 file: 'plugins.isotope.js', 1403 error: 'plugins.isotope.js: Plugin could not be loaded', 1404 execfn: 'SEMICOLON_gridContainerInit', 1405 pluginfn: () => $().isotope, 1406 trigger: 'pluginIsotopeReady', 1407 class: 'has-plugin-isotope' 1408 }; 1409 1410 SEMICOLON.initialize.functions( settings ); 1411 }, 1412 1413 filterInit: function( element ){ 1414 let settings = { 1415 element: element, 1416 default: '.grid-filter,.custom-filter', 1417 file: 'plugins.gridfilter.js', 1418 error: 'plugins.gridfilter.js: Plugin could not be loaded', 1419 execfn: 'SEMICOLON_gridFilterInit', 1420 pluginfn: () => $().isotope && typeof scwGridFilterPlugin !== "undefined", 1421 trigger: 'pluginGridFilterReady', 1422 class: 'has-plugin-isotope-filter' 1423 }; 1424 1425 SEMICOLON.initialize.functions( settings ); 1426 }, 1427 1428 loadFlexSlider: function( element ){ 1429 let settings = { 1430 element: element, 1431 default: '.fslider', 1432 file: 'plugins.flexslider.js', 1433 error: 'plugins.flexslider.js: Plugin could not be loaded', 1434 execfn: 'SEMICOLON_flexSliderInit', 1435 pluginfn: () => $().flexslider,
1436 trigger: 'pluginFlexSliderReady', 1437 class: 'has-plugin-flexslider' 1438 }; 1439 1440 SEMICOLON.initialize.functions( settings ); 1441 }, 1442 1443 html5Video: function( element ){ 1444 let settings = { 1445 element: element, 1446 default: '.video-wrap:has(video)', 1447 file: 'plugins.html5video.js', 1448 error: 'plugins.html5video.js: Plugin could not be loaded', 1449 execfn: 'SEMICOLON_html5VideoInit', 1450 pluginfn: () => typeof scwHtml5VideoPlugin !== "undefined", 1451 trigger: 'pluginHtml5VideoReady', 1452 class: 'has-plugin-html5video' 1453 }; 1454 1455 SEMICOLON.initialize.functions( settings ); 1456 }, 1457 1458 youtubeBgVideo: function( element ){ 1459 let settings = { 1460 element: element, 1461 default: '.yt-bg-player', 1462 file: 'plugins.youtube.js', 1463 error: 'plugins.youtube.js: Plugin could not be loaded', 1464 execfn: 'SEMICOLON_youtubeBgVideoInit', 1465 pluginfn: () => $().YTPlayer, 1466 trigger: 'pluginYoutubeBgVideoReady', 1467 class: 'has-plugin-youtubebg' 1468 }; 1469 1470 SEMICOLON.initialize.functions( settings ); 1471 }, 1472 1473 tabs: function( element ){ 1474 let settings = { 1475 element: element, 1476 default: '.tabs,[data-plugin="tabs"]', 1477 file: 'plugins.tabs.js', 1478 error: 'plugins.tabs.js: Plugin could not be loaded', 1479 execfn: 'SEMICOLON_tabsInit', 1480 pluginfn: () => $().tabs, 1481 trigger: 'pluginTabsReady', 1482 class: 'has-plugin-tabs' 1483 }; 1484 1485 SEMICOLON.initialize.functions( settings ); 1486 }, 1487 1488 toggles: function( element ){ 1489 let settings = { 1490 element: element, 1491 default: '.toggle', 1492 file: 'plugins.toggles.js', 1493 error: 'plugins.toggles.js: Plugin could not be loaded', 1494 execfn: 'SEMICOLON_togglesInit', 1495 pluginfn: () => typeof scwTogglesPlugin !== "undefined", 1496 trigger: 'pluginTogglesReady', 1497 class: 'has-plugin-toggles' 1498 }; 1499 1500 SEMICOLON.initialize.functions( settings ); 1501 }, 1502 1503 accordions: function( element ){ 1504 let settings = { 1505 element: element, 1506 default: '.accordion', 1507 file: 'plugins.accordions.js', 1508 error: 'plugins.accordions.js: Plugin could not be loaded', 1509 execfn: 'SEMICOLON_accordionsInit', 1510 pluginfn: () => typeof scwAccordionsPlugin !== "undefined", 1511 trigger: 'pluginAccordionsReady', 1512 class: 'has-plugin-accordions' 1513 }; 1514 1515 SEMICOLON.initialize.functions( settings ); 1516 }, 1517 1518 counter: function( element ){ 1519 let settings = { 1520 element: element, 1521 default: '.counter', 1522 file: 'plugins.counter.js', 1523 error: 'plugins.counter.js: Plugin could not be loaded', 1524 execfn: 'SEMICOLON_counterInit', 1525 pluginfn: () => $().countTo, 1526 trigger: 'pluginCounterReady', 1527 class: 'has-plugin-counter' 1528 }; 1529 1530 SEMICOLON.initialize.functions( settings ); 1531 }, 1532 1533 countdown: function( element ){ 1534 let momentSettings = { 1535 element: element, 1536 default: '.countdown', 1537 file: 'components/moment.js', 1538 error: 'components/moment.js: Plugin could not be loaded', 1539 execfn: false, 1540 pluginfn: () => typeof moment !== "undefined", 1541 trigger: 'pluginMomentReady', 1542 class: 'has-plugin-moment' 1543 }; 1544 1545 let settings = { 1546 element: element, 1547 default: '.countdown', 1548 file: 'plugins.countdown.js', 1549 error: 'plugins.countdown.js: Plugin could not be loaded', 1550 execfn: 'SEMICOLON_countdownInit', 1551 pluginfn: () => $().countdown, 1552 trigger: 'pluginCountdownReady', 1553 class: 'has-plugin-countdown' 1554 }; 1555 1556 SEMICOLON.initialize.functions( momentSettings ); 1557 SEMICOLON.initialize.functions( settings ); 1558 }, 1559 1560 gmap: function( element ){ 1561 let googleSettings = { 1562 element: element, 1563 default: '.gmap', 1564 file: 'https://maps.google.com/maps/api/js?key=' + googleMapsAPI, 1565 error: 'Google Maps API could not be loaded', 1566 execfn: false, 1567 pluginfn: () => typeof google !== "undefined", 1568 hiddendisable: true, 1569 class: 'has-plugin-gmapapi' 1570 }; 1571 1572 let settings = { 1573 element: element, 1574 default: '.gmap', 1575 file: 'plugins.gmap.js', 1576 error: 'plugins.gmap.js: Plugin could not be loaded', 1577 execfn: 'SEMICOLON_gmapInit', 1578 pluginfn: () => typeof google !== "undefined" && $().gMap, 1579 hiddendisable: true, 1580 trigger: 'pluginGmapReady', 1581 class: 'has-plugin-gmap' 1582 }; 1583 1584 SEMICOLON.initialize.functions( googleSettings ); 1585 SEMICOLON.initialize.functions( settings ); 1586 }, 1587 1588 roundedSkill: function( element ){ 1589 let settings = { 1590 element: element, 1591 default: '.rounded-skill', 1592 file: 'plugins.piechart.js', 1593 error: 'plugins.piechart.js: Plugin could not be loaded', 1594 execfn: 'SEMICOLON_roundedSkillInit', 1595 pluginfn: () => $().easyPieChart, 1596 trigger: 'pluginRoundedSkillReady', 1597 class: 'has-plugin-piechart' 1598 }; 1599 1600 SEMICOLON.initialize.functions( settings ); 1601 }, 1602 1603 progress: function( element ){ 1604 let settings = { 1605 element: element, 1606 default: '.progress', 1607 file: 'plugins.progress.js', 1608 error: 'plugins.progress.js: Plugin could not be loaded', 1609 execfn: 'SEMICOLON_progressInit', 1610 pluginfn: () => typeof scwProgressPlugin !== "undefined", 1611 trigger: 'pluginProgressReady', 1612 class: 'has-plugin-progress' 1613 }; 1614 1615 SEMICOLON.initialize.functions( settings ); 1616 }, 1617 1618 twitterFeed: function( element ){ 1619 let settings = { 1620 element: element, 1621 default: '.twitter-feed', 1622 file: 'plugins.twitter.js', 1623 error: 'plugins.twitter.js: Plugin could not be loaded', 1624 execfn: 'SEMICOLON_twitterFeedInit', 1625 pluginfn: () => typeof sm_format_twitter !== "undefined" && typeof sm_format_twitter3 !== "undefined", 1626 trigger: 'pluginTwitterFeedReady', 1627 class: 'has-plugin-twitter' 1628 }; 1629 1630 SEMICOLON.initialize.functions( settings ); 1631 }, 1632 1633 flickrFeed: function( element ){ 1634 let settings = { 1635 element: element, 1636 default: '.flickr-feed', 1637 file: 'plugins.flickrfeed.js', 1638 error: 'plugins.flickrfeed.js: Plugin could not be loaded', 1639 execfn: 'SEMICOLON_flickrFeedInit', 1640 pluginfn: () => $().jflickrfeed, 1641 trigger: 'pluginFlickrFeedReady', 1642 class: 'has-plugin-flickr' 1643 }; 1644 1645 SEMICOLON.initialize.functions( settings ); 1646 }, 1647 1648 instagramPhotos: function( element ){ 1649 let settings = { 1650 element: element, 1651 default: '.instagram-photos', 1652 file: 'plugins.instagram.js', 1653 error: 'plugins.instagram.js: Plugin could not be loaded', 1654 execfn: 'SEMICOLON_instagramPhotosInit', 1655 pluginfn: () => typeof scwInstagramPlugin !== "undefined", 1656 trigger: 'pluginInstagramReady', 1657 class: 'has-plugin-instagram' 1658 }; 1659 1660 SEMICOLON.initialize.functions( settings ); 1661 }, 1662 1663 dribbbleShots: function( element ){ 1664 let settings = { 1665 element: element, 1666 default: '.dribbble-shots', 1667 file: 'plugins.dribbble.js', 1668 error: 'plugins.dribbble.js: Plugin could not be loaded', 1669 execfn: 'SEMICOLON_dribbbleShotsInit', 1670 pluginfn: () => $.jribbble, 1671 trigger: 'pluginDribbbleReady', 1672 class: 'has-plugin-dribbble' 1673 }; 1674 1675 let imagesLoadedSettings = { 1676 element: element, 1677 default: '.dribbble-shots', 1678 file: 'plugins.imagesloaded.js', 1679 error: 'plugins.imagesloaded.js: Plugin could not be loaded', 1680 pluginfn: () => $().imagesLoaded, 1681 trigger: 'pluginImagesLoadedReady', 1682 class: 'has-plugin-imagesloaded' 1683 }; 1684 1685 SEMICOLON.initialize.functions( settings ); 1686 SEMICOLON.initialize.functions( imagesLoadedSettings ); 1687 }, 1688 1689 navTree: function( element ){ 1690 let settings = { 1691 element: element, 1692 default: '.nav-tree', 1693 file: 'plugins.navtree.js', 1694 error: 'plugins.navtree.js: Plugin could not be loaded', 1695 execfn: 'SEMICOLON_navtreeInit', 1696 pluginfn: () => typeof scwNavTreePlugin !== "undefined", 1697 trigger: 'pluginNavTreeReady', 1698 class: 'has-plugin-navtree' 1699 }; 1700 1701 SEMICOLON.initialize.functions( settings ); 1702 }, 1703 1704 carousel: function( element ){ 1705 let settings = { 1706 element: element, 1707 default: '.carousel-widget', 1708 file: 'plugins.carousel.js', 1709 error: 'plugins.carousel.js: Plugin could not be loaded', 1710 execfn: 'SEMICOLON_carouselInit', 1711 pluginfn: () => $().owlCarousel, 1712 trigger: 'pluginCarouselReady', 1713 class: 'has-plugin-carousel' 1714 }; 1715 1716 SEMICOLON.initialize.functions( settings ); 1717 }, 1718 1719 masonryThumbs: function( element ){ 1720 let settings = { 1721 element: element, 1722 default: '.masonry-thumbs', 1723 file: 'plugins.masonrythumbs.js', 1724 error: 'plugins.masonrythumbs.js: Plugin could not be loaded', 1725 execfn: 'SEMICOLON_masonryThumbsInit', 1726 pluginfn: () => $().isotope && typeof scwMasonryThumbsPlugin !== "undefined", 1727 trigger: 'pluginMasonryThumbsReady', 1728 class: 'has-plugin-masonrythumbs' 1729 }; 1730 1731 SEMICOLON.initialize.functions( settings ); 1732 }, 1733 1734 notifications: function( element ){ 1735 let settings = { 1736 element: element, 1737 default: false, 1738 file: 'plugins.notify.js', 1739 error: 'plugins.notify.js: Plugin could not be loaded', 1740 execfn: 'SEMICOLON_notificationInit', 1741 pluginfn: () => typeof scwNotificationPlugin !== "undefined", 1742 trigger: 'pluginNotifyReady', 1743 class: 'has-plugin-toast' 1744 }; 1745 1746 SEMICOLON.initialize.functions( settings ); 1747 }, 1748 1749 textRotator: function( element ){ 1750 let settings = { 1751 element: element, 1752 default: '.text-rotater', 1753 file: 'plugins.textrotator.js', 1754 error: 'plugins.textrotator.js: Plugin could not be loaded', 1755 execfn: 'SEMICOLON_textRotatorInit', 1756 pluginfn: () => $().Morphext, 1757 trigger: 'pluginTextRotatorReady', 1758 class: 'has-plugin-textrotator' 1759 }; 1760 1761 SEMICOLON.initialize.functions( settings ); 1762 }, 1763 1764 linkScroll: function( element ){ 1765 let settings = { 1766 element: element, 1767 default: 'a[data-scrollto]', 1768 file: 'plugins.linkscroll.js', 1769 error: 'plugins.linkscroll.js: Plugin could not be loaded', 1770 execfn: 'SEMICOLON_linkScrollInit', 1771 pluginfn: () => typeof scwLinkScrollPlugin !== "undefined", 1772 trigger: 'pluginLinkScrollReady', 1773 class: 'has-plugin-linkscroll' 1774 }; 1775 1776 SEMICOLON.initialize.functions( settings ); 1777 }, 1778 1779 ajaxForm: function( element ){ 1780 let formSettings = { 1781 element: element, 1782 default: '.form-widget', 1783 file: 'plugins.form.js', 1784 error: 'plugins.form.js: Plugin could not be loaded', 1785 execfn: false, 1786 pluginfn: () => $().validate && $().ajaxSubmit, 1787 class: 'has-plugin-form' 1788 }; 1789 1790 let settings = { 1791 element: element, 1792 default: '.form-widget', 1793 file: 'plugins.ajaxform.js', 1794 error: 'plugins.ajaxform.js: Plugin could not be loaded', 1795 execfn: 'SEMICOLON_ajaxFormInit', 1796 pluginfn: () => typeof scwAjaxFormPlugin !== "undefined", 1797 trigger: 'pluginAjaxFormReady', 1798 class: 'has-plugin-ajaxform' 1799 }; 1800 1801 SEMICOLON.initialize.functions( formSettings ); 1802 SEMICOLON.initialize.functions( settings ); 1803 }, 1804 1805 subscription: function( element ){ 1806 let formSettings = { 1807 element: element, 1808 default: '.subscribe-widget', 1809 file: 'plugins.form.js', 1810 error: 'plugins.form.js: Plugin could not be loaded', 1811 execfn: false, 1812 pluginfn: () => $().validate && $().ajaxSubmit, 1813 class: 'has-plugin-form' 1814 }; 1815 1816 let settings = { 1817 element: element, 1818 default: '.subscribe-widget', 1819 file: 'plugins.subscribe.js', 1820 error: 'plugins.subscribe.js: Plugin could not be loaded', 1821 execfn: 'SEMICOLON_subscribeFormInit', 1822 pluginfn: () => typeof scwSubscribeFormPlugin !== "undefined", 1823 trigger: 'pluginSubscribeFormReady', 1824 class: 'has-plugin-subscribeform' 1825 }; 1826 1827 SEMICOLON.initialize.functions( formSettings ); 1828 SEMICOLON.initialize.functions( settings ); 1829 }, 1830 1831 shapeDivider: function( element ){ 1832 let settings = { 1833 element: element, 1834 default: '.shape-divider', 1835 file: 'plugins.shapedivider.js', 1836 error: 'plugins.shapedivider.js: Plugin could not be loaded', 1837 execfn: 'SEMICOLON_shapeDividerInit', 1838 pluginfn: () => typeof scwShapeDividerPlugin !== "undefined", 1839 trigger: 'pluginShapeDividerReady', 1840 class: 'has-plugin-shapedivider' 1841 }; 1842 1843 SEMICOLON.initialize.functions( settings ); 1844 }, 1845 1846 ticker: function( element ){ 1847 let settings = { 1848 element: element, 1849 default: '.scw-ticker', 1850 file: 'plugins.ticker.js', 1851 error: 'plugins.ticker.js: Plugin could not be loaded', 1852 execfn: 'SEMICOLON_tickerInit', 1853 pluginfn: () => typeof scwTickerPlugin !== "undefined", 1854 trigger: 'pluginTickerReady', 1855 class: 'has-plugin-ticker' 1856 }; 1857 1858 SEMICOLON.initialize.functions( settings ); 1859 }, 1860 1861 stickySidebar: function( element ){ 1862 let settings = { 1863 element: element, 1864 default: '.sticky-sidebar-wrap', 1865 file: 'plugins.stickysidebar.js', 1866 error: 'plugins.stickysidebar.js: Plugin could not be loaded', 1867 execfn: 'SEMICOLON_stickySidebarInit', 1868 pluginfn: () => $().scwStickySidebar, 1869 trigger: 'pluginStickySidebarReady', 1870 class: 'has-plugin-stickysidebar' 1871 }; 1872 1873 SEMICOLON.initialize.functions( settings ); 1874 }, 1875 1876 cookieNotify: function( element ){ 1877 let settings = { 1878 element: element, 1879 default: '.gdpr-settings,[data-cookies]', 1880 file: 'plugins.cookie.js', 1881 error: 'plugins.cookie.js: Plugin could not be loaded', 1882 execfn: 'SEMICOLON_cookieInit', 1883 pluginfn: () => typeof Cookies !== "undefined", 1884 trigger: 'pluginCookieReady', 1885 class: 'has-plugin-cookie' 1886 }; 1887 1888 SEMICOLON.initialize.functions( settings ); 1889 }, 1890 1891 cartQuantity: function(){ 1892 let settings = { 1893 default: '.qty', 1894 file: 'plugins.quantity.js', 1895 error: 'plugins.quantity.js: Plugin could not be loaded', 1896 execfn: 'SEMICOLON_quantityInit', 1897 pluginfn: () => typeof scwQuantityPlugin !== "undefined", 1898 trigger: 'pluginQuantityReady', 1899 class: 'has-plugin-quantity' 1900 }; 1901 1902 SEMICOLON.initialize.functions( settings ); 1903 }, 1904 1905 readmore: function(){ 1906 let settings = { 1907 default: '[data-readmore]', 1908 file: 'plugins.readmore.js', 1909 error: 'plugins.readmore.js: Plugin could not be loaded', 1910 execfn: 'SEMICOLON_readmoreInit', 1911 pluginfn: () => typeof scwReadMorePlugin !== "undefined", 1912 trigger: 'pluginReadMoreReady', 1913 class: 'has-plugin-readmore' 1914 }; 1915 1916 SEMICOLON.initialize.functions( settings ); 1917 }, 1918 1919 pricingSwitcher: function(){ 1920 let settings = { 1921 default: '.pts-switcher', 1922 file: 'plugins.pricingswitcher.js', 1923 error: 'plugins.pricingswitcher.js: Plugin could not be loaded', 1924 execfn: 'SEMICOLON_pricingSwitcherInit', 1925 pluginfn: () => typeof scwPricingSwitcherPlugin !== "undefined", 1926 trigger: 'pluginPricingSwitcherReady', 1927 class: 'has-plugin-pricing-switcher' 1928 }; 1929 1930 SEMICOLON.initialize.functions( settings ); 1931 }, 1932 1933 extras: function(){ 1934 let btsCheckIntevral = setInterval( function(){ 1935 if( 'pluginBootstrapReady' in scwEvents ) { 1936 if( $().tooltip ) { 1937 $('[data-bs-toggle="tooltip"]').tooltip({container: 'body'}); 1938 } else { 1939 console.log('extras: Bootstrap Tooltip not defined.'); 1940 } 1941 1942 if( $().popover ) { 1943 $('[data-bs-toggle="popover"]').popover({container: 'body'}); 1944 } else { 1945 console.log('extras: Bootstrap Popover not defined.'); 1946 } 1947 1948 clearInterval( btsCheckIntevral ); 1949 } 1950 }, 1000 ); 1951 1952 $('.style-msg').on( 'click', '.close', function(e){
1953 $( this ).parents( '.style-msg' ).slideUp(); 1954 e.preventDefault(); 1955 }); 1956 1957 $('#page-menu-trigger').off( 'click' ).on( 'click', function() { 1958 $body.toggleClass('top-search-open', false); 1959 $pagemenu.toggleClass("page-menu-open"); 1960 return false; 1961 }); 1962 1963 $pagemenu.find('nav').off( 'click' ).on( 'click', function(e){ 1964 $body.toggleClass('top-search-open', false); 1965 $topCart.toggleClass('top-cart-open', false); 1966 }); 1967 1968 if( SEMICOLON.isMobile.any() ){ 1969 $body.addClass('device-touch'); 1970 } 1971 1972 if( $body.hasClass( 'adaptive-color-scheme' ) ) { 1973 1974 let adaptiveEl = $('[data-adaptive-light-class], [data-adaptive-dark-class]'), 1975 adaptLightClass = adaptiveEl.attr( 'data-adaptive-light-class' ), 1976 adaptDarkClass = adaptiveEl.attr( 'data-adaptive-dark-class' ); 1977 1978 let adaptClasses = function( dark ) { 1979 if( dark ) { 1980 $body.toggleClass( 'dark', true ); 1981 adaptiveEl.removeClass( adaptLightClass ).addClass( adaptDarkClass ); 1982 } else { 1983 $body.toggleClass( 'dark', false ); 1984 adaptiveEl.removeClass( adaptDarkClass ).addClass( adaptLightClass ); 1985 } 1986 SEMICOLON.header.logo(); 1987 }; 1988 1989 if( window.matchMedia ) { 1990 adaptClasses( window.matchMedia('(prefers-color-scheme: dark)').matches ); 1991 1992 window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { 1993 adaptClasses( e.matches ); 1994 }); 1995 } 1996 } 1997 1998 $body.off( 'click' ).on( 'click', 'a[href*="#"]', function() { 1999 $window.on('beforeunload', function() { 2000 $window.scrollTop(0); 2001 }); 2002 }); 2003 2004 let linkElement = location.hash; 2005 if( $(linkElement).length > 0 && $('.one-page-menu').find('[data-href="'+linkElement+'"]').length > 0 ) { 2006 $window.scrollTop(0); 2007 } 2008 } 2009 2010 }; 2011 2012 SEMICOLON.isMobile = { 2013 Android: function() { 2014 return navigator.userAgent.match(/Android/i); 2015 }, 2016 BlackBerry: function() { 2017 return navigator.userAgent.match(/BlackBerry/i); 2018 }, 2019 iOS: function() { 2020 return navigator.userAgent.match(/iPhone|iPad|iPod/i); 2021 }, 2022 Opera: function() { 2023 return navigator.userAgent.match(/Opera Mini/i); 2024 }, 2025 Windows: function() { 2026 return navigator.userAgent.match(/IEMobile/i); 2027 }, 2028 any: function() { 2029 return (SEMICOLON.isMobile.Android() || SEMICOLON.isMobile.BlackBerry() || SEMICOLON.isMobile.iOS() || SEMICOLON.isMobile.Opera() || SEMICOLON.isMobile.Windows()); 2030 } 2031 }; 2032 2033 // Add your Custom JS Codes here 2034 SEMICOLON.customization = { 2035 2036 onReady: function(){ 2037 2038 // Add JS Codes here to Run on Document Ready 2039 2040 }, 2041 2042 onLoad: function(){ 2043 2044 // Add JS Codes here to Run on Window Load 2045 2046 }, 2047 2048 onResize: function(){ 2049 2050 // Add JS Codes here to Run on Window Resize 2051 2052 } 2053 2054 } 2055 2056 SEMICOLON.documentOnResize = { 2057 2058 init: function(){ 2059 2060 SEMICOLON.header.menufunctions(); 2061 SEMICOLON.header.fullWidthMenu(); 2062 SEMICOLON.header.stickyMenu(); 2063 SEMICOLON.header.logo(); 2064 SEMICOLON.initialize.dataResponsiveHeights(); 2065 SEMICOLON.initialize.stickFooterOnSmall(); 2066 SEMICOLON.slider.sliderDimensions(); 2067 SEMICOLON.slider.sliderParallax(); 2068 SEMICOLON.widget.html5Video(); 2069 SEMICOLON.widget.masonryThumbs(); 2070 SEMICOLON.initialize.dataResponsiveClasses(); 2071 SEMICOLON.customization.onResize(); 2072 2073 windowWidth = $window.width(); 2074 2075 $(window).trigger( 'scwWindowResize' ); 2076 2077 } 2078 2079 }; 2080 2081 SEMICOLON.documentOnReady = { 2082 2083 init: function(){ 2084 SEMICOLON.initialize.init(); 2085 SEMICOLON.header.init(); 2086 if( $slider.length > 0 || $sliderElement.length > 0 ) { SEMICOLON.slider.init(); } 2087 if( $portfolio.length > 0 ) { SEMICOLON.portfolio.init(); } 2088 SEMICOLON.widget.init(); 2089 SEMICOLON.documentOnReady.windowscroll(); 2090 SEMICOLON.customization.onReady(); 2091 }, 2092 2093 windowscroll: function(){ 2094 2095 if( $header.length > 0 ) { 2096 headerOffset = $header.offset().top; 2097 $headerWrap.addClass('position-absolute'); 2098 headerWrapOffset = $headerWrap.offset().top; 2099 $headerWrap.removeClass('position-absolute'); 2100 } 2101 2102 let headerDefinedOffset = $header.attr('data-sticky-offset'); 2103 if( typeof headerDefinedOffset !== 'undefined' ) { 2104 if( headerDefinedOffset == 'full' ) { 2105 headerWrapOffset = $window.height(); 2106 let headerOffsetNegative = $header.attr('data-sticky-offset-negative'); 2107 if( typeof headerOffsetNegative !== 'undefined' ) { 2108 headerWrapOffset = headerWrapOffset - headerOffsetNegative - 1; 2109 } 2110 } else { 2111 headerWrapOffset = Number(headerDefinedOffset); 2112 } 2113 } else { 2114 if( headerWrapOffset === 'undefined' ) { 2115 headerWrapOffset = headerOffset; 2116 } 2117 } 2118 2119 let pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2120 offset = $headerWrap.outerHeight(), 2121 head = document.head || document.getElementsByTagName('head')[0], 2122 style = document.createElement('style'), 2123 css; 2124 2125 if( $pagemenu.length > 0 ) { 2126 $pageMenuClone.css({ 'height': $pagemenu.find('#page-menu-wrap').outerHeight() }); 2127 setTimeout( function(){ 2128 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 2129 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || mobileSticky == 'true' ) { 2130 pageMenuOffset = $pagemenu.offset().top - $headerWrap.outerHeight(); 2131 head.appendChild(style); 2132 css = '#page-menu.sticky-page-menu:not(.dots-menu) #page-menu-wrap { top: '+ offset +'px; }'; 2133 2134 style.type = 'text/css'; 2135 style.appendChild(document.createTextNode(css)); 2136 } else { 2137 pageMenuOffset = $pagemenu.offset().top; 2138 } 2139 } else { 2140 pageMenuOffset = $pagemenu.offset().top; 2141 } 2142 }, 1000); 2143 } 2144 2145 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2146 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2147 2148 window.addEventListener( 'scroll', function(){ 2149 2150 SEMICOLON.initialize.goToTopScroll(); 2151 $('body.open-header.close-header-on-scroll').removeClass("side-header-open"); 2152 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2153 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2154 SEMICOLON.header.logo(); 2155 2156 }, { passive: true });
2157 2158 window.addEventListener( 'DOMContentLoaded', onScrollSliderParallax, false ); 2159 2160 $window.scrollEnd( function(){ 2161 let headerHeight = $headerWrap.outerHeight(); 2162 if( $pagemenu.length > 0 && $header.length > 0 && !$header.hasClass('no-sticky') ) { 2163 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 2164 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 2165 } 2166 } 2167 }, 500 ); 2168 2169 } 2170 2171 }; 2172 2173 SEMICOLON.documentOnLoad = { 2174 2175 init: function(){ 2176 SEMICOLON.slider.swiperSliderMenu(true); 2177 SEMICOLON.slider.revolutionSliderMenu(true); 2178 SEMICOLON.initialize.stickFooterOnSmall(); 2179 SEMICOLON.widget.gridInit(); 2180 let isoCheckInt = setInterval( function(){ 2181 if( 'pluginIsotopeReady' in scwEvents ) { 2182 SEMICOLON.widget.filterInit(); 2183 SEMICOLON.widget.masonryThumbs(); 2184 clearInterval( isoCheckInt ); 2185 } 2186 }, 1000 ); 2187 SEMICOLON.widget.parallax(); 2188 SEMICOLON.widget.loadFlexSlider(); 2189 SEMICOLON.widget.html5Video(); 2190 SEMICOLON.widget.ticker(); 2191 SEMICOLON.header.responsiveMenuClass(); 2192 SEMICOLON.initialize.modal(); 2193 SEMICOLON.customization.onLoad(); 2194 2195 } 2196 2197 }; 2198 2199 let $window = $(window), 2200 windowScrT, 2201 $body = $('body'), 2202 $wrapper = $('#wrapper'), 2203 $header = $('#header'), 2204 $headerWrap = $('#header-wrap'), 2205 $headerInc = $('.include-header'), 2206 defLogoH = $header.attr('data-logo-height') || 140, 2207 stickyLogoH = $header.attr('data-sticky-logo-height') || 60, 2208 mobileSticky = $header.attr('data-mobile-sticky') || 'false', 2209 mobileLogoH = $header.attr('data-mobile-logo-height') || Number( defLogoH ), 2210 mobileStickyLogoH = $header.attr('data-mobile-sticky-logo-height') || Number( stickyLogoH ), 2211 defMenuP = $header.attr('data-menu-padding') || 39, 2212 stickyMenuP = $header.attr('data-sticky-menu-padding') || 19, 2213 headerSizeCustom = !$header.hasClass('header-size-lg') && !$header.hasClass('header-size-md') && !$header.hasClass('header-size-sm') && !$header.hasClass('header-size-custom'), 2214 stickyShrink = $header.attr('data-sticky-shrink') || 'true', 2215 stickyShrinkOffset = $header.attr('data-sticky-shrink-offset') || 300, 2216 primaryMenu = $('.primary-menu'), 2217 primaryMenuMainItems = primaryMenu.find('.menu-container:not(mobile-primary-menu):not(.custom-spacing)').children('.menu-item').children('.menu-link'), 2218 $headerWrapClone = '', 2219 initialHeaderWrapHeight = $headerWrap.outerHeight(), 2220 $headerRow = $headerWrap.find('.header-row:eq(0)'), 2221 $content = $('#content'), 2222 $footer = $('#footer'), 2223 windowWidth = $window.width(), 2224 oldHeaderClasses = $header.attr('class'), 2225 oldHeaderWrapClasses = $headerWrap.attr('class'), 2226 stickyMenuClasses = $header.attr('data-sticky-class'), 2227 responsiveMenuClasses = $header.attr('data-responsive-class'), 2228 logo = $('#logo'), 2229 defaultLogo = logo.find('.standard-logo'), 2230 defaultLogoWidth = defaultLogo.find('img').outerWidth(), 2231 retinaLogo = logo.find('.retina-logo'), 2232 defaultLogoImg = defaultLogo.find('img').attr('src'), 2233 retinaLogoImg = retinaLogo.find('img').attr('src'), 2234 defaultDarkLogo = defaultLogo.attr('data-dark-logo'), 2235 retinaDarkLogo = retinaLogo.attr('data-dark-logo'), 2236 defaultStickyLogo = defaultLogo.attr('data-sticky-logo'), 2237 retinaStickyLogo = retinaLogo.attr('data-sticky-logo'), 2238 defaultMobileLogo = defaultLogo.attr('data-mobile-logo'), 2239 retinaMobileLogo = retinaLogo.attr('data-mobile-logo'), 2240 topSearchTimeOut, 2241 $pagemenu = $('#page-menu'), 2242 $pageMenuClone = '', 2243 $pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2244 $onePageMenuEl = $('.one-page-menu'), 2245 $portfolio = $('.portfolio'), 2246 $shop = $('.shop'), 2247 $slider = $('#slider'), 2248 $sliderParallaxEl = $('.slider-parallax'), 2249 $sliderElement = $('.slider-element'), 2250 swiperSlider = '', 2251 $pageTitle = $('#page-title'), 2252 $topSearch = $('.top-search-form'), 2253 $topCart = $('#top-cart'), 2254 $topSocialEl = $('#top-social').find('li'), 2255 $goToTopEl = $('#gotoTop'), 2256 googleMapsAPI = 'YOUR-API-KEY', 2257 xScrollPosition, 2258 yScrollPosition, 2259 sliderParallaxEl = document.querySelector('.slider-parallax'), 2260 sliderParallaxElCaption = document.querySelector('.slider-parallax .slider-caption'), 2261 sliderParallaxElInner = document.querySelector('.slider-inner'), 2262 initHeaderHeight, 2263 headerOffset = 0, 2264 headerWrapOffset = 0, 2265 pageMenuOffset = 0, 2266 resizeTimer; 2267 2268 $(document).ready( SEMICOLON.documentOnReady.init ); 2269 2270 $window.on( 'load', SEMICOLON.documentOnLoad.init ); 2271 2272 $window.on( 'resize', function() { 2273 let thisWindow = $(this); 2274 clearTimeout(resizeTimer); 2275 resizeTimer = setTimeout(function() { 2276 if ( thisWindow.width() !== windowWidth ) {
2277 SEMICOLON.documentOnResize.init(); 2278 } 2279 }, 250); 2280 }); 2281 2282})(jQuery);
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.