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