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 538 let submenus = subMenuEl || $( '.mega-menu-content, .sub-menu-container, .top-links-section' ); 539 540 submenus.children().css({ 'display': 'block' }); 541 submenus.css({ 'display': 'block' }); 542 submenus.each( function( index, element ){ 543 let $menuChildElement = $(element), 544 menuChildOffset = $menuChildElement.offset(), 545 menuChildWidth = $menuChildElement.width(); 546 547 if(windowWidth - (menuChildWidth + menuChildOffset.left) < 0) { 548 $menuChildElement.addClass('menu-pos-invert'); 549 } 550 }); 551 submenus.children().css({ 'display': '' }); 552 submenus.css({ 'display': '' }); 553 554 }, 555 556 includeOffset: function(){ 557 if( $headerInc.length < 1 ) { 558 return true; 559 } 560 561 let headerInc = $header.outerHeight(); 562 if( $header.hasClass('floating-header') || $headerInc.hasClass('include-topbar') ) { 563 headerInc = headerInc + $header.offset().top; 564 } 565 $headerInc.css({ 'margin-top': -headerInc }); 566 SEMICOLON.slider.sliderParallax(); 567 }, 568 569 menufunctions: function(){ 570
571 let menuItemSubs = $( '.menu-item:has(.sub-menu-container)' ), 572 menuItemSubsLinks = menuItemSubs.children( '.menu-link' ), 573 submenusT = '.mega-menu-content, .sub-menu-container', 574 submenus = $( submenusT ), 575 menuItemT = '.menu-item', 576 subMenuT = '.sub-menu', 577 menuSpeed = primaryMenu.attr( 'data-trigger-speed' ) || 200, 578 subMenuTriggerT = '.sub-menu-trigger', 579 menuItemTrigger; 580 581 menuSpeed = Number( menuSpeed ); 582 583 menuItemTrigger = menuItemSubs.children( subMenuTriggerT ); 584 585 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 586 setTimeout( function(){ 587 if( $headerWrapClone.length > 0 ) { 588 $headerWrapClone.css({ 'height': initHeaderHeight }); 589 } 590 SEMICOLON.header.includeOffset(); 591 }, 1000); 592 primaryMenu.find( submenus ).css({ 'display': '' }); 593 } else { 594 $headerInc.css({ 'margin-top': '' }); 595 } 596 597 if( ( $body.hasClass('overlay-menu') && primaryMenu.hasClass('on-click') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 598 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 599 let triggerEl = $(this); 600 triggerEl.parents( subMenuT ).siblings().find( submenus ).stop( true, true ).slideUp( menuSpeed ); 601 triggerEl.parent( menuItemT ).children( submenusT ).stop( true, true ).slideToggle( menuSpeed ); 602 e.preventDefault(); 603 }); 604 } else if( ( $body.hasClass('side-header') && primaryMenu.hasClass('on-click') ) || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 605 menuItemTrigger.removeClass('icon-rotate-90'); 606 $( menuItemT ).find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed , function(){ 607 $body.toggleClass("primary-menu-open", false); 608 }); 609 610 menuItemTrigger = menuItemTrigger.add( menuItemSubsLinks.filter('[href^="#"]') ); 611 612 menuItemTrigger.off( 'click' ).on( 'click', function(e){ 613 let triggerEl = $(this); 614 triggerEl.parents( subMenuT ).siblings().find( subMenuTriggerT ).removeClass('icon-rotate-90'); 615 triggerEl.parents( subMenuT ).siblings().find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed ); 616 triggerEl.parent( menuItemT ).children( submenusT ).filter(':not(:animated)').stop( true, true ).slideToggle( menuSpeed ); 617 618 let subMenuTriggerEl = triggerEl.parent( menuItemT ).children( subMenuTriggerT ); 619 620 if( !subMenuTriggerEl.hasClass( 'icon-rotate-90' ) ) { 621 subMenuTriggerEl.addClass('icon-rotate-90'); 622 } else { 623 subMenuTriggerEl.removeClass('icon-rotate-90'); 624 } 625 626 e.preventDefault(); 627 }); 628 } else if( ( $body.hasClass('overlay-menu') || $body.hasClass('side-header') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 629 primaryMenu.find( submenus ).stop( true, true ).slideUp( menuSpeed ); 630 $( menuItemT ).hover( function(e){ 631 $(this).children( submenusT ).stop( true, true ).slideDown( menuSpeed ); 632 }, function(){ 633 $(this).children( submenusT ).stop( true, true ).slideUp( menuSpeed ); 634 }); 635 } else { 636 if( primaryMenu.hasClass('on-click') ) { 637 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 638 let triggerEl = $(this); 639 triggerEl.parents( subMenuT ).siblings().find( submenus ).removeClass('d-block'); 640 triggerEl.parent( menuItemT ).children( submenusT ).toggleClass('d-block'); 641 triggerEl.parent( menuItemT ).siblings().removeClass('current'); 642 triggerEl.parent( menuItemT ).toggleClass('current'); 643 e.preventDefault(); 644 }); 645 } 646 } 647 648 if( $('.top-links').hasClass('on-click') || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 649 $('.top-links-item:has(.top-links-sub-menu,.top-links-section) > a').on( 'click', function(e){ 650 $(this).parents('li').siblings().find('.top-links-sub-menu,.top-links-section').removeClass('d-block'); 651 $(this).parent('li').children('.top-links-sub-menu,.top-links-section').toggleClass('d-block'); 652 e.preventDefault(); 653 }); 654 } 655 656 SEMICOLON.header.menuInvert( $('.top-links-section') ); 657 658 $('#primary-menu-trigger').off( 'click' ).on( 'click', function() { 659 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 660 if( primaryMenu.find('.mobile-primary-menu').length > 0 ) { 661 $( '.primary-menu:not(.mobile-menu-off-canvas) .mobile-primary-menu' ).stop( true, true ).slideToggle( menuSpeed ); 662 $( '.primary-menu.mobile-menu-off-canvas .mobile-primary-menu' ).toggleClass('d-block'); 663 } else { 664 $( '.primary-menu:not(.mobile-menu-off-canvas) .menu-container' ).stop( true, true ).slideToggle( menuSpeed ); 665 $( '.primary-menu.mobile-menu-off-canvas .menu-container' ).toggleClass('d-block'); 666 } 667 } 668 $body.toggleClass("primary-menu-open"); 669 return false; 670 }); 671 672 $( '.menu-container:not(.mobile-primary-menu)' ).css({ 'display': '' }); 673 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 674 primaryMenu.find('.mobile-primary-menu').removeClass('d-block'); 675 } 676 677 }, 678 679 fullWidthMenu: function(){ 680 681 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 682 $('.mega-menu-content, .top-search-form').css({ 'width': '' }); 683 return true; 684 } 685 686 let headerWidth = $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').parents('.header-row').width(); 687 688 if( $header.find('.container-fullwidth').length > 0 ) { 689 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth }); 690 } 691 692 if( $body.hasClass('stretched') ) { 693 if( $header.hasClass('floating-header') ) { 694 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth + 80 }); 695 } else { 696 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth }); 697 } 698 } else { 699 if( $header.hasClass('full-header') ) { 700 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth - 80 }); 701 } 702 } 703 704 if( $header.find('.header-row').length > 1 ) { 705 let megaMenuContent = $('.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content').eq(0), 706 offset = $headerWrap.outerHeight() - megaMenuContent.parents('.header-row').outerHeight(), 707 css = '.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content { top: calc( 100% - '+ offset +'px ); }', 708 head = document.head || document.getElementsByTagName('head')[0], 709 style = document.createElement('style'); 710 711 head.appendChild(style); 712 713 style.type = 'text/css'; 714 style.appendChild(document.createTextNode(css)); 715 } 716 }, 717 718 stickyMenu: function( headerOffset ){ 719 720 windowScrT = $window.scrollTop(); 721 722 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 723 if( windowScrT > headerOffset ) { 724 725 if( !$body.hasClass('side-header') ) { 726 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 727 // if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 728 SEMICOLON.header.stickyMenuClass(); 729 730 if( stickyShrink == 'true' && !$header.hasClass('no-sticky') ) { 731 if( ( windowScrT - headerOffset ) > Number( stickyShrinkOffset ) ) { 732 $header.addClass('sticky-header-shrink'); 733 if( headerSizeCustom ){ 734 logo.find('img').css({ 'height': Number( stickyLogoH ) }); 735 SEMICOLON.header.menuItemsSpacing( stickyMenuP ); 736 } 737 } else { 738 $header.removeClass('sticky-header-shrink'); 739 if( headerSizeCustom ){ 740 logo.find('img').css({ 'height': Number( defLogoH ) }); 741 SEMICOLON.header.menuItemsSpacing( defMenuP ); 742 } 743 } 744 } 745 } 746 747 } else { 748 SEMICOLON.header.removeStickyness(); 749 if( headerSizeCustom ){ 750 logo.find('img').css({ 'height': Number( defLogoH ) }); 751 SEMICOLON.header.menuItemsSpacing( defMenuP ); 752 } 753 } 754 } 755 756 if( $body.hasClass('device-xs') || $body.hasClass('device-sm') || $body.hasClass('device-md') ) { 757 if( mobileSticky == 'true' ) { 758 if( windowScrT > headerOffset ) { 759 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 760 SEMICOLON.header.stickyMenuClass(); 761 } else { 762 SEMICOLON.header.removeStickyness(); 763 SEMICOLON.header.responsiveMenuClass(); 764 } 765 } else { 766 SEMICOLON.header.removeStickyness(); 767 } 768 if( headerSizeCustom ){ 769 logo.find('img').css({ 'height': Number( mobileLogoH ) }); 770 SEMICOLON.header.menuItemsSpacing( '' ); 771 } 772 } 773 }, 774 775 menuItemsSpacing: function( spacing ) { 776 777 let item = primaryMenuMainItems; 778 779 if( !$body.hasClass('side-header') && !$body.hasClass('overlay-menu') ) { 780 if( primaryMenu.hasClass('menu-spacing-margin') ) { 781 if( spacing == '' ) { 782 item.css({ 'margin-top': '', 'margin-bottom': '' }); 783 } else { 784 item.css({ 'margin-top': Number( spacing ), 'margin-bottom': Number( spacing ) }); 785 } 786 } else { 787 if( spacing == '' ) { 788 item.css({ 'padding-top': '', 'padding-bottom': '' }); 789 } else { 790 item.css({ 'padding-top': Number( spacing ), 'padding-bottom': Number( spacing ) }); 791 } 792 } 793 } 794 795 }, 796 797 stickyPageMenu: function( pageMenuOffset ){ 798 if( $window.scrollTop() > pageMenuOffset ) { 799 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 800 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 801 let headerHeight = $headerWrap.outerHeight(); 802 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 803 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 804 } 805 } else if( $body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md') ) { 806 if( $pagemenu.attr('data-mobile-sticky') == 'true' ) { 807 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 808 } 809 } 810 } else { 811 $pagemenu.removeClass('sticky-page-menu'); 812 $pagemenu.find( $pageMenuWrap ).css({ 'top': '' }); 813 } 814 }, 815 816 removeStickyness: function(){ 817 if( $header.hasClass('sticky-header') ){ 818 $header.removeClass('sticky-header'); 819 $header.removeClass().addClass(oldHeaderClasses); 820 $headerWrap.removeClass().addClass(oldHeaderWrapClasses); 821 if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 822 SEMICOLON.slider.swiperSliderMenu(); 823 SEMICOLON.slider.revolutionSliderMenu(); 824 } 825 if( ( $body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md') ) && ( typeof responsiveMenuClasses === 'undefined' ) ) { 826 $header.removeClass().addClass(oldHeaderClasses); 827 $headerWrap.removeClass().addClass(oldHeaderWrapClasses); 828 if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 829 } 830 }, 831 832 sideHeader: function(){ 833 $("#header-trigger").off( 'click' ).on( 'click', function(){ 834 $('body.open-header').toggleClass("side-header-open"); 835 return false; 836 }); 837 }, 838 839 sidePanel: function(){
840 $(".side-panel-trigger").off( 'click' ).on( 'click', function(){ 841 $body.toggleClass("side-panel-open"); 842 if( $body.hasClass('device-touch') && $body.hasClass('side-push-panel') ) { 843 $body.toggleClass("ohidden"); 844 } 845 return false; 846 }); 847 }, 848 849 onePageScroll: function( element ){ 850 let settings = { 851 element: element, 852 default: '.one-page-menu', 853 file: 'plugins.onepage.js', 854 error: 'plugins.onepage.js: Plugin could not be loaded', 855 execfn: 'SEMICOLON_onePageModule', 856 pluginfn: () => typeof scwOnePageModulePlugin !== "undefined", 857 trigger: 'pluginOnePageModuleReady', 858 class: 'has-plugin-onepagemodule' 859 }; 860 861 SEMICOLON.initialize.functions( settings ); 862 }, 863 864 logo: function(){ 865 let sLogo = defaultLogo.find('img'), 866 rLogo = retinaLogo.find('img'); 867 if( ( $header.hasClass('dark') || $body.hasClass('dark') ) && !$headerWrap.hasClass('not-dark') ) { 868 if( defaultDarkLogo && ( sLogo.attr('src') != defaultDarkLogo ) ){ 869 sLogo.attr('src', defaultDarkLogo); 870 } 871 872 if( retinaDarkLogo && ( rLogo.attr('src') != retinaDarkLogo ) ){ 873 rLogo.attr('src', retinaDarkLogo); 874 } 875 } else { 876 if( defaultLogoImg && ( sLogo.attr('src') != defaultLogoImg ) ){ 877 sLogo.attr('src', defaultLogoImg); 878 } 879 880 if( retinaLogoImg && ( rLogo.attr('src') != retinaLogoImg ) ){ 881 rLogo.attr('src', retinaLogoImg); 882 } 883 } 884 885 if( $header.hasClass('sticky-header') ) { 886 if( defaultStickyLogo && ( sLogo.attr('src') != defaultStickyLogo ) ){ 887 sLogo.attr('src', defaultStickyLogo); 888 } 889 890 if( retinaStickyLogo && ( rLogo.attr('src') != retinaStickyLogo ) ){ 891 rLogo.attr('src', retinaStickyLogo); 892 } 893 } 894 895 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 896 if( defaultMobileLogo && ( sLogo.attr('src') != defaultMobileLogo ) ){ 897 sLogo.attr('src', defaultMobileLogo); 898 } 899 900 if( retinaMobileLogo && ( rLogo.attr('src') != retinaMobileLogo ) ){ 901 rLogo.attr('src', retinaMobileLogo); 902 } 903 } 904 }, 905 906 stickyMenuClass: function(){ 907 let newClassesArray = ''; 908 909 if( stickyMenuClasses ) { 910 newClassesArray = stickyMenuClasses.split(/ +/); 911 } 912 913 let noOfNewClasses = newClassesArray.length; 914 915 if( noOfNewClasses > 0 ) { 916 let i = 0; 917 for( i=0; i<noOfNewClasses; i++ ) { 918 if( newClassesArray[i] == 'not-dark' ) { 919 $header.removeClass('dark'); 920 $headerWrap.filter(':not(.not-dark)').addClass('not-dark'); 921 } else if( newClassesArray[i] == 'dark' ) { 922 $headerWrap.removeClass('not-dark force-not-dark'); 923 if( !$header.hasClass( newClassesArray[i] ) ) { 924 $header.addClass( newClassesArray[i] ); 925 } 926 } else if( !$header.hasClass( newClassesArray[i] ) ) { 927 $header.addClass( newClassesArray[i] ); 928 } 929 } 930 } 931 }, 932 933 responsiveMenuClass: function(){ 934 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ){ 935 return true; 936 } 937 938 let newClassesArray = ''; 939 940 if( responsiveMenuClasses ) { 941 newClassesArray = responsiveMenuClasses.split(/ +/); 942 } 943 944 let noOfNewClasses = newClassesArray.length; 945 946 if( noOfNewClasses > 0 ) { 947 let i = 0; 948 for( i=0; i<noOfNewClasses; i++ ) { 949 if( newClassesArray[i] == 'not-dark' ) { 950 $header.removeClass('dark'); 951 $headerWrap.addClass('not-dark'); 952 } else if( newClassesArray[i] == 'dark' ) { 953 $headerWrap.removeClass('not-dark force-not-dark'); 954 if( !$header.hasClass( newClassesArray[i] ) ) { 955 $header.addClass( newClassesArray[i] ); 956 } 957 } else if( !$header.hasClass( newClassesArray[i] ) ) { 958 $header.addClass( newClassesArray[i] ); 959 } 960 } 961 } 962 963 SEMICOLON.header.logo(); 964 }, 965 966 topsearch: function(){ 967 $topSearch.parents('.header-row').addClass( 'top-search-parent' ); 968 let topSearchParent = $header.find('.top-search-parent'); 969 970 $("#top-search-trigger").off( 'click' ).on( 'click', function(e){ 971 clearTimeout( topSearchTimeOut ); 972 $body.toggleClass('top-search-open'); 973 $topCart.toggleClass('top-cart-open', false); 974 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 975 primaryMenu.filter( ':not(.mobile-menu-off-canvas)' ).find('.menu-container').slideUp(200); 976 primaryMenu.filter( '.mobile-menu-off-canvas' ).find('.menu-container').toggleClass('d-block', false); 977 } 978 if( $body.hasClass('top-search-open') ) { 979 topSearchParent.toggleClass('position-relative', true); 980 } else { 981 topSearchTimeOut = setTimeout( function(){ 982 topSearchParent.toggleClass('position-relative', false); 983 }, 750); 984 } 985 $body.toggleClass("primary-menu-open", false); 986 $pagemenu.toggleClass('page-menu-open', false); 987 if ($body.hasClass('top-search-open')){ 988 $topSearch.find('input').focus(); 989 } 990 e.stopPropagation(); 991 e.preventDefault(); 992 }); 993 }, 994 995 topcart: function(){ 996 if( $topCart.length < 1 ) { 997 return true; 998 } 999 1000 $("#top-cart-trigger").off( 'click' ).on( 'click', function(e){
1001 $pagemenu.toggleClass('page-menu-open', false); 1002 $topCart.toggleClass('top-cart-open'); 1003 e.stopPropagation(); 1004 e.preventDefault(); 1005 }); 1006 }, 1007 1008 miscFunctions: function(){ 1009 let topSearchParent = $header.find('.top-search-parent'); 1010 $(document).on('click', function(event) { 1011 if (!$(event.target).closest('.top-search-form').length) { 1012 $body.toggleClass('top-search-open', false); 1013 topSearchTimeOut = setTimeout( function(){ 1014 topSearchParent.toggleClass('position-relative', false); 1015 }, 750); 1016 } 1017 if (!$(event.target).closest('#top-cart').length) { 1018 $topCart.toggleClass('top-cart-open', false); 1019 } 1020 if (!$(event.target).closest('#page-menu').length) { $pagemenu.toggleClass('page-menu-open', false); } 1021 if (!$(event.target).closest('#side-panel').length) { $body.toggleClass('side-panel-open', false); } 1022 if (!$(event.target).closest('.primary-menu.on-click').length) { 1023 primaryMenu.filter('.on-click').find('.menu-container').find('.d-block').removeClass('d-block'); 1024 primaryMenu.filter('.on-click').find('.menu-item').removeClass('current'); 1025 } 1026 if( primaryMenu.hasClass('mobile-menu-off-canvas') ) { 1027 if (!$(event.target).closest('.primary-menu.mobile-menu-off-canvas .menu-container').length) { 1028 primaryMenu.filter('.mobile-menu-off-canvas').find('.menu-container').toggleClass('d-block', false); 1029 $body.toggleClass("primary-menu-open", false); 1030 } 1031 } 1032 if (!$(event.target).closest('.top-links.on-click').length) { 1033 $('.top-links.on-click').find('.top-links-sub-menu,.top-links-section').removeClass('d-block'); 1034 } 1035 }); 1036 } 1037 1038 }; 1039 1040 SEMICOLON.slider = { 1041 1042 init: function() { 1043 1044 SEMICOLON.slider.sliderDimensions(); 1045 SEMICOLON.slider.sliderRun(); 1046 SEMICOLON.slider.sliderParallax(); 1047 SEMICOLON.slider.sliderElementsFade(); 1048 1049 }, 1050 1051 sliderDimensions: function(){ 1052 1053 let parallaxElHeight = $sliderParallaxEl.outerHeight(), 1054 parallaxElWidth = $sliderParallaxEl.outerWidth(), 1055 slInner = $sliderParallaxEl.find('.slider-inner'), 1056 slSwiperW = $slider.find('.swiper-wrapper'), 1057 slSwiperS = $slider.find('.swiper-slide').first(), 1058 slFlexHeight = $slider.hasClass('h-auto') || $slider.hasClass('min-vh-0'); 1059 1060 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 1061 setTimeout( function(){ 1062 slInner.height( parallaxElHeight ); 1063 if( slFlexHeight ) { 1064 parallaxElHeight = $sliderParallaxEl.find('.slider-inner').children().first().outerHeight(); 1065 $sliderParallaxEl.height( parallaxElHeight ); 1066 slInner.height( parallaxElHeight ); 1067 } 1068 }, 500 ); 1069 1070 if( slFlexHeight ) { 1071 let slSwiperFC = slSwiperS.children().first(); 1072 if( slSwiperFC.hasClass('container') || slSwiperFC.hasClass('container-fluid') ) { 1073 slSwiperFC = slSwiperFC.children().first(); 1074 } 1075 if( slSwiperFC.outerHeight() > slSwiperW.outerHeight() ) { 1076 slSwiperW.css({ 'height': 'auto' }); 1077 } 1078 } 1079 1080 if( $body.hasClass('side-header') ) { 1081 slInner.width( parallaxElWidth ); 1082 } 1083 1084 if( !$body.hasClass('stretched') ) { 1085 parallaxElWidth = $wrapper.outerWidth(); 1086 slInner.width( parallaxElWidth ); 1087 } 1088 } else { 1089 slSwiperW.css({ 'height': '' }); 1090 $sliderParallaxEl.css({ 'height': '' }); 1091 slInner.css({ 'width': '', 'height': '' }); 1092 } 1093 }, 1094 1095 sliderRun: function( element ){ 1096 let settings = { 1097 element: element, 1098 default: '.swiper_wrapper', 1099 file: 'plugins.swiper.js', 1100 error: 'plugins.swiper.js: Plugin could not be loaded', 1101 execfn: 'SEMICOLON_swiperInit', 1102 pluginfn: () => typeof Swiper !== "undefined", 1103 trigger: 'pluginSwiperReady', 1104 class: 'has-plugin-swiper' 1105 }; 1106 1107 SEMICOLON.initialize.functions( settings ); 1108 }, 1109 1110 sliderParallaxOffset: function(){ 1111 let sliderParallaxOffsetTop = 0, 1112 headerHeight = $header.outerHeight(); 1113 if( $body.hasClass('side-header') || $header.next('.include-header').length > 0 ) { headerHeight = 0; } 1114 if( $pageTitle.length > 0 ) { 1115 sliderParallaxOffsetTop = $pageTitle.outerHeight() + headerHeight; 1116 } else { 1117 sliderParallaxOffsetTop = headerHeight; 1118 } 1119 1120 if( $slider.next('#header').length > 0 ) { sliderParallaxOffsetTop = 0; } 1121 1122 return sliderParallaxOffsetTop; 1123 }, 1124 1125 sliderParallaxSet: function( xPos, yPos, el ){ 1126 if( el ) { 1127 el.style.transform = "translate3d(" + xPos + ", " + yPos + "px, 0)"; 1128 } 1129 }, 1130 1131 sliderParallax: function(){ 1132 if( $sliderParallaxEl.length < 1 ) { 1133 return true; 1134 } 1135 1136 let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(), 1137 parallaxElHeight = $sliderParallaxEl.outerHeight(), 1138 transform, transform2; 1139 1140 xScrollPosition = window.pageXOffset; 1141 yScrollPosition = window.pageYOffset; 1142 1143 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 1144 if( ( parallaxElHeight + parallaxOffsetTop + 50 ) > yScrollPosition ){
1145 $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible'); 1146 if ( yScrollPosition > parallaxOffsetTop ) { 1147 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1148 1149 transform = ((yScrollPosition-parallaxOffsetTop) * -.4 ); 1150 transform2 = ((yScrollPosition-parallaxOffsetTop) * -.15 ); 1151 1152 SEMICOLON.slider.sliderParallaxSet( 0, transform, sliderParallaxElInner ); 1153 SEMICOLON.slider.sliderParallaxSet( 0, transform2, sliderParallaxElCaption ); 1154 } else { 1155 transform = ((yScrollPosition-parallaxOffsetTop) / 1.5 ); 1156 transform2 = ((yScrollPosition-parallaxOffsetTop) / 7 ); 1157 1158 SEMICOLON.slider.sliderParallaxSet( 0, transform, sliderParallaxEl ); 1159 SEMICOLON.slider.sliderParallaxSet( 0, transform2, sliderParallaxElCaption ); 1160 } 1161 } else { 1162 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1163 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElInner ); 1164 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1165 } else { 1166 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxEl ); 1167 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1168 } 1169 } 1170 } else { 1171 $sliderParallaxEl.addClass('slider-parallax-invisible').removeClass('slider-parallax-visible'); 1172 } 1173 1174 requestAnimationFrame(function(){ 1175 SEMICOLON.slider.sliderParallax(); 1176 SEMICOLON.slider.sliderElementsFade(); 1177 }); 1178 } else { 1179 if( $sliderParallaxEl.find('.slider-inner').length > 0 ) { 1180 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElInner ); 1181 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1182 } else { 1183 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxEl ); 1184 SEMICOLON.slider.sliderParallaxSet( 0, 0, sliderParallaxElCaption ); 1185 } 1186 $sliderParallaxEl.addClass('slider-parallax-visible').removeClass('slider-parallax-invisible'); 1187 } 1188 }, 1189 1190 sliderElementsFade: function(){ 1191 if( $sliderParallaxEl.length < 1 ) { 1192 return true; 1193 } 1194 1195 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 1196 let parallaxOffsetTop = SEMICOLON.slider.sliderParallaxOffset(), 1197 parallaxElHeight = $sliderParallaxEl.outerHeight(), 1198 tHeaderOffset; 1199 1200 if( $header.hasClass('transparent-header') || $body.hasClass('side-header') ) { 1201 tHeaderOffset = 100; 1202 } else { 1203 tHeaderOffset = 0; 1204 } 1205 $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 ) }); 1206 } else { 1207 $sliderParallaxEl.find('.slider-arrow-left,.slider-arrow-right,.slider-caption,.slider-element-fade').css({'opacity': 1}); 1208 } 1209 }, 1210 1211 swiperSliderMenu: function( onWinLoad ){ 1212 onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false; 1213 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || ( $header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open') ) ) { 1214 let activeSlide = $slider.find('.swiper-slide.swiper-slide-active'); 1215 SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad); 1216 } 1217 }, 1218 1219 revolutionSliderMenu: function( onWinLoad ){ 1220 onWinLoad = typeof onWinLoad !== 'undefined' ? onWinLoad : false; 1221 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || ( $header.hasClass('transparent-header-responsive') && !$body.hasClass('primary-menu-open') ) ) { 1222 let activeSlide = $slider.find('.active-revslide'); 1223 SEMICOLON.slider.headerSchemeChanger(activeSlide, onWinLoad); 1224 } 1225 }, 1226 1227 headerSchemeChanger: function( activeSlide, onWinLoad ){ 1228 if( activeSlide.length > 0 ) { 1229 let darkExists = false, 1230 oldClassesArray, noOfOldClasses; 1231 if( activeSlide.hasClass('dark') ){ 1232 if( oldHeaderClasses ) { 1233 oldClassesArray = oldHeaderClasses.split(/ +/); 1234 } else {
1235 oldClassesArray = ''; 1236 } 1237 1238 noOfOldClasses = oldClassesArray.length; 1239 1240 if( noOfOldClasses > 0 ) { 1241 let i = 0; 1242 for( i=0; i<noOfOldClasses; i++ ) { 1243 if( oldClassesArray[i] == 'dark' && onWinLoad == true ) { 1244 darkExists = true; 1245 break; 1246 } 1247 } 1248 } 1249 $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').addClass('dark'); 1250 if( !darkExists ) { 1251 $('#header.transparent-header.sticky-header,#header.transparent-header.semi-transparent.sticky-header,#header.transparent-header.floating-header.sticky-header').removeClass('dark'); 1252 } 1253 $headerWrap.removeClass('not-dark'); 1254 } else { 1255 if( $body.hasClass('dark') ) { 1256 activeSlide.addClass('not-dark'); 1257 $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark'); 1258 $('#header.transparent-header:not(.sticky-header,.semi-transparent,.floating-header)').find('#header-wrap').addClass('not-dark'); 1259 } else { 1260 $('#header.transparent-header:not(.semi-transparent,.floating-header)').removeClass('dark'); 1261 $headerWrap.removeClass('not-dark'); 1262 } 1263 } 1264 if( $header.hasClass('sticky-header') ) { 1265 SEMICOLON.header.stickyMenuClass(); 1266 } 1267 SEMICOLON.header.logo(); 1268 } 1269 } 1270 1271 }; 1272 1273 SEMICOLON.portfolio = { 1274 1275 init: function(){ 1276 1277 SEMICOLON.portfolio.revealDesc(); 1278 SEMICOLON.portfolio.ajaxload(); 1279 1280 }, 1281 1282 revealDesc: function(){ 1283 let $portfolioReveal = $('.portfolio-reveal'); 1284 1285 if( $portfolioReveal < 1 ) { 1286 return true; 1287 } 1288 1289 $portfolioReveal.each( function(){ 1290 let element = $(this), 1291 elementItems = element.find('.portfolio-item'); 1292 elementItems.each( function(){ 1293 let element = $(this).find('.portfolio-desc'), 1294 elementHeight = element.outerHeight(); 1295 element.css({ 'margin-top': '-'+elementHeight+'px' }); 1296 }); 1297 }); 1298 }, 1299 1300 ajaxload: function(){ 1301 let settings = { 1302 default: '.portfolio-ajax', 1303 file: 'plugins.ajaxportfolio.js', 1304 error: 'plugins.ajaxportfolio.js: Plugin could not be loaded', 1305 execfn: 'SEMICOLON_portfolioAjaxloadInit', 1306 pluginfn: () => typeof scwAjaxPortfolioPlugin !== "undefined", 1307 trigger: 'pluginAjaxPortfolioReady', 1308 class: 'has-plugin-ajaxportfolio' 1309 }; 1310 1311 SEMICOLON.initialize.functions( settings ); 1312 } 1313 1314 }; 1315 1316 SEMICOLON.widget = { 1317 1318 init: function(){ 1319 1320 SEMICOLON.widget.animations(); 1321 SEMICOLON.widget.hoverAnimation(); 1322 SEMICOLON.widget.youtubeBgVideo(); 1323 SEMICOLON.widget.tabs(); 1324 SEMICOLON.widget.toggles(); 1325 SEMICOLON.widget.accordions(); 1326 SEMICOLON.widget.counter(); 1327 SEMICOLON.widget.countdown(); 1328 SEMICOLON.widget.gmap(); 1329 SEMICOLON.widget.roundedSkill(); 1330 SEMICOLON.widget.progress(); 1331 SEMICOLON.widget.twitterFeed(); 1332 SEMICOLON.widget.flickrFeed(); 1333 SEMICOLON.widget.instagramPhotos(); 1334 SEMICOLON.widget.dribbbleShots(); 1335 SEMICOLON.widget.navTree(); 1336 SEMICOLON.widget.textRotator(); 1337 SEMICOLON.widget.carousel(); 1338 SEMICOLON.widget.linkScroll(); 1339 SEMICOLON.widget.ajaxForm(); 1340 SEMICOLON.widget.subscription(); 1341 SEMICOLON.widget.shapeDivider(); 1342 SEMICOLON.widget.stickySidebar(); 1343 SEMICOLON.widget.cookieNotify(); 1344 SEMICOLON.widget.cartQuantity(); 1345 SEMICOLON.widget.readmore(); 1346 SEMICOLON.widget.pricingSwitcher(); 1347 SEMICOLON.widget.extras(); 1348 1349 }, 1350 1351 parallax: function( element ){ 1352 let settings = { 1353 element: element, 1354 default: '.parallax,.page-title-parallax,.portfolio-parallax .portfolio-image', 1355 file: 'plugins.parallax.js', 1356 error: 'plugins.parallax.js: Plugin could not be loaded', 1357 execfn: 'SEMICOLON_parallaxInit', 1358 pluginfn: () => typeof skrollr !== "undefined", 1359 trigger: 'pluginParallaxReady', 1360 class: 'has-plugin-parallax' 1361 }; 1362 1363 SEMICOLON.initialize.functions( settings ); 1364 }, 1365 1366 animations: function( element ){ 1367 let settings = { 1368 element: element, 1369 default: '[data-animate]', 1370 file: 'plugins.animations.js', 1371 error: 'plugins.animations.js: Plugin could not be loaded', 1372 execfn: 'SEMICOLON_animationsInit', 1373 pluginfn: () => typeof scwAnimationsPlugin !== "undefined", 1374 trigger: 'pluginAnimationsReady', 1375 class: 'has-plugin-animations' 1376 }; 1377 1378 SEMICOLON.initialize.functions( settings ); 1379 }, 1380 1381 hoverAnimation: function( element ){ 1382 let settings = { 1383 element: element, 1384 default: '[data-hover-animate]', 1385 file: 'plugins.hoveranimation.js', 1386 error: 'plugins.hoveranimation.js: Plugin could not be loaded', 1387 execfn: 'SEMICOLON_hoverAnimationInit', 1388 pluginfn: () => typeof scwHoverAnimationPlugin !== "undefined", 1389 trigger: 'pluginHoverAnimationReady', 1390 class: 'has-plugin-hoveranimation' 1391 }; 1392 1393 SEMICOLON.initialize.functions( settings ); 1394 }, 1395 1396 gridInit: function( element ){ 1397 let settings = { 1398 element: element, 1399 default: '.grid-container', 1400 file: 'plugins.isotope.js', 1401 error: 'plugins.isotope.js: Plugin could not be loaded', 1402 execfn: 'SEMICOLON_gridContainerInit', 1403 pluginfn: () => $().isotope, 1404 trigger: 'pluginIsotopeReady', 1405 class: 'has-plugin-isotope' 1406 }; 1407 1408 SEMICOLON.initialize.functions( settings ); 1409 }, 1410 1411 filterInit: function( element ){ 1412 let settings = { 1413 element: element, 1414 default: '.grid-filter,.custom-filter', 1415 file: 'plugins.gridfilter.js', 1416 error: 'plugins.gridfilter.js: Plugin could not be loaded', 1417 execfn: 'SEMICOLON_gridFilterInit', 1418 pluginfn: () => $().isotope && typeof scwGridFilterPlugin !== "undefined", 1419 trigger: 'pluginGridFilterReady', 1420 class: 'has-plugin-isotope-filter' 1421 }; 1422 1423 SEMICOLON.initialize.functions( settings ); 1424 }, 1425 1426 loadFlexSlider: function( element ){ 1427 let settings = { 1428 element: element, 1429 default: '.fslider', 1430 file: 'plugins.flexslider.js', 1431 error: 'plugins.flexslider.js: Plugin could not be loaded', 1432 execfn: 'SEMICOLON_flexSliderInit', 1433 pluginfn: () => $().flexslider,
1434 trigger: 'pluginFlexSliderReady', 1435 class: 'has-plugin-flexslider' 1436 }; 1437 1438 SEMICOLON.initialize.functions( settings ); 1439 }, 1440 1441 html5Video: function( element ){ 1442 let settings = { 1443 element: element, 1444 default: '.video-wrap:has(video)', 1445 file: 'plugins.html5video.js', 1446 error: 'plugins.html5video.js: Plugin could not be loaded', 1447 execfn: 'SEMICOLON_html5VideoInit', 1448 pluginfn: () => typeof scwHtml5VideoPlugin !== "undefined", 1449 trigger: 'pluginHtml5VideoReady', 1450 class: 'has-plugin-html5video' 1451 }; 1452 1453 SEMICOLON.initialize.functions( settings ); 1454 }, 1455 1456 youtubeBgVideo: function( element ){ 1457 let settings = { 1458 element: element, 1459 default: '.yt-bg-player', 1460 file: 'plugins.youtube.js', 1461 error: 'plugins.youtube.js: Plugin could not be loaded', 1462 execfn: 'SEMICOLON_youtubeBgVideoInit', 1463 pluginfn: () => $().YTPlayer, 1464 trigger: 'pluginYoutubeBgVideoReady', 1465 class: 'has-plugin-youtubebg' 1466 }; 1467 1468 SEMICOLON.initialize.functions( settings ); 1469 }, 1470 1471 tabs: function( element ){ 1472 let settings = { 1473 element: element, 1474 default: '.tabs,[data-plugin="tabs"]', 1475 file: 'plugins.tabs.js', 1476 error: 'plugins.tabs.js: Plugin could not be loaded', 1477 execfn: 'SEMICOLON_tabsInit', 1478 pluginfn: () => $().tabs, 1479 trigger: 'pluginTabsReady', 1480 class: 'has-plugin-tabs' 1481 }; 1482 1483 SEMICOLON.initialize.functions( settings ); 1484 }, 1485 1486 toggles: function( element ){ 1487 let settings = { 1488 element: element, 1489 default: '.toggle', 1490 file: 'plugins.toggles.js', 1491 error: 'plugins.toggles.js: Plugin could not be loaded', 1492 execfn: 'SEMICOLON_togglesInit', 1493 pluginfn: () => typeof scwTogglesPlugin !== "undefined", 1494 trigger: 'pluginTogglesReady', 1495 class: 'has-plugin-toggles' 1496 }; 1497 1498 SEMICOLON.initialize.functions( settings ); 1499 }, 1500 1501 accordions: function( element ){ 1502 let settings = { 1503 element: element, 1504 default: '.accordion', 1505 file: 'plugins.accordions.js', 1506 error: 'plugins.accordions.js: Plugin could not be loaded', 1507 execfn: 'SEMICOLON_accordionsInit', 1508 pluginfn: () => typeof scwAccordionsPlugin !== "undefined", 1509 trigger: 'pluginAccordionsReady', 1510 class: 'has-plugin-accordions' 1511 }; 1512 1513 SEMICOLON.initialize.functions( settings ); 1514 }, 1515 1516 counter: function( element ){ 1517 let settings = { 1518 element: element, 1519 default: '.counter', 1520 file: 'plugins.counter.js', 1521 error: 'plugins.counter.js: Plugin could not be loaded', 1522 execfn: 'SEMICOLON_counterInit', 1523 pluginfn: () => $().countTo, 1524 trigger: 'pluginCounterReady', 1525 class: 'has-plugin-counter' 1526 }; 1527 1528 SEMICOLON.initialize.functions( settings ); 1529 }, 1530 1531 countdown: function( element ){ 1532 let momentSettings = { 1533 element: element, 1534 default: '.countdown', 1535 file: 'components/moment.js', 1536 error: 'components/moment.js: Plugin could not be loaded', 1537 execfn: false, 1538 pluginfn: () => typeof moment !== "undefined", 1539 trigger: 'pluginMomentReady', 1540 class: 'has-plugin-moment' 1541 }; 1542 1543 let settings = { 1544 element: element, 1545 default: '.countdown', 1546 file: 'plugins.countdown.js', 1547 error: 'plugins.countdown.js: Plugin could not be loaded', 1548 execfn: 'SEMICOLON_countdownInit', 1549 pluginfn: () => $().countdown, 1550 trigger: 'pluginCountdownReady', 1551 class: 'has-plugin-countdown' 1552 }; 1553 1554 SEMICOLON.initialize.functions( momentSettings ); 1555 SEMICOLON.initialize.functions( settings ); 1556 }, 1557 1558 gmap: function( element ){ 1559 let googleSettings = { 1560 element: element, 1561 default: '.gmap', 1562 file: 'https://maps.google.com/maps/api/js?key=' + googleMapsAPI, 1563 error: 'Google Maps API could not be loaded', 1564 execfn: false, 1565 pluginfn: () => typeof google !== "undefined", 1566 hiddendisable: true, 1567 class: 'has-plugin-gmapapi' 1568 }; 1569 1570 let settings = { 1571 element: element, 1572 default: '.gmap', 1573 file: 'plugins.gmap.js', 1574 error: 'plugins.gmap.js: Plugin could not be loaded', 1575 execfn: 'SEMICOLON_gmapInit', 1576 pluginfn: () => typeof google !== "undefined" && $().gMap, 1577 hiddendisable: true, 1578 trigger: 'pluginGmapReady', 1579 class: 'has-plugin-gmap' 1580 }; 1581 1582 SEMICOLON.initialize.functions( googleSettings ); 1583 SEMICOLON.initialize.functions( settings ); 1584 }, 1585 1586 roundedSkill: function( element ){ 1587 let settings = { 1588 element: element, 1589 default: '.rounded-skill', 1590 file: 'plugins.piechart.js', 1591 error: 'plugins.piechart.js: Plugin could not be loaded', 1592 execfn: 'SEMICOLON_roundedSkillInit', 1593 pluginfn: () => $().easyPieChart, 1594 trigger: 'pluginRoundedSkillReady', 1595 class: 'has-plugin-piechart' 1596 }; 1597 1598 SEMICOLON.initialize.functions( settings ); 1599 }, 1600 1601 progress: function( element ){ 1602 let settings = { 1603 element: element, 1604 default: '.progress', 1605 file: 'plugins.progress.js', 1606 error: 'plugins.progress.js: Plugin could not be loaded', 1607 execfn: 'SEMICOLON_progressInit', 1608 pluginfn: () => typeof scwProgressPlugin !== "undefined", 1609 trigger: 'pluginProgressReady', 1610 class: 'has-plugin-progress' 1611 }; 1612 1613 SEMICOLON.initialize.functions( settings ); 1614 }, 1615 1616 twitterFeed: function( element ){ 1617 let settings = { 1618 element: element, 1619 default: '.twitter-feed', 1620 file: 'plugins.twitter.js', 1621 error: 'plugins.twitter.js: Plugin could not be loaded', 1622 execfn: 'SEMICOLON_twitterFeedInit', 1623 pluginfn: () => typeof sm_format_twitter !== "undefined" && typeof sm_format_twitter3 !== "undefined", 1624 trigger: 'pluginTwitterFeedReady', 1625 class: 'has-plugin-twitter' 1626 }; 1627 1628 SEMICOLON.initialize.functions( settings ); 1629 }, 1630 1631 flickrFeed: function( element ){ 1632 let settings = { 1633 element: element, 1634 default: '.flickr-feed', 1635 file: 'plugins.flickrfeed.js', 1636 error: 'plugins.flickrfeed.js: Plugin could not be loaded', 1637 execfn: 'SEMICOLON_flickrFeedInit', 1638 pluginfn: () => $().jflickrfeed, 1639 trigger: 'pluginFlickrFeedReady', 1640 class: 'has-plugin-flickr' 1641 }; 1642 1643 SEMICOLON.initialize.functions( settings ); 1644 }, 1645 1646 instagramPhotos: function( element ){ 1647 let settings = { 1648 element: element, 1649 default: '.instagram-photos', 1650 file: 'plugins.instagram.js', 1651 error: 'plugins.instagram.js: Plugin could not be loaded', 1652 execfn: 'SEMICOLON_instagramPhotosInit', 1653 pluginfn: () => typeof scwInstagramPlugin !== "undefined", 1654 trigger: 'pluginInstagramReady', 1655 class: 'has-plugin-instagram' 1656 }; 1657 1658 SEMICOLON.initialize.functions( settings ); 1659 }, 1660 1661 dribbbleShots: function( element ){ 1662 let settings = { 1663 element: element, 1664 default: '.dribbble-shots', 1665 file: 'plugins.dribbble.js', 1666 error: 'plugins.dribbble.js: Plugin could not be loaded', 1667 execfn: 'SEMICOLON_dribbbleShotsInit', 1668 pluginfn: () => $.jribbble, 1669 trigger: 'pluginDribbbleReady', 1670 class: 'has-plugin-dribbble' 1671 }; 1672 1673 let imagesLoadedSettings = { 1674 element: element, 1675 default: '.dribbble-shots', 1676 file: 'plugins.imagesloaded.js', 1677 error: 'plugins.imagesloaded.js: Plugin could not be loaded', 1678 pluginfn: () => $().imagesLoaded, 1679 trigger: 'pluginImagesLoadedReady', 1680 class: 'has-plugin-imagesloaded' 1681 }; 1682 1683 SEMICOLON.initialize.functions( settings ); 1684 SEMICOLON.initialize.functions( imagesLoadedSettings ); 1685 }, 1686 1687 navTree: function( element ){ 1688 let settings = { 1689 element: element, 1690 default: '.nav-tree', 1691 file: 'plugins.navtree.js', 1692 error: 'plugins.navtree.js: Plugin could not be loaded', 1693 execfn: 'SEMICOLON_navtreeInit', 1694 pluginfn: () => typeof scwNavTreePlugin !== "undefined", 1695 trigger: 'pluginNavTreeReady', 1696 class: 'has-plugin-navtree' 1697 }; 1698 1699 SEMICOLON.initialize.functions( settings ); 1700 }, 1701 1702 carousel: function( element ){ 1703 let settings = { 1704 element: element, 1705 default: '.carousel-widget', 1706 file: 'plugins.carousel.js', 1707 error: 'plugins.carousel.js: Plugin could not be loaded', 1708 execfn: 'SEMICOLON_carouselInit', 1709 pluginfn: () => $().owlCarousel, 1710 trigger: 'pluginCarouselReady', 1711 class: 'has-plugin-carousel' 1712 }; 1713 1714 SEMICOLON.initialize.functions( settings ); 1715 }, 1716 1717 masonryThumbs: function( element ){ 1718 let settings = { 1719 element: element, 1720 default: '.masonry-thumbs', 1721 file: 'plugins.masonrythumbs.js', 1722 error: 'plugins.masonrythumbs.js: Plugin could not be loaded', 1723 execfn: 'SEMICOLON_masonryThumbsInit', 1724 pluginfn: () => $().isotope && typeof scwMasonryThumbsPlugin !== "undefined", 1725 trigger: 'pluginMasonryThumbsReady', 1726 class: 'has-plugin-masonrythumbs' 1727 }; 1728 1729 SEMICOLON.initialize.functions( settings ); 1730 }, 1731 1732 notifications: function( element ){ 1733 let settings = { 1734 element: element, 1735 default: false, 1736 file: 'plugins.notify.js', 1737 error: 'plugins.notify.js: Plugin could not be loaded', 1738 execfn: 'SEMICOLON_notificationInit', 1739 pluginfn: () => typeof scwNotificationPlugin !== "undefined", 1740 trigger: 'pluginNotifyReady', 1741 class: 'has-plugin-toast' 1742 }; 1743 1744 SEMICOLON.initialize.functions( settings ); 1745 }, 1746 1747 textRotator: function( element ){ 1748 let settings = { 1749 element: element, 1750 default: '.text-rotater', 1751 file: 'plugins.textrotator.js', 1752 error: 'plugins.textrotator.js: Plugin could not be loaded', 1753 execfn: 'SEMICOLON_textRotatorInit', 1754 pluginfn: () => $().Morphext, 1755 trigger: 'pluginTextRotatorReady', 1756 class: 'has-plugin-textrotator' 1757 }; 1758 1759 SEMICOLON.initialize.functions( settings ); 1760 }, 1761 1762 linkScroll: function( element ){ 1763 let settings = { 1764 element: element, 1765 default: 'a[data-scrollto]', 1766 file: 'plugins.linkscroll.js', 1767 error: 'plugins.linkscroll.js: Plugin could not be loaded', 1768 execfn: 'SEMICOLON_linkScrollInit', 1769 pluginfn: () => typeof scwLinkScrollPlugin !== "undefined", 1770 trigger: 'pluginLinkScrollReady', 1771 class: 'has-plugin-linkscroll' 1772 }; 1773 1774 SEMICOLON.initialize.functions( settings ); 1775 }, 1776 1777 ajaxForm: function( element ){ 1778 let formSettings = { 1779 element: element, 1780 default: '.form-widget', 1781 file: 'plugins.form.js', 1782 error: 'plugins.form.js: Plugin could not be loaded', 1783 execfn: false, 1784 pluginfn: () => $().validate && $().ajaxSubmit, 1785 class: 'has-plugin-form' 1786 }; 1787 1788 let settings = { 1789 element: element, 1790 default: '.form-widget', 1791 file: 'plugins.ajaxform.js', 1792 error: 'plugins.ajaxform.js: Plugin could not be loaded', 1793 execfn: 'SEMICOLON_ajaxFormInit', 1794 pluginfn: () => typeof scwAjaxFormPlugin !== "undefined", 1795 trigger: 'pluginAjaxFormReady', 1796 class: 'has-plugin-ajaxform' 1797 }; 1798 1799 SEMICOLON.initialize.functions( formSettings ); 1800 SEMICOLON.initialize.functions( settings ); 1801 }, 1802 1803 subscription: function( element ){ 1804 let formSettings = { 1805 element: element, 1806 default: '.subscribe-widget', 1807 file: 'plugins.form.js', 1808 error: 'plugins.form.js: Plugin could not be loaded', 1809 execfn: false, 1810 pluginfn: () => $().validate && $().ajaxSubmit, 1811 class: 'has-plugin-form' 1812 }; 1813 1814 let settings = { 1815 element: element, 1816 default: '.subscribe-widget', 1817 file: 'plugins.subscribe.js', 1818 error: 'plugins.subscribe.js: Plugin could not be loaded', 1819 execfn: 'SEMICOLON_subscribeFormInit', 1820 pluginfn: () => typeof scwSubscribeFormPlugin !== "undefined", 1821 trigger: 'pluginSubscribeFormReady', 1822 class: 'has-plugin-subscribeform' 1823 }; 1824 1825 SEMICOLON.initialize.functions( formSettings ); 1826 SEMICOLON.initialize.functions( settings ); 1827 }, 1828 1829 shapeDivider: function( element ){ 1830 let settings = { 1831 element: element, 1832 default: '.shape-divider', 1833 file: 'plugins.shapedivider.js', 1834 error: 'plugins.shapedivider.js: Plugin could not be loaded', 1835 execfn: 'SEMICOLON_shapeDividerInit', 1836 pluginfn: () => typeof scwShapeDividerPlugin !== "undefined", 1837 trigger: 'pluginShapeDividerReady', 1838 class: 'has-plugin-shapedivider' 1839 }; 1840 1841 SEMICOLON.initialize.functions( settings ); 1842 }, 1843 1844 ticker: function( element ){ 1845 let settings = { 1846 element: element, 1847 default: '.scw-ticker', 1848 file: 'plugins.ticker.js', 1849 error: 'plugins.ticker.js: Plugin could not be loaded', 1850 execfn: 'SEMICOLON_tickerInit', 1851 pluginfn: () => typeof scwTickerPlugin !== "undefined", 1852 trigger: 'pluginTickerReady', 1853 class: 'has-plugin-ticker' 1854 }; 1855 1856 SEMICOLON.initialize.functions( settings ); 1857 }, 1858 1859 stickySidebar: function( element ){ 1860 let settings = { 1861 element: element, 1862 default: '.sticky-sidebar-wrap', 1863 file: 'plugins.stickysidebar.js', 1864 error: 'plugins.stickysidebar.js: Plugin could not be loaded', 1865 execfn: 'SEMICOLON_stickySidebarInit', 1866 pluginfn: () => $().scwStickySidebar, 1867 trigger: 'pluginStickySidebarReady', 1868 class: 'has-plugin-stickysidebar' 1869 }; 1870 1871 SEMICOLON.initialize.functions( settings ); 1872 }, 1873 1874 cookieNotify: function( element ){ 1875 let settings = { 1876 element: element, 1877 default: '.gdpr-settings,[data-cookies]', 1878 file: 'plugins.cookie.js', 1879 error: 'plugins.cookie.js: Plugin could not be loaded', 1880 execfn: 'SEMICOLON_cookieInit', 1881 pluginfn: () => typeof Cookies !== "undefined", 1882 trigger: 'pluginCookieReady', 1883 class: 'has-plugin-cookie' 1884 }; 1885 1886 SEMICOLON.initialize.functions( settings ); 1887 }, 1888 1889 cartQuantity: function(){ 1890 let settings = { 1891 default: '.qty', 1892 file: 'plugins.quantity.js', 1893 error: 'plugins.quantity.js: Plugin could not be loaded', 1894 execfn: 'SEMICOLON_quantityInit', 1895 pluginfn: () => typeof scwQuantityPlugin !== "undefined", 1896 trigger: 'pluginQuantityReady', 1897 class: 'has-plugin-quantity' 1898 }; 1899 1900 SEMICOLON.initialize.functions( settings ); 1901 }, 1902 1903 readmore: function(){ 1904 let settings = { 1905 default: '[data-readmore]', 1906 file: 'plugins.readmore.js', 1907 error: 'plugins.readmore.js: Plugin could not be loaded', 1908 execfn: 'SEMICOLON_readmoreInit', 1909 pluginfn: () => typeof scwReadMorePlugin !== "undefined", 1910 trigger: 'pluginReadMoreReady', 1911 class: 'has-plugin-readmore' 1912 }; 1913 1914 SEMICOLON.initialize.functions( settings ); 1915 }, 1916 1917 pricingSwitcher: function(){ 1918 let settings = { 1919 default: '.pts-switcher', 1920 file: 'plugins.pricingswitcher.js', 1921 error: 'plugins.pricingswitcher.js: Plugin could not be loaded', 1922 execfn: 'SEMICOLON_pricingSwitcherInit', 1923 pluginfn: () => typeof scwPricingSwitcherPlugin !== "undefined", 1924 trigger: 'pluginPricingSwitcherReady', 1925 class: 'has-plugin-pricing-switcher' 1926 }; 1927 1928 SEMICOLON.initialize.functions( settings ); 1929 }, 1930 1931 extras: function(){ 1932 let btsCheckIntevral = setInterval( function(){ 1933 if( 'pluginBootstrapReady' in scwEvents ) { 1934 if( $().tooltip ) { 1935 $('[data-bs-toggle="tooltip"]').tooltip({container: 'body'}); 1936 } else { 1937 console.log('extras: Bootstrap Tooltip not defined.'); 1938 } 1939 1940 if( $().popover ) { 1941 $('[data-bs-toggle="popover"]').popover({container: 'body'}); 1942 } else { 1943 console.log('extras: Bootstrap Popover not defined.'); 1944 } 1945 1946 clearInterval( btsCheckIntevral ); 1947 } 1948 }, 1000 ); 1949 1950 $('.style-msg').on( 'click', '.close', function(e){
1951 $( this ).parents( '.style-msg' ).slideUp(); 1952 e.preventDefault(); 1953 }); 1954 1955 $('#page-menu-trigger').off( 'click' ).on( 'click', function() { 1956 $body.toggleClass('top-search-open', false); 1957 $pagemenu.toggleClass("page-menu-open"); 1958 return false; 1959 }); 1960 1961 $pagemenu.find('nav').off( 'click' ).on( 'click', function(e){ 1962 $body.toggleClass('top-search-open', false); 1963 $topCart.toggleClass('top-cart-open', false); 1964 }); 1965 1966 if( SEMICOLON.isMobile.any() ){ 1967 $body.addClass('device-touch'); 1968 } 1969 1970 if( $body.hasClass( 'adaptive-color-scheme' ) ) { 1971 1972 let adaptiveEl = $('[data-adaptive-light-class], [data-adaptive-dark-class]'), 1973 adaptLightClass = adaptiveEl.attr( 'data-adaptive-light-class' ), 1974 adaptDarkClass = adaptiveEl.attr( 'data-adaptive-dark-class' ); 1975 1976 let adaptClasses = function( dark ) { 1977 if( dark ) { 1978 $body.toggleClass( 'dark', true ); 1979 adaptiveEl.removeClass( adaptLightClass ).addClass( adaptDarkClass ); 1980 } else { 1981 $body.toggleClass( 'dark', false ); 1982 adaptiveEl.removeClass( adaptDarkClass ).addClass( adaptLightClass ); 1983 } 1984 SEMICOLON.header.logo(); 1985 }; 1986 1987 if( window.matchMedia ) { 1988 adaptClasses( window.matchMedia('(prefers-color-scheme: dark)').matches ); 1989 1990 window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { 1991 adaptClasses( e.matches ); 1992 }); 1993 } 1994 } 1995 1996 $body.off( 'click' ).on( 'click', 'a[href*="#"]', function() { 1997 $window.on('beforeunload', function() { 1998 $window.scrollTop(0); 1999 }); 2000 }); 2001 2002 let linkElement = location.hash; 2003 if( $(linkElement).length > 0 && $('.one-page-menu').find('[data-href="'+linkElement+'"]').length > 0 ) { 2004 $window.scrollTop(0); 2005 } 2006 } 2007 2008 }; 2009 2010 SEMICOLON.isMobile = { 2011 Android: function() { 2012 return navigator.userAgent.match(/Android/i); 2013 }, 2014 BlackBerry: function() { 2015 return navigator.userAgent.match(/BlackBerry/i); 2016 }, 2017 iOS: function() { 2018 return navigator.userAgent.match(/iPhone|iPad|iPod/i); 2019 }, 2020 Opera: function() { 2021 return navigator.userAgent.match(/Opera Mini/i); 2022 }, 2023 Windows: function() { 2024 return navigator.userAgent.match(/IEMobile/i); 2025 }, 2026 any: function() { 2027 return (SEMICOLON.isMobile.Android() || SEMICOLON.isMobile.BlackBerry() || SEMICOLON.isMobile.iOS() || SEMICOLON.isMobile.Opera() || SEMICOLON.isMobile.Windows()); 2028 } 2029 }; 2030 2031 // Add your Custom JS Codes here 2032 SEMICOLON.customization = { 2033 2034 onReady: function(){ 2035 2036 // Add JS Codes here to Run on Document Ready 2037 2038 }, 2039 2040 onLoad: function(){ 2041 2042 // Add JS Codes here to Run on Window Load 2043 2044 }, 2045 2046 onResize: function(){ 2047 2048 // Add JS Codes here to Run on Window Resize 2049 2050 } 2051 2052 } 2053 2054 SEMICOLON.documentOnResize = { 2055 2056 init: function(){ 2057 2058 SEMICOLON.header.menufunctions(); 2059 SEMICOLON.header.fullWidthMenu(); 2060 SEMICOLON.header.stickyMenu(); 2061 SEMICOLON.header.logo(); 2062 SEMICOLON.initialize.dataResponsiveHeights(); 2063 SEMICOLON.initialize.stickFooterOnSmall(); 2064 SEMICOLON.slider.sliderDimensions(); 2065 SEMICOLON.slider.sliderParallax(); 2066 SEMICOLON.widget.html5Video(); 2067 SEMICOLON.widget.masonryThumbs(); 2068 SEMICOLON.initialize.dataResponsiveClasses(); 2069 SEMICOLON.customization.onResize(); 2070 2071 windowWidth = $window.width(); 2072 2073 $(window).trigger( 'scwWindowResize' ); 2074 2075 } 2076 2077 }; 2078 2079 SEMICOLON.documentOnReady = { 2080 2081 init: function(){ 2082 SEMICOLON.initialize.init(); 2083 SEMICOLON.header.init(); 2084 if( $slider.length > 0 || $sliderElement.length > 0 ) { SEMICOLON.slider.init(); } 2085 if( $portfolio.length > 0 ) { SEMICOLON.portfolio.init(); } 2086 SEMICOLON.widget.init(); 2087 SEMICOLON.documentOnReady.windowscroll(); 2088 SEMICOLON.customization.onReady(); 2089 }, 2090 2091 windowscroll: function(){ 2092 2093 if( $header.length > 0 ) { 2094 headerOffset = $header.offset().top; 2095 $headerWrap.addClass('position-absolute'); 2096 headerWrapOffset = $headerWrap.offset().top; 2097 $headerWrap.removeClass('position-absolute'); 2098 } 2099 2100 let headerDefinedOffset = $header.attr('data-sticky-offset'); 2101 if( typeof headerDefinedOffset !== 'undefined' ) { 2102 if( headerDefinedOffset == 'full' ) { 2103 headerWrapOffset = $window.height(); 2104 let headerOffsetNegative = $header.attr('data-sticky-offset-negative'); 2105 if( typeof headerOffsetNegative !== 'undefined' ) { 2106 headerWrapOffset = headerWrapOffset - headerOffsetNegative - 1; 2107 } 2108 } else { 2109 headerWrapOffset = Number(headerDefinedOffset); 2110 } 2111 } else { 2112 if( headerWrapOffset === 'undefined' ) { 2113 headerWrapOffset = headerOffset; 2114 } 2115 } 2116 2117 let pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2118 offset = $headerWrap.outerHeight(), 2119 head = document.head || document.getElementsByTagName('head')[0], 2120 style = document.createElement('style'), 2121 css; 2122 2123 if( $pagemenu.length > 0 ) { 2124 $pageMenuClone.css({ 'height': $pagemenu.find('#page-menu-wrap').outerHeight() }); 2125 setTimeout( function(){ 2126 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 2127 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || mobileSticky == 'true' ) { 2128 pageMenuOffset = $pagemenu.offset().top - $headerWrap.outerHeight(); 2129 head.appendChild(style); 2130 css = '#page-menu.sticky-page-menu:not(.dots-menu) #page-menu-wrap { top: '+ offset +'px; }'; 2131 2132 style.type = 'text/css'; 2133 style.appendChild(document.createTextNode(css)); 2134 } else { 2135 pageMenuOffset = $pagemenu.offset().top; 2136 } 2137 } else { 2138 pageMenuOffset = $pagemenu.offset().top; 2139 } 2140 }, 1000); 2141 } 2142 2143 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2144 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2145 2146 window.addEventListener( 'scroll', function(){ 2147 2148 SEMICOLON.initialize.goToTopScroll(); 2149 $('body.open-header.close-header-on-scroll').removeClass("side-header-open"); 2150 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2151 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2152 SEMICOLON.header.logo(); 2153 2154 }, { passive: true });
2155 2156 window.addEventListener( 'DOMContentLoaded', onScrollSliderParallax, false ); 2157 2158 $window.scrollEnd( function(){ 2159 let headerHeight = $headerWrap.outerHeight(); 2160 if( $pagemenu.length > 0 && $header.length > 0 && !$header.hasClass('no-sticky') ) { 2161 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 2162 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 2163 } 2164 } 2165 }, 500 ); 2166 2167 } 2168 2169 }; 2170 2171 SEMICOLON.documentOnLoad = { 2172 2173 init: function(){ 2174 SEMICOLON.slider.swiperSliderMenu(true); 2175 SEMICOLON.slider.revolutionSliderMenu(true); 2176 SEMICOLON.initialize.stickFooterOnSmall(); 2177 SEMICOLON.widget.gridInit(); 2178 let isoCheckInt = setInterval( function(){ 2179 if( 'pluginIsotopeReady' in scwEvents ) { 2180 SEMICOLON.widget.filterInit(); 2181 SEMICOLON.widget.masonryThumbs(); 2182 clearInterval( isoCheckInt ); 2183 } 2184 }, 1000 ); 2185 SEMICOLON.widget.parallax(); 2186 SEMICOLON.widget.loadFlexSlider(); 2187 SEMICOLON.widget.html5Video(); 2188 SEMICOLON.widget.ticker(); 2189 SEMICOLON.header.responsiveMenuClass(); 2190 SEMICOLON.initialize.modal(); 2191 SEMICOLON.customization.onLoad(); 2192 2193 } 2194 2195 }; 2196 2197 let $window = $(window), 2198 windowScrT, 2199 $body = $('body'), 2200 $wrapper = $('#wrapper'), 2201 $header = $('#header'), 2202 $headerWrap = $('#header-wrap'), 2203 $headerInc = $('.include-header'), 2204 defLogoH = $header.attr('data-logo-height') || 100, 2205 stickyLogoH = $header.attr('data-sticky-logo-height') || 60, 2206 mobileSticky = $header.attr('data-mobile-sticky') || 'false', 2207 mobileLogoH = $header.attr('data-mobile-logo-height') || Number( defLogoH ), 2208 mobileStickyLogoH = $header.attr('data-mobile-sticky-logo-height') || Number( stickyLogoH ), 2209 defMenuP = $header.attr('data-menu-padding') || 39, 2210 stickyMenuP = $header.attr('data-sticky-menu-padding') || 19, 2211 headerSizeCustom = !$header.hasClass('header-size-lg') && !$header.hasClass('header-size-md') && !$header.hasClass('header-size-sm') && !$header.hasClass('header-size-custom'), 2212 stickyShrink = $header.attr('data-sticky-shrink') || 'true', 2213 stickyShrinkOffset = $header.attr('data-sticky-shrink-offset') || 300, 2214 primaryMenu = $('.primary-menu'), 2215 primaryMenuMainItems = primaryMenu.find('.menu-container:not(mobile-primary-menu):not(.custom-spacing)').children('.menu-item').children('.menu-link'), 2216 $headerWrapClone = '', 2217 initialHeaderWrapHeight = $headerWrap.outerHeight(), 2218 $headerRow = $headerWrap.find('.header-row:eq(0)'), 2219 $content = $('#content'), 2220 $footer = $('#footer'), 2221 windowWidth = $window.width(), 2222 oldHeaderClasses = $header.attr('class'), 2223 oldHeaderWrapClasses = $headerWrap.attr('class'), 2224 stickyMenuClasses = $header.attr('data-sticky-class'), 2225 responsiveMenuClasses = $header.attr('data-responsive-class'), 2226 logo = $('#logo'), 2227 defaultLogo = logo.find('.standard-logo'), 2228 defaultLogoWidth = defaultLogo.find('img').outerWidth(), 2229 retinaLogo = logo.find('.retina-logo'), 2230 defaultLogoImg = defaultLogo.find('img').attr('src'), 2231 retinaLogoImg = retinaLogo.find('img').attr('src'), 2232 defaultDarkLogo = defaultLogo.attr('data-dark-logo'), 2233 retinaDarkLogo = retinaLogo.attr('data-dark-logo'), 2234 defaultStickyLogo = defaultLogo.attr('data-sticky-logo'), 2235 retinaStickyLogo = retinaLogo.attr('data-sticky-logo'), 2236 defaultMobileLogo = defaultLogo.attr('data-mobile-logo'), 2237 retinaMobileLogo = retinaLogo.attr('data-mobile-logo'), 2238 topSearchTimeOut, 2239 $pagemenu = $('#page-menu'), 2240 $pageMenuClone = '', 2241 $pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2242 $onePageMenuEl = $('.one-page-menu'), 2243 $portfolio = $('.portfolio'), 2244 $shop = $('.shop'), 2245 $slider = $('#slider'), 2246 $sliderParallaxEl = $('.slider-parallax'), 2247 $sliderElement = $('.slider-element'), 2248 swiperSlider = '', 2249 $pageTitle = $('#page-title'), 2250 $topSearch = $('.top-search-form'), 2251 $topCart = $('#top-cart'), 2252 $topSocialEl = $('#top-social').find('li'), 2253 $goToTopEl = $('#gotoTop'), 2254 googleMapsAPI = 'YOUR-API-KEY', 2255 xScrollPosition, 2256 yScrollPosition, 2257 sliderParallaxEl = document.querySelector('.slider-parallax'), 2258 sliderParallaxElCaption = document.querySelector('.slider-parallax .slider-caption'), 2259 sliderParallaxElInner = document.querySelector('.slider-inner'), 2260 initHeaderHeight, 2261 headerOffset = 0, 2262 headerWrapOffset = 0, 2263 pageMenuOffset = 0, 2264 resizeTimer; 2265 2266 $(document).ready( SEMICOLON.documentOnReady.init ); 2267 2268 $window.on( 'load', SEMICOLON.documentOnLoad.init ); 2269 2270 $window.on( 'resize', function() { 2271 let thisWindow = $(this); 2272 clearTimeout(resizeTimer); 2273 resizeTimer = setTimeout(function() { 2274 if ( thisWindow.width() !== windowWidth ) {
2275 SEMICOLON.documentOnResize.init(); 2276 } 2277 }, 250); 2278 }); 2279 2280})(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.