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