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 || {}; 76 77(function($){ 78 79 // USE STRICT 80 "use strict"; 81 82 SEMICOLON.initialize = { 83 84 init: function(){ 85 86 SEMICOLON.initialize.defaults(); 87 SEMICOLON.initialize.pageTransition(); 88 SEMICOLON.initialize.goToTop(); 89 SEMICOLON.initialize.lazyLoad(); 90 SEMICOLON.initialize.lightbox(); 91 SEMICOLON.initialize.resizeVideos(); 92 SEMICOLON.initialize.dataResponsiveClasses(); 93 SEMICOLON.initialize.dataResponsiveHeights(); 94 SEMICOLON.initialize.stickFooterOnSmall(); 95 96 }, 97 98 execFunc: function( functionName, context ) { 99 let args = Array.prototype.slice.call( arguments, 2 ), 100 namespaces = functionName.split("."), 101 func = namespaces.pop(); 102 103 for( let i = 0; i < namespaces.length; i++ ) { 104 context = context[namespaces[i]]; 105 } 106 107 if( typeof context[func] !== 'undefined' ) { 108 return context[func].apply( context, args ); 109 } else { 110 console.log( functionName + ' Function does not exist' ); 111 } 112 }, 113 114 execPlugin: function( element, settings, available ) { 115 window.scwEvents = window.scwEvents || {}; 116 117 let pluginActive = false, 118 pluginLinkingInterval; 119 120 if( available ) { 121 122 if( settings.trigger && !scwEvents[settings.trigger] ) { 123 $window.trigger( settings.trigger ); 124 scwEvents[settings.trigger] = true; 125 } 126 127 if( settings.execfn ) { 128 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 129 } 130 131 if( settings.class ) { 132 $body.addClass( settings.class ); 133 } 134 135 } else { 136 if( settings.trigger && !scwEvents[settings.trigger] ) { 137 pluginLinkingInterval = setInterval( function plugFn(){ 138 let pluginFnExec = Function( 'return ' + settings.pluginfn )(); 139 if( pluginFnExec ) { 140 $window.trigger( settings.trigger ); 141 scwEvents[settings.trigger] = true; 142 clearInterval( pluginLinkingInterval ); 143 } 144 return plugFn; 145 }(), 1000); 146 } else { 147 pluginActive = true; 148 } 149 150 if( settings.execfn ) { 151 if( settings.trigger && !pluginActive ) { 152 $window.on( settings.trigger, function(){ 153 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 154 }); 155 } else { 156 SEMICOLON.initialize.execFunc( settings.execfn, window, element ); 157 } 158 } 159 160 if( settings.class ) { 161 $body.addClass( settings.class ); 162 } 163 } 164 }, 165 166 jsLinking: function( element, settings ) { 167 if( element.length < 1 ){ 168 return false;
169 } 170 171 if( settings.hiddendisable && ( element.filter(':hidden').length == element.length ) ) { 172 return false; 173 } 174 175 let pluginFnExec = Function( 'return ' + settings.pluginfn )(), 176 jsPath = 'js/', file, 177 disableAJAX = false; 178 179 if( typeof scwJsPath !== 'undefined' ) { 180 jsPath = scwJsPath + '/'; 181 } 182 183 if( typeof scwDisableJsAJAX !== 'undefined' && scwDisableJsAJAX === true ) { 184 disableAJAX = true; 185 } 186 187 if( /^(f|ht)tps?:\/\//i.test( window.decodeURIComponent( settings.file ) ) ) { 188 file = settings.file; 189 } else { 190 file = jsPath + settings.file; 191 } 192 193 if( pluginFnExec ) { 194 SEMICOLON.initialize.execPlugin( element, settings, true ); 195 } else { 196 if( !disableAJAX ) { 197 $.ajax({ 198 url: file, 199 dataType: "script", 200 cache: true, 201 crossDomain: true, 202 timeout: 5000, 203 }).done(function() { 204 SEMICOLON.initialize.execPlugin( element, settings, false ); 205 }).fail(function() { 206 console.log( settings.error ); 207 }); 208 } else { 209 console.log( settings.error ); 210 } 211 } 212 }, 213 214 functions: function( settings ){ 215 let element, parent, item; 216 217 if( typeof settings.element === 'object' && settings.element !== null ) { 218 if( settings.element.parent !== 'undefined' ) { 219 parent = settings.element.parent; 220 } 221 if( settings.element.el !== 'undefined' ) { 222 settings.element = settings.element.el; 223 } 224 } 225 226 if( settings.element ) { 227 item = settings.element; 228 } else { 229 item = settings.default; 230 } 231 232 if( parent === 'object' ) { 233 element = parent.find( item ); 234 } else { 235 element = $( item ); 236 } 237 238 this.jsLinking( element, settings ); 239 }, 240 241 defaults: function(){ 242 let easingJs = { 243 default: 'body', 244 file: 'plugins.easing.js', 245 error: 'plugins.easing.js: Plugin could not be loaded', 246 pluginfn: 'typeof jQuery.easing["easeOutQuad"] !== "undefined"', 247 trigger: 'pluginEasingReady', 248 class: 'has-plugin-easing' 249 }; 250 251 let bootstrapJs = { 252 default: 'body', 253 file: 'plugins.bootstrap.js', 254 error: 'plugins.bootstrap.js: Plugin could not be loaded', 255 pluginfn: 'typeof bootstrap !== "undefined"', 256 trigger: 'pluginBootstrapReady', 257 class: 'has-plugin-bootstrap' 258 }; 259 260 let jRes = jRespond([ 261 { 262 label: 'smallest', 263 enter: 0, 264 exit: 575 265 },{ 266 label: 'handheld', 267 enter: 576, 268 exit: 767 269 },{ 270 label: 'tablet', 271 enter: 768, 272 exit: 991 273 },{ 274 label: 'laptop', 275 enter: 992, 276 exit: 1199 277 },{ 278 label: 'desktop', 279 enter: 1200, 280 exit: 10000 281 } 282 ]); 283 284 jRes.addFunc([ 285 { 286 breakpoint: 'desktop', 287 enter: function() { $body.addClass('device-xl'); }, 288 exit: function() { $body.removeClass('device-xl'); } 289 },{ 290 breakpoint: 'laptop', 291 enter: function() { $body.addClass('device-lg'); }, 292 exit: function() { $body.removeClass('device-lg'); } 293 },{ 294 breakpoint: 'tablet', 295 enter: function() { $body.addClass('device-md'); }, 296 exit: function() { $body.removeClass('device-md'); } 297 },{ 298 breakpoint: 'handheld', 299 enter: function() { $body.addClass('device-sm'); }, 300 exit: function() { $body.removeClass('device-sm'); } 301 },{ 302 breakpoint: 'smallest', 303 enter: function() { $body.addClass('device-xs'); }, 304 exit: function() { $body.removeClass('device-xs'); } 305 } 306 ]); 307 308 SEMICOLON.initialize.functions( easingJs ); 309 SEMICOLON.initialize.functions( bootstrapJs ); 310 311 if( ! 'IntersectionObserver' in window ){ 312 let intersectObserve = { 313 default: 'body', 314 file: 'intersection-observer.js', 315 error: 'intersection-observer.js: Plugin could not be loaded', 316 pluginfn: 'typeof window.IntersectionObserver !== "undefined"', 317 trigger: 'intersectObservePolyfill', 318 class: 'has-polyfill-intersection-observer' 319 }; 320 321 SEMICOLON.initialize.functions( intersectObserve ); 322 } 323 }, 324 325 goToTop: function(){ 326 let elementScrollSpeed = $goToTopEl.attr('data-speed'), 327 elementScrollEasing = $goToTopEl.attr('data-easing'); 328 329 if( !elementScrollSpeed ) { elementScrollSpeed = 700; } 330 if( !elementScrollEasing ) { elementScrollEasing = 'easeOutQuad'; } 331 332 $goToTopEl.off( 'click' ).on( 'click', function() { 333 $('body,html').stop(true).animate({ 334 'scrollTop': 0 335 }, Number( elementScrollSpeed ), elementScrollEasing ); 336 return false;
337 }); 338 }, 339 340 goToTopScroll: function(){ 341 let elementMobile = $goToTopEl.attr('data-mobile'), 342 elementOffset = $goToTopEl.attr('data-offset'); 343 344 if( !elementOffset ) { elementOffset = 450; } 345 346 if( elementMobile != 'true' && ( $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { return true; } 347 348 if( $window.scrollTop() > Number(elementOffset) ) { 349 $goToTopEl.fadeIn(); 350 $body.addClass('gototop-active'); 351 } else { 352 $goToTopEl.fadeOut(); 353 $body.removeClass('gototop-active'); 354 } 355 }, 356 357 lightbox: function( element ){ 358 let settings = { 359 element: element, 360 default: '[data-lightbox]', 361 file: 'plugins.lightbox.js', 362 error: 'plugins.lightbox.js: Plugin could not be loaded', 363 execfn: 'SEMICOLON_lightboxInit', 364 pluginfn: '$().magnificPopup', 365 trigger: 'pluginLightboxReady', 366 class: 'has-plugin-lightbox' 367 }; 368 369 SEMICOLON.initialize.functions( settings ); 370 }, 371 372 modal: function( element ){ 373 let settings = { 374 element: element, 375 default: '.modal-on-load', 376 file: 'plugins.lightbox.js', 377 error: 'plugins.lightbox.js: Plugin could not be loaded', 378 execfn: 'SEMICOLON_modalInit', 379 pluginfn: '$().magnificPopup', 380 trigger: 'pluginLightboxReady', 381 class: 'has-plugin-lightbox' 382 }; 383 384 SEMICOLON.initialize.functions( settings ); 385 }, 386 387 resizeVideos: function(){ 388 let settings = { 389 default: 'iframe[src*="youtube"],iframe[src*="vimeo"],iframe[src*="dailymotion"],iframe[src*="maps.google.com"],iframe[src*="google.com/maps"]', 390 file: 'plugins.fitvids.js', 391 error: 'plugins.fitvids.js: Plugin could not be loaded', 392 execfn: 'SEMICOLON_resizeVideosInit', 393 pluginfn: '$().fitVids', 394 trigger: 'pluginfitVidsReady', 395 class: 'has-plugin-fitvids' 396 }; 397 398 SEMICOLON.initialize.functions( settings ); 399 }, 400 401 pageTransition: function(){ 402 let settings = { 403 default: '.page-transition', 404 file: 'plugins.pagetransition.js', 405 error: 'plugins.pagetransition.js: Plugin could not be loaded', 406 execfn: 'SEMICOLON_pageTransitionInit', 407 pluginfn: '$().animsition', 408 trigger: 'pluginPageTransitionReady', 409 class: 'has-plugin-animsition' 410 }; 411 412 SEMICOLON.initialize.functions( settings ); 413 }, 414 415 lazyLoad: function( element ) { 416 let settings = { 417 element: element, 418 default: '.lazy', 419 file: 'plugins.lazyload.js', 420 error: 'plugins.lazyload.js: Plugin could not be loaded', 421 execfn: 'SEMICOLON_lazyLoadInit', 422 pluginfn: 'typeof LazyLoad !== "undefined"', 423 trigger: 'pluginlazyLoadReady', 424 class: 'has-plugin-lazyload' 425 }; 426 427 SEMICOLON.initialize.functions( settings ); 428 }, 429 430 topScrollOffset: function() { 431 let topOffsetScroll = 0; 432 433 if( ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) && !SEMICOLON.isMobile.any() ) { 434 if( $header.hasClass('sticky-header') ) { 435 if( $pagemenu.hasClass('dots-menu') ) { topOffsetScroll = 100; } else { topOffsetScroll = 144; } 436 } else { 437 if( $pagemenu.hasClass('dots-menu') ) { topOffsetScroll = 140; } else { topOffsetScroll = 184; } 438 } 439 440 if( !$pagemenu.length ) { 441 if( $header.hasClass('sticky-header') ) { topOffsetScroll = 100; } else { topOffsetScroll = 140; } 442 } 443 } else { 444 topOffsetScroll = 40; 445 } 446 447 return topOffsetScroll; 448 }, 449 450 dataResponsiveClasses: function(){ 451 let settings = { 452 default: '[data-class-xl],[data-class-lg],[data-class-md],[data-class-sm],[data-class-xs]', 453 file: 'plugins.dataclasses.js', 454 error: 'plugins.dataclasses.js: Plugin could not be loaded', 455 execfn: 'SEMICOLON_dataClassesInit', 456 pluginfn: 'typeof scwDataClassesPlugin !== "undefined"', 457 trigger: 'pluginDataClassesReady', 458 class: 'has-plugin-dataclasses' 459 }; 460 461 SEMICOLON.initialize.functions( settings ); 462 }, 463 464 dataResponsiveHeights: function(){ 465 let settings = { 466 default: '[data-height-xl],[data-height-lg],[data-height-md],[data-height-sm],[data-height-xs]', 467 file: 'plugins.dataheights.js', 468 error: 'plugins.dataheights.js: Plugin could not be loaded', 469 execfn: 'SEMICOLON_dataHeightsInit', 470 pluginfn: 'typeof scwDataHeightsPlugin !== "undefined"', 471 trigger: 'pluginDataHeightsReady', 472 class: 'has-plugin-dataheights' 473 }; 474 475 SEMICOLON.initialize.functions( settings ); 476 }, 477 478 stickFooterOnSmall: function(){ 479 $footer.css({ 'margin-top': '' }); 480 let windowH = $window.height(), 481 wrapperH = $wrapper.height(); 482 483 if( !$body.hasClass('sticky-footer') && $footer.length > 0 && $wrapper.has('#footer') ) { 484 if( windowH > wrapperH ) { 485 $footer.css({ 'margin-top': ( windowH - wrapperH ) }); 486 } 487 } 488 } 489 490 }; 491 492 SEMICOLON.header = { 493 494 init: function(){ 495 496 SEMICOLON.header.initialize(); 497 SEMICOLON.header.menufunctions(); 498 SEMICOLON.header.fullWidthMenu(); 499 SEMICOLON.header.stickyMenu(); 500 SEMICOLON.header.stickyPageMenu(); 501 SEMICOLON.header.sideHeader(); 502 SEMICOLON.header.sidePanel(); 503 SEMICOLON.header.onePageScroll(); 504 SEMICOLON.header.logo(); 505 SEMICOLON.header.topsearch(); 506 SEMICOLON.header.topcart(); 507 SEMICOLON.header.miscFunctions(); 508 509 }, 510 511 initialize: function() { 512 513 if( $headerWrap.length > 0 ) { 514 if( $('.header-wrap-clone').length < 1 ) { 515 $headerWrap.after('<div class="header-wrap-clone"></div>'); 516 } 517 $headerWrapClone = $('.header-wrap-clone'); 518 } 519 520 if( $pagemenu.length > 0 ) { 521 $pagemenu.find('#page-menu-wrap').after('<div class="page-menu-wrap-clone"></div>'); 522 $pageMenuClone = $('.page-menu-wrap-clone'); 523 } 524
525 let menuItemSubs = $( '.menu-item:has(.sub-menu-container)' ); 526 527 menuItemSubs.addClass('sub-menu'); // , .primary-menu.with-arrows > .menu-container > .menu-item:has(.sub-menu-container) > .menu-link > div:not(:has(.icon-angle-down)) 528 $( '.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>' ); 529 $( '.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>' ); 530 531 SEMICOLON.header.menuInvert(); 532 533 }, 534 535 menuInvert: function( subMenuEl ) { 536 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 $menuChildElement = $(element), 543 menuChildOffset = $menuChildElement.offset(), 544 menuChildWidth = $menuChildElement.width(); 545 546 if(windowWidth - (menuChildWidth + menuChildOffset.left) < 0) { 547 $menuChildElement.addClass('menu-pos-invert'); 548 } 549 }); 550 submenus.children().css({ 'display': '' }); 551 submenus.css({ 'display': '' }); 552 553 }, 554 555 includeOffset: function(){ 556 if( $headerInc.length < 1 ) { 557 return true; 558 } 559 560 let headerInc = $header.outerHeight(); 561 if( $header.hasClass('floating-header') || $headerInc.hasClass('include-topbar') ) { 562 headerInc = headerInc + $header.offset().top; 563 } 564 $headerInc.css({ 'margin-top': -headerInc }); 565 SEMICOLON.slider.sliderParallax(); 566 }, 567 568 menufunctions: function(){ 569 570 let menuItemSubs = $( '.menu-item:has(.sub-menu-container)' ), 571 menuItemSubsLinks = menuItemSubs.children( '.menu-link' ), 572 submenusT = '.mega-menu-content, .sub-menu-container', 573 submenus = $( submenusT ), 574 menuItemT = '.menu-item', 575 subMenuT = '.sub-menu', 576 menuSpeed = primaryMenu.attr( 'data-trigger-speed' ) || 200, 577 subMenuTriggerT = '.sub-menu-trigger', 578 menuItemTrigger; 579 580 menuSpeed = Number( menuSpeed ); 581 582 menuItemTrigger = menuItemSubs.children( subMenuTriggerT ); 583 584 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 585 setTimeout( function(){ 586 if( $headerWrapClone.length > 0 ) { 587 $headerWrapClone.css({ 'height': $headerWrap.outerHeight() }); 588 } 589 SEMICOLON.header.includeOffset(); 590 }, 1000); 591 primaryMenu.find( submenus ).css({ 'display': '' }); 592 } else { 593 $headerInc.css({ 'margin-top': '' }); 594 } 595 596 if( ( $body.hasClass('overlay-menu') && primaryMenu.hasClass('on-click') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 597 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 598 let triggerEl = $(this); 599 triggerEl.parents( subMenuT ).siblings().find( submenus ).stop( true, true ).slideUp( menuSpeed ); 600 triggerEl.parent( menuItemT ).children( submenusT ).stop( true, true ).slideToggle( menuSpeed ); 601 e.preventDefault(); 602 }); 603 } else if( ( $body.hasClass('side-header') && primaryMenu.hasClass('on-click') ) || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 604 menuItemTrigger.removeClass('icon-rotate-90'); 605 $( menuItemT ).find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed , function(){ 606 $body.toggleClass("primary-menu-open", false); 607 }); 608 609 menuItemTrigger = menuItemTrigger.add( menuItemSubsLinks.filter('[href^="#"]') ); 610 611 menuItemTrigger.off( 'click' ).on( 'click', function(e){ 612 let triggerEl = $(this); 613 triggerEl.parents( subMenuT ).siblings().find( subMenuTriggerT ).removeClass('icon-rotate-90'); 614 triggerEl.parents( subMenuT ).siblings().find( submenus ).filter(':not(:animated)').stop( true, true ).slideUp( menuSpeed ); 615 triggerEl.parent( menuItemT ).children( submenusT ).filter(':not(:animated)').stop( true, true ).slideToggle( menuSpeed ); 616
617 let subMenuTriggerEl = triggerEl.parent( menuItemT ).children( subMenuTriggerT ); 618 619 if( !subMenuTriggerEl.hasClass( 'icon-rotate-90' ) ) { 620 subMenuTriggerEl.addClass('icon-rotate-90'); 621 } else { 622 subMenuTriggerEl.removeClass('icon-rotate-90'); 623 } 624 625 e.preventDefault(); 626 }); 627 } else if( ( $body.hasClass('overlay-menu') || $body.hasClass('side-header') ) && ( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) ) { 628 primaryMenu.find( submenus ).stop( true, true ).slideUp( menuSpeed ); 629 $( menuItemT ).hover( function(e){ 630 $(this).children( submenusT ).stop( true, true ).slideDown( menuSpeed ); 631 }, function(){ 632 $(this).children( submenusT ).stop( true, true ).slideUp( menuSpeed ); 633 }); 634 } else { 635 if( primaryMenu.hasClass('on-click') ) { 636 menuItemSubsLinks.off( 'click' ).on( 'click', function(e){ 637 let triggerEl = $(this); 638 triggerEl.parents( subMenuT ).siblings().find( submenus ).removeClass('d-block'); 639 triggerEl.parent( menuItemT ).children( submenusT ).toggleClass('d-block'); 640 triggerEl.parent( menuItemT ).siblings().removeClass('current'); 641 triggerEl.parent( menuItemT ).toggleClass('current'); 642 e.preventDefault(); 643 }); 644 } 645 } 646 647 if( $('.top-links').hasClass('on-click') || ( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) ) { 648 $('.top-links-item:has(.top-links-sub-menu,.top-links-section) > a').on( 'click', function(e){ 649 $(this).parents('li').siblings().find('.top-links-sub-menu,.top-links-section').removeClass('d-block'); 650 $(this).parent('li').children('.top-links-sub-menu,.top-links-section').toggleClass('d-block'); 651 e.preventDefault(); 652 }); 653 } 654 655 SEMICOLON.header.menuInvert( $('.top-links-section') ); 656 657 $('#primary-menu-trigger').off( 'click' ).on( 'click', function() { 658 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 659 if( primaryMenu.find('.mobile-primary-menu').length > 0 ) { 660 $( '.primary-menu:not(.mobile-menu-off-canvas) .mobile-primary-menu' ).stop( true, true ).slideToggle( menuSpeed ); 661 $( '.primary-menu.mobile-menu-off-canvas .mobile-primary-menu' ).toggleClass('d-block'); 662 } else { 663 $( '.primary-menu:not(.mobile-menu-off-canvas) .menu-container' ).stop( true, true ).slideToggle( menuSpeed ); 664 $( '.primary-menu.mobile-menu-off-canvas .menu-container' ).toggleClass('d-block'); 665 } 666 } 667 $body.toggleClass("primary-menu-open"); 668 return false; 669 }); 670 671 $( '.menu-container:not(.mobile-primary-menu)' ).css({ 'display': '' }); 672 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 673 primaryMenu.find('.mobile-primary-menu').removeClass('d-block'); 674 } 675 676 }, 677 678 fullWidthMenu: function(){ 679 680 if( $body.hasClass('device-md') || $body.hasClass('device-sm') || $body.hasClass('device-xs') ) { 681 $('.mega-menu-content, .top-search-form').css({ 'width': '' }); 682 return true; 683 } 684 685 let headerWidth = $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').parents('.header-row').width(); 686 687 if( $header.find('.container-fullwidth').length > 0 ) { 688 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth }); 689 } 690 691 if( $body.hasClass('stretched') ) { 692 if( $header.hasClass('floating-header') ) { 693 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth + 80 }); 694 } else { 695 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content, .top-search-form').css({ 'width': headerWidth }); 696 } 697 } else { 698 if( $header.hasClass('full-header') ) { 699 $('.mega-menu:not(.mega-menu-full):not(.mega-menu-small) .mega-menu-content').css({ 'width': headerWidth - 80 }); 700 } 701 } 702 703 if( $header.find('.header-row').length > 1 ) { 704 let megaMenuContent = $('.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content').eq(0), 705 offset = $headerWrap.outerHeight() - megaMenuContent.parents('.header-row').outerHeight(), 706 css = '.menu-container > .mega-menu:not(.mega-menu-small) .mega-menu-content { top: calc( 100% - '+ offset +'px ); }', 707 head = document.head || document.getElementsByTagName('head')[0], 708 style = document.createElement('style'); 709 710 head.appendChild(style); 711 712 style.type = 'text/css'; 713 style.appendChild(document.createTextNode(css)); 714 } 715 }, 716 717 stickyMenu: function( headerOffset ){ 718 719 windowScrT = $window.scrollTop(); 720 721 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 722 if( windowScrT > headerOffset ) { 723 724 if( !$body.hasClass('side-header') ) { 725 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 726 // if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 727 SEMICOLON.header.stickyMenuClass(); 728 729 if( stickyShrink == 'true' && !$header.hasClass('no-sticky') ) { 730 if( ( windowScrT - headerOffset ) > Number( stickyShrinkOffset ) ) { 731 $header.addClass('sticky-header-shrink'); 732 if( headerSizeCustom ){ 733 logo.find('img').css({ 'height': Number( stickyLogoH ) }); 734 SEMICOLON.header.menuItemsSpacing( stickyMenuP ); 735 } 736 } else { 737 $header.removeClass('sticky-header-shrink'); 738 if( headerSizeCustom ){ 739 logo.find('img').css({ 'height': Number( defLogoH ) }); 740 SEMICOLON.header.menuItemsSpacing( defMenuP ); 741 } 742 } 743 } 744 } 745 746 } else { 747 SEMICOLON.header.removeStickyness(); 748 if( headerSizeCustom ){ 749 logo.find('img').css({ 'height': Number( defLogoH ) }); 750 SEMICOLON.header.menuItemsSpacing( defMenuP ); 751 } 752 } 753 } 754 755 if( $body.hasClass('device-xs') || $body.hasClass('device-sm') || $body.hasClass('device-md') ) { 756 if( mobileSticky == 'true' ) { 757 if( windowScrT > headerOffset ) { 758 $header.filter(':not(.no-sticky)').addClass('sticky-header'); 759 SEMICOLON.header.stickyMenuClass(); 760 } else { 761 SEMICOLON.header.removeStickyness(); 762 SEMICOLON.header.responsiveMenuClass(); 763 } 764 } else { 765 SEMICOLON.header.removeStickyness(); 766 } 767 if( headerSizeCustom ){ 768 logo.find('img').css({ 'height': Number( mobileLogoH ) }); 769 SEMICOLON.header.menuItemsSpacing( '' ); 770 } 771 } 772 }, 773 774 menuItemsSpacing: function( spacing ) { 775 776 let item = primaryMenuMainItems; 777 778 if( !$body.hasClass('side-header') && !$body.hasClass('overlay-menu') ) { 779 if( primaryMenu.hasClass('menu-spacing-margin') ) { 780 if( spacing == '' ) { 781 item.css({ 'margin-top': '', 'margin-bottom': '' }); 782 } else { 783 item.css({ 'margin-top': Number( spacing ), 'margin-bottom': Number( spacing ) }); 784 } 785 } else { 786 if( spacing == '' ) { 787 item.css({ 'padding-top': '', 'padding-bottom': '' }); 788 } else { 789 item.css({ 'padding-top': Number( spacing ), 'padding-bottom': Number( spacing ) }); 790 } 791 } 792 } 793 794 }, 795 796 stickyPageMenu: function( pageMenuOffset ){ 797 if( $window.scrollTop() > pageMenuOffset ) { 798 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 799 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 800 let headerHeight = $headerWrap.outerHeight(); 801 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 802 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 803 } 804 } else if( $body.hasClass('device-sm') || $body.hasClass('device-xs') || $body.hasClass('device-md') ) { 805 if( $pagemenu.attr('data-mobile-sticky') == 'true' ) { 806 $pagemenu.filter(':not(.dots-menu,.no-sticky)').addClass('sticky-page-menu'); 807 } 808 } 809 } else { 810 $pagemenu.removeClass('sticky-page-menu'); 811 $pagemenu.find( $pageMenuWrap ).css({ 'top': '' }); 812 } 813 }, 814 815 removeStickyness: function(){ 816 if( $header.hasClass('sticky-header') ){ 817 $header.removeClass('sticky-header'); 818 $header.removeClass().addClass(oldHeaderClasses); 819 $headerWrap.removeClass().addClass(oldHeaderWrapClasses); 820 if( !$headerWrap.hasClass('force-not-dark') ) { $headerWrap.removeClass('not-dark'); } 821 SEMICOLON.slider.swiperSliderMenu(); 822 SEMICOLON.slider.revolutionSliderMenu(); 823 if( $headerWrapClone.length > 0 && $headerWrap.outerHeight() > $headerWrapClone.outerHeight() ) { 824 $headerWrapClone.css({ 'height': $headerWrap.outerHeight() }); 825 } 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.initialize.dataResponsiveHeights(); 2064 SEMICOLON.initialize.stickFooterOnSmall(); 2065 SEMICOLON.slider.sliderDimensions(); 2066 SEMICOLON.slider.sliderParallax(); 2067 SEMICOLON.widget.html5Video(); 2068 SEMICOLON.widget.masonryThumbs(); 2069 SEMICOLON.initialize.dataResponsiveClasses(); 2070 SEMICOLON.customization.onResize(); 2071 2072 windowWidth = $window.width(); 2073 2074 $(window).trigger( 'scwWindowResize' ); 2075 2076 } 2077 2078 }; 2079 2080 SEMICOLON.documentOnReady = { 2081 2082 init: function(){ 2083 SEMICOLON.initialize.init(); 2084 SEMICOLON.header.init(); 2085 if( $slider.length > 0 || $sliderElement.length > 0 ) { SEMICOLON.slider.init(); } 2086 if( $portfolio.length > 0 ) { SEMICOLON.portfolio.init(); } 2087 SEMICOLON.widget.init(); 2088 SEMICOLON.documentOnReady.windowscroll(); 2089 SEMICOLON.customization.onReady(); 2090 }, 2091 2092 windowscroll: function(){ 2093 2094 if( $header.length > 0 ) { 2095 headerOffset = $header.offset().top; 2096 $headerWrap.addClass('position-absolute'); 2097 headerWrapOffset = $headerWrap.offset().top; 2098 $headerWrap.removeClass('position-absolute'); 2099 } 2100 2101 let headerDefinedOffset = $header.attr('data-sticky-offset'); 2102 if( typeof headerDefinedOffset !== 'undefined' ) { 2103 if( headerDefinedOffset == 'full' ) { 2104 headerWrapOffset = $window.height(); 2105 let headerOffsetNegative = $header.attr('data-sticky-offset-negative'); 2106 if( typeof headerOffsetNegative !== 'undefined' ) { 2107 headerWrapOffset = headerWrapOffset - headerOffsetNegative - 1; 2108 } 2109 } else { 2110 headerWrapOffset = Number(headerDefinedOffset); 2111 } 2112 } else { 2113 if( headerWrapOffset === 'undefined' ) { 2114 headerWrapOffset = headerOffset; 2115 } 2116 } 2117 2118 let pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2119 offset = $headerWrap.outerHeight(), 2120 head = document.head || document.getElementsByTagName('head')[0], 2121 style = document.createElement('style'), 2122 css; 2123 2124 if( $pagemenu.length > 0 ) { 2125 $pageMenuClone.css({ 'height': $pagemenu.find('#page-menu-wrap').outerHeight() }); 2126 setTimeout( function(){ 2127 if( $header.length > 0 && !$header.hasClass('no-sticky') ) { 2128 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') || mobileSticky == 'true' ) { 2129 pageMenuOffset = $pagemenu.offset().top - $headerWrap.outerHeight(); 2130 head.appendChild(style); 2131 css = '#page-menu.sticky-page-menu:not(.dots-menu) #page-menu-wrap { top: '+ offset +'px; }'; 2132 2133 style.type = 'text/css'; 2134 style.appendChild(document.createTextNode(css)); 2135 } else { 2136 pageMenuOffset = $pagemenu.offset().top; 2137 } 2138 } else { 2139 pageMenuOffset = $pagemenu.offset().top; 2140 } 2141 }, 1000); 2142 } 2143 2144 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2145 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2146 2147 window.addEventListener( 'scroll', function(){ 2148 2149 SEMICOLON.initialize.goToTopScroll(); 2150 $('body.open-header.close-header-on-scroll').removeClass("side-header-open"); 2151 SEMICOLON.header.stickyMenu( headerWrapOffset ); 2152 SEMICOLON.header.stickyPageMenu( pageMenuOffset ); 2153 SEMICOLON.header.logo(); 2154 2155 }, { passive: true }); 2156 2157 window.addEventListener( 'DOMContentLoaded', onScrollSliderParallax, false ); 2158 2159 $window.scrollEnd( function(){ 2160 let headerHeight = $headerWrap.outerHeight(); 2161 if( $headerWrapClone.length > 0 && headerHeight > $headerWrapClone.outerHeight() ) { 2162 $headerWrapClone.css({ 'height': headerHeight }); 2163 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 2164 SEMICOLON.header.includeOffset(); 2165 } 2166 } 2167 if( $pagemenu.length > 0 && $header.length > 0 && !$header.hasClass('no-sticky') ) { 2168 if( $body.hasClass('device-xl') || $body.hasClass('device-lg') ) { 2169 $pagemenu.filter('.sticky-page-menu:not(.dots-menu,.no-sticky)').find( $pageMenuWrap ).css({ 'top': headerHeight +'px' }); 2170 } 2171 } 2172 }, 500 ); 2173 2174 window.onfocus = function() { 2175 let headerHeight = $headerWrap.outerHeight(); 2176 if( $headerWrapClone.length > 0 && headerHeight > $headerWrapClone.outerHeight() ) { 2177 $headerWrapClone.css({ 'height': headerHeight }); 2178 } 2179 }; 2180 2181 } 2182 2183 }; 2184 2185 SEMICOLON.documentOnLoad = { 2186 2187 init: function(){ 2188 SEMICOLON.slider.swiperSliderMenu(true); 2189 SEMICOLON.slider.revolutionSliderMenu(true); 2190 SEMICOLON.initialize.stickFooterOnSmall(); 2191 SEMICOLON.widget.gridInit(); 2192 let isoCheckInt = setInterval( function(){ 2193 if( 'pluginIsotopeReady' in scwEvents ) { 2194 SEMICOLON.widget.filterInit(); 2195 SEMICOLON.widget.masonryThumbs(); 2196 clearInterval( isoCheckInt ); 2197 } 2198 }, 1000 ); 2199 SEMICOLON.widget.parallax(); 2200 SEMICOLON.widget.loadFlexSlider(); 2201 SEMICOLON.widget.html5Video(); 2202 SEMICOLON.widget.ticker(); 2203 SEMICOLON.header.responsiveMenuClass(); 2204 SEMICOLON.initialize.modal(); 2205 SEMICOLON.customization.onLoad(); 2206 2207 } 2208 2209 }; 2210 2211 let $window = $(window), 2212 windowScrT, 2213 $body = $('body'), 2214 $wrapper = $('#wrapper'), 2215 $header = $('#header'), 2216 $headerWrap = $('#header-wrap'), 2217 $headerInc = $('.include-header'), 2218 defLogoH = $header.attr('data-logo-height') || 100, 2219 stickyLogoH = $header.attr('data-sticky-logo-height') || 60, 2220 mobileSticky = $header.attr('data-mobile-sticky') || 'false', 2221 mobileLogoH = $header.attr('data-mobile-logo-height') || Number( defLogoH ), 2222 mobileStickyLogoH = $header.attr('data-mobile-sticky-logo-height') || Number( stickyLogoH ), 2223 defMenuP = $header.attr('data-menu-padding') || 39, 2224 stickyMenuP = $header.attr('data-sticky-menu-padding') || 19, 2225 headerSizeCustom = !$header.hasClass('header-size-lg') && !$header.hasClass('header-size-md') && !$header.hasClass('header-size-sm') && !$header.hasClass('header-size-custom'), 2226 stickyShrink = $header.attr('data-sticky-shrink') || 'true', 2227 stickyShrinkOffset = $header.attr('data-sticky-shrink-offset') || 300, 2228 primaryMenu = $('.primary-menu'), 2229 primaryMenuMainItems = primaryMenu.find('.menu-container:not(mobile-primary-menu):not(.custom-spacing)').children('.menu-item').children('.menu-link'), 2230 $headerWrapClone = '', 2231 initialHeaderWrapHeight = $headerWrap.outerHeight(), 2232 $headerRow = $headerWrap.find('.header-row:eq(0)'), 2233 $content = $('#content'), 2234 $footer = $('#footer'), 2235 windowWidth = $window.width(), 2236 oldHeaderClasses = $header.attr('class'), 2237 oldHeaderWrapClasses = $headerWrap.attr('class'), 2238 stickyMenuClasses = $header.attr('data-sticky-class'),
2239 responsiveMenuClasses = $header.attr('data-responsive-class'), 2240 logo = $('#logo'), 2241 defaultLogo = logo.find('.standard-logo'), 2242 defaultLogoWidth = defaultLogo.find('img').outerWidth(), 2243 retinaLogo = logo.find('.retina-logo'), 2244 defaultLogoImg = defaultLogo.find('img').attr('src'), 2245 retinaLogoImg = retinaLogo.find('img').attr('src'), 2246 defaultDarkLogo = defaultLogo.attr('data-dark-logo'), 2247 retinaDarkLogo = retinaLogo.attr('data-dark-logo'), 2248 defaultStickyLogo = defaultLogo.attr('data-sticky-logo'), 2249 retinaStickyLogo = retinaLogo.attr('data-sticky-logo'), 2250 defaultMobileLogo = defaultLogo.attr('data-mobile-logo'), 2251 retinaMobileLogo = retinaLogo.attr('data-mobile-logo'), 2252 topSearchTimeOut, 2253 $pagemenu = $('#page-menu'), 2254 $pageMenuClone = '', 2255 $pageMenuWrap = $pagemenu.find('#page-menu-wrap'), 2256 $onePageMenuEl = $('.one-page-menu'), 2257 $portfolio = $('.portfolio'), 2258 $shop = $('.shop'), 2259 $slider = $('#slider'), 2260 $sliderParallaxEl = $('.slider-parallax'), 2261 $sliderElement = $('.slider-element'), 2262 swiperSlider = '', 2263 $pageTitle = $('#page-title'), 2264 $topSearch = $('.top-search-form'), 2265 $topCart = $('#top-cart'), 2266 $topSocialEl = $('#top-social').find('li'), 2267 $goToTopEl = $('#gotoTop'), 2268 googleMapsAPI = 'YOUR-API-KEY', 2269 xScrollPosition, 2270 yScrollPosition, 2271 sliderParallaxEl = document.querySelector('.slider-parallax'), 2272 sliderParallaxElCaption = document.querySelector('.slider-parallax .slider-caption'), 2273 sliderParallaxElInner = document.querySelector('.slider-inner'), 2274 headerOffset = 0, 2275 headerWrapOffset = 0, 2276 pageMenuOffset = 0, 2277 resizeTimer; 2278 2279 $(document).ready( SEMICOLON.documentOnReady.init ); 2280 2281 $window.on( 'load', SEMICOLON.documentOnLoad.init ); 2282 2283 $window.on( 'resize', function() { 2284 let thisWindow = $(this); 2285 clearTimeout(resizeTimer); 2286 resizeTimer = setTimeout(function() { 2287 if ( thisWindow.width() !== windowWidth ) { 2288 SEMICOLON.documentOnResize.init(); 2289 } 2290 }, 250); 2291 }); 2292 2293})(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.