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