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