1(function($) { 2 if ( $('.fl-node-5bb374de5ed48 .pp-photo-rollover').length > 0 ) { 3 $('body').on( 'mouseenter.pp-rollover', '.fl-node-5bb374de5ed48 .pp-photo-rollover .pp-photo-content', function() { 4 $(this).addClass( 'is-hover' ); 5 } ).on( 'mouseleave.pp-rollover', '.fl-node-5bb374de5ed48 .pp-photo-rollover .pp-photo-content', function() { 6 $(this).removeClass( 'is-hover' ); 7 } ); 8 } 9})(jQuery); 10;(function($) { 11 12 PPAdvancedMenu = function( settings ) { 13 14 // set params 15 this.settingsId = settings.id; 16 this.nodeClass = '.fl-node-' + settings.id; 17 this.wrapperClass = this.nodeClass + ' .pp-advanced-menu'; 18 this.type = settings.type; 19 this.mobileToggle = settings.mobile; 20 this.mobileBelowRow = 'below' === settings.menuPosition; 21 this.breakpoints = settings.breakpoints; 22 this.mobileBreakpoint = settings.mobileBreakpoint; 23 this.mediaBreakpoint = settings.mediaBreakpoint; 24 this.mobileMenuType = settings.mobileMenuType; 25 this.offCanvasDirection = settings.offCanvasDirection; 26 this.postId = bb_powerpack.post_id; 27 this.isBuilderActive = settings.isBuilderActive; 28 this.currentBrowserWidth = window.innerWidth; 29 this.fullScreenMenu = null; 30 this.offCanvasMenu = null; 31 this.$submenus = null; 32 33 // initialize the menu 34 $( this._initMenu.bind( this ) ); 35 36 // check if viewport is resizing 37 $( window ).on( 'resize', function( e ) { 38 39 var width = window.innerWidth; 40 41 // if screen width is resized, reload the menu 42 if( width != this.currentBrowserWidth ) { 43 44 this._initMenu(); 45 this._clickOrHover(); 46 this.currentBrowserWidth = width; 47 } 48 49 }.bind( this ) ); 50 51 $( 'body' ).on( 'click', function( e ) { 52 if ( 'undefined' !== typeof FLBuilderConfig ){ 53 return; 54 } 55 56 if ( $( this.wrapperClass ).find( '.pp-advanced-menu-mobile-toggle' ).hasClass( 'pp-active' ) && ( 'expanded' !== this.mobileToggle ) ) { 57 if ( $( e.target ).parents('.fl-module-pp-advanced-menu').length > 0 ) { 58 return; 59 } 60 if ( $( e.target ).is( 'input' ) && $( e.target ).parents('.pp-advanced-menu').length > 0 ) { 61 return; 62 } 63 if ( $( e.target ).hasClass( 'pp-menu-close-btn' ) ) { 64 return; 65 } 66 $( this.wrapperClass ).find( '.pp-advanced-menu-mobile-toggle' ).trigger( 'click' ); 67 } 68 69 $( this.wrapperClass ).find( '.pp-has-submenu' ).each( function() { 70 if ( ! $( this ).find( '> .sub-menu' ).is( ':visible' ) ) { 71 $( this ).removeClass( 'pp-active' ); 72 } 73 } ); 74 $( this.wrapperClass ).find( '.pp-has-submenu' ).removeClass( 'focus' ); 75 $( this.wrapperClass ).find( '.pp-has-submenu .sub-menu' ).removeClass( 'focus' ); 76 $( this.wrapperClass ).find( '.pp-has-submenu-container' ).removeClass( 'focus' ); 77 $( this.wrapperClass ).find( '.pp-menu-toggle' ).attr( 'aria-expanded', false ); 78 79 }.bind( this ) ); 80 81 // Esc key to close the submenu. 82 $( document ).on( 'keyup', function( e ) { 83 if ( 27 == e.which ) { 84 $( this.wrapperClass ).find( '.pp-has-submenu' ).each( function() { 85 if ( ! $( this ).find( '> .sub-menu' ).is( ':visible' ) ) { 86 $( this ).removeClass( 'pp-active' ); 87 } 88 } ); 89 $( this.wrapperClass ).find( '.pp-has-submenu' ).removeClass( 'focus' ); 90 $( this.wrapperClass ).find( '.pp-has-submenu .sub-menu' ).removeClass( 'focus' ); 91 $( this.wrapperClass ).find( '.pp-has-submenu-container' ).removeClass( 'focus' ); 92 $( this.wrapperClass ).find( '.pp-menu-toggle' ).attr( 'aria-expanded', false ); 93 if ( $( this.wrapperClass ).find( '.pp-menu-toggle.focus' ).is( ':visible' ) ) { 94 $( this.wrapperClass ).find( '.pp-menu-toggle.focus' ).delay(100).trigger( 'focus' ); 95 } 96 } 97 }.bind( this ) ); 98 99 }; 100 101 PPAdvancedMenu.prototype = { 102 nodeClass : '', 103 wrapperClass : '', 104 type : '', 105 breakpoints : {}, 106 $submenus : null, 107 fullScreenMenu : null, 108 offCanvasMenu : null, 109 110 /** 111 * Check if the screen size fits a mobile viewport. 112 * 113 * @since 1.6.1 114 * @return bool 115 */ 116 _isMobile: function() { 117 return window.innerWidth <= this.breakpoints.small ? true : false;
118 }, 119 120 /** 121 * Check if the screen size fits a medium viewport. 122 * 123 * @since 1.10.5 124 * @return bool 125 */ 126 _isMedium: function() { 127 return window.innerWidth <= this.breakpoints.medium ? true : false; 128 }, 129 130 /** 131 * Check if the screen size fits a large viewport. 132 * 133 * @since 1.10.5 134 * @return bool 135 */ 136 _isLarge: function() { 137 return window.innerWidth <= this.breakpoints.large ? true : false; 138 }, 139 140 /** 141 * Check if the screen size fits a custom viewport. 142 * 143 * @since 1.10.5 144 * @return bool 145 */ 146 _isCustom: function() { 147 return window.innerWidth <= this.breakpoints.custom ? true : false; 148 }, 149 150 _isTouch: function() { 151 var prefixes = ' -webkit- -moz- -o- -ms- '.split(' '); 152 var mq = function(query) { 153 return window.matchMedia(query).matches; 154 } 155 156 if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { 157 return true; 158 } 159 160 // include the 'heartz' as a way to have a non matching MQ to help terminate the join 161 // https://git.io/vznFH 162 var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join(''); 163 return mq(query); 164 }, 165 166 _isIOS: function() { 167 return [ 168 'iPad Simulator', 169 'iPhone Simulator', 170 'iPod Simulator', 171 'iPad', 172 'iPhone', 173 'iPod' 174 ].includes(navigator.platform) 175 // This explicitly catches modern iPads mimicking desktop Macs: 176 || (navigator.userAgent.includes("Mac") && navigator.maxTouchPoints > 1); 177 }, 178 179 /** 180 * Check if the menu should toggle for the current viewport base on the selected breakpoint 181 * 182 * @see this._isMobile() 183 * @see this._isMedium() 184 * @since 1.10.5 185 * @return bool 186 */ 187 _isMenuToggle: function() { 188 if ( ( 'always' == this.mobileBreakpoint 189 || ( this._isMobile() && 'mobile' == this.mobileBreakpoint ) 190 || ( this._isMedium() && 'medium-mobile' == this.mobileBreakpoint ) 191 || ( this._isCustom() && 'custom' == this.mobileBreakpoint ) 192 ) && ( $( this.nodeClass ).find( '.pp-advanced-menu-mobile-toggle' ).is(':visible') || 'expanded' == this.mobileToggle ) ) { 193 return true; 194 } 195 196 return false; 197 }, 198 199 _bindSettingsFormEvents: function() 200 { 201 // $('body').on( 'change', '.fl-builder-settings select[name="offcanvas_direction"]', function() { 202 // $('html').removeClass('pp-off-canvas-menu-open'); 203 // } ); 204 }, 205 206 /** 207 * Initialize the toggle logic for the menu. 208 * 209 * @see this._isMobile() 210 * @see this._menuOnCLick() 211 * @see this._clickOrHover() 212 * @see this._submenuOnRight() 213 * @see this._submenuRowZindexFix() 214 * @see this._toggleForMobile() 215 * @since 1.6.1 216 * @return void 217 */ 218 _initMenu: function() { 219 if ( this.mobileToggle != 'expanded' ) { 220 this._initOffCanvas(); 221 this._initFullScreen(); 222 } 223 224 this._setupSubmenu(); 225 this._menuOnHover(); 226 this._menuOnFocus(); 227 this._submenuOnClick(); 228 229 if ( $( this.nodeClass ).length && this.type == 'horizontal' ) { 230 this._initMegaMenus(); 231 } 232 233 if ( this.type == 'horizontal' || this.type == 'vertical' ) { 234 var self = this; 235 $( this.wrapperClass ).find('.pp-has-submenu-container').on( 'click', function( e ) { 236 if ( self.mobileMenuType !== 'off-canvas' && self.mobileMenuType !== 'full-screen' ) { 237 if ( self._isTouch() ) { 238 if ( ! $(this).hasClass('first-click') ) { 239 e.preventDefault(); 240 $(this).addClass('first-click'); 241 } 242 } 243 } 244 } ); 245 246 // Keyboard nav support for submenu toggle. 247 $( this.wrapperClass ).on( 'keydown.pp-menu', 'a, .pp-has-submenu-container > .pp-menu-toggle', function(e) { 248 var $current = $(e.target); 249 250 var key = e.key || e.which; 251 252 // Normalize keys 253 var KEYS = { 254 LEFT: 'ArrowLeft', 255 RIGHT: 'ArrowRight', 256 UP: 'ArrowUp', 257 DOWN: 'ArrowDown', 258 ENTER: 'Enter', 259 SPACE: ' ', 260 }; 261 262 function isKey(match) { 263 return key === match || key === { 264 ArrowLeft: 37, 265 ArrowUp: 38, 266 ArrowRight: 39, 267 ArrowDown: 40, 268 Enter: 13, 269 ' ': 32 270 }[match]; 271 } 272 273 var $item = $current.closest('li'); 274 var $parentItem = $current.closest('li.pp-has-submenu'); 275 var $submenu = $current.closest('ul.sub-menu'); 276 var isTopLevel = $current.closest('.sub-menu').length === 0; 277 278 /* ========================= 279 TOGGLE HANDLING 280 ========================= */ 281 282 function toggleSubmenu($el) { 283 var $li = $el.closest('li.pp-has-submenu'); 284 var $btn = $li.find('> .pp-has-submenu-container > .pp-menu-toggle'); 285 286 $li.toggleClass('pp-active'); 287 288 var isOpen = $li.hasClass('pp-active'); 289 290 if ($btn.length) { 291 $btn.attr('aria-expanded', isOpen); 292 } 293 } 294 295 // Button toggle 296 if ($current.hasClass('pp-menu-toggle')) { 297 if (isKey(KEYS.ENTER) || isKey(KEYS.SPACE)) { 298 e.preventDefault(); 299 e.stopPropagation(); 300 toggleSubmenu($current); 301 return; 302 } 303 } 304 305 /* ========================= 306 TOP LEVEL NAV (â â) 307 ========================= */ 308 309 if (isTopLevel && (isKey(KEYS.LEFT) || isKey(KEYS.RIGHT))) { 310 e.preventDefault(); 311 e.stopPropagation(); 312 313 if (isKey(KEYS.LEFT)) { 314 if ( $current.is( '.pp-menu-toggle' ) ) { 315 $current.prev('a').focus(); 316 } else { 317 var $prev = $item.prev(); 318 if ($prev.length) { 319 var $target = $prev.find('> .pp-has-submenu-container > .pp-menu-toggle:visible'); 320 ($target.length ? $target : $prev.find('a')).first().focus(); 321 } 322 } 323 } 324 325 if (isKey(KEYS.RIGHT)) { 326 if ( $current.next().is( '.pp-menu-toggle:visible' ) ) { 327 $current.next().focus(); 328 } else { 329 var $next = $item.next(); 330 if ($next.length) { 331 $next.find('a').first().focus(); 332 } 333 } 334 } 335 336 return; 337 } 338 339 // NESTED submenu navigation (LEFT / RIGHT) 340 if (!isTopLevel && (isKey(KEYS.RIGHT) || isKey(KEYS.LEFT))) { 341 342 var $parentItem = $current.closest('li.pp-has-submenu'); 343 344 // RIGHT â go into child submenu 345 if (isKey(KEYS.RIGHT)) { 346 var $childSubmenu = $parentItem.children('.sub-menu'); 347 348 if ($childSubmenu.length) { 349 e.preventDefault(); 350 e.stopPropagation(); 351 352 // Ensure open state 353 $parentItem.addClass('pp-active'); 354 355 var $toggle = $parentItem.find('> .pp-has-submenu-container > .pp-menu-toggle:visible'); 356 if ($toggle.length) { 357 $toggle.attr('aria-expanded', true); 358 } else { 359 $parentItem.find('> .pp-has-submenu-container > a').attr('aria-expanded', true); 360 } 361 362 // Focus first item in child submenu 363 $childSubmenu.find('a, .pp-menu-toggle:visible').first().focus(); 364 } 365 return; 366 } 367 368 // LEFT â go back to parent menu item 369 if (isKey(KEYS.LEFT)) { 370 var $currentSubmenu = $current.closest('ul.sub-menu'); 371 var $parentItem = $currentSubmenu.parent('li'); 372 373 if ($parentItem.length) { 374 e.preventDefault(); 375 e.stopPropagation(); 376 377 // CLOSE submenu 378 $parentItem.removeClass('pp-active'); 379 380 var $toggle = $parentItem.find('> .pp-has-submenu-container > .pp-menu-toggle:visible'); 381 382 if ($toggle.length) { 383 $toggle.attr('aria-expanded', false); 384 $toggle.focus(); 385 } else { 386 $parentItem.find('> .pp-has-submenu-container > a').attr('aria-expanded', false).focus(); 387 } 388 } 389 return; 390 } 391 } 392 393 /* ========================= 394 SUBMENU NAV (â â) 395 ========================= */ 396 397 // DOWN from toggle â first submenu item 398 if (isKey(KEYS.DOWN) && isTopLevel && $parentItem.length) { 399 e.preventDefault(); 400 e.stopPropagation(); 401 402 var $submenu = $parentItem.children('.sub-menu'); 403 404 if ($submenu.length) { 405 // ensure open state 406 if (!$parentItem.hasClass('pp-active')) { 407 $parentItem.addClass('pp-active'); 408 409 var $toggle = $parentItem.find('> .pp-has-submenu-container > .pp-menu-toggle:visible'); 410 if ($toggle.length) { 411 $toggle.attr('aria-expanded', true); 412 } else { 413 $parentItem.find('> .pp-has-submenu-container > a').attr('aria-expanded', true); 414 } 415 } 416 417 // move focus into submenu 418 $submenu.find('a, .pp-menu-toggle:visible').first().focus(); 419 } 420 421 return; 422 } 423 424 if (!$submenu.length) { 425 return; 426 } 427 428 var $items = $submenu.find('a, .pp-menu-toggle').filter(':visible'); 429 var index = $items.index($current); 430 431 if (index === -1) return; 432 433 // DOWN â 434 if (isKey(KEYS.DOWN)) { 435 e.preventDefault(); 436 e.stopPropagation(); 437 438 var next = index + 1; 439 if (next < $items.length) { 440 $items.eq(next).focus(); 441 } 442 return; 443 } 444 445 // UP â 446 if (isKey(KEYS.UP)) { 447 e.preventDefault(); 448 e.stopPropagation(); 449 450 if (index === 0 && ! $current.closest('.sub-menu').parents('.sub-menu').length) { 451 var $currentSubmenu = $current.closest('ul.sub-menu'); 452 var $parentItem = $currentSubmenu.parent('li'); 453 var $toggle = $parentItem.find('> .pp-has-submenu-container > .pp-menu-toggle:visible'); 454 if ($toggle.length) { 455 $toggle.focus(); 456 } else { 457 $parentItem.find('> .pp-has-submenu-container > a').focus(); 458 } 459 return; 460 } 461 462 // Don't loop back to the last item if we're on the first item of a submenu 463 if ( index === 0 ) { 464 $items.eq(index).focus(); 465 return; 466 } 467 468 $items.eq(index - 1).focus(); 469 return; 470 } 471 472 }.bind( this ) ); 473 } 474 475 if ( this._isMenuToggle() || this.type == 'accordion' ) { 476 $( this.wrapperClass ).off( 'mouseenter mouseleave' ); 477 this._menuOnClick(); 478 this._clickOrHover(); 479 } else { 480 $( this.wrapperClass ).off( 'click' ); 481 this._submenuOnRight(); 482 this._submenuRowZindexFix(); 483 } 484 485 if ( this.mobileToggle != 'expanded' ) { 486 this._toggleForMobile(); 487 } 488 489 $(this.wrapperClass).find('li:not(.menu-item-has-children)').on('click', 'a', function (e) { 490 if ( $(e.target).closest( '.pp-menu-search-item' ).length > 0 ) { 491 return; 492 } 493 494 $(this.nodeClass).find('.pp-advanced-menu').removeClass('menu-open'); 495 $(this.nodeClass).find('.pp-advanced-menu').addClass('menu-close'); 496 $('html').removeClass('pp-off-canvas-menu-open'); 497 $('html').removeClass('pp-full-screen-menu-open'); 498 499 }.bind( this ) ); 500 501 if ( $( this.wrapperClass ).find( '.pp-menu-search-item' ).length ) { 502 this._toggleMenuSearch(); 503 } 504 505 if ( $( this.wrapperClass ).find( '.pp-menu-cart-item').length ) { 506 this._wooUpdateParams(); 507 } 508 }, 509 510 /** 511 * Initializes submenu dropdowns. 512 * 513 * @since 2.33.x 514 * @return void 515 */ 516 _setupSubmenu: function() { 517 // $( this.wrapperClass + ' ul.sub-menu' ).each( function(){ 518 // $( this ).closest( 'li' ).attr( 'aria-haspopup', 'true' ); 519 // }); 520 }, 521 522 _menuOnHover: function() { 523 $( this.wrapperClass ).on( 'mouseenter', 'li.menu-item', function() { 524 $(this).addClass( 'hover' ); 525 } ).on( 'mouseleave', 'li.menu-item', function() { 526 $(this).removeClass( 'hover' ); 527 } ); 528 }, 529 530 /** 531 * Adds a focus class to menu elements similar to be used similar to CSS :hover psuedo event 532 * 533 * @since 1.9.0 534 * @return void 535 */ 536 _menuOnFocus: function() { 537 $( this.nodeClass ).off('focus', 'a').on( 'focus', 'a', function( e ) { 538 var $menuItem = $( e.target ).parents( '.menu-item' ).first(), 539 $parents = $( e.target ).parentsUntil( this.wrapperClass ); 540 541 $('.pp-advanced-menu .focus:not(.pp-menu-toggle)').removeClass('focus'); 542 543 $menuItem.addClass('focus'); 544 $parents.addClass('focus'); 545 546 }.bind( this ) ).on( 'focusout', 'a', function( e ) { 547 if ( $('.pp-advanced-menu .focus').hasClass('pp-has-submenu') ) { 548 $( e.target ).parentsUntil( this.wrapperClass ).find('.pp-has-submenu-container').removeClass('first-click'); 549 } 550 }.bind( this ) ); 551 552 $( this.nodeClass ).off('focus', '.pp-menu-toggle').on( 'focus', '.pp-menu-toggle', function( e ) { 553 $(e.target).addClass( 'focus' ); 554 }.bind( this ) ).off('blur', '.pp-menu-toggle').on( 'blur', '.pp-menu-toggle', function( e ) { 555 if ( $(e.target).parents( 'li.pp-has-submenu.pp-active' ).length === 0 || $(e.target).parents( 'li.pp-has-submenu.pp-active' ).parent( 'ul.menu' ).length === 0 ) { 556 $(e.target).removeClass( 'focus' ); 557 } 558 }.bind( this ) ); 559 }, 560 561 /** 562 * Logic for submenu toggling on accordions or mobile menus (vertical, horizontal) 563 * 564 * @since 1.6.1 565 * @return void 566 */ 567 _menuOnClick: function() { 568 var self = this; 569 var $mainItem = ''; 570 571 $( this.wrapperClass ) 572 .off( 'click.pp-advanced-menu keyup', '.pp-has-submenu-container' ) 573 .on( 'click.pp-advanced-menu keyup', '.pp-has-submenu-container', function( e ) { 574 var isValidEvent = e.which == 1 || e.which == 13 || e.which == undefined; // click or enter key press. 575 if ( ! isValidEvent ) { 576 return; 577 } 578 if ( e.which == 13 && ! $(e.target).hasClass( 'pp-menu-toggle' ) ) { // prevent event bubbling. 579 return; 580 } 581 if ( self._isTouch() ) { 582 if ( ! $(this).hasClass('first-click') ) { 583 e.preventDefault(); 584 $(this).addClass('first-click'); 585 } 586 } 587 588 e.stopPropagation(); 589 590 var isMainEl = $(e.target).parents('.menu-item').parent().parent().hasClass('pp-advanced-menu'); 591 592 if (isMainEl && $mainItem === '') { 593 $mainItem = $(e.target).parents('.menu-item'); 594 } 595 596 var $link = $( e.target ).parents( '.pp-has-submenu' ).first(), 597 $subMenu = $link.children( '.sub-menu' ).first(), 598 $href = $link.children('.pp-has-submenu-container').first().find('> a').attr('href'), 599 $subMenuParents = $( e.target ).parents( '.sub-menu' ), 600 $activeParent = $( e.target ).closest( '.pp-has-submenu.pp-active' ); 601 602 if ( $activeParent.length > 0 ) { 603 $activeParent.find( '.pp-menu-toggle' ).first().attr('aria-expanded', true); 604 } else { 605 $activeParent.find( '.pp-menu-toggle' ).first().attr('aria-expanded', false); 606 } 607 608 if( !$subMenu.is(':visible') || $(e.target).hasClass('pp-menu-toggle') 609 || ($subMenu.is(':visible') && (typeof $href === 'undefined' || $href == '#')) ) { 610 if ( ! $(this.wrapperClass).hasClass('pp-advanced-menu-accordion-collapse') ) { 611 e.preventDefault(); 612 } 613 if ( $(e.target).hasClass('pp-menu-toggle') ) { 614 e.stopPropagation(); 615 e.preventDefault(); 616 } 617 } 618 else { 619 e.stopPropagation(); 620 window.location.href = $href; 621 return; 622 } 623 624 if ($(this.wrapperClass).hasClass('pp-advanced-menu-accordion-collapse')) { 625 626 if ( $link.parents('.menu-item').length && !$link.parents('.menu-item').hasClass('pp-active') ) { 627 $('.menu .pp-active', this.wrapperClass).not($link).removeClass('pp-active'); 628 } 629 else if ($link.parents('.menu-item').hasClass('pp-active') && $link.parent('.sub-menu').length) { 630 $('.menu .pp-active', this.wrapperClass).not($link).not($activeParent).removeClass('pp-active'); 631 } 632 633 $('.sub-menu', this.wrapperClass).not($subMenu).not($subMenuParents).slideUp('normal'); 634 } 635 636 // Parent menu toggle icon was being reversed on collapsing its submenu, 637 // so here is the workaround to fix this behavior. 638 if ($(self.wrapperClass).find('.sub-menu:visible').length > 0) { 639 $(self.wrapperClass).find('.sub-menu:visible').parent().addClass('pp-active'); 640 } 641 $subMenu.slideToggle(400, function() { 642 // Reset previously opened sub-menu toggle icon. 643 $(e.target).parents('.pp-has-submenu-container').parent().parent().find('> .menu-item.pp-active').removeClass('pp-active'); 644 645 if ($mainItem !== '') { 646 $mainItem.parent().find('.menu-item.pp-active').removeClass('pp-active'); 647 $(self.wrapperClass).find('.sub-menu').parent().removeClass('pp-active'); 648 649 if ($(self.wrapperClass).find('.sub-menu:visible').length > 0) { 650 $(self.wrapperClass).find('.sub-menu:visible').parent().addClass('pp-active'); 651 } else { 652 $link.toggleClass('pp-active'); 653 $mainItem.removeClass('pp-active'); 654 } 655 } else { 656 $link.toggleClass('pp-active'); 657 } 658 if (!$subMenu.is(':visible')) { 659 $subMenu.parent().removeClass('pp-active'); 660 $subMenu.parent().find('> .p
660p-has-submenu-container .pp-menu-toggle').attr('aria-expanded', false); 661 } else { 662 $subMenu.parent().find('> .pp-has-submenu-container .pp-menu-toggle').attr('aria-expanded', true); 663 } 664 }); 665 666 }.bind( this ) ); 667 668 }, 669 670 /** 671 * Logic for submenu items click event 672 * 673 * @since 1.3.1 674 * @return void 675 */ 676 _submenuOnClick: function(){ 677 $( 'body' ).off( 'click', this.wrapperClass + ' .sub-menu a' ).on( 'click', this.wrapperClass + ' .sub-menu a', function( e ){ 678 if ( $( e.target ).parent().hasClass('focus') ) { 679 $( e.target ).parentsUntil( this.wrapperClass ).removeClass( 'focus' ); 680 } 681 }.bind( this ) ); 682 }, 683 684 /** 685 * Changes general styling and behavior of menus based on mobile / desktop viewport. 686 * 687 * @see this._isMobile() 688 * @since 1.6.1 689 * @return void 690 */ 691 _clickOrHover: function() { 692 this.$submenus = this.$submenus || $( this.wrapperClass ).find( '.sub-menu' ); 693 var $wrapper = $( this.wrapperClass ), 694 $menu = $wrapper.find( '.menu' ); 695 $li = $wrapper.find( '.pp-has-submenu' ); 696 697 if( this._isMenuToggle() ) { 698 $li.each( function() { 699 if( !$(this).hasClass('pp-active') ) { 700 $(this).find( '.sub-menu' ).fadeOut(); 701 } 702 } ); 703 } else { 704 $li.each( function() { 705 if( !$(this).hasClass('pp-active') ) { 706 $(this).find( '.sub-menu' ).css( { 707 'display' : '', 708 'opacity' : '' 709 } ); 710 } 711 } ); 712 } 713 }, 714 715 /** 716 * Logic to prevent submenus to go outside viewport boundaries. 717 * 718 * @since 1.6.1 719 * @return void 720 */ 721 _submenuOnRight: function() { 722 723 $( this.wrapperClass ) 724 .on( 'mouseenter focus', '.pp-has-submenu', function( e ) { 725 726 if( $ ( e.currentTarget ).find('.sub-menu').length === 0 ) { 727 return; 728 } 729 730 var $link = $( e.currentTarget ), 731 $parent = $link.parent(), 732 $subMenu = $link.find( '.sub-menu' ), 733 subMenuWidth = $subMenu.width(), 734 subMenuPos = 0, 735 winWidth = window.innerWidth; 736 737 if( $link.closest( '.pp-menu-submenu-right' ).length !== 0) { 738 739 $link.addClass( 'pp-menu-submenu-right' ); 740 741 } else if( $( 'body' ).hasClass( 'rtl' ) ) { 742 743 subMenuPos = $parent.is( '.sub-menu' ) ? 744 $parent.offset().left - subMenuWidth: 745 $link.offset().left - subMenuWidth; 746 747 if( subMenuPos <= 0 ) { 748 $link.addClass( 'pp-menu-submenu-right' ); 749 } 750 751 } else { 752 753 subMenuPos = $parent.is( '.sub-menu' ) ? 754 $parent.offset().left + $parent.width() + subMenuWidth : 755 $link.offset().left + subMenuWidth; 756 757 if( subMenuPos > winWidth ) { 758 $link.addClass('pp-menu-submenu-right'); 759 } 760 } 761 }.bind( this ) ) 762 .on( 'mouseleave', '.pp-has-submenu', function( e ) { 763 $( e.currentTarget ).removeClass( 'pp-menu-submenu-right' ); 764 }.bind( this ) ); 765 766 }, 767 768 /** 769 * Logic to prevent submenus to go behind the next overlay row. 770 * 771 * @since 2.2 772 * @return void 773 */ 774 _submenuRowZindexFix: function (e) { 775 776 $(this.wrapperClass) 777 .on('mouseenter', 'ul.menu > .pp-has-submenu', function (e) { 778 779 if ($(e.currentTarget).find('.sub-menu').length === 0) { 780 return; 781 } 782 783 $(this.nodeClass) 784 .closest('.fl-row') 785 .find('.fl-row-content') 786 .css('z-index', '10'); 787 788 }.bind( this ) ) 789 .on('mouseleave', 'ul.menu > .pp-has-submenu', function (e) { 790 791 $(this.nodeClass) 792 .closest('.fl-row') 793 .find('.fl-row-content') 794 .css('z-index', ''); 795 796 }.bind( this ) ); 797 }, 798 799 /** 800 * Logic for the mobile menu button. 801 * 802 * @since 1.6.1 803 * @return void 804 */ 805 _toggleForMobile: function() { 806 807 var $wrapper = null, 808 $menu = null, 809 self = this; 810 811 if ( this._isMenuToggle() ) { 812 $wrapper = $(this.wrapperClass); 813 if ( this._isMobileBelowRowEnabled() ) { 814 this._placeMobileMenuBelowRow(); 815 $menu = $(this.nodeClass + '-clone'); 816 $menu.find('ul.menu').show(); 817 } else { 818 $menu = $wrapper.find('.menu'); 819 } 820 821 if( !$wrapper.find( '.pp-advanced-menu-mobile-toggle' ).hasClass( 'pp-active' ) && this.mobileMenuType === 'default' ) { 822 $menu.css({ display: 'none' }); 823 } 824 825 $wrapper 826 .off( 'click.pp-mobile-menu-toggle', '.pp-advanced-menu-mobile-toggle' ) 827 .on( 'click.pp-mobile-menu-toggle', '.pp-advanced-menu-mobile-toggle', function( e ) { 828 e.stopPropagation(); 829 $(this).toggleClass( 'pp-active' ); 830 if ( $(this).hasClass('pp-active') ) { 831 $(this).attr('aria-expanded', 'true'); 832 $menu.addClass( 'pp-menu-visible' ); 833 } else { 834 $(this).attr('aria-expanded', 'false'); 835 $menu.removeClass( 'pp-menu-visible' ); 836 } 837 $menu.slideToggle(); 838 } ); 839 840 $menu.on( 'click', '.menu-item > a[href*="#"]', function(e) { 841 var $href = $(this).attr('href'), 842 $targetID = ''; 843 844 if ( $href !== '#' ) { 845 $targetID = $href.split('#')[1]; 846 847 if ( $('body').find('#'+ $targetID).length > 0 ) { 848 e.preventDefault(); 849 $( this ).toggleClass( 'pp-active' ); 850 setTimeout(function() { 851 $('html, body').animate({ 852 scrollTop: $('#'+ $targetID).offset().top 853 }, 1000, function() { 854 window.location.hash = $targetID; 855 }); 856 }, 500); 857 858 if ( ! self._isMenuToggle() ) { 859 $menu.slideToggle(); 860 } 861 } 862 } 863 }); 864 } 865 else { 866 867 if ( this._isMobileBelowRowEnabled() ) { 868 this._removeMenuFromBelowRow(); 869 } 870 871 $wrapper = $( this.wrapperClass ), 872 $menu = $wrapper.children( '.menu' ); 873 $wrapper.find( '.pp-advanced-menu-mobile-toggle' ).removeClass( 'pp-active' ); 874 $menu.css({ display: '' }); 875 } 876 }, 877 878 /** 879 * Init any mega menus that exist. 880 * 881 * @see this._isMenuToggle() 882 * @since 1.10.4 883 * @return void 884 */ 885 _initMegaMenus: function() { 886 887 var module = $( this.nodeClass ), 888 rowContent = module.closest( '.fl-row-content' ), 889 rowWidth = rowContent.width(), 890 megas = module.find( '.mega-menu' ), 891 disabled = module.find( '.mega-menu-disabled' ), 892 isToggle = this._isMenuToggle(); 893 894 if ( isToggle ) { 895 megas.removeClass( 'mega-menu' ).addClass( 'mega-menu-disabled' ); 896 module.find( 'li.mega-menu-disabled > ul.sub-menu' ).css( 'width', '' ); 897 rowContent.css( 'position', '' ); 898 } else { 899 disabled.removeClass( 'mega-menu-disabled' ).addClass( 'mega-menu' ); 900 module.find( 'li.mega-menu > ul.sub-menu' ).css( 'width', rowWidth + 'px' ); 901 rowContent.css( 'position', 'relative' ); 902 } 903 }, 904 905 /** 906 * Init off-canvas menu. 907 * 908 * @since 1.2.8 909 * @return void 910 */ 911 _initOffCanvas: function() { 912 if ( this.mobileMenuType !== 'off-canvas' ) { 913 return; 914 } 915 $('html').addClass('pp-off-canvas-menu-module'); 916 $('html').addClass('pp-off-canvas-menu-' + this.offCanvasDirection); 917 918 if ( $(this.nodeClass).find( '#pp-menu-' + this.settingsId ).length === 0 ) { 919 return; 920 } 921 922 var menuHTML = $(this.nodeClass).find( '#pp-menu-' + this.settingsId ).html(); 923 924 if ( null === this.offCanvasMenu ) {
925 this.offCanvasMenu = $('<div id="pp-advanced-menu-off-canvas-'+this.settingsId+'" class="fl-node-'+this.settingsId+' pp-menu-off-canvas" />').html( menuHTML ); 926 } 927 if ( $('#pp-advanced-menu-off-canvas-'+this.settingsId).length === 0 && null !== this.offCanvasMenu && ! this.isBuilderActive ) { 928 this.offCanvasMenu.appendTo( 'body' ); 929 } 930 931 $(this.nodeClass).trigger('pp-advanced-menu-off-canvas-init', [this.offCanvasMenu]); 932 933 this._toggleMenu(); 934 }, 935 936 /** 937 * Init full-screen overlay menu. 938 * 939 * @since 1.2.8 940 * @return void 941 */ 942 _initFullScreen: function() { 943 if ( this.mobileMenuType !== 'full-screen' ) { 944 return; 945 } 946 947 $('html').addClass('pp-full-screen-menu-module'); 948 949 if ( $(this.nodeClass).find( '#pp-menu-' + this.settingsId ).length === 0 ) { 950 return; 951 } 952 953 var menuHTML = $(this.nodeClass).find( '#pp-menu-' + this.settingsId ).html(); 954 955 if ( null === this.fullScreenMenu ) { 956 this.fullScreenMenu = $('<div id="pp-advanced-menu-full-screen-'+this.settingsId+'" class="fl-node-'+this.settingsId+' pp-menu-full-screen" />').html( menuHTML ); 957 } 958 if ( $('#pp-advanced-menu-full-screen-'+this.settingsId).length === 0 && null !== this.fullScreenMenu && ! this.isBuilderActive ) { 959 this.fullScreenMenu.appendTo( 'body' ); 960 } 961 962 $(this.nodeClass).trigger('pp-advanced-menu-full-screen-init', [this.fullScreenMenu]); 963 964 this._toggleMenu(); 965 }, 966 967 /** 968 * Trigger the toggle event for off-canvas 969 * and full-screen overlay menus. 970 * 971 * @since 1.2.8 972 * @return void 973 */ 974 _toggleMenu: function() { 975 var self = this; 976 var singleInstance = true; 977 if( self.mobileMenuType === 'full-screen' ) { 978 var winHeight = window.innerHeight; 979 $(self.nodeClass).find('.pp-menu-overlay').css('height', winHeight + 'px'); 980 $(window).on('resize', function() { 981 winHeight = window.innerHeight; 982 $(self.nodeClass).find('.pp-menu-overlay').css('height', winHeight + 'px'); 983 }); 984 } 985 986 // Toggle Click 987 var toggleEvent = ('ontouchend' in window) && this._isIOS() ? 'touchend' : 'click'; 988 $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle' ).off(toggleEvent).on( toggleEvent, function() { 989 if ( singleInstance ) { 990 if ( $('.pp-advanced-menu.menu-open').length > 0 ) { 991 $('.pp-advanced-menu').removeClass('menu-open'); 992 $('html').removeClass('pp-full-screen-menu-open'); 993 } 994 } 995 if( $(self.nodeClass).find('.pp-advanced-menu').hasClass('menu-open') ) { 996 $(self.nodeClass).find('.pp-advanced-menu').removeClass('menu-open'); 997 $(self.nodeClass).find('.pp-advanced-menu').addClass('menu-close'); 998 $('html').removeClass('pp-off-canvas-menu-open'); 999 $('html').removeClass('pp-full-screen-menu-open'); 1000 } else { 1001 $(self.nodeClass).find('.pp-advanced-menu').addClass('menu-open'); 1002 if( self.mobileMenuType === 'off-canvas' ) { 1003 $('html').addClass('pp-off-canvas-menu-open'); 1004 self.offCanvasMenu.find('nav').attr('tabindex', '0').trigger( 'focus' ); 1005 $(this).attr( 'tabindex', '-1' ).trigger( 'blur' ); 1006 } 1007 if( self.mobileMenuType === 'full-screen' ) { 1008 $('html').addClass('pp-full-screen-menu-open'); 1009 self.fullScreenMenu.find('nav').attr('tabindex', '0').trigger( 'focus' ); 1010 $(this).attr( 'tabindex', '-1' ).trigger( 'blur' ); 1011 } 1012 } 1013 1014 if ( '0' == $(this).attr('tabindex') ) { 1015 $(this).attr('aria-expanded', 'false'); 1016 } else { 1017 $(this).attr('aria-expanded', 'true'); 1018 } 1019 } ); 1020 1021 // iOS Safari "hover" fix. 1022 // This is needed to ensure the click event works properly on iOS devices since they treat the first tap as a hover event, 1023 // which can interfere with the intended toggle behavior of the menu. 1024 // $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle' ).on( 'touchstart', function(e) { 1025 // e.preventDefault(); 1026 // e.stopPropagation(); 1027 // $(this).trigger('click'); 1028 // } ); 1029 1030 // Keyboard navigation. 1031 $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle').on('keyup', function(e) { 1032 if ( 13 === e.keyCode || 13 === e.which ) { 1033 $(this).trigger('click'); 1034 } 1035 }); 1036 1037 // Close button click 1038 $(self.nodeClass).find('.pp-advanced-menu .pp-menu-close-btn, .pp-clear').on( 'click', function() { 1039 $(self.nodeClass).find('.pp-advanced-menu').removeClass('menu-open'); 1040 $(self.nodeClass).find('.pp-advanced-menu').addClass('menu-close'); 1041 $('html').removeClass('pp-off-canvas-menu-open'); 1042 $('html').removeClass('pp-full-screen-menu-open'); 1043 1044 if ( $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle' ).is( ':visible' ) ) { 1045 setTimeout(function() { 1046 $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle' ) 1047 .attr( 'tabindex', 0 ) 1048 .attr( 'aria-expanded', 'false' ) 1049 .trigger( 'focus' ); 1050 }, 120); 1051 } 1052 1053 if ( self.offCanvasMenu && self.offCanvasMenu.length > 0 ) { 1054 self.offCanvasMenu.find('nav').attr('tabindex', '-1').trigger( 'blur' ); 1055 } 1056 if ( self.fullScreenMenu && self.fullScreenMenu.length > 0 ) { 1057 self.fullScreenMenu.find('nav').attr('tabindex', '-1').trigger( 'blur' ); 1058 } 1059 } ); 1060 1061 if ( this.isBuilderActive ) { 1062 setTimeout(function() {
1063 if ( $('.fl-builder-settings[data-node="'+self.settingsId+'"]').length > 0 ) { 1064 $('.pp-advanced-menu').removeClass('menu-open'); 1065 $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle').trigger('click'); 1066 } 1067 }, 600); 1068 1069 FLBuilder.addHook('settings-form-init', function() { 1070 if ( ! $('.fl-builder-settings[data-node="'+self.settingsId+'"]').length > 0 ) { 1071 return; 1072 } 1073 if ( ! $(self.nodeClass).find('.pp-advanced-menu').hasClass('menu-open') ) { 1074 $('.pp-advanced-menu').removeClass('menu-open'); 1075 $(self.nodeClass).find('.pp-advanced-menu-mobile-toggle').trigger('click'); 1076 } 1077 }); 1078 1079 if ( $('html').hasClass('pp-full-screen-menu-open') && ! $(self.nodeClass).find('.pp-advanced-menu').hasClass('menu-open') ) { 1080 $('html').removeClass('pp-full-screen-menu-open'); 1081 } 1082 if ( $('html').hasClass('pp-off-canvas-menu-open') && ! $(self.nodeClass).find('.pp-advanced-menu').hasClass('menu-open') ) { 1083 $('html').removeClass('pp-off-canvas-menu-open'); 1084 } 1085 } 1086 }, 1087 1088 /** 1089 * Check to see if Below Row should be enabled. 1090 * 1091 * @since 2.8.0 1092 * @return boolean 1093 */ 1094 _isMobileBelowRowEnabled: function() { 1095 if (this.mobileMenuType === 'default') { 1096 return this.mobileBelowRow && $( this.nodeClass ).closest( '.fl-col' ).length; 1097 } 1098 return false; 1099 }, 1100 1101 /** 1102 * Logic for putting the mobile menu below the menu's 1103 * column so it spans the full width of the page. 1104 * 1105 * @since 2.2 1106 * @return void 1107 */ 1108 _placeMobileMenuBelowRow: function () { 1109 1110 if ($(this.nodeClass + '-clone').length) { 1111 return; 1112 } 1113 // if ( $('html').hasClass( 'fl-builder-edit' ) ) { 1114 // return; 1115 // } 1116 1117 var module = $(this.nodeClass), 1118 clone = null, 1119 row = module.closest('.fl-row-content'); 1120 1121 if ( module.length < 1 ) { 1122 return; 1123 } 1124 1125 clone = ( module.length > 1 ) ? $( module[0] ).clone() : module.clone(); 1126 module.find('.pp-menu-nav').remove(); 1127 clone.addClass((this.nodeClass + '-clone').replace('.', '')); 1128 clone.addClass('pp-menu-mobile-clone'); 1129 clone.find('.pp-advanced-menu-mobile').remove(); 1130 row.append(clone); 1131 1132 // Removes animation when enabled. 1133 if ( module.hasClass( 'fl-animation' ) ) { 1134 clone.removeClass( 'fl-animation' ); 1135 } 1136 1137 this._menuOnClick(); 1138 }, 1139 1140 /** 1141 * Logic for removing the mobile menu from below the menu's 1142 * column and putting it back in the main wrapper. 1143 * 1144 * @since 2.2 1145 * @return void 1146 */ 1147 _removeMenuFromBelowRow: function () { 1148 1149 if (!$(this.nodeClass + '-clone').length) { 1150 return; 1151 } 1152 1153 var module = $(this.nodeClass), 1154 clone = $(this.nodeClass + '-clone'), 1155 menu = clone.find('.pp-menu-nav'); 1156 1157 module.find('.pp-advanced-menu-mobile').after(menu); 1158 module.find('.pp-advanced-menu-mobile-toggle').attr( 'aria-expanded', false ); 1159 clone.remove(); 1160 }, 1161 1162 _toggleMenuSearch: function() { 1163 var items = $( this.wrapperClass ).find( '.pp-menu-search-item' ), 1164 self = this; 1165 1166 items.each( function() { 1167 var item = $(this); 1168 var button = item.find( '> a' ), 1169 form = item.find( '.pp-search-form' ), 1170 input = item.find('.pp-search-form__input'); 1171 1172 button.on( 'click', function(e) { 1173 e.preventDefault(); 1174 item.toggleClass( 'pp-search-active' ); 1175 if ( item.hasClass( 'pp-search-active' ) ) { 1176 setTimeout( function() { 1177 input.focus(); 1178 self._focusMenuSearch( input ); 1179 }, 100 ); 1180 } 1181 1182 $('body').on( 'click.pp-menu-search', self._hideMenuSearch.bind( self ) ); 1183 } ); 1184 1185 input.on( 'focus', function() { 1186 form.addClass( 'pp-search-form--focus' ); 1187 } ).on( 'blur', function() { 1188 form.removeClass( 'pp-search-form--focus' ); 1189 } ); 1190 1191 // Close search form on ESC key press. 1192 input.on( 'keyup', function(e) { 1193 if ( e.key === 'Escape' || e.keyCode === 27 ) { 1194 item.removeClass( 'pp-search-active' ); 1195 $('body').off('click.pp-menu-search'); 1196 button.delay(100).focus(); 1197 } 1198 } ); 1199 } ); 1200 }, 1201 1202 _hideMenuSearch: function(e) { 1203 if (e !== undefined) { 1204 if ($(e.target).closest('.pp-menu-search-item').length > 0) { 1205 return; 1206 } 1207 } 1208 1209 $( this.wrapperClass ).find( '.pp-menu-search-item' ).removeClass( 'pp-search-active' ); 1210 $('body').off('click.pp-menu-search'); 1211 }, 1212 1213 _focusMenuSearch: function( $el ) { 1214 // If this function exists... (IE 9+) 1215 if ( $el[0].setSelectionRange ) { 1216 // Double the length because Opera is inconsistent about whether a carriage return is one character or tw
1216o. 1217 var len = $el.val().length * 2; 1218 1219 // Timeout seems to be required for Blink 1220 setTimeout(function() { 1221 $el[0].setSelectionRange( len, len ); 1222 }, 1); 1223 } else { 1224 // As a fallback, replace the contents with itself 1225 // Doesn't work in Chrome, but Chrome supports setSelectionRange 1226 $el.val( $el.val() ); 1227 } 1228 }, 1229 1230 /** 1231 * Adds menu node and post ID to WooCommerce ajax URL requests. 1232 * 1233 * @since 2.20 1234 * @return void 1235 */ 1236 _wooUpdateParams: function() { 1237 if ( 'undefined' !== typeof wc_cart_fragments_params ) { 1238 wc_cart_fragments_params.wc_ajax_url += '&pp-advanced-menu-node='+ this.settingsId +'&post-id='+ this.postId; 1239 } 1240 if ( 'undefined' !== typeof wc_add_to_cart_params ) { 1241 wc_add_to_cart_params.wc_ajax_url += '&pp-advanced-menu-node='+ this.settingsId +'&post-id='+ this.postId; 1242 } 1243 }, 1244 1245 _validClick: function(e) { 1246 return (e.which == 1 || e.which == 13 || e.which == 32 || e.which == undefined) ? true : false; 1247 } 1248 1249 }; 1250 1251})(jQuery); 1252 1253var pp_menu_5bb37a7673668; 1254(function($) { 1255 1256 pp_menu_5bb37a7673668 = new PPAdvancedMenu({ 1257 id: '5bb37a7673668', 1258 type: 'horizontal', 1259 mobile: 'hamburger', 1260 menuPosition: 'below', 1261 breakpoints: { 1262 large: 1200, 1263 medium: 992, 1264 small: 768, 1265 custom: 768 }, 1266 mobileBreakpoint: 'mobile', 1267 mediaBreakpoint: '768', 1268 mobileMenuType: 'default', 1269 offCanvasDirection: 'left', 1270 fullScreenAnimation: '', 1271 isBuilderActive: false }); 1272 1273})(jQuery); 1274 1275var pp_menu_5bdc4763e0624; 1276(function($) { 1277 1278 pp_menu_5bdc4763e0624 = new PPAdvancedMenu({ 1279 id: '5bdc4763e0624', 1280 type: 'horizontal', 1281 mobile: 'expanded', 1282 menuPosition: 'below', 1283 breakpoints: { 1284 large: 1200, 1285 medium: 992, 1286 small: 768, 1287 custom: 768 }, 1288 mobileBreakpoint: 'mobile', 1289 mediaBreakpoint: '768', 1290 mobileMenuType: 'default', 1291 offCanvasDirection: 'left', 1292 fullScreenAnimation: '', 1293 isBuilderActive: false }); 1294 1295})(jQuery); 1296 1297var pp_menu_5bfc6b2579057; 1298(function($) { 1299 1300 pp_menu_5bfc6b2579057 = new PPAdvancedMenu({ 1301 id: '5bfc6b2579057', 1302 type: 'horizontal', 1303 mobile: 'expanded', 1304 menuPosition: 'below', 1305 breakpoints: { 1306 large: 1200, 1307 medium: 992, 1308 small: 768, 1309 custom: 768 }, 1310 mobileBreakpoint: 'always', 1311 mediaBreakpoint: '768', 1312 mobileMenuType: 'default', 1313 offCanvasDirection: 'left', 1314 fullScreenAnimation: '', 1315 isBuilderActive: false }); 1316 1317})(jQuery); 1318 1319var pp_menu_5bfc720b1dca2; 1320(function($) { 1321 1322 pp_menu_5bfc720b1dca2 = new PPAdvancedMenu({ 1323 id: '5bfc720b1dca2', 1324 type: 'horizontal', 1325 mobile: 'hamburger', 1326 menuPosition: 'below', 1327 breakpoints: { 1328 large: 1200, 1329 medium: 992, 1330 small: 768, 1331 custom: 768 }, 1332 mobileBreakpoint: 'always', 1333 mediaBreakpoint: 'always', 1334 mobileMenuType: 'default', 1335 offCanvasDirection: 'left', 1336 fullScreenAnimation: '', 1337 isBuilderActive: false }); 1338 1339})(jQuery); 1340(function($) { 1341 if ( $('.fl-node-5be3309a4d310 .pp-photo-rollover').length > 0 ) { 1342 $('body').on( 'mouseenter.pp-rollover', '.fl-node-5be3309a4d310 .pp-photo-rollover .pp-photo-content', function() { 1343 $(this).addClass( 'is-hover' ); 1344 } ).on( 'mouseleave.pp-rollover', '.fl-node-5be3309a4d310 .pp-photo-rollover .pp-photo-content', function() { 1345 $(this).removeClass( 'is-hover' ); 1346 } ); 1347 } 1348})(jQuery); 1349/* Start Layout Custom JS */ 1350 1351/* End Layout Custom JS */ 1352 1353(function($){ 1354 1355 /** 1356 * Helper class for header layout logic. 1357 * 1358 * @since 1.0 1359 * @class FLThemeBuilderHeaderLayout 1360 */ 1361 FLThemeBuilderHeaderLayout = { 1362 1363 /** 1364 * A reference to the window object for this page. 1365 * 1366 * @since 1.0 1367 * @property {Object} win 1368 */ 1369 win : null, 1370 1371 /** 1372 * A reference to the body object for this page. 1373 * 1374 * @since 1.0 1375 * @property {Object} body 1376 */ 1377 body : null, 1378 1379 /** 1380 * A reference to the header object for this page. 1381 * 1382 * @since 1.0 1383 * @property {Object} header 1384 */ 1385 header : null, 1386 1387 /** 1388 * Whether this header overlays the content or not. 1389 * 1390 * @since 1.0 1391 * @property {Boolean} overlay 1392 */ 1393 overlay : false, 1394 1395 /** 1396 * Whether the page has the WP admin bar or not. 1397 * 1398 * @since 1.0 1399 * @property {Boolean} hasAdminBar 1400 */ 1401 hasAdminBar : false, 1402 1403 /** 1404 * Breakpoint for when the sticky header should apply. 1405 * 1406 * @since 1.4 1407 * @property {String} stickyOn 1408 */ 1409 stickyOn: '', 1410 1411 /** 1412 * A reference of the sticky and shrink header breakpoint. 1413 * 1414 * @since 1.2.5 1415 * @property {Number} breakpointWidth 1416 */ 1417 breakpointWidth: 0, 1418 1419 /** 1420 * Whether this header can be pinned from page load. 1421 * 1422 * @since 1.6.1 1423 * @property {Boolean} pinnable 1424 */ 1425 pinnable : false, 1426 1427 /** 1428 * Initializes header layout logic. 1429 * 1430 * @since 1.0 1431 * @method init 1432 */ 1433 init: function() 1434 {
1435 var editing = $( 'html.fl-builder-edit' ).length, 1436 header = $( '.fl-builder-content[data-type=header]' ), 1437 menuModule = header.find( '.fl-module-menu' ), 1438 breakpoint = null, 1439 adminBarHeight = 0; 1440 1441 if ( ! editing && header.length ) { 1442 1443 header.imagesLoaded( $.proxy( function() { 1444 1445 this.win = $( window ); 1446 this.body = $( 'body' ); 1447 this.header = header.eq( 0 ); 1448 this.overlay = !! Number( header.attr( 'data-overlay' ) ); 1449 this.hasAdminBar = !! $( 'body.admin-bar' ).length; 1450 this.stickyOn = this.header.data( 'sticky-on' ); 1451 breakpoint = this.header.data( 'sticky-breakpoint' ); 1452 1453 if ( '' == this.stickyOn ) { 1454 if ( typeof FLBuilderLayoutConfig.breakpoints[ breakpoint ] !== undefined ) { 1455 this.breakpointWidth = FLBuilderLayoutConfig.breakpoints[ breakpoint ]; 1456 } 1457 else { 1458 this.breakpointWidth = FLBuilderLayoutConfig.breakpoints.medium; 1459 } 1460 } 1461 1462 if ( Number( header.attr( 'data-sticky' ) ) ) { 1463 1464 this.header.data( 'original-top', this.header.offset().top ); 1465 1466 // The pin decision is made once here, while the header offset and the admin bar height are read from the same layout. 1467 adminBarHeight = $( '#wpadminbar' ).length ? $( '#wpadminbar' ).outerHeight() : 0; 1468 this.pinnable = this.overlay && this.header.data( 'original-top' ) <= adminBarHeight; 1469 1470 this.win.on( 'resize', $.throttle( 500, $.proxy( this._initSticky, this ) ) ); 1471 this._initSticky(); 1472 1473 } 1474 1475 }, this ) ); 1476 } 1477 }, 1478 1479 /** 1480 * Initializes sticky logic for a header. 1481 * 1482 * @since 1.0 1483 * @access private 1484 * @method _initSticky 1485 */ 1486 _initSticky: function( e ) 1487 { 1488 var header = $('.fl-builder-content[data-type=header]'), 1489 windowSize = this.win.width(), 1490 makeSticky = false; 1491 1492 makeSticky = this._makeWindowSticky( windowSize ); 1493 if ( makeSticky || ( this.breakpointWidth > 0 && windowSize >= this.breakpointWidth ) ) { 1494 this.win.on( 'scroll.fl-theme-builder-header-sticky', $.proxy( this._doSticky, this ) ); 1495 this._initPin(); 1496
1497 // Apply the sticky state on initial load when the page is 1498 // already scrolled past the header â e.g. when the browser 1499 // restores the scroll position on refresh. Overlay headers are 1500 // out of scope here; this mirrors the shrink-on-load behavior 1501 // in _initShrink(). 1502 if ( ! e && ! this.overlay && ! this.header.hasClass( 'fl-theme-builder-header-sticky' ) ) { 1503 var loadWinTop = this.win.scrollTop(), 1504 loadHeaderTop = Math.floor( this.header.data( 'original-top' ) ); 1505 1506 if ( this.hasAdminBar && windowSize > 600 ) { 1507 loadWinTop += Math.floor( $( '#wpadminbar' ).outerHeight() ); 1508 } 1509 1510 if ( loadWinTop > loadHeaderTop ) { 1511 this.header.addClass( 'fl-theme-builder-header-sticky' ); 1512 this.header.addClass( 'fl-theme-builder-header-scrolled' ); 1513 this._adjustHeaderHeight(); 1514 this._adjustStickyHeaderWidth(); 1515 } 1516 } 1517 1518 // 1519 // Check if Event Type is 'resize' then invoke this._doSticky() 1520 // only if the 'fl-theme-builder-header-sticky' class is already present. 1521 // 1522 if ( e && 'resize' === e.type ) { 1523 if ( this.header.hasClass( 'fl-theme-builder-header-sticky' ) ) { 1524 this._doSticky( e ); 1525 } 1526 this._adjustStickyHeaderWidth(); 1527 } 1528 1529 if ( Number( header.attr( 'data-shrink' ) ) ) { 1530 this.header.data( 'original-height', this.header.outerHeight() ); 1531 this.win.on( 'resize', $.throttle( 500, $.proxy( this._initShrink, this ) ) ); 1532 this._initShrink(); 1533 } 1534 1535 this._initFlyoutMenuFix( e ); 1536 } else { 1537 this.win.off( 'scroll.fl-theme-builder-header-sticky' ); 1538 this.win.off( 'resize.fl-theme-builder-header-sticky' ); 1539 1540 this.header.removeClass( 'fl-theme-builder-header-sticky' ); 1541 this.header.removeClass( 'fl-theme-builder-header-pinned' ); 1542 this.header.removeAttr( 'style' ); 1543 this.header.parent().css( 'padding-top', '0' ); 1544 } 1545 }, 1546 1547 /** 1548 * Pins an overlay header with fixed positioning from page load, avoiding a position change that a scroll handler cannot apply before the compositor paints. 1549 * 1550 * @since 1.6.1 1551 * @access private 1552 * @method _initPin 1553 */ 1554 _initPin: function() 1555 { 1556 this.header.toggleClass( 'fl-theme-builder-header-pinned', this.pinnable ); 1557 1558 if ( ! this.pinnable ) { 1559 return; 1560 } 1561 1562 // Fixed positioning resolves the width against the viewport, so boxed layouts require their maximum width immediately. 1563 this._adjustStickyHeaderWidth(); 1564 1565 // The header is visible from the first paint, so the scrolled state must reflect any restored scroll position. 1566 if ( this.win.scrollTop() > Math.floor( this.header.data( 'original-top' ) ) ) { 1567 this.header.addClass( 'fl-theme-builder-header-scrolled' ); 1568 } 1569 }, 1570 1571 /** 1572 * Check if Header should be sticky at a particular Window size. 1573 * 1574 * @since 1.4 1575 * @access private 1576 * @param widowSize 1577 * @method _makeWindowSticky 1578 */ 1579 _makeWindowSticky: function ( windowSize ) 1580 { 1581 var makeSticky = false; 1582 1583 switch (this.stickyOn) { 1584 case 'xl': 1585 makeSticky = windowSize > FLBuilderLayoutConfig.breakpoints['large']; 1586 break; 1587 case '': // Default 1588 case 'desktop': 1589 makeSticky = windowSize >= FLBuilderLayoutConfig.breakpoints['medium']; 1590 break; 1591 case 'desktop-medium': 1592 makeSticky = windowSize > FLBuilderLayoutConfig.breakpoints['small']; 1593 break; 1594 case 'large': 1595 makeSticky = windowSize > FLBuilderLayoutConfig.breakpoints['medium'] && windowSize <= FLBuilderLayoutConfig.breakpoints['large']; 1596 break; 1597 case 'large-medium': 1598 makeSticky = windowSize > FLBuilderLayoutConfig.breakpoints['small'] && windowSize <= FLBuilderLayoutConfig.breakpoints['large']; 1599 break; 1600 case 'medium': 1601 makeSticky = ( windowSize <= FLBuilderLayoutConfig.breakpoints['medium'] && windowSize > FLBuilderLayoutConfig.breakpoints['small'] ); 1602 break; 1603 case 'medium-mobile': 1604 makeSticky = (windowSize <= FLBuilderLayoutConfig.breakpoints['medium']); 1605 break; 1606 case 'mobile': 1607 makeSticky = (windowSize <= FLBuilderLayoutConfig.breakpoints['small']); 1608 break; 1609 case 'all':
1610 makeSticky = true; 1611 break; 1612 } 1613 1614 return makeSticky; 1615 }, 1616 1617 /** 1618 * Sticks the header when the page is scrolled. 1619 * 1620 * @since 1.0 1621 * @access private 1622 * @method _doSticky 1623 */ 1624 _doSticky: function( e ) 1625 { 1626 var winTop = Math.floor( this.win.scrollTop() ), 1627 headerTop = Math.floor( this.header.data( 'original-top' ) ), 1628 hasStickyClass = this.header.hasClass( 'fl-theme-builder-header-sticky' ), 1629 hasScrolledClass = this.header.hasClass( 'fl-theme-builder-header-scrolled' ), 1630 beforeHeader = this.header.prevAll( '.fl-builder-content' ), 1631 bodyTopPadding = parseInt( jQuery('body').css('padding-top') ), 1632 winBarHeight = $('#wpadminbar').length ? $('#wpadminbar').outerHeight() : 0, 1633 headerHeight = 0; 1634 1635 if ( isNaN( bodyTopPadding ) ) { 1636 bodyTopPadding = 0; 1637 } 1638 1639 if ( this.hasAdminBar && this.win.width() > 600 ) { 1640 winTop += Math.floor( winBarHeight ); 1641 } 1642 1643 if ( winTop > headerTop ) { 1644 if ( ! hasStickyClass ) { 1645 if ( e && ( 'scroll' === e.type || 'smartscroll' === e.type ) ) { 1646 this.header.addClass( 'fl-theme-builder-header-sticky' ); 1647 if ( this.overlay && beforeHeader.length ) { 1648 this.header.css( 'top', winBarHeight); 1649 } 1650 } 1651 1652 if ( ! this.overlay ) { 1653 this._adjustHeaderHeight(); 1654 } 1655 } 1656 } 1657 else if ( hasStickyClass ) { 1658 this.header.removeClass( 'fl-theme-builder-header-sticky' ); 1659 this.header.removeAttr( 'style' ); 1660 this.header.parent().css( 'padding-top', '0' ); 1661 } 1662 1663 this._adjustStickyHeaderWidth(); 1664 1665 if ( winTop > headerTop ) { 1666 if ( ! hasScrolledClass ) { 1667 this.header.addClass( 'fl-theme-builder-header-scrolled' ); 1668 } 1669 } else if ( hasScrolledClass ) { 1670 this.header.removeClass( 'fl-theme-builder-header-scrolled' ); 1671 } 1672 1673 this._flyoutMenuFix( e ); 1674 }, 1675 1676 /** 1677 * Initializes flyout menu fixes on sticky header. 1678 * 1679 * @since 1.4.1 1680 * @method _initFlyoutMenuFix 1681 */ 1682 _initFlyoutMenuFix: function( e ) { 1683 var header = this.header, 1684 menuModule = header.closest( '.fl-menu' ), 1685 flyoutMenu = menuModule.find( '.fl-menu-mobile-flyout' ), 1686 isPushMenu = menuModule.hasClass( 'fl-menu-responsive-flyout-push' ) || menuModule.hasClass( 'fl-menu-responsive-flyout-push-opacity' ), 1687 isOverlay = menuModule.hasClass( 'fl-menu-responsive-flyout-overlay' ), 1688 flyoutPos = menuModule.hasClass( 'fl-flyout-right' ) ? 'right' : 'left', 1689 flyoutParent = header.parent().is( 'header' ) ? header.parent().parent() : header.parent(); 1690 isFullWidth = this.win.width() === header.width(), 1691 flyoutLayout = '', 1692 activePos = 250, 1693 headerPos = 0; 1694 1695 if ( ! flyoutMenu.length ) { 1696 return; 1697 } 1698 1699 if ( this.win.width() > header.parent().width() ) { 1700 headerPos = ( this.win.width() - header.width() ) / 2; 1701 } 1702 1703 if ( isOverlay ) { 1704 activePos = headerPos; 1705 } 1706 else if ( isPushMenu ) { 1707 activePos = activePos + headerPos; 1708 } 1709 flyoutMenu.data( 'activePos', activePos ); 1710 1711 if ( isPushMenu ) { 1712 flyoutLayout = 'push-' + flyoutPos; 1713 } 1714 else if ( isOverlay ) { 1715 flyoutLayout = 'overlay-' + flyoutPos; 1716 } 1717 1718 if ( isPushMenu && ! $( 'html' ).hasClass( 'fl-theme-builder-has-flyout-menu' ) ) { 1719 $( 'html' ).addClass( 'fl-theme-builder-has-flyout-menu' ); 1720 } 1721 1722 if ( ! flyoutParent.hasClass( 'fl-theme-builder-flyout-menu-' + flyoutLayout ) ) { 1723 flyoutParent.addClass( 'fl-theme-builder-flyout-menu-' + flyoutLayout ); 1724 } 1725 1726 if ( ! header.hasClass( 'fl-theme-builder-flyout-menu-overlay' ) && isOverlay ) { 1727 header.addClass( 'fl-theme-builder-flyout-menu-overlay' ); 1728 } 1729 1730 if ( ! header.hasClass( 'fl-theme-builder-header-full-width' ) && isFullWidth ) { 1731 header.addClass( 'fl-theme-builder-header-full-width' ); 1732 } 1733 else if ( ! isFullWidth ) { 1734 header.removeClass( 'fl-theme-builder-header-full-width' ); 1735 } 1736 1737 menuModule.on( 'click', '.fl-menu-mobile-toggle', $.proxy( function( event ){ 1738 if ( menuModule.find( '.fl-menu-mobile-toggle.fl-active' ).length ) {
1739 $( 'html' ).addClass( 'fl-theme-builder-flyout-menu-active' ); 1740 event.stopImmediatePropagation(); 1741 } 1742 else { 1743 $( 'html' ).removeClass( 'fl-theme-builder-flyout-menu-active' ); 1744 } 1745 1746 this._flyoutMenuFix( event ); 1747 }, this ) ); 1748 }, 1749 1750 /** 1751 * Fix flyout menu inside the sticky header. 1752 * 1753 * @since 1.4.1 1754 * @method _flyoutMenuFix 1755 */ 1756 _flyoutMenuFix: function( e ){ 1757 var header = this.header, 1758 menuModule = $( e.target ).closest( '.fl-menu' ), 1759 flyoutMenu = menuModule.find( '.fl-menu-mobile-flyout' ), 1760 flyoutPos = menuModule.hasClass( 'fl-flyout-right' ) ? 'right' : 'left', 1761 menuOpacity = menuModule.find( '.fl-menu-mobile-opacity' ), 1762 isScroll = 'undefined' !== typeof e && 'scroll' === e.handleObj.type, 1763 activePos = 'undefined' !== typeof flyoutMenu.data( 'activePos' ) ? flyoutMenu.data( 'activePos' ) : 0, 1764 headerPos = ( this.win.width() - header.width() ) / 2, 1765 inactivePos = headerPos > 0 ? activePos + 4 : 254; 1766 1767 if ( ! flyoutMenu.length ) { 1768 return; 1769 } 1770 1771 if ( this.overlay ) { 1772 return; 1773 } 1774 1775 if( $( '.fl-theme-builder-flyout-menu-active' ).length ) { 1776 1777 if ( isScroll && ! flyoutMenu.hasClass( 'fl-menu-disable-transition' ) ) { 1778 flyoutMenu.addClass( 'fl-menu-disable-transition' ); 1779 } 1780 1781 if ( header.hasClass( 'fl-theme-builder-header-sticky' ) ) { 1782 if ( ! isScroll ) { 1783 setTimeout( $.proxy( function(){ 1784 flyoutMenu.css( flyoutPos, '-' + activePos + 'px' ); 1785 }, this ), 1 ); 1786 } 1787 else { 1788 flyoutMenu.css( flyoutPos, '-' + activePos + 'px' ); 1789 } 1790 } 1791 else { 1792 flyoutMenu.css( flyoutPos, '0px' ); 1793 } 1794 } 1795 else { 1796 if ( flyoutMenu.hasClass( 'fl-menu-disable-transition' ) ) { 1797 flyoutMenu.removeClass( 'fl-menu-disable-transition' ); 1798 } 1799 1800 if ( header.hasClass( 'fl-theme-builder-flyout-menu-overlay' ) && headerPos > 0 && headerPos < 250 ) { 1801 if ( header.hasClass( 'fl-theme-builder-header-sticky' ) ) { 1802 inactivePos = headerPos + 254; 1803 } 1804 else { 1805 inactivePos = 254; 1806 } 1807 } 1808 1809 if ( e && e.type === 'resize' ) { 1810 inactivePos = headerPos + 254; 1811 } 1812 1813 flyoutMenu.css( flyoutPos, '-' + inactivePos + 'px' ); 1814 } 1815 1816 if ( e && menuModule.is('.fl-menu-responsive-flyout-overlay') && $.infinitescroll ) { 1817 e.stopImmediatePropagation(); 1818 } 1819 1820 if( menuOpacity.length ) { 1821 if ( header.hasClass( 'fl-theme-builder-header-sticky' ) ) { 1822 if ( '0px' === menuOpacity.css( 'left' ) ) { 1823 menuOpacity.css( 'left', '-' + headerPos + 'px' ); 1824 } 1825 } 1826 else { 1827 menuOpacity.css( 'left', '' ); 1828 } 1829 } 1830 }, 1831 1832 /** 1833 * Adjust sticky header width if BB Theme Boxed Layout is used. 1834 * 1835 * @since 1.4 1836 * @access private 1837 * @method _adjustStickyHeaderWidth 1838 */ 1839 _adjustStickyHeaderWidth: function () { 1840 if ( $('body').hasClass( 'fl-fixed-width' ) ) { 1841 var parentWidth = this.header.parent().width(); 1842 1843 // Better if this is set in the stylesheet file. 1844 if ( this.win.width() >= 992 ) { 1845 this.header.css({ 1846 'margin': '0 auto', 1847 'max-width': parentWidth, 1848 }); 1849 } 1850 else { 1851 this.header.css({ 1852 'margin': '', 1853 'max-width': '', 1854 }); 1855 } 1856 } 1857 }, 1858 1859 /** 1860 * Adjust Sticky Header Height 1861 * 1862 * @since 1.4 1863 * @access private 1864 * @method _adjustHeaderHeight 1865 */ 1866 _adjustHeaderHeight: function () { 1867 var beforeHeader = this.header.prevAll('.fl-builder-content'), 1868 beforeHeaderHeight = 0, 1869 beforeHeaderFix = 0, 1870 headerHeight = Math.floor( this.header.outerHeight() ), 1871 bodyTopPadding = parseInt( $( 'body' ).css( 'padding-top' ) ), 1872 wpAdminBarHeight = 0, 1873 totalHeaderHeight = 0; 1874 1875 if ( isNaN( bodyTopPadding ) ) { 1876 bodyTopPadding = 0; 1877 } 1878 1879 if ( beforeHeader.length ) { 1880 $.each( beforeHeader, function() { 1881 beforeHeaderHeight += Math.floor( $(this).outerHeight() ); 1882 }); 1883 // Subtract this value from the header parent's top padding. 1884 beforeHeaderFix = 2; 1885 } 1886 1887 if ( this.hasAdminBar && this.win.width() <= 600 ) { 1888 wpAdminBarHeight = Math.floor( $('#wpadminbar').outerHeight() ); 1889 } 1890 1891 totalHeaderHeight = Math.floor( beforeHeaderHeight + headerHeight); 1892 1893 if ( headerHeight > 0 ) { 1894 var headerParent = this.header.parent(), 1895 headerParentTopPadding = 0; 1896 1897 // If the header's parent container is the BODY tag ignore its top padding. 1898 if ( $( headerParent ).is('body') ) { 1899 headerParentTopPadding = Math.floor( headerHeight - wpAdminBarHeight ); 1900 } else { 1901 headerParentTopPadding = Math.floor( headerHeight - bodyTopPadding - wpAdminBarHeight ); 1902 } 1903 1904 $( headerParent ).css( 'padding-top', ( headerParentTopPadding - beforeHeaderFix ) + 'px' ); 1905 1906 this.header.css({ 1907 '-webkit-transform': 'translate(0px, -' + totalHeaderHeight + 'px)', 1908 '-ms-transform': 'translate(0px, -' + totalHeaderHeight + 'px)', 1909 'transform': 'translate(0px, -' + totalHeaderHeight + 'px)' 1910 }); 1911 1912 } 1913 1914 }, 1915 1916 /** 1917 * Initializes shrink logic for a header. 1918 * 1919 * @since 1.0 1920 * @access private 1921 * @method _initShrink 1922 */ 1923 _initShrink: function( e ) 1924 { 1925 if ( this.win.width() >= this.breakpointWidth ) {
1926 this.win.on( 'scroll.fl-theme-builder-header-shrink', $.proxy( this._doShrink, this ) ); 1927 this._setImageMaxHeight(); 1928 1929 if ( this.win.scrollTop() > 0 ){ 1930 this._doShrink(); 1931 } 1932 1933 } else { 1934 this.header.parent().css( 'padding-top', '0' ); 1935 this.win.off( 'scroll.fl-theme-builder-header-shrink' ); 1936 this._removeShrink(); 1937 this._removeImageMaxHeight(); 1938 } 1939 }, 1940 1941 /** 1942 * Shrinks the header when the page is scrolled. 1943 * 1944 * @since 1.0 1945 * @access private 1946 * @method _doShrink 1947 */ 1948 _doShrink: function( e ) 1949 { 1950 var winTop = this.win.scrollTop(), 1951 headerTop = this.header.data('original-top'), 1952 headerHeight = this.header.data('original-height'), 1953 shrinkImageHeight = this.header.data('shrink-image-height'), 1954 windowSize = this.win.width(), 1955 makeSticky = this._makeWindowSticky( windowSize ), 1956 hasClass = this.header.hasClass( 'fl-theme-builder-header-shrink' ); 1957 1958 1959 if ( this.hasAdminBar ) { 1960 winTop += 32; 1961 } 1962 1963 if ( makeSticky && ( winTop > headerTop + headerHeight ) ) { 1964 if ( ! hasClass ) { 1965 1966 this.header.addClass( 'fl-theme-builder-header-shrink' ); 1967 1968 // Shrink images but don't include lightbox and menu images. 1969 this.header.find('img').each( function( i ) { 1970 var image = $( this ), 1971 maxMegaMenu = image.closest( '.max-mega-menu' ).length, 1972 imageInLightbox = image.closest( '.fl-button-lightbox-content' ).length, 1973 imageInNavMenu = image.closest( 'li.menu-item' ).length; 1974 1975 if ( ! ( imageInLightbox || imageInNavMenu || maxMegaMenu ) ) { 1976 image.css( 'max-height', shrinkImageHeight ); 1977 } 1978 1979 }); 1980 1981 this.header.find( '.fl-row-content-wrap' ).each( function() { 1982 1983 var row = $( this ); 1984 1985 if ( parseInt( row.css( 'padding-bottom' ) ) > 5 ) { 1986 row.addClass( 'fl-theme-builder-header-shrink-row-bottom' ); 1987 } 1988 1989 if ( parseInt( row.css( 'padding-top' ) ) > 5 ) { 1990 row.addClass( 'fl-theme-builder-header-shrink-row-top' ); 1991 } 1992 } ); 1993 1994 this.header.find( '.fl-module' ).each( function() { 1995 1996 var module = $( this ).find( '.fl-module-content' ).length ? $( this ).find( '.fl-module-content' ) : $( this ); 1997 1998 if ( parseInt( module.css( 'margin-bottom' ) ) > 5 ) { 1999 module.addClass( 'fl-theme-builder-header-shrink-module-bottom' ); 2000 } 2001 2002 if ( parseInt( module.css( 'margin-top' ) ) > 5 ) { 2003 module.addClass( 'fl-theme-builder-header-shrink-module-top' ); 2004 } 2005 } ); 2006 } 2007 } else if (hasClass) { 2008 this.header.find( 'img' ).css( 'max-height', '' ); 2009 this._removeShrink(); 2010 } 2011 2012 // Fixes Shrink header issue with BB Theme when window is scrolled then resized and back. 2013 if ( 'undefined' === typeof( e ) && $('body').hasClass( 'fl-fixed-width' ) ) { 2014 if ( ! this.overlay ) { 2015 this._adjustHeaderHeight(); 2016 } 2017 } 2018 2019 }, 2020 2021 /** 2022 * Removes the header shrink effect. 2023 * 2024 * @since 1.0 2025 * @access private 2026 * @method _removeShrink 2027 */ 2028 _removeShrink: function() 2029 { 2030 var rows = this.header.find( '.fl-row-content-wrap' ), 2031 modules = this.header.find('.fl-module, .fl-module-content'); 2032 2033 rows.removeClass( 'fl-theme-builder-header-shrink-row-bottom' ); 2034 rows.removeClass( 'fl-theme-builder-header-shrink-row-top' ); 2035 modules.removeClass( 'fl-theme-builder-header-shrink-module-bottom' ); 2036 modules.removeClass( 'fl-theme-builder-header-shrink-module-top' ); 2037 this.header.removeClass( 'fl-theme-builder-header-shrink' ); 2038 }, 2039 2040 /** 2041 * Adds max height to images in modules for smooth scrolling. 2042 * 2043 * @since 1.1.1 2044 * @access private 2045 * @method _setImageMaxHeight 2046 */ 2047 _setImageMaxHeight: function() 2048 { 2049 var head = $( 'head' ), 2050 stylesId = 'fl-header-styles-' + this.header.data( 'post-id' ), 2051 styles = '', 2052 images = this.header.find( '.fl-module img' ); 2053 2054 if ( $( '#' + stylesId ).length ) { 2055 return; 2056 } 2057 2058 images.each( function( i ) { 2059 var image = $( this ), 2060 height = image.height(), 2061 node = image.closest( '.fl-module' ).data( 'node' ), 2062 className = 'fl-node-' + node + '-img-' + i, 2063 maxMegaMenu = image.closest( '.max-mega-menu' ).length, 2064 imageInLightbox = image.closest( '.fl-button-lightbox-content' ).length, 2065 imageInNavMenu = image.closest( 'li.menu-item' ).length; 2066 2067 if ( ! ( imageInLightbox || imageInNavMenu || maxMegaMenu ) ) { 2068 image.addClass( className ); 2069 styles += '.' + className + ' { max-height: ' + ( height ? height : image[0].height ) + 'px }'; 2070 } 2071 2072 } ); 2073
2074 if ( '' !== styles ) { 2075 head.append( '<style id="' + stylesId + '">' + styles + '</style>' ); 2076 } 2077 }, 2078 2079 /** 2080 * Removes max height on images in modules for smooth scrolling. 2081 * 2082 * @since 1.1.1 2083 * @access private 2084 * @method _removeImageMaxHeight 2085 */ 2086 _removeImageMaxHeight: function() 2087 { 2088 $( '#fl-header-styles-' + this.header.data( 'post-id' ) ).remove(); 2089 }, 2090 }; 2091 2092 $( function() { FLThemeBuilderHeaderLayout.init(); } ); 2093 2094})(jQuery); 2095 2096(function($) { 2097 2098 if($(window).width() <= 768 && $(window).width() >= 481 ) { 2099 $('.fl-node-5be0ca0d57063 .pp-heading-separator, .fl-node-5be0ca0d57063 .pp-heading').removeClass('pp-center'); 2100 $('.fl-node-5be0ca0d57063 .pp-heading-separator, .fl-node-5be0ca0d57063 .pp-heading').addClass('pp-tablet-center'); 2101 } 2102 2103 if( $(window).width() <= 480 ) { 2104 $('.fl-node-5be0ca0d57063 .pp-heading-separator, .fl-node-5be0ca0d57063 .pp-heading').removeClass('pp-center'); 2105 $('.fl-node-5be0ca0d57063 .pp-heading-separator, .fl-node-5be0ca0d57063 .pp-heading').addClass('pp-mobile-center'); 2106 } 2107 2108})(jQuery); 2109(function($) { 2110 2111 if($(window).width() <= 768 && $(window).width() >= 481 ) { 2112 $('.fl-node-3nfs6l98p5jo .pp-heading-separator, .fl-node-3nfs6l98p5jo .pp-heading').removeClass('pp-center'); 2113 $('.fl-node-3nfs6l98p5jo .pp-heading-separator, .fl-node-3nfs6l98p5jo .pp-heading').addClass('pp-tablet-'); 2114 } 2115 2116 if( $(window).width() <= 480 ) { 2117 $('.fl-node-3nfs6l98p5jo .pp-heading-separator, .fl-node-3nfs6l98p5jo .pp-heading').removeClass('pp-center'); 2118 $('.fl-node-3nfs6l98p5jo .pp-heading-separator, .fl-node-3nfs6l98p5jo .pp-heading').addClass('pp-mobile-'); 2119 } 2120 2121})(jQuery); 2122(function($){ 2123 })(jQuery); 2124(function($){ 2125 })(jQuery); 2126 2127;/** 2128 * This file should contain frontend logic for 2129 * all module instances. 2130 */ 2131/* Start Layout Custom JS */ 2132jQuery(document).ready(function($){ 2133 var element_position = $('#inner-banner-text').offset().top; 2134 var screen_height = $(window).height(); 2135 var activation_offset = 0.5;//determines how far up the the page the element needs to be before triggering the function 2136 var activation_point = element_position - (screen_height * activation_offset); 2137 var max_scroll_height = $('body').height() - screen_height - 5;//-5 for a little bit of buffer 2138 2139 //Does something when user scrolls to it OR 2140 //Does it when user has reached the bottom of the page and hasn't triggered the function yet 2141 $(window).on('scroll', function() { 2142 var y_scroll_pos = window.pageYOffset; 2143 2144 var element_in_view = y_scroll_pos > activation_point; 2145 var has_reached_bottom_of_page = max_scroll_height <= y_scroll_pos && !element_in_view; 2146 2147 if(element_in_view || has_reached_bottom_of_page) { 2148 $("header").addClass("fl-theme-builder-header-scrolled"); 2149 } 2150 if(jQuery(window).scrollTop() == 0) { 2151 $("header").removeClass("fl-theme-builder-header-scrolled"); 2152 } 2153 }); 2154}); 2155/* End Layout Custom JS */ 2156 2157 2158 2159var pp_menu_ikswe84c16zd; 2160(function($) { 2161 2162 pp_menu_ikswe84c16zd = new PPAdvancedMenu({ 2163 id: 'ikswe84c16zd', 2164 type: 'vertical', 2165 mobile: 'expanded', 2166 menuPosition: 'below', 2167 breakpoints: { 2168 large: 1200, 2169 medium: 992, 2170 small: 768, 2171 custom: 768 }, 2172 mobileBreakpoint: 'mobile', 2173 mediaBreakpoint: '768', 2174 mobileMenuType: 'default', 2175 offCanvasDirection: 'left', 2176 fullScreenAnimation: '', 2177 isBuilderActive: false }); 2178 2179})(jQuery); 2180(function($) { 2181 2182 if($(window).width() <= 768 && $(window).width() >= 481 ) { 2183 $('.fl-node-5hf13raen7bs .pp-heading-separator, .fl-node-5hf13raen7bs .pp-heading').removeClass('pp-left'); 2184 $('.fl-node-5hf13raen7bs .pp-heading-separator, .fl-node-5hf13raen7bs .pp-heading').addClass('pp-tablet-center'); 2185 } 2186 2187 if( $(window).width() <= 480 ) { 2188 $('.fl-node-5hf13raen7bs .pp-heading-separator, .fl-node-5hf13raen7bs .pp-heading').removeClass('pp-left'); 2189 $('.fl-node-5hf13raen7bs .pp-heading-separator, .fl-node-5hf13raen7bs .pp-heading').addClass('pp-mobile-center'); 2190 } 2191 2192})(jQuery); 2193 2194;(function($) { 2195 PPGallery = function(settings) 2196 { 2197 this.settings = settings; 2198 this.id = settings.id; 2199 this.nodeClass = '.fl-node-' + settings.id; 2200 this.wrapperClass = this.nodeClass + ' .pp-photo-gallery'; 2201 this.itemClass = this.wrapperClass + ' .pp-photo-gallery-item'; 2202 this.cachedItems = false;
2203 this.lightboxAnimation = settings.lightboxAnimation, 2204 this.transitionEffect = settings.transitionEffect, 2205 this.photosIds = settings.settings.gallery_photos, 2206 this.cachedIds = []; 2207 this.isBuilderActive = settings.isBuilderActive; 2208 2209 // Check if the module instance is in loop. 2210 if ( $( this.nodeClass ).length > 1 ) { 2211 var count = 1; 2212 $( this.nodeClass ).each( function() { 2213 $( this ).attr( 'data-pp-gallery-id', count ); 2214 count++; 2215 } ); 2216 } 2217 2218 if ( this._hasItem() ) { 2219 this._initLayout(); 2220 } 2221 }; 2222 2223 PPGallery.prototype = { 2224 2225 settings : {}, 2226 nodeClass : '', 2227 wrapperClass : '', 2228 itemClass : '', 2229 gallery : null, 2230 cachedItems : false, 2231 cachedIds : [], 2232 isBuilderActive : false, 2233 2234 _hasItem: function() 2235 { 2236 return $(this.itemClass).length > 0; 2237 }, 2238 2239 _initLayout: function() 2240 { 2241 if ( this.settings.layout === 'masonry' ) { 2242 this._masonryLayout(); 2243 } 2244 2245 if ( this.settings.layout === 'justified' ) { 2246 this._justifiedLayout(); 2247 } 2248 2249 if ( this.settings.lightbox ) { 2250 this._initLightbox(); 2251 } 2252 2253 if ( this.settings.pagination && 'none' !== this.settings.pagination ) { 2254 this._initPagination(); 2255 } 2256 2257 $(this.itemClass).css('visibility', 'visible'); 2258 }, 2259 2260 _masonryLayout: function() 2261 { 2262 var wrap = $(this.wrapperClass); 2263 2264 var isotopeData = { 2265 itemSelector: '.pp-gallery-masonry-item', 2266 percentPosition: true, 2267 transitionDuration: '0.6s', 2268 masonry: { 2269 columnWidth: '.pp-gallery-masonry-item', 2270 gutter: '.pp-photo-space' 2271 }, 2272 originLeft: $('body').hasClass( 'rtl' ) ? false : true 2273 }; 2274 2275 wrap.imagesLoaded( function() { 2276 wrap.isotope(isotopeData); 2277 $( this.wrapperClass ).css( "opacity", 1 ); 2278 }.bind( this ) ); 2279 }, 2280 2281 _justifiedLayout: function() 2282 { 2283 var wrap = $(this.wrapperClass); 2284 var opts = { 2285 margins: this.settings.spacing, 2286 rowHeight: this.settings.rowHeight, 2287 maxRowHeight: this.settings.maxRowHeight, 2288 lastRow: this.settings.lastRow 2289 }; 2290 2291 wrap.imagesLoaded( function () { 2292 $(this.wrapperClass).justifiedGallery(opts).on('jg.complete jg.resize', function(e) { 2293 var controller = $(this).data('jg.controller'); 2294 if ( controller.rows === 0 && controller.settings.lastRow === 'hide' ){ 2295 opts.lastRow = 'justify'; 2296 2297 $(this).justifiedGallery(opts); 2298 // Workaround for Beaver Builder node animation that does not work when 2299 // the gallery has justified layout. 2300 $(window).trigger('resize'); 2301 } 2302 }); 2303 $( this.wrapperClass ).css( "opacity", 1 ); 2304 }.bind( this ) ); 2305 }, 2306 2307 _initLightbox: function() 2308 { 2309 if ( ! this.settings.lightbox ) { 2310 return; 2311 } 2312 2313 var id = this.id; 2314 var axis = 'default' === this.settings.lightboxThumbsPosition ? 'y' : 'x'; 2315 var options = { 2316 modal : false, 2317 baseClass : 'fancybox-' + id + ' pp-gallery-fancybox pp-gallery-fancybox-axis-' + axis, 2318 buttons : this.settings.lightboxToolbarButtons.split(','), 2319 wheel : false, 2320 afterLoad : function(current, previous) { 2321 $('.fancybox-' + id).find('.fancybox-bg').addClass('fancybox-' + id + '-overlay'); 2322 2323 $(document).trigger( 'pp_gallery_lightbox_after_load', [$('.fancybox-' + id), id] ); 2324 }, 2325 animationEffect: this.lightboxAnimation, 2326 transitionEffect: this.transitionEffect, 2327 thumbs: { 2328 autoStart: this.settings.lightboxThumbs, // Display thumbnails on opening 2329 hideOnClose: true, // Hide thumbnail grid when closing animation starts 2330 parentEl: ".fancybox-container", // Container is injected into this element 2331 axis: axis // Vertical (y) or horizontal (x) scrolling 2332 }, 2333 mobile: { 2334 clickOutside : 'close', 2335 clickSlide: function (current, event) { 2336 return "close"; 2337 } 2338 }, 2339 }; 2340 2341 if ( this.settings.lightboxCaption ) { 2342 var source = this.settings.lightboxCaptionSource; 2343 options.caption = function(instance, item) { 2344 var caption = 'title' === source ? $(this).attr('title') : $(this).data('caption') || ''; 2345 var desc = $(this).data('description') || ''; 2346 if (desc !== '') { 2347 caption += '<div class="pp-fancybox-desc">' + desc + '</div>'; 2348 } 2349 return caption; 2350 }; 2351 } else { 2352 options.caption = ''; 2353 } 2354 2355 $(this.nodeClass).trigger( 'pp_gallery_lightbox_before_load', [options] ); 2356 2357 $(this.nodeClass).each( function() { 2358 $(this).find('a[data-fancybox="images"]').fancybox( options ); 2359 } ); 2360 }, 2361 2362 _initPagination: function() 2363 { 2364 var self = this; 2365 2366 $(this.itemClass).each(function() { 2367 self.cachedIds.push( $(this).data('item-id') ); 2368 }); 2369 2370 if ( 'load_more' === this.settings.pagination ) { 2371 this._initLoadMore(); 2372 } 2373 if ( 'scroll' === this.settings.pagination && ! this.isBuilderActive ) { 2374 this._initScroll(); 2375 } 2376 }, 2377 2378 _initLoadMore: function() 2379 { 2380 var self = this; 2381 2382 $(this.nodeClass).find( '.pp-gallery-load-more' ).off('click').on('click', function(e) { 2383 e.preventDefault(); 2384 2385 var $this = $(this); 2386 $this.addClass('disabled loading'); 2387 2388 if ( self.cachedItems.length === self.photosIds.length ) { 2389 self._renderItems(); 2390 } else { 2391 self._getAjaxPhotos(); 2392 } 2393 }); 2394 }, 2395 2396 _initScroll: function() { 2397 var self = this, 2398 galleryOffset = $(this.wrapperClass).offset(), 2399 galleryHeight = $(this.wrapperClass).height(), 2400 winHeight = $(window).height(), 2401 loaded = false;
2402 2403 $(window).on('scroll', function() { 2404 if ( loaded ) { 2405 return; 2406 } 2407 var scrollPos = $(window).scrollTop(); 2408 2409 if ( scrollPos >= galleryOffset.top - ( winHeight - galleryHeight ) ) { 2410 if ( $(self.nodeClass).find('.pp-gallery-pagination.loaded').length > 0 ) { 2411 loaded = true; 2412 $(self.nodeClass).find('.pp-gallery-loader').hide(); 2413 } else { 2414 loaded = true; 2415 $(self.wrapperClass).imagesLoaded(function() { 2416 setTimeout(function() { 2417 //$(self.nodeClass).find('.pp-gallery-loader').show(); 2418 if ( self.cachedItems.length === self.photosIds.length ) { 2419 self._renderItems(); 2420 galleryHeight = $(self.wrapperClass).height(); 2421 } else { 2422 self._getAjaxPhotos(function() { 2423 galleryHeight = $(self.wrapperClass).height(); 2424 }); 2425 } 2426 }, 600); 2427 }); 2428 } 2429 } 2430 }); 2431 2432 $(this.wrapperClass).on('gallery.rendered', function() { 2433 if ( $(self.nodeClass).find('.pp-gallery-pagination.loaded').length === 0 ) { 2434 loaded = false; 2435 galleryHeight = $(self.wrapperClass).height(); 2436 } 2437 }); 2438 }, 2439 2440 _getAjaxPhotos: function(callback) { 2441 var self = this; 2442 2443 var data = { 2444 pp_action: 'pp_gallery_get_photos', 2445 node_id: self.settings.id, 2446 images_per_page: self.settings.perPage, 2447 cached_ids: self.cachedIds, 2448 settings: self.settings.settings 2449 }; 2450 2451 if ( self.settings.templateId ) { 2452 data['template_id'] = self.settings.templateId; 2453 } 2454 if ( self.settings.templateNodeId ) { 2455 data['template_node_id'] = self.settings.template_node_id; 2456 } 2457 2458 $(this.nodeClass).find('.pp-gallery-loader').show(); 2459 2460 $.ajax({ 2461 type: 'post', 2462 url: window.location.href.split( '#' ).shift(), 2463 data: data, 2464 async: true, 2465 success: function(response) { 2466 response = JSON.parse(response); 2467 2468 if ( ! response.error ) { 2469 self.cachedItems = response.data; 2470 self._renderItems(); 2471 if ( 'function' === typeof callback ) { 2472 callback(); 2473 } 2474 $(self.nodeClass).find('.pp-gallery-loader').hide(); 2475 } 2476 } 2477 }); 2478 }, 2479 2480 _renderItems: function() 2481 { 2482 $(this.nodeClass).find( '.pp-gallery-load-more' ).removeClass('disabled loading'); 2483 $(this.nodeClass).find('.pp-gallery-loader').show(); 2484 2485 var self = this, 2486 wrap = $(self.wrapperClass); 2487 2488 if ( self.cachedItems ) { 2489 var count = 1; 2490 var items = []; 2491 2492 $(self.cachedItems).each(function() { 2493 var id = $(this).data('item-id'); 2494 2495 if ( -1 === $.inArray( id, self.cachedIds ) ) { 2496 if ( count <= self.settings.perPage ) { 2497 self.cachedIds.push( id ); 2498 items.push( this ); 2499 count++; 2500 } 2501 } 2502 }); 2503 2504 if ( items.length > 0 ) { 2505 items = $(items).hide(); 2506 2507 // Grid layout. 2508 if ( self.settings.layout === 'grid' ) { 2509 wrap.append( items.fadeIn() ); 2510 } 2511 2512 // Justified layout. 2513 if ( self.settings.layout === 'justified' ) { 2514 wrap.append( items.fadeIn() ); 2515 self._justifiedLayout(); 2516 } 2517 2518 // Masonry layout. 2519 if ( self.settings.layout === 'masonry' ) { 2520 items = items.show(); 2521 wrap.isotope('insert', items); 2522 wrap.find('.pp-photo-space').remove(); 2523 wrap.append('<div class="pp-photo-space"></div>'); 2524 wrap.imagesLoaded( function () { 2525 setTimeout(function () { 2526 wrap.isotope('layout'); 2527 }, 500); 2528 }.bind( this ) ); 2529 } 2530 2531 this._initLightbox(); 2532 2533 wrap.trigger('gallery.rendered'); 2534 } 2535 2536 if ( self.cachedIds.length === self.photosIds.length ) { 2537 $(self.nodeClass).find('.pp-gallery-pagination').addClass('loaded').hide(); 2538 $(self.nodeClass).find('.pp-gallery-loader').hide(); 2539 } 2540 } 2541 } 2542 }; 2543 2544})(jQuery); 2545(function($) { 2546 2547 $('.fl-node-e3xm0c7twk4z .pp-photo-gallery-item').find('.pp-photo-gallery-caption-below').parent().addClass('has-caption'); 2548 2549 var options = { 2550 id: 'e3xm0c7twk4z', 2551 layout: 'grid', 2552 gutter: 5, 2553 spacing: 5, 2554 columns: 5, 2555 rowHeight: 120, 2556 lastRow: 'nojustify', 2557 lightbox: false, 2558 lightboxToolbarButtons: 'zoom,slideShow,fullScreen,close', 2559 lightboxThumbs: false, 2560 lightboxThumbsPosition: 'default', 2561 lightboxCaption: true, 2562 lightboxCaptionSource: 'title', 2563 lightboxAnimation: 'zoom', 2564 transitionEffect: 'fade', 2565 pagination: 'none', 2566 perPage: 6, 2567 settings: {"gallery_layout":"grid","gallery_photos":[14176,12434],"photo_size":"full","photo_order":"normal","align_items":"no","show_captions":"no","click_action":"none","custom_link_target":"_self","custom_link_nofollow":"yes","hover_effects":"none","image_animation_speed":"300","overlay_effects":"none","overlay_animation_speed":"300","icon":"0","overlay_icon":"","photo_grid_count":"5","photo_grid_count_large":"","photo_grid_count_medium":"","photo_grid_count_responsive":"","photo_spacing":"5","justified_spacing":"5","row_height":"120","max_row_height":"0","last_row":"nojustify","lightbox_animation":"zoom","transition_effect":"fade","lightbox_image_size":"full","lightbox_caption":"yes","lightbox_caption_source":"title","lightbox_description":"yes","toolbar_buttons":["zoom","slideShow","fullScreen","close"],"show_lightbox_thumb":"no","thumbs_position":"default","photo_border_group":{"style":"none","color":"","width":{"top":"1","right":"1","bottom":"1","left":"1"}
2567,"radius":{"top_left":"0","top_right":"0","bottom_left":"0","bottom_right":"0"},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"photo_border_group_large":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"photo_border_group_medium":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"photo_border_group_responsive":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"photo_padding":"","photo_padding_large":"","photo_padding_medium":"","photo_padding_responsive":"","show_image_shadow_hover":"no","image_shadow_hover":{"vertical":"0","horizontal":"2","blur":"15","spread":"0"},"image_shadow_color_hover":"rgba(0, 0, 0, 0.5)","image_shadow_hover_speed":"300","overlay_type":"solid","overlay_color":"","overlay_primary_color":"","overlay_secondary_color":"","overlay_color_opacity":"70","overlay_border_width":"","overlay_border_color":"","overlay_spacing":"","overlay_icon_size":"30","overlay_icon_bg_color":"","overlay_icon_color":"","overlay_icon_radius":"","overlay_icon_horizotal_padding":"","overlay_icon_vertical_padding":"","lightbox_overlay_color":"rgba(0,0,0,0.5)","caption_bg_color":"","caption_alignment":"center","caption_typography":{"font_family":"Default","font_weight":"default","font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"caption_typography_large":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"caption_typography_medium":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"caption_typography_responsive":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"caption_color":"","pagination":"none","images_per_page":"6","load_more_text":"Load More","load_more_bg_color":"eee","load_more_bg_hover_color":"","load_more_text_color":"","load_more_text_hover_color":"","load_more_typography":{"font_family":"Default","font_weight":"default","font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"load_more_typography_large":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"load_more_typography_medium":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"load_more_typography_responsive":{"font_size":{"length":"","unit":"px"},"line_height":{"length":"","unit":""},"text_align":"","letter_spacing":{"length":"","unit":"px"},"text_transform":"","text_decoration":"","font_style":"","font_variant":"","text_shadow":{"color":"","horizontal":"","vertical":"","blur":""}},"load_more_border":{"style":"none","color":"","width":{"top":"","right":"","bottom":"","left":""}
2567,"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"load_more_border_large":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"load_more_border_medium":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"load_more_border_responsive":{"style":"","color":"","width":{"top":"","right":"","bottom":"","left":""},"radius":{"top_left":"","top_right":"","bottom_left":"","bottom_right":""},"shadow":{"color":"","horizontal":"","vertical":"","blur":"","spread":""}},"load_more_border_hover_color":"","load_more_margin_top":"","load_more_margin_top_large":"","load_more_margin_top_medium":"","load_more_margin_top_responsive":"","load_more_width":"","load_more_width_unit":"px","load_more_width_large":"","load_more_width_large_unit":"px","load_more_width_medium":"","load_more_width_medium_unit":"px","load_more_width_responsive":"","load_more_width_responsive_unit":"px","load_more_alignment":"left","load_more_alignment_large":"","load_more_alignment_medium":"","load_more_alignment_responsive":"","responsive_display":"desktop,large,medium,mobile","visibility_display":"","visibility_user_capability":"","visibility_logic":"[]","animation":{"style":"","delay":"0.0","duration":"1"},"container_element":"div","id":"footer-logo-row","class":"","node_label":"","custom_attributes":[{"key":"","value":"","target":"wrapper","selector":"","0":""}],"export":"","import":"","caption_padding_top":"0","caption_padding_top_large":"","caption_padding_top_medium":"","caption_padding_top_responsive":"","caption_padding_right":"0","caption_padding_right_large":"","caption_padding_right_medium":"","caption_padding_right_responsive":"","caption_padding_bottom":"0","caption_padding_bottom_large":"","caption_padding_bottom_medium":"","caption_padding_bottom_responsive":"","caption_padding_left":"0","caption_padding_left_large":"","caption_padding_left_medium":"","caption_padding_left_responsive":"","load_more_padding_top":"10","load_more_padding_top_large":"","load_more_padding_top_medium":"","load_more_padding_top_responsive":"","load_more_padding_right":"10","load_more_padding_right_large":"","load_more_padding_right_medium":"","load_more_padding_right_responsive":"","load_more_padding_bottom":"10","load_more_padding_bottom_large":"","load_more_padding_bottom_medium":"","load_more_padding_bottom_responsive":"","load_more_padding_left":"10","load_more_padding_left_large":"","load_more_padding_left_medium":"","load_more_padding_left_responsive":"","margin_top":"5","margin_unit":"px","margin_top_large":"","margin_large_unit":"px","margin_top_medium":"","margin_medium_unit":"px","margin_top_responsive":"","margin_responsive_unit":"px","margin_right":"","margin_right_large":"","margin_right_medium":"","margin_right_responsive":"","margin_bottom":"5","margin_bottom_large":"","margin_bottom_medium":"","margin_bottom_responsive":"","margin_left":"","margin_left_large":"","margin_left_medium":"","margin_left_responsive":"","type":"pp-gallery","bb_css_code":"","bb_js_code":"","show_image_shadow":"no","image_shadow":{"vertical":"0","horizontal":"2","blur":"8","spread":"0"},"image_shadow_color":"000000","image_shadow_opacity":"30","caption_font_size_toggle":"default","caption_custom_font_size":"","caption_custom_font_size_medium":"","caption_custom_font_size_responsive":"","photo_data":{"14176":{"id":14176,"alt":"","caption":"","description":"","title":"30-Year-Anniv","sizes":{"height":54,"width":141},"src":"https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/30-Year-Anniv.png","link":"https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/30-Year-Anniv.png","srcset":false},"12434":{"id":12434,"alt":"","caption":"","description":"","title":"jeff-mowatt-pure_colored","sizes":{"height":100,"width":479},"src":"https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/jeff-mowatt-pure_colored.png","link":"https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/jeff-mowatt-pure_colored.png","srcset":"https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/jeff-mowatt-pure_colored.png 479w, https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/jeff-mowatt-pure_colored-300x63.png 300w, https:\/\/jeffmowatt.com\/wp-content\/uploads\/2018\/10\/jeff-mowatt-pure_colored-150x31.png 150w"}},"connections":{"gallery_photos":"","image_shadow_color_hover":"","overlay_color":"","overlay_primary_color":"","overlay_secondary_color":"","overlay_border_color":"","overlay_icon_bg_color":"","overlay_icon_color":"","lightbox_overlay_color":"","caption_bg_color":"","caption_color":""},"responsive_display_filtered":true}, 2568 isBuilderActive: false }; 2569 2570 window['pp_gallery_' + options.id] = new PPGallery(options); 2571 2572 // expandable row fix. 2573 var state = 0; 2574 $(document).on('pp_expandable_row_toggle', function(e, selector) { 2575 if ( selector.is('.pp-er-open') && state === 0 && selector.parent().find( '.fl-node-e3xm0c7twk4z' ).length > 0 ) { 2576 new PPGallery(options); 2577 state = 1; 2578 } 2579 }); 2580 2581 // accordion fix 2582 var accordion_state = false;
2583 $(document).on('pp-accordion-toggle-complete', function(e, selector) { 2584 if ( ! accordion_state ) { 2585 new PPGallery(options); 2586 accordion_state = true; 2587 } 2588 }); 2589 2590 // tabs fix 2591 $(document).on('pp-tabs-switched', function(e, selector) { 2592 if ( selector.find('.pp-photo-gallery-content').length > 0 ) { 2593 if ( selector.find('.pp-photo-gallery').data('isotope') ) { 2594 selector.find('.pp-photo-gallery').isotope('layout'); 2595 } else { 2596 new PPGallery(options); 2597 tabs_state = true; 2598 } 2599 } 2600 }); 2601})(jQuery); 2602 2603var pp_menu_azjuc9hpm8o4; 2604(function($) { 2605 2606 pp_menu_azjuc9hpm8o4 = new PPAdvancedMenu({ 2607 id: 'azjuc9hpm8o4', 2608 type: 'vertical', 2609 mobile: 'expanded', 2610 menuPosition: 'below', 2611 breakpoints: { 2612 large: 1200, 2613 medium: 992, 2614 small: 768, 2615 custom: 768 }, 2616 mobileBreakpoint: 'mobile', 2617 mediaBreakpoint: '768', 2618 mobileMenuType: 'default', 2619 offCanvasDirection: 'left', 2620 fullScreenAnimation: '', 2621 isBuilderActive: false }); 2622 2623})(jQuery); 2624 2625/* Start Layout Custom JS */ 2626 2627/* End Layout Custom JS */ 2628 2629
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.