1/*! 2 * Bowser - a browser detector 3 * https://github.com/ded/bowser 4 * MIT License | (c) Dustin Diaz 2015 5 */ 6 7!function (name, definition) { 8 if (typeof module != 'undefined' && module.exports) module.exports = definition() 9 else if (typeof define == 'function' && define.amd) define(name, definition) 10 else this[name] = definition() 11}('bowser', function () { 12 /** 13 * See useragents.js for examples of navigator.userAgent 14 */ 15 16 var t = true 17 18 function detect(ua) { 19 20 function getFirstMatch(regex) { 21 var match = ua.match(regex); 22 return (match && match.length > 1 && match[1]) || ''; 23 } 24 25 function getSecondMatch(regex) { 26 var match = ua.match(regex); 27 return (match && match.length > 1 && match[2]) || ''; 28 } 29 30 var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase() 31 , likeAndroid = /like android/i.test(ua) 32 , android = !likeAndroid && /android/i.test(ua) 33 , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua) 34 , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua) 35 , chromeos = /CrOS/.test(ua) 36 , silk = /silk/i.test(ua) 37 , sailfish = /sailfish/i.test(ua) 38 , tizen = /tizen/i.test(ua) 39 , webos = /(web|hpw)os/i.test(ua) 40 , windowsphone = /windows phone/i.test(ua) 41 , windows = !windowsphone && /windows/i.test(ua) 42 , mac = !iosdevice && !silk && /macintosh/i.test(ua) 43 , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua) 44 , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i) 45 , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i) 46 , tablet = /tablet/i.test(ua) 47 , mobile = !tablet && /[^-]mobi/i.test(ua) 48 , xbox = /xbox/i.test(ua) 49 , result 50 51 if (/opera|opr|opios/i.test(ua)) { 52 result = { 53 name: 'Opera' 54 , opera: t 55 , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i) 56 } 57 } 58 else if (/coast/i.test(ua)) { 59 result = { 60 name: 'Opera Coast' 61 , coast: t 62 , version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i) 63 } 64 } 65 else if (/yabrowser/i.test(ua)) { 66 result = { 67 name: 'Yandex Browser' 68 , yandexbrowser: t 69 , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) 70 } 71 } 72 else if (/ucbrowser/i.test(ua)) { 73 result = { 74 name: 'UC Browser' 75 , ucbrowser: t 76 , version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i) 77 } 78 } 79 else if (/mxios/i.test(ua)) { 80 result = { 81 name: 'Maxthon' 82 , maxthon: t 83 , version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i) 84 } 85 } 86 else if (/epiphany/i.test(ua)) { 87 result = { 88 name: 'Epiphany' 89 , epiphany: t 90 , version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i) 91 } 92 } 93 else if (/puffin/i.test(ua)) { 94 result = { 95 name: 'Puffin' 96 , puffin: t 97 , version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i) 98 } 99 } 100 else if (/sleipnir/i.test(ua)) { 101 result = { 102 name: 'Sleipnir' 103 , sleipnir: t 104 , version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i) 105 } 106 } 107 else if (/k-meleon/i.test(ua)) { 108 result = { 109 name: 'K-Meleon' 110 , kMeleon: t 111 , version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i) 112 } 113 } 114 else if (windowsphone) { 115 result = { 116 name: 'Windows Phone' 117 , windowsphone: t 118 } 119 if (edgeVersion) { 120 result.msedge = t 121 result.version = edgeVersion 122 } 123 else { 124 result.msie = t 125 result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) 126 } 127 } 128 else if (/msie|trident/i.test(ua)) { 129 result = { 130 name: 'Internet Explorer' 131 , msie: t 132 , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) 133 } 134 } else if (chromeos) { 135 result = { 136 name: 'Chrome' 137 , chromeos: t 138 , chromeBook: t 139 , chrome: t 140 , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) 141 } 142 } else if (/chrome.+? edge/i.test(ua)) { 143 result = { 144 name: 'Microsoft Edge' 145 , msedge: t 146 , version: edgeVersion 147 } 148 } 149 else if (/vivaldi/i.test(ua)) { 150 result = { 151 name: 'Vivaldi' 152 , vivaldi: t 153 , version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier 154 } 155 } 156 else if (sailfish) { 157 result = { 158 name: 'Sailfish' 159 , sailfish: t 160 , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i) 161 } 162 } 163 else if (/seamonkey\//i.test(ua)) { 164 result = { 165 name: 'SeaMonkey' 166 , seamonkey: t 167 , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i) 168 } 169 } 170 else if (/firefox|iceweasel|fxios/i.test(ua)) { 171 result = { 172 name: 'Firefox' 173 , firefox: t 174 , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i) 175 } 176 if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) { 177 result.firefoxos = t 178 } 179 } 180 else if (silk) { 181 result = { 182 name: 'Amazon Silk' 183 , silk: t 184 , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i) 185 } 186 } 187 else if (/phantom/i.test(ua)) { 188 result = { 189 name: 'PhantomJS' 190 , phantom: t 191 , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i) 192 } 193 } 194 else if (/slimerjs/i.test(ua)) { 195 result = { 196 name: 'SlimerJS' 197 , slimer: t 198 , version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i) 199 } 200 } 201 else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) { 202 result = { 203 name: 'BlackBerry' 204 , blackberry: t 205 , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) 206 } 207 } 208 else if (webos) { 209 result = { 210 name: 'WebOS' 211 , webos: t 212 , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i) 213 }; 214 if( /touchpad\//i.test(ua) ){ 215 result.touchpad = t; 216 } 217 } 218 else if (/bada/i.test(ua)) { 219 result = { 220 name: 'Bada' 221 , bada: t 222 , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) 223 }; 224 } 225 else if (tizen) { 226 result = { 227 name: 'Tizen' 228 , tizen: t 229 , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier 230 }; 231 } 232 else if (/qupzilla/i.test(ua)) { 233 result = { 234 name: 'QupZilla' 235 , qupzilla: t 236 , version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier 237 } 238 } 239 else if (/chromium/i.test(ua)) { 240 result = { 241 name: 'Chromium' 242 , chromium: t 243 , version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier 244 } 245 } 246 else if (/chrome|crios|crmo/i.test(ua)) { 247 result = { 248 name: 'Chrome' 249 , chrome: t 250 , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) 251 } 252 } 253 else if (android) { 254 result = { 255 name: 'Android' 256 , version: versionIdentifier 257 } 258 } 259 else if (/safari|applewebkit/i.test(ua)) { 260 result = { 261 name: 'Safari' 262 , safari: t 263 } 264 if (versionIdentifier) { 265 result.version = versionIdentifier 266 } 267 } 268 else if (iosdevice) { 269 result = { 270 name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod' 271 } 272 // WTF: version is not part of user agent in web apps 273 if (versionIdentifier) { 274 result.version = versionIdentifier 275 } 276 } 277 else if(/googlebot/i.test(ua)) { 278 result = { 279 name: 'Googlebot' 280 , googlebot: t 281 , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier 282 } 283 } 284 else { 285 result = { 286 name: getFirstMatch(/^(.*)\/(.*) /), 287 version: getSecondMatch(/^(.*)\/(.*) /) 288 }; 289 } 290 291 // set webkit or gecko flag for browsers based on these engines 292 if (!result.msedge && /(apple)?webkit/i.test(ua)) { 293 if (/(apple)?webkit\/537\.36/i.test(ua)) { 294 result.name = result.name || "Blink" 295 result.blink = t 296 } else { 297 result.name = result.name || "Webkit" 298 result.webkit = t 299 } 300 if (!result.version && versionIdentifier) { 301 result.version = versionIdentifier 302 } 303 } else if (!result.opera && /gecko\//i.test(ua)) { 304 result.name = result.name || "Gecko" 305 result.gecko = t 306 result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i) 307 } 308 309 // set OS flags for platforms that have multiple browsers 310 if (!result.msedge && (android || result.silk)) { 311 result.android = t 312 } else if (iosdevice) { 313 result[iosdevice] = t 314 result.ios = t 315 } else if (mac) { 316 result.mac = t 317 } else if (xbox) { 318 result.xbox = t 319 } else if (windows) { 320 result.windows = t 321 } else if (linux) { 322 result.linux = t 323 } 324 325 // OS version extraction 326 var osVersion = ''; 327 if (result.windowsphone) { 328 osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); 329 } else if (iosdevice) { 330 osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); 331 osVersion = osVersion.replace(/[_\s]/g, '.'); 332 } else if (android) { 333 osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); 334 } else if (result.webos) { 335 osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); 336 } else if (result.blackberry) { 337 osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i); 338 } else if (result.bada) { 339 osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i); 340 } else if (result.tizen) { 341 osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i); 342 } 343 if (osVersion) { 344 result.osversion = osVersion; 345 } 346 347 // device type extraction 348 var osMajorVersion = osVersion.split('.')[0]; 349 if ( 350 tablet 351 || nexusTablet 352 || iosdevice == 'ipad' 353 || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile))) 354 || result.silk 355 ) { 356 result.tablet = t 357 } else if ( 358 mobile 359 || iosdevice == 'iphone' 360 || iosdevice == 'ipod' 361 || android 362 || nexusMobile 363 || result.blackberry 364 || result.webos 365 || result.bada 366 ) { 367 result.mobile = t 368 } 369 370 // Graded Browser Support
371 // http://developer.yahoo.com/yui/articles/gbs 372 if (result.msedge || 373 (result.msie && result.version >= 10) || 374 (result.yandexbrowser && result.version >= 15) || 375 (result.vivaldi && result.version >= 1.0) || 376 (result.chrome && result.version >= 20) || 377 (result.firefox && result.version >= 20.0) || 378 (result.safari && result.version >= 6) || 379 (result.opera && result.version >= 10.0) || 380 (result.ios && result.osversion && result.osversion.split(".")[0] >= 6) || 381 (result.blackberry && result.version >= 10.1) 382 || (result.chromium && result.version >= 20) 383 ) { 384 result.a = t; 385 } 386 else if ((result.msie && result.version < 10) || 387 (result.chrome && result.version < 20) || 388 (result.firefox && result.version < 20.0) || 389 (result.safari && result.version < 6) || 390 (result.opera && result.version < 10.0) || 391 (result.ios && result.osversion && result.osversion.split(".")[0] < 6) 392 || (result.chromium && result.version < 20) 393 ) { 394 result.c = t 395 } else result.x = t 396 397 return result 398 } 399 400 var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '') 401 402 bowser.test = function (browserList) { 403 for (var i = 0; i < browserList.length; ++i) { 404 var browserItem = browserList[i]; 405 if (typeof browserItem=== 'string') { 406 if (browserItem in bowser) { 407 return true; 408 } 409 } 410 } 411 return false; 412 } 413 414 /** 415 * Get version precisions count 416 * 417 * @example 418 * getVersionPrecision("1.10.3") // 3 419 * 420 * @param {string} version 421 * @return {number} 422 */ 423 function getVersionPrecision(version) { 424 return version.split(".").length; 425 } 426 427 /** 428 * Array::map polyfill 429 * 430 * @param {Array} arr 431 * @param {Function} iterator 432 * @return {Array} 433 */ 434 function map(arr, iterator) { 435 var result = [], i; 436 if (Array.prototype.map) { 437 return Array.prototype.map.call(arr, iterator); 438 } 439 for (i = 0; i < arr.length; i++) { 440 result.push(iterator(arr[i])); 441 } 442 return result; 443 } 444 445 /** 446 * Calculate browser version weight 447 * 448 * @example 449 * compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1 450 * compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1 451 * compareVersions(['1.10.2.1', '1.10.2.1']); // 0 452 * compareVersions(['1.10.2.1', '1.0800.2']); // -1 453 * 454 * @param {Array<String>} versions versions to compare 455 * @return {Number} comparison result 456 */ 457 function compareVersions(versions) { 458 // 1) get common precision for both versions, for example for "10.0" and "9" it should be 2 459 var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1])); 460 var chunks = map(versions, function (version) { 461 var delta = precision - getVersionPrecision(version); 462 463 // 2) "9" -> "9.0" (for precision = 2) 464 version = version + new Array(delta + 1).join(".0"); 465 466 // 3) "9.0" -> ["000000000"", "000000009"] 467 return map(version.split("."), function (chunk) { 468 return new Array(20 - chunk.length).join("0") + chunk; 469 }).reverse(); 470 }); 471 472 // iterate in reverse order by reversed chunks array 473 while (--precision >= 0) { 474 // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true) 475 if (chunks[0][precision] > chunks[1][precision]) { 476 return 1; 477 } 478 else if (chunks[0][precision] === chunks[1][precision]) { 479 if (precision === 0) { 480 // all version chunks are same 481 return 0; 482 } 483 } 484 else { 485 return -1; 486 } 487 } 488 } 489 490 /** 491 * Check if browser is unsupported 492 * 493 * @example 494 * bowser.isUnsupportedBrowser({ 495 * msie: "10", 496 * firefox: "23", 497 * chrome: "29", 498 * safari: "5.1", 499 * opera: "16", 500 * phantom: "534" 501 * }); 502 * 503 * @param {Object} minVersions map of minimal version to browser 504 * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map 505 * @param {String} [ua] user agent string 506 * @return {Boolean} 507 */ 508 function isUnsupportedBrowser(minVersions, strictMode, ua) { 509 var _bowser = bowser; 510 511 // make strictMode param optional with ua param usage 512 if (typeof strictMode === 'string') { 513 ua = strictMode;
514 strictMode = void(0); 515 } 516 517 if (strictMode === void(0)) { 518 strictMode = false; 519 } 520 if (ua) { 521 _bowser = detect(ua); 522 } 523 524 var version = "" + _bowser.version; 525 for (var browser in minVersions) { 526 if (minVersions.hasOwnProperty(browser)) { 527 if (_bowser[browser]) { 528 // browser version and min supported version. 529 return compareVersions([version, minVersions[browser]]) < 0; 530 } 531 } 532 } 533 534 return strictMode; // not found 535 } 536 537 /** 538 * Check if browser is supported 539 * 540 * @param {Object} minVersions map of minimal version to browser 541 * @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map 542 * @param {String} [ua] user agent string 543 * @return {Boolean} 544 */ 545 function check(minVersions, strictMode, ua) { 546 return !isUnsupportedBrowser(minVersions, strictMode, ua); 547 } 548 549 bowser.isUnsupportedBrowser = isUnsupportedBrowser; 550 bowser.compareVersions = compareVersions; 551 bowser.check = check; 552 553 /* 554 * Set our detect method to the main bowser object so we can 555 * reuse it to test other user agents. 556 * This is needed to implement future tests. 557 */ 558 bowser._detect = detect; 559 560 return bowser 561}); 562 563(function($){ 564 UABBTrigger = { 565 566 /** 567 * Trigger a hook. 568 * 569 * @since 1.1.0.3 570 * @method triggerHook 571 * @param {String} hook The hook to trigger. 572 * @param {Array} args An array of args to pass to the hook. 573 */ 574 triggerHook: function( hook, args ) 575 { 576 $( 'body' ).trigger( 'uabb-trigger.' + hook, args ); 577 }, 578 579 /** 580 * Add a hook. 581 * 582 * @since 1.1.0.3 583 * @method addHook 584 * @param {String} hook The hook to add. 585 * @param {Function} callback A function to call when the hook is triggered. 586 */ 587 addHook: function( hook, callback ) 588 { 589 $( 'body' ).on( 'uabb-trigger.' + hook, callback ); 590 }, 591 592 /** 593 * Remove a hook. 594 * 595 * @since 1.1.0.3 596 * @method removeHook 597 * @param {String} hook The hook to remove. 598 * @param {Function} callback The callback function to remove. 599 */ 600 removeHook: function( hook, callback ) 601 { 602 $( 'body' ).off( 'uabb-trigger.' + hook, callback ); 603 }, 604 }; 605})(jQuery); 606 607jQuery(document).ready(function( $ ) { 608 609 if( typeof bowser !== 'undefined' && bowser !== null ) { 610 611 var uabb_browser = bowser.name, 612 uabb_browser_v = bowser.version, 613 uabb_browser_class = uabb_browser.replace(/\s+/g, '-').toLowerCase(), 614 uabb_browser_v_class = uabb_browser_class + parseInt( uabb_browser_v ); 615 616 $('html').addClass(uabb_browser_class).addClass(uabb_browser_v_class); 617 618 } 619 620 $('.uabb-row-separator').parents('html').css('overflow-x', 'hidden'); 621}); 622 623;(function($) { 624 UABBOffCanvasModule = function( settings ) { 625 626 this.settings = settings; 627 this.node = settings.id; 628 this.overlay_click = settings.overlay_click; 629 this.esc_keypress = settings.esc_keypress; 630 this.preview_off_canvas = settings.preview_off_canvas; 631 this.offcanvas_on = settings.offcanvas_on; 632 this.offcanvas_custom = settings.offcanvas_custom; 633 this.close_on = settings.close_on; 634 this.is_builder_active = settings.is_builder_active; 635 this.collapse_inactive = settings.collapse_inactive; 636 this.submenu_toggle = settings.submenu_toggle; 637 638 if ( 'yes' !== this.is_builder_active ) { 639 640 this._initCanvas(); 641 } 642 }; 643 UABBOffCanvasModule.prototype = { 644 645 _initCanvas: function() { 646 647 $this = this; 648 649 $node_module = $( '.fl-node-' + $this.node ); 650 651 if ( 'yes' === $this.close_on ) { 652 653 menu_selector = $node_module.find( '.uabb-offcanvas-menu' ); 654 655 get_li = menu_selector.find( 'li'); 656 657 get_li.each(function() { 658 659 if ( !( $(this).hasClass( 'uabb-has-submenu' ) ) ) { 660 $(this).addClass( 'uabb-offcanvas-close' ); 661 } 662 663 }); 664 } 665 666 close_canvas = $node_module.find( '.uabb-offcanvas-close' ); 667 668 if ( 'custom' === $this.offcanvas_on ) { 669 670 var custom_wrap = $( $this.offcanvas_custom ); 671 672 if ( custom_wrap.length ) { 673 674 custom_wrap.addClass( 'uabb-offcanvas-trigger' ); 675 676 canvas_trigger = custom_wrap; 677 678 canvas_trigger.bind("click", function(){return false;}); 679 680 canvas_trigger.on( "click", $.proxy( $this._showOffCanvas, $this ) ); 681 682 close_canvas.off('click').on( "click", $.proxy( $this._closeOffCanvas, $this ) ); 683 684 } 685 } 686 $node_module.find( '.uabb-offcanvas-trigger' ).each(function( index ) { 687 688 canvas_trigger = $( this ); 689
690 canvas_trigger.bind("click", function(){return false;}); 691 692 canvas_trigger.off('click').on( "click", $.proxy( $this._showOffCanvas, $this ) ); 693 694 close_canvas.off('click').on( "click", $.proxy( $this._closeOffCanvas, $this ) ); 695 696 }); 697 }, 698 _showOffCanvas: function(event) { 699 700 current_this = this; 701 702 event.preventDefault(); 703 704 nodeClass = $( '.fl-node-' + current_this.node ); 705 706 ovarlay = nodeClass.find( '.uabb-offcanvas-overlay' ); 707 708 var wrap_width = $( '#offcanvas-' + current_this.node ).width() + 'px'; 709 710 if ( $( '#offcanvas-' + current_this.node ).hasClass( 'uabb-offcanvas-position-at-left' ) ) { 711 712 $( 'body' ).css( 'margin-left' , '0' ); 713 714 $( '#offcanvas-' + current_this.node ).css( 'left', '0' ); 715 716 /* If Push Transition is enabled */ 717 if( $( '#offcanvas-' + current_this.node ).hasClass( 'uabb-offcanvas-type-push' ) ) { 718 719 $( 'body' ).addClass( 'uabb-offcanvas-animating' ).css({ 720 width: $( 'body' ).width(), 721 position: 'absolute', 722 'margin-left' : wrap_width, 723 'margin-right' : 'auto' 724 }); 725 726 } 727 728 $( '#offcanvas-' + current_this.node ).addClass( 'uabb-off-canvas-show' ); 729 730 } else if( $( '#offcanvas-' + current_this.node ).hasClass( 'uabb-offcanvas-position-at-right' ) ) { 731 732 $( 'body' ).css( 'margin-right', '0' ); 733 734 $( '#offcanvas-' + current_this.node ).css( 'right', '0' ); 735 736 /* If Push Transition is enabled */ 737 if( $( '#offcanvas-' + current_this.node ).hasClass( 'uabb-offcanvas-type-push' ) ) { 738 739 $( 'body' ).addClass( 'uabb-offcanvas-animating' ).css({ 740 width: $( 'body' ).width(), 741 position: 'absolute', 742 'margin-left' : '-' + wrap_width, 743 'margin-right' : 'auto', 744 }); 745 } 746 747 $( '#offcanvas-' + current_this.node ).addClass( 'uabb-off-canvas-show' ); 748 749 } 750 751 if ( 'arrows' === current_this.submenu_toggle || 'plus' === current_this.submenu_toggle ) { 752 current_this._menuOnClick(); 753 } 754 755 if ( 'yes' === current_this.esc_keypress ) { 756 $(document).on('keyup',function(e) { 757 758 if ( e.keyCode == 27) { 759 current_this._closeOffCanvas(); 760 } 761 }); 762 } 763 764 if ( 'yes' === current_this.overlay_click ) { 765 ovarlay.off('click').on( 'click', $.proxy( current_this._closeOffCanvas, current_this )); 766 } 767 }, 768 /** 769 * Logic for submenu toggling on accordions or mobile menus (vertical, horizontal) 770 * 771 * @since 1.6.0 772 * @return void 773 */ 774 _menuOnClick: function() { 775 $( '.uabb-has-submenu-container' ).off().click( $.proxy( function( e ) { 776 777 var self = this, 778 $link = $( e.target ).parents( '.uabb-has-submenu' ).first(), 779 $subMenu = $link.children( '.sub-menu' ).first(), 780 $href = $link.children('.uabb-has-submenu-container').first().find('> a').attr('href'), 781 $subMenuParents = $( e.target ).parents( '.sub-menu' ), 782 $activeParent = $( e.target ).closest( '.uabb-has-submenu.uabb-active' ), 783 wrapperClass = self.nodeClass + ' .uabb-creative-menu'; 784 785 if( !$subMenu.is(':visible') || $(e.target).hasClass('uabb-menu-toggle') 786 || ($subMenu.is(':visible') && (typeof $href === 'undefined' || $href == '#')) ) { 787 e.preventDefault(); 788 } 789 else { 790 window.location.href = $href; 791 return; 792 } 793 794 if ( 'yes' === self.collapse_inactive ){ 795 796 if ( !$link.parents('.menu-item').hasClass('uabb-active') ) { 797 $('.uabb-active', self.wrapperClass).not($link).removeClass('uabb-active'); 798 } 799 else if ($link.parents('.menu-item').hasClass('uabb-active') && $link.parent('.sub-menu').length) { 800 $('.uabb-active', self.wrapperClass).not($link).not($activeParent).removeClass('uabb-active'); 801 } 802 803 $('.sub-menu', self.wrapperClass).not($subMenu).not($subMenuParents).slideUp('normal'); 804 } 805 806 $subMenu.slideToggle(); 807 $link.toggleClass( 'uabb-active' ); 808 }, this ) ); 809 810 }, 811 _closeOffCanvas: function() { 812 813 var self = this, 814 offCanvasNode = $( '#offcanvas-' + this.node ); 815 nodeClass = jQuery( '.fl-node-' + self.node ); 816 817 var wrap_width = offCanvasNode.width() + 'px'; 818 819 if ( offCanvasNode.hasClass( 'uabb-offcanvas-position-at-left' ) ) { 820 821 offCanvasNode.css( 'left', '-' + wrap_width ); 822 823 /* If Push Transition is enabled*/ 824 if( offCanvasNode.hasClass( 'uabb-offcanvas-type-push' ) ) { 825 826 $( 'body' ).css({ 827 position: '', 828 'margin-left' : '', 829 'margin-right' : '', 830 }); 831 832 setTimeout( function() { 833 $( 'body' ).removeClass( 'uabb-offcanvas-animating' ).css({ 834 width: '', 835 }); 836 }, 300 ); 837 } 838 839 offCanvasNode.removeClass( 'uabb-off-canvas-show' ); 840 841 } else if ( offCanvasNode.hasClass( 'uabb-offcanvas-position-at-right' ) ) { 842 843 offCanvasNode.css( 'right', '-' + wrap_width ); 844 845 /* If Push Transition is enabled */ 846 if( offCanvasNode.hasClass( 'uabb-offcanvas-type-push' ) ) { 847 848 $( 'body' ).css({ 849 position: '', 850 'margin-right' : '', 851 'margin-left' : '', 852 }); 853 854 setTimeout( function() { 855 $( 'body' ).removeClass( 'uabb-offcanvas-animating' ).css({ 856 width: '', 857 }); 858 }, 300 ); 859 } 860 861 offCanvasNode.removeClass( 'uabb-off-canvas-show' ); 862 } 863 } 864 }; 865})(jQuery);jQuery(document).ready(function() { 866 new UABBOffCanvasModule({ 867 id: '5e051819dc8f4', 868 overlay_click: 'yes', 869 esc_keypress: 'yes', 870 preview_off_canvas: '1', 871 offcanvas_on: 'custom', 872 offcanvas_custom: '#popup-overlay-menu, .popup-overlay-menu .fl-button-group-button:last-child .fl-button', 873 close_on: 'no', 874 is_builder_active : '', 875 collapse_inactive : 'yes', 876 submenu_toggle : 'none' 877 }); 878 879}); 880(function($){ 881 })(jQuery); 882(function($){ 883 })(jQuery); 884 885;/* eslint-disable no-undef */ 886(function($) { 887 888 /** 889 * Class for Menu Module 890 * 891 * @since 1.6.1 892 */ 893 FLBuilderMenu = function( settings ){ 894 895 // set params 896 this.nodeId = settings.id; 897 this.nodeClass = '.fl-node-' + settings.id; 898 this.wrapperClass = this.nodeClass + ' .fl-menu'; 899 this.type = settings.type; 900 this.mobileToggle = settings.mobile; 901 this.mobileBelowRow = settings.mobileBelowRow; 902 this.mobileFlyout = settings.mobileFlyout; 903 this.breakPoints = settings.breakPoints; 904 this.mobileBreakpoint = settings.mobileBreakpoint; 905 this.currentBrowserWidth = $( window ).width(); 906 this.postId = settings.postId; 907 this.mobileStacked = settings.mobileStacked; 908 this.submenuIcon = settings.submenuIcon; 909 this.flyoutWidth = settings.flyoutWidth; 910 911 // initialize the menu 912 this._initMenu(); 913 914 // check if viewport is resizing 915 $( window ).on( 'resize', $.proxy( function() { 916 917 var width = $( window ).width(); 918 919 // if screen width is resized, reload the menu 920 if( width != this.currentBrowserWidth ){ 921 922 this.currentBrowserWidth = width; 923 this._initMenu( true ); 924 this._clickOrHover( true ); 925 } 926 927 this._resizeFlyoutMenuPanel(); 928 }, this ) ); 929 930 $( window ).on( 'scroll', $.proxy( function() { 931 this._resizeFlyoutMenuPanel(); 932 }, this ) ); 933 934 // Move focus to the first menu item if the layout is set to BelowRow 935 $( this.wrapperClass ).on( 'keydown', '.fl-menu-mobile-toggle, .menu-item:first a:first', $.proxy( function ( event ) { 936 // Make sure it is a tab key with both the menu toggle enabled & below row layout set 937 if ( event.key !== 'Tab' || ! this._isMenuToggle() || ! this._isMobileBelowRowEnabled() ) { 938 return; 939 } 940 // Trigger focus on the mobile toggle button if the user is shift tabbing from the first menu item 941 if ( event.shiftKey && $( event.currentTarget ).is( 'a' ) ) { 942 event.preventDefault(); 943 $( this.wrapperClass ).find( '.fl-menu-mobile-toggle' ).trigger( 'focus' ); 944 } 945 // Trigger focus on the first menu item if the user is tabbing from the mobile toggle button 946 else if ( ! event.shiftKey && $( event.currentTarget ).hasClass( 'fl-menu-mobile-toggle' ) && $( event.currentTarget ).hasClass( 'fl-active' ) ) { 947 event.preventDefault(); 948 $( this.wrapperClass ).find( '.menu-item' ).first().find( 'a' ).first().trigger( 'focus' ); 949 } 950 }, this ) ); 951 952 // Close mobile menu or accordion when tabbing out from the first or last menu item 953 $( this.wrapperClass ).on( 'focusout', $.proxy( function ( event ) { 954 if ( $( this.wrapperClass + ' nav' ).has( $( event.relatedTarget ) ).length === 0 ) { 955 if ( this.type === 'accordion' ) { 956 this._toggleSubmenu( $( event.target ).parents( '.fl-has-submenu' ).last(), false ); 957 } 958 else { 959 this._clickOrHover( true ); 960 } 961 const mobileToggle = $( this.wrapperClass ).find( '.fl-menu-mobile-toggle' ); 962 if ( this._isMenuToggle() && mobileToggle.hasClass( 'fl-active' ) && ! $( event.relatedTarget ).is( mobileToggle ) && 'expanded' !== this.mobileToggle ) { 963 mobileToggle.trigger( 'click' ); 964 } 965 } 966 }, this ) ); 967 968 }; 969 970 FLBuilderMenu.prototype = { 971 nodeClass : '', 972 wrapperClass: '', 973 type : '', 974 breakPoints : {}, 975 $submenus : null, 976 977 /** 978 * Check if the screen size fits a mobile viewport. 979 * 980 * @since 1.6.1 981 * @return bool 982 */ 983 _isMobile: function(){ 984 return this.currentBrowserWidth <= this.breakPoints.small ? true : false;
985 }, 986 987 /** 988 * Check if the device is connected to a mouse. 989 * 990 * @since 2.9.0 991 * @return bool 992 */ 993 _isMouseAvailable: function(){ 994 return window.matchMedia("(pointer: fine) and (hover: hover)").matches; 995 }, 996 997 /** 998 * Check if the screen size fits a medium viewport. 999 * 1000 * @since 1.10.5 1001 * @return bool 1002 */ 1003 _isMedium: function(){ 1004 return this.currentBrowserWidth <= this.breakPoints.medium ? true : false; 1005 }, 1006 1007 /** 1008 * Check if the screen size fits a large viewport. 1009 * 1010 * @since 1.10.5 1011 * @return bool 1012 */ 1013 _isLarge: function(){ 1014 return this.currentBrowserWidth <= this.breakPoints.large ? true : false; 1015 }, 1016 1017 /** 1018 * Check if the menu should toggle for the current viewport base on the selected breakpoint. 1019 * 1020 * @see this._isMobile() 1021 * @see this._isMedium() 1022 * @since 1.10.5 1023 * @return bool 1024 */ 1025 _isMenuToggle: function(){ 1026 if ( ( 'always' == this.mobileBreakpoint 1027 || ( this._isMobile() && 'mobile' == this.mobileBreakpoint ) 1028 || ( this._isMedium() && 'medium-mobile' == this.mobileBreakpoint ) 1029 || ( this._isLarge() && 'large-mobile' == this.mobileBreakpoint ) 1030 ) && ( $( this.wrapperClass ).find( '.fl-menu-mobile-toggle' ).is(':visible') || 'expanded' == this.mobileToggle ) ) { 1031 return true; 1032 } 1033 1034 return false; 1035 }, 1036 1037 /** 1038 * Initialize the toggle logic for the menu. 1039 * 1040 * @see this._isMenuToggle() 1041 * @see this._menuOnCLick() 1042 * @see this._clickOrHover() 1043 * @see this._submenuOnRight() 1044 * @see this._submenuRowZindexFix() 1045 * @see this._toggleForMobile() 1046 * @since 1.6.1 1047 * @return void 1048 */ 1049 _initMenu: function( resized = false ){ 1050 this._setupSubmenu(); 1051 if ( ! resized ) { 1052 this._menuOnFocus(); 1053 this._menuOnClick(); 1054 this._menuOnEscape(); 1055 } 1056 if ( $( this.nodeClass ).length && this.type == 'horizontal' ) { 1057 this._initMegaMenus(); 1058 } 1059 1060 if( this._isMenuToggle() || this.type == 'accordion' ){ 1061 1062 $( this.wrapperClass ).off( 'mouseenter mouseleave' ); 1063 this._clickOrHover(); 1064 1065 } else { 1066 this._submenuOnRight(); 1067 this._submenuRowZindexFix(); 1068 } 1069 1070 if( this.mobileToggle != 'expanded' ){ 1071 this._toggleForMobile(); 1072 } 1073 1074 if( $( this.wrapperClass ).find( '.fl-menu-search-item' ).length ){ 1075 this._toggleMenuSearch(); 1076 } 1077 1078 if( $( this.wrapperClass ).find( '.fl-menu-cart-item').length ){ 1079 this._wooUpdateParams(); 1080 } 1081 }, 1082 1083 /** 1084 * Whether the toggle behavior for submenus is through hovering or not. 1085 * 1086 * @since 2.5 1087 * @return void 1088 */ 1089 _setupSubmenu: function() { 1090 if ( ! this._isMouseAvailable() || this._isMenuToggle() || this.type === 'accordion' ) { 1091 $( this.wrapperClass ).addClass( 'no-hover' ); 1092 } 1093 else { 1094 $( this.wrapperClass ).removeClass( 'no-hover' ); 1095 } 1096 }, 1097 1098 /** 1099 * Logic for menu items when focused. 1100 * 1101 * @since 1.9.0 1102 * @return void 1103 */ 1104 _menuOnFocus: function(){ 1105 $( this.wrapperClass ).on( 'focus', 'a:not(.fl-button), .fl-menu-toggle', $.proxy( function( event ) { 1106 const focusedMenuItem = $( event.currentTarget ).closest( '.menu-item' ); 1107 const blurredMenuItem = $( event.relatedTarget ).closest( '.menu-item' ); 1108 // In case the blurred & focused items are siblings 1109 if ( focusedMenuItem.closest( 'ul' ).is( blurredMenuItem.closest( 'ul' ) ) ) { 1110 // Check if the focus event is not between the link & submenu icon of the same menu item 1111 if ( ! focusedMenuItem.is( blurredMenuItem ) ) { 1112 this._toggleSubmenu( blurredMenuItem, false ); 1113 } 1114 } 1115 // In case neither items are child & parent nor vice versa 1116 else if ( focusedMenuItem.has( blurredMenuItem ).length === blurredMenuItem.has( focusedMenuItem ).length ) { 1117 // Get the blurred item parent & is the sibling of the focused item 1118 blurredMenuItem.parents( '.fl-has-submenu' ).each( ( _, parent ) => { 1119 if ( focusedMenuItem.closest( 'ul' ).is( $( parent ).closest( 'ul' ) ) ) { 1120 this._toggleSubmenu( $( parent ), false ); 1121 return false; 1122 } 1123 } ); 1124 } 1125 // In case the blurred item is a child of the focused item
1126 else if ( focusedMenuItem.has( blurredMenuItem ).length ) { 1127 if ( this.type !== 'accordion' && this.submenuIcon === 'none' ) { 1128 this._toggleSubmenu( blurredMenuItem, false ); 1129 } 1130 } 1131 }, this ) ); 1132 }, 1133 1134 /** 1135 * Logic for menu items when Escape key is pressed. 1136 * 1137 * @since 2.7.1 1138 * @return void 1139 */ 1140 _menuOnEscape: function(){ 1141 $( this.wrapperClass ).on( 'keydown', $.proxy( function( event ){ 1142 if ( event.key !== 'Escape' ) return; 1143 const menuItem = $( event.target ).closest( '.menu-item' ); 1144 const mobileToggle = $( this.wrapperClass ).find( '.fl-menu-mobile-toggle' ); 1145 // In case there is a focused menu item 1146 if ( menuItem.length || $( event.target ).hasClass( 'fl-menu-mobile-close' ) ) { 1147 // Close the search form if it is open 1148 if ( menuItem.hasClass( 'fl-menu-search-item' ) && $( this.wrapperClass ).find('.fl-search-form-input-wrap').is( ':visible' ) ) { 1149 $( this.wrapperClass ).find('.fl-menu-search-item .fl-button:is(a, button:not([type="submit"]))').trigger( 'focus' ); 1150 } 1151 // Close all the submenus of the focused menu item 1152 else if ( menuItem.hasClass( 'fl-has-submenu' ) && menuItem.find( '.sub-menu' ).first().is( ':visible' ) ) { 1153 this._toggleSubmenu( menuItem, false ); 1154 } 1155 else { 1156 // Shift focus to the parent while closing all its submenus 1157 const parentMenuItem = menuItem.parents( '.fl-has-submenu' ).not( '.mega-menu.hide-heading, .mega-menu-disabled.hide-heading' ).first(); 1158 // Close the mobile menu if there is no parent menu item and the mobile toggle is active 1159 if ( parentMenuItem.length === 0 && this._isMenuToggle() && mobileToggle.hasClass( 'fl-active' ) ) { 1160 // Blur to trigger the focus-out event for closing the menu 1161 mobileToggle.trigger( 'blur' ).trigger( 'focus' ); 1162 } 1163 // Close the parent submenu and shift focus to its link 1164 else if ( parentMenuItem.length !== 0 ) { 1165 this._toggleSubmenu( parentMenuItem, false ); 1166 parentMenuItem.find( 'a' ).first().trigger( 'focus' ); 1167 } 1168 } 1169 } 1170 // Close the mobile menu if the mobile toggle is active 1171 else if ( $( event.target ).hasClass( 'fl-menu-mobile-toggle' ) && mobileToggle.hasClass( 'fl-active' ) ) { 1172 // Blur to trigger the focus-out event for closing the menu 1173 mobileToggle.trigger( 'blur' ).trigger( 'focus' ); 1174 } 1175 }, this ) ); 1176 }, 1177 1178 /** 1179 * Logic for menu items when clicked. 1180 * 1181 * @since 1.6.1 1182 * @return void 1183 */ 1184 _menuOnClick: function(){ 1185 // Fallback for span elements and fake links to interact with the keyboard 1186 $( this.wrapperClass ).on( 'keydown', 'a:not(.fl-button, [href]), span.fl-menu-toggle', $.proxy( function( event ) { 1187 if ( event.key === 'Enter' || event.key === ' ' ) { 1188 event.preventDefault(); 1189 $( event.currentTarget ).trigger( 'click' ); 1190 } 1191 }, this ) ); 1192 $( this.wrapperClass ).on( 'click', 'a, .fl-menu-toggle', $.proxy( function( event ) { 1193 // Only allow mouse clicks with accordion & mobile menus 1194 if ( this._isMouseAvailable() && ! this._isMenuToggle() && event.detail && this.type !== 'accordion' ) return; 1195 // Links only open & do not toggle submenus if there is either a submenu icon or an accordion layout 1196 if ( $( event.currentTarget ).is( 'a' ) && ( this.submenuIcon !== 'none' || this.type === 'accordion' ) ) return; 1197 const menuItem = $( event.currentTarget ).closest( '.menu-item, .fl-menu-logo' ); 1198 const menuLink = menuItem.find( 'a' ).first().attr( 'href' ); 1199 const submenuHidden = menuItem.find( '.sub-menu' ).first().is( ':hidden' ); 1200 if ( typeof menuLink === 'undefined' || menuLink === '#' || submenuHidden ) { 1201 event.preventDefault(); 1202 } 1203 if ( $( event.currentTarget ).hasClass( 'fl-menu-toggle' ) || submenuHidden ) { 1204 this._toggleSubmenu( menuItem, submenuHidden ); 1205 } 1206 }, this ) ); 1207 }, 1208 1209 /** 1210 * Controls toggling the visibility of all submenu items for desktop & mobile. 1211 * 1212 * @since 2.10 1213 * @return void 1214 */ 1215 _toggleSubmenu: function ( menuItem, opened ) { 1216 const togglingClass = this._isMenuToggle() || this.type === 'accordion' ? 'fl-active' : 'focus'; 1217 const toggleElement = this.submenuIcon === 'none' ? 'a' : '.fl-menu-toggle'; 1218 const hiddenMenu = '.mega-menu.hide-heading, .mega-menu-disabled.hide-heading'; 1219 if ( opened && menuItem.hasClass( 'fl-has-submenu' ) && ! menuItem.is( hiddenMenu ) ) { 1220 menuItem.addClass( togglingClass ); 1221 menuItem.find( toggleElement ).first().attr( 'aria-expanded', true ); 1222 if ( this._isMenuToggle() || this.type === 'accordion' ) { 1223 menuItem.find( '.sub-menu' ).first().filter( ':hidden' ).slideDown(); 1224 } 1225 } 1226 else { 1227 menuItem.parent().find( '.menu-item' ).removeClass( togglingClass ); 1228 menuItem.parent().find( '.fl-has-submenu' ).not( hiddenMenu ).find( toggleElement ).attr( 'aria-expanded', false ); 1229 if ( this._isMenuToggle() || this.type === 'accordion' ) {
1230 menuItem.find( '.sub-menu' ).filter( ':visible' ).slideUp(); 1231 } 1232 } 1233 }, 1234 1235 /** 1236 * Changes general styling and behavior of menus based on mobile / desktop viewport. 1237 * 1238 * @see this._isMenuToggle() 1239 * @since 1.6.1 1240 * @return void 1241 */ 1242 _clickOrHover: function( clear = false ){ 1243 const selector = this._isMobileBelowRowEnabled() ? this.nodeClass + '-clone' : this.nodeClass; 1244 this.$submenus = this.$submenus || $( selector ).find( '.sub-menu' ); 1245 1246 const className = this._isMenuToggle() || this.type === 'accordion' ? 'fl-active' : 'focus'; 1247 const toggleElement = this.submenuIcon === 'none' ? 'a' : '.fl-menu-toggle'; 1248 const hiddenMenu = '.mega-menu.hide-heading, .mega-menu-disabled.hide-heading'; 1249 $( selector ).find( '.fl-has-submenu' ).not( hiddenMenu ).each( function() { 1250 if( clear || ! $ ( this ).hasClass( className ) ){ 1251 if ( clear ) $( this ).removeClass( className ); 1252 $( this ).find( toggleElement ).first().attr( 'aria-expanded', false ); 1253 if ( className === 'fl-active' ) { 1254 $( this ).find( '.sub-menu' ).fadeOut(); 1255 } else if ( className === 'focus' ) { 1256 $( this ).find( '.sub-menu' ).css( { 1257 'display' : '', 1258 'opacity' : '' 1259 } ); 1260 } 1261 } 1262 } ); 1263 }, 1264 1265 /** 1266 * Logic to prevent submenus to go outside viewport boundaries. 1267 * 1268 * @since 1.6.1 1269 * @return void 1270 */ 1271 _submenuOnRight: function(){ 1272 1273 $( this.wrapperClass ) 1274 .on( 'mouseenter focus', '.fl-has-submenu', $.proxy( function( e ){ 1275 1276 if( $ ( e.currentTarget ).find('.sub-menu').length === 0 ) { 1277 return; 1278 } 1279 1280 var $link = $( e.currentTarget ), 1281 $parent = $link.parent(), 1282 $subMenu = $link.find( '.sub-menu' ), 1283 subMenuWidth = $subMenu.width(), 1284 subMenuPos = 0, 1285 bodyWidth = $( 'body' ).width(); 1286 1287 if( $link.closest( '.fl-menu-submenu-right' ).length !== 0) { 1288 1289 $link.addClass( 'fl-menu-submenu-right' ); 1290 1291 } else if( $( 'body' ).hasClass( 'rtl' ) ) { 1292 1293 subMenuPos = $parent.is( '.sub-menu' ) ? 1294 $parent.offset().left - subMenuWidth: 1295 $link.offset().left - $link.width() - subMenuWidth; 1296 1297 if( subMenuPos <= 0 ) { 1298 $link.addClass( 'fl-menu-submenu-right' ); 1299 } 1300 1301 } else { 1302 1303 subMenuPos = $parent.is( '.sub-menu' ) ? 1304 $parent.offset().left + $parent.width() + subMenuWidth : 1305 $link.offset().left + $link.width() + subMenuWidth; 1306 1307 if( subMenuPos > bodyWidth ) { 1308 $link.addClass('fl-menu-submenu-right'); 1309 } 1310 } 1311 }, this ) ) 1312 .on( 'mouseleave', '.fl-has-submenu', $.proxy( function( e ){ 1313 $( e.currentTarget ).removeClass( 'fl-menu-submenu-right' ); 1314 }, this ) ); 1315 1316 }, 1317 1318 /** 1319 * Logic to prevent submenus to go behind the next overlay row. 1320 * 1321 * @since 1.10.9 1322 * @return void 1323 */ 1324 _submenuRowZindexFix: function(){ 1325 1326 $( this.wrapperClass ) 1327 .on( 'mouseenter', 'ul.menu > .fl-has-submenu', $.proxy( function( e ){ 1328 1329 if( $ ( e.currentTarget ).find('.sub-menu').length === 0 ) { 1330 return; 1331 } 1332 1333 $( this.nodeClass ) 1334 .closest( '.fl-row' ) 1335 .find( '.fl-row-content' ) 1336 .css( 'z-index', '10' ); 1337 1338 }, this ) ) 1339 .on( 'mouseleave', 'ul.menu > .fl-has-submenu', $.proxy( function(){ 1340 1341 $( this.nodeClass ) 1342 .closest( '.fl-row' ) 1343 .find( '.fl-row-content' ) 1344 .css( 'z-index', '' ); 1345 1346 }, this ) ); 1347 }, 1348 1349 /** 1350 * Logic for the mobile menu button. 1351 * 1352 * @since 1.6.1 1353 * @return void 1354 */ 1355 _toggleForMobile: function(){ 1356 1357 var $wrapper = null, 1358 $menu = null, 1359 self = this; 1360 1361 $( this.wrapperClass ).find( '.fl-menu-mobile-toggle' ).attr('aria-controls', $( this.wrapperClass ).find( 'ul.menu' ).attr('id')); 1362 1363 if( this._isMenuToggle() ){ 1364 1365 if ( this._isMobileBelowRowEnabled() ) { 1366 this._placeMobileMenuBelowRow(); 1367 $wrapper = $( this.wrapperClass ); 1368 $menu = $( this.nodeClass + '-clone' ); 1369 $menu.find( 'ul.menu' ).show(); 1370 } 1371 else { 1372 $wrapper = $( this.wrapperClass ); 1373 $menu = $wrapper.find( '.menu' ); 1374 } 1375 1376 if( !$wrapper.find( '.fl-menu-mobile-toggle' ).hasClass( 'fl-active' ) && ! self.mobileFlyout ){ 1377 $menu.css({ display: 'none' }); 1378 } 1379 1380 // Flayout Menu 1381 if ( self.mobileFlyout ) { 1382 this._initFlyoutMenu(); 1383 } 1384 1385 $wrapper.on( 'click', '.fl-menu-mobile-toggle', function( e ){ 1386 e.stopImmediatePropagation(); 1387 1388 $( this ).toggleClass( 'fl-active' ); 1389 1390 if ( self.mobileFlyout ) { 1391 self._toggleFlyoutMenu(); 1392 const flyoutWrapper = $( '.fl-menu-mobile-flyout' ); 1393 if ( $( this ).hasClass( 'fl-active' ) ) { 1394 flyoutWrapper.attr( 'aria-hidden', false ); 1395 flyoutWrapper.find( 'a[href], button, input, select, textarea, span.fl-menu-toggle, [tabindex="-1"]' ).attr( 'tabindex', 0 ); 1396 } 1397 else { 1398 flyoutWrapper.attr( 'aria-hidden', true ); 1399 flyoutWrapper.find( 'a[href], button, input, select, textarea, span.fl-menu-toggle, [tabindex]:not
1399([tabindex="-1"])' ).attr( 'tabindex', -1 ); 1400 } 1401 } 1402 else { 1403 var targetMenu = null; 1404 1405 if ( self.mobileBelowRow ) { 1406 var $closestCol = $( this ).parents( '.fl-col, .fl-module-box' ), 1407 $closestColGroup = $closestCol.length ? $closestCol.parent( '.fl-col-group' ) : null; 1408 targetMenu = $closestCol.length ? $closestCol.last().next( '.fl-menu-mobile-clone' ) : null; 1409 1410 if ( $closestColGroup.length ) { 1411 if ( $closestColGroup.hasClass( 'fl-col-group-responsive-reversed' ) ) { 1412 $closestColGroup.find( '.fl-menu-mobile-clone' ).css( 'order', -1 ); 1413 } else if ( $closestColGroup ) { 1414 $closestColGroup.find( '.fl-menu-mobile-clone' ).css( 'order', 2 ); 1415 } 1416 } 1417 } else { 1418 targetMenu = $( this ).closest( '.fl-menu' ).find( 'ul.menu' ); 1419 } 1420 1421 if ( targetMenu.length ) { 1422 $menu = $( targetMenu ); 1423 } 1424 1425 $menu.slideToggle(); 1426 } 1427 1428 e.stopPropagation(); 1429 } ); 1430 1431 // Hide active menu when click on anchor link ID that exists on a page 1432 $menu.off().on( 'click', '.menu-item > a[href*="#"]:not([href="#"])', function(){ 1433 var $href = $(this).attr('href'), 1434 $targetID = $href.split('#')[1], 1435 element = $('#' + $targetID); 1436 if ( $('body').find(element).length > 0 ) { 1437 $( this ).toggleClass( 'fl-active' ); 1438 FLBuilderLayout._scrollToElement( element ); 1439 if ( ! self._isMenuToggle() ) { 1440 $menu.slideToggle(); 1441 } 1442 } 1443 }); 1444 } 1445 else { 1446 1447 if ( this._isMobileBelowRowEnabled() ) { 1448 this._removeMenuFromBelowRow(); 1449 } 1450 1451 $wrapper = $( this.wrapperClass ), 1452 $menu = $wrapper.find( 'ul.menu' ); 1453 $wrapper.find( '.fl-menu-mobile-toggle' ).removeClass( 'fl-active' ); 1454 $menu.css({ display: '' }); 1455 1456 if ( ! this._isMobileBelowRowEnabled() ) { 1457 $menu.off( 'click', '.menu-item > a[href*="#"]:not([href="#"])' ); 1458 } 1459 1460 if ( this.mobileFlyout && $wrapper.find( '.fl-menu-mobile-flyout' ).length > 0 ) { 1461 $( 'body' ).css( 'margin', '' ); 1462 $( '.fl-builder-ui-pinned-content-transform' ).css( 'transform', '' ); 1463 $menu.unwrap(); 1464 $wrapper.find( '.fl-menu-mobile-close' ).remove(); 1465 $wrapper.find( '.fl-menu-mobile-opacity' ).remove(); 1466 } 1467 } 1468 }, 1469 1470 /** 1471 * Init any mega menus that exist. 1472 * 1473 * @see this._isMenuToggle() 1474 * @since 1.10.4 1475 * @return void 1476 */ 1477 _initMegaMenus: function(){ 1478 1479 var module = $( this.nodeClass ), 1480 rowContent = module.closest( '.fl-row-content' ), 1481 rowWidth = rowContent.width(), 1482 megas = module.find( '.mega-menu' ), 1483 disabled = module.find( '.mega-menu-disabled' ), 1484 isToggle = this._isMenuToggle(); 1485 1486 if ( isToggle ) { 1487 megas.removeClass( 'mega-menu' ).addClass( 'mega-menu-disabled' ); 1488 module.find( 'li.mega-menu-disabled > ul.sub-menu' ).css( 'width', '' ); 1489 rowContent.css( 'position', '' ); 1490 } else { 1491 disabled.removeClass( 'mega-menu-disabled' ).addClass( 'mega-menu' ); 1492 module.find( 'li.mega-menu > ul.sub-menu' ).css( 'width', rowWidth + 'px' ); 1493 rowContent.css( 'position', 'relative' ); 1494 } 1495 }, 1496 1497 /** 1498 * Check to see if Below Row should be enabled. 1499 * 1500 * @since 1.11 1501 * @return boolean 1502 */ 1503 _isMobileBelowRowEnabled: function() { 1504 return this.mobileBelowRow && ( $( this.nodeClass ).parents( '.fl-col, .fl-module-box' ).length ); 1505 }, 1506 1507 /** 1508 * Logic for putting the mobile menu below the menu's 1509 * column so it spans the full width of the page. 1510 * 1511 * @since 1.10 1512 * @return void 1513 */ 1514 _placeMobileMenuBelowRow: function(){ 1515 1516 if ( $( this.nodeClass + '-clone' ).length ) { 1517 return; 1518 } 1519 1520 var module = $( this.nodeClass ), 1521 clone = null, 1522 col = module.parents( '.fl-col, .fl-module-box' ).last(); 1523 1524 if ( module.length < 1 ) { 1525 return; 1526 } 1527 1528 clone = ( module.length > 1 ) ? $( module[0] ).clone() : module.clone(); 1529 module.find( 'ul.menu' ).remove(); 1530 clone.addClass( ( this.nodeClass + '-clone' ).replace( '.', '' ) ); 1531 clone.addClass( 'fl-menu-mobile-clone' ); 1532 clone.find( '.fl-menu-mobile-toggle' ).remove(); 1533 col.after( clone ); 1534 1535 // Removes animation when enabled 1536 if ( module.hasClass( 'fl-animation' ) ) { 1537 clone.removeClass( 'fl-animation' ); 1538 } 1539 1540 this._menuOnFocus(); 1541 this._menuOnClick(); 1542 this._menuOnEscape(); 1543 }, 1544 1545 /** 1546 * Logic for removing the mobile menu from below the menu's 1547 * column and putting it back in the main wrapper. 1548 * 1549 * @since 1.10 1550 * @return void 1551 */ 1552 _removeMenuFromBelowRow: function(){ 1553 1554 if ( ! $( this.nodeClass + '-clone' ).length ) { 1555 return; 1556 } 1557 1558 var module = $( this.nodeClass ), 1559 clone = $( this.nodeClass + '-clone' ), 1560 menu = clone.find( 'ul.menu' ), 1561 nav = module.find( 'nav' ); 1562
1563 if ( nav.length ) { 1564 nav.append( menu ); 1565 } else { 1566 module.find( '.fl-menu-mobile-toggle' ).after( menu ); 1567 } 1568 clone.remove(); 1569 menu.find( 'a' ).each( FLBuilderLayout._initAnchorLink ); 1570 }, 1571 1572 /** 1573 * Logic for Flyout responsive menu. 1574 * 1575 * @since 2.2 1576 * @return void 1577 */ 1578 _initFlyoutMenu: function(){ 1579 var wrapper = $( this.wrapperClass ), 1580 menu = wrapper.find( 'ul.menu' ), 1581 button = wrapper.find( '.fl-menu-mobile-toggle' ); 1582 1583 if ( 0 === wrapper.find( '.fl-menu-mobile-flyout' ).length ) { 1584 menu.wrap( '<div class="fl-menu-mobile-flyout" aria-hidden="true"></div>' ); 1585 } 1586 1587 if ( 0 === wrapper.find( '.fl-menu-mobile-close' ).length ) { 1588 var close = window.fl_responsive_close || 'Close' 1589 wrapper.find( '.fl-menu-mobile-flyout' ).prepend( '<button class="fl-menu-mobile-close fl-content-ui-button" aria-label="' + close + '"><i class="fas fa-times"></i></button>' ); 1590 } 1591 1592 // Push with opacity 1593 if ( wrapper.hasClass( 'fl-menu-responsive-flyout-push-opacity' ) && 0 === wrapper.find( '.fl-menu-mobile-opacity' ).length ) { 1594 wrapper.append( '<div class="fl-menu-mobile-opacity"></div>' ); 1595 } 1596 1597 wrapper.off( 'click', '.fl-menu-mobile-opacity, .fl-menu-mobile-close' ).on( 'click', '.fl-menu-mobile-opacity, .fl-menu-mobile-close', function(e){ 1598 button.trigger('focus').trigger( 'click' ); 1599 e.stopPropagation(); 1600 }); 1601 1602 if ( 'undefined' !== typeof FLBuilder ) { 1603 FLBuilder.addHook('restartEditingSession', function(){ 1604 $( '.fl-builder-ui-pinned-content-transform' ).css( 'transform', '' ); 1605 1606 // Toggle active menu 1607 if ( button.hasClass( 'fl-active' ) ) { 1608 button.trigger( 'click' ); 1609 } 1610 }); 1611 } 1612 $( '.fl-menu-mobile-flyout' ).find( 'a[href], button, input, select, textarea, span.fl-menu-toggle, [tabindex]:not([tabindex="-1"])' ).attr( 'tabindex', -1 ); 1613 }, 1614 1615 /** 1616 * Logic to enable/disable the Flyout menu on button click. 1617 * 1618 * @since 2.2 1619 * @return void 1620 */ 1621 _toggleFlyoutMenu: function(){ 1622 var wrapper = $( this.wrapperClass ), 1623 button = wrapper.find( '.fl-menu-mobile-toggle' ), 1624 position = wrapper.hasClass( 'fl-flyout-right' ) ? 'right' : 'left', 1625 pushMenu = wrapper.hasClass( 'fl-menu-responsive-flyout-push' ) || wrapper.hasClass( 'fl-menu-responsive-flyout-push-opacity' ), 1626 opacity = wrapper.find( '.fl-menu-mobile-opacity' ), 1627 marginPos = {}, 1628 fixedPos = {}, 1629 fixedHeader = $('header, header > div'); 1630 1631 this._resizeFlyoutMenuPanel(); 1632 1633 // Fix the push menu when builder ui panel is pinned 1634 if ( $( '.fl-builder-ui-pinned-content-transform' ).length > 0 && ! $( 'body' ).hasClass( 'fl-builder-edit' ) ) { 1635 $( '.fl-builder-ui-pinned-content-transform' ).css( 'transform', 'none' ); 1636 } 1637 1638 if ( pushMenu ) { 1639 marginPos[ 'margin-' + position ] = button.hasClass( 'fl-active' ) ? this.flyoutWidth + 'px' : '0px'; 1640 $( 'body' ).animate( marginPos, 200); 1641 1642 // Fixed header 1643 if ( fixedHeader.length > 0 ) { 1644 fixedPos[ position] = button.hasClass( 'fl-active' ) ? this.flyoutWidth + 'px' : '0px'; 1645 fixedHeader.each(function(){ 1646 if ( 'fixed' == $( this ).css( 'position' ) ) { 1647 $( this ).css({ 'transition' : 'none' }); 1648 $( this ).animate( fixedPos, 200 ); 1649 } 1650 }); 1651 } 1652 } 1653 1654 if ( opacity.length > 0 && button.hasClass( 'fl-active' ) ) { 1655 opacity.show(); 1656 } 1657 else { 1658 opacity.hide(); 1659 } 1660 }, 1661 1662 /** 1663 * Resize or reposition the Flyout Menu Panel. 1664 * 1665 * @since 2.8.1 1666 * @return void 1667 */ 1668 _resizeFlyoutMenuPanel: function(){ 1669 const wrapper = $( this.wrapperClass ); 1670 const wrapFlyout = wrapper.find( '.fl-menu-mobile-flyout' ); 1671 1672 if ( wrapFlyout.length > 0 ) { 1673 wrapFlyout.css( this._getFlyoutMenuPanelPosition() ); 1674 } 1675 }, 1676 1677 /** 1678 * Compute the Flyout Menu Panel's position on the screen. 1679 * 1680 * @since 2.8.1 1681 * @return object 1682 */ 1683 _getFlyoutMenuPanelPosition: function() { 1684 var wrapper = $( this.wrapperClass ), 1685 button = wrapper.find( '.fl-menu-mobile-toggle' ), 1686 side = wrapper.hasClass( 'fl-flyout-right' ) ? 'right' : 'left', 1687 winHeight = $(window).outerHeight(), 1688 winTop = $(window).scrollTop(), 1689 adminBarHeight = $( '#wpadminbar' ).length ? $( '#wpadminbar' ).height() : 0, 1690 flyoutPosition = {}; 1691 1692 flyoutPosition[ side ] = '-' + ( parseInt( this.flyoutWidth ) + 15 ) + 'px'; 1693 if ( ! button.hasClass( 'fl-active' ) ) { 1694 return flyoutPosition; 1695 } 1696 1697 flyoutPosition[ side ] = '0px'; 1698 flyoutPosition[ 'height' ] = winHeight + 'px'; 1699 flyoutPosition[ 'top' ] = '0px'; 1700 1701 if ( adminBarHeight > 0 ) { 1702 const diff = adminBarHeight - winTop; 1703 flyoutPosition[ 'top' ] = diff <= 0 ? '0px' : (diff) + 'px'; 1704 } 1705 1706 return flyoutPosition; 1707 }, 1708 1709 /** 1710 * Shows or hides the nav search form. 1711 * 1712 * @since 2.5 1713 * @method _toggleMenuSearch 1714 */ 1715 _toggleMenuSearch: function(){ 1716 const form = $( this.wrapperClass ).find('.fl-menu-search-item .fl-search-form-input-wrap');
1717 const button = $( this.wrapperClass ).find('.fl-menu-search-item .fl-button:is(a, button:not([type="submit"]))'); 1718 form.on('submit', () => form.stop().fadeToggle('fast')); 1719 // Close the search form when focus is lost 1720 form.on('focusout', (event) => { 1721 if (form.is(':visible') && form.has($(event.relatedTarget)).length === 0) { 1722 button.trigger('click'); 1723 } 1724 }); 1725 button.attr('aria-expanded', false); 1726 // Close other open submenus when focusing on the search button 1727 button.on('focus', (event) => { 1728 const parentMenus = $(event.relatedTarget).parents('.menu-item.fl-has-submenu'); 1729 if (event.relatedTarget && parentMenus.length) { 1730 this._toggleSubmenu(parentMenus, false); 1731 } 1732 }); 1733 button.on('click', (event) => { 1734 // Prevent toggling when clicking with mouse while the form is already open 1735 if (event.detail && event.type === 'click' && form.is(':visible')) return; 1736 form.stop().fadeToggle('fast', () => { 1737 button.attr('aria-expanded', form.is(':visible')); 1738 if(form.is(':visible')) { 1739 form.find('.fl-search-text').focus(); 1740 } 1741 }); 1742 }); 1743 }, 1744 1745 /** 1746 * Adds menu node and post ID to WooCommerce ajax URL requests. 1747 * 1748 * @since 2.5 1749 * @return void 1750 */ 1751 _wooUpdateParams: function() { 1752 if ( 'undefined' !== typeof wc_cart_fragments_params ) { 1753 wc_cart_fragments_params.wc_ajax_url += '&fl-menu-node='+ this.nodeId +'&post-id='+ this.postId; 1754 } 1755 if ( 'undefined' !== typeof wc_add_to_cart_params ) { 1756 wc_add_to_cart_params.wc_ajax_url += '&fl-menu-node='+ this.nodeId +'&post-id='+ this.postId; 1757 } 1758 }, 1759 }; 1760 1761})(jQuery); 1762 1763(function($) { 1764 1765 $(function() { 1766 1767 new FLBuilderMenu({ 1768 id: '61byrhaotpuq', 1769 type: 'vertical', 1770 mobile: 'expanded', 1771 mobileBelowRow: false, 1772 mobileFlyout: false, 1773 breakPoints: { 1774 large: 1280, 1775 medium: 992, 1776 small: 720 }, 1777 mobileBreakpoint: 'mobile', 1778 postId : '74', 1779 mobileStacked: true, 1780 submenuIcon: 'none', 1781 flyoutWidth: '250', 1782 }); 1783 1784 }); 1785 1786})(jQuery); 1787 1788(function($) { 1789 1790 $(function() { 1791 1792 new FLBuilderMenu({ 1793 id: '9cw8lpfismz4', 1794 type: 'vertical', 1795 mobile: 'expanded', 1796 mobileBelowRow: false, 1797 mobileFlyout: false, 1798 breakPoints: { 1799 large: 1280, 1800 medium: 992, 1801 small: 720 }, 1802 mobileBreakpoint: 'mobile', 1803 postId : '74', 1804 mobileStacked: true, 1805 submenuIcon: 'none', 1806 flyoutWidth: '250', 1807 }); 1808 1809 }); 1810 1811})(jQuery); 1812 1813;/** 1814 * This file should contain frontend logic for 1815 * all module instances. 1816 */ 1817(function($) { 1818 1819 function equalheight() { 1820 1821 if( window.navigator.userAgent.indexOf( 'MSIE ' ) > 0 ) { 1822 return; 1823 } 1824 1825 var maxHeight = 0; 1826 $('.fl-node-ulxnk4gdy61q .pp-logos-wrapper .pp-logo').each(function(index) { 1827 if(($(this).find('.logo-image').outerHeight() + 0) > maxHeight) { 1828 maxHeight = $(this).find('.logo-image').outerHeight() + 0; 1829 } 1830 }); 1831 $('.fl-node-ulxnk4gdy61q .pp-logos-wrapper .pp-logo').css('height', maxHeight + 'px'); 1832 1833 return maxHeight; 1834 } 1835 1836 $('.fl-node-ulxnk4gdy61q .pp-logos-wrapper').imagesLoaded(function() { 1837 // Clear the controls in case they were already created. 1838 //$('.fl-node-ulxnk4gdy61q .logo-slider-next').empty(); 1839 //$('.fl-node-ulxnk4gdy61q .logo-slider-prev').empty(); 1840 1841 var getMinSlides = function() { 1842 var minSlides = ( $( window ).width() <= 768 ) ? parseInt( $( '.fl-node-ulxnk4gdy61q' ).width() / 375) : 6; 1843 1844 if ( window.innerWidth <= 1280 ) { 1845 minSlides = 6; 1846 } 1847 if ( window.innerWidth <= 992 ) { 1848 minSlides = 4; 1849 } 1850 if ( window.innerWidth <= 720 ) { 1851 minSlides = 3; 1852 } 1853 1854 minSlides = (minSlides === 0) ? 1 : minSlides; 1855 1856 return minSlides; 1857 } 1858 1859 var minSlides = getMinSlides(); 1860 1861 var maxSlides = minSlides; 1862 var moveSlides = maxSlides; 1863 1864 1865 var totalSlides = minSlides - 1; 1866 1867 $(window).on('resize', function() { 1868 minSlides = getMinSlides(); 1869 maxSlides = minSlides; 1870 moveSlides = maxSlides; 1871 1872 1873 totalSlides = minSlides - 1; 1874 }); 1875 1876 1877 //equalheight(); 1878 1879 var totalSlides = $('.fl-node-ulxnk4gdy61q .pp-logo:not(.bx-clone)').length; 1880 1881 var options = { 1882 slideWidth: 250, 1883 moveSlides: moveSlides, 1884 slideMargin: 25, 1885 minSlides: minSlides, 1886 maxSlides: maxSlides, 1887 autoStart : 1, 1888 auto : true, 1889 autoHover: true, 1890 adaptiveHeight: false, 1891 pause : 4000, 1892 mode : 'horizontal', 1893 speed : 500, 1894 infiniteLoop: true, 1895 pager : 0, 1896 controls: false, 1897 ariaLive: false, 1898 onSliderLoad: function() { 1899 $('.fl-node-ulxnk4gdy61q .pp-logos-wrapper').addClass('pp-logos-wrapper-loaded'); 1900 $('.fl-node-ulxnk4gdy61q .pp-logo').attr('role', 'group'); 1901 1902 var visibleCount = 0; 1903 $('.fl-node-ulxnk4gdy61q .pp-logo').each(function() { 1904 if ( ! $(this).hasClass( 'bx-clone' ) ) { 1905 visibleCount++; 1906 $(this).attr('aria-label', 'Slide ' + visibleCount + ' of ' + totalSlides ); 1907 } 1908 }); 1909 1910 setTimeout( function() { 1911 $(window).trigger('resize'); 1912 }, 200 ); 1913 1914 // Fix keyboard navigation 1915 var hasItemFocus = false;
1916 $('.fl-node-ulxnk4gdy61q').off('keyup').on('keyup', function(e) { 1917 e.stopPropagation(); 1918 if ( $(e.target).hasClass('pp-logos-wrapper') || $(e.target).closest('.pp-logos-wrapper').length ) { 1919 hasItemFocus = true; 1920 } 1921 if ( hasItemFocus && $(e.target).hasClass('logo-slider-nav') ) { 1922 $(this).find('.pp-logos-wrapper').data('bxSlider').reloadSlider(); 1923 hasItemFocus = false; 1924 } 1925 }); 1926 1927 $(document).trigger( 'pp_logos_on_slider_load', [ $('.fl-node-ulxnk4gdy61q') ] ); 1928 }, 1929 onSlideBefore: function( ele, oldIndex, newIndex ) { 1930 this.stopAuto( true ); 1931 $('.fl-node-ulxnk4gdy61q .logo-slider-nav').addClass('disabled'); 1932 $('.fl-node-ulxnk4gdy61q .bx-controls .bx-pager-link').addClass('disabled'); 1933 this.startAuto( true ); 1934 1935 var visibleCount = 0; 1936 $('.fl-node-ulxnk4gdy61q .pp-logo').each(function() { 1937 if ( ! $(this).hasClass( 'bx-clone' ) ) { 1938 visibleCount++; 1939 $(this).attr('aria-label', 'Slide ' + visibleCount + ' of ' + totalSlides ); 1940 } 1941 }); 1942 }, 1943 onSlideAfter: function( ele, oldIndex, newIndex ) { 1944 $('.fl-node-ulxnk4gdy61q .logo-slider-nav').removeClass('disabled'); 1945 $('.fl-node-ulxnk4gdy61q .bx-controls .bx-pager-link').removeClass('disabled'); 1946 } 1947 }; 1948 1949 options.onSliderResize = function(currentIndex) { 1950 options.working = false; 1951 options.minSlides = minSlides; 1952 options.maxSlides = maxSlides; 1953 options.moveSlides = moveSlides; 1954 1955 this.reloadSlider( options ); 1956 }; 1957 1958 // Create the slider. 1959 var slider = $('.fl-node-ulxnk4gdy61q .pp-logos-wrapper').bxSlider( options ); 1960 1961 // Store a reference to the slider. 1962 slider.data('bxSlider', slider); 1963 1964 1965 1966 1967 1968 }); 1969 1970})(jQuery); 1971(function($){ 1972 })(jQuery); 1973 1974/* Start Global Node Custom JS */ 1975 1976/* End Global Node Custom JS */ 1977 1978 1979/* Start Layout Custom JS */ 1980 1981/* End Layout Custom JS */ 1982
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.