1Vue.config.devtools = true; 2var filters = new Vue({ 3 el: '#search', 4 data: { 5 search: { 6 eco: '', 7 brand: '', 8 cat: '', 9 location: '', 10 color: '', 11 design:'', 12 fit: '', 13 price: '', 14 size: '' 15 }, 16 changeButton: { 17 eco: 0, 18 brand: 0, 19 cat: 0, 20 location: 0, 21 color: 0, 22 design:0, 23 fit: 0, 24 price: 1, 25 size: 0, 26 sale: 0 27 }, 28 showFilterButton: 0, 29 menus: {}, 30 multibox: { 31 rows: [] 32 }, 33 searchMultibox: { 34 rows: [] 35 }, 36 products: { 37 totalItemCount: 0, 38 sort: { 39 0: 'NowoÅci' 40 }, 41 showPagination: 0, 42 showSort: 0, 43 showProduct: 0 44 }, 45 filterPrice: { 46 from: 0, 47 to: 0 48 }, 49 checkedFilters: {}, 50 banners: [], 51 swipers: [], 52 isHover: false, 53 isMobile: (typeof isMobile !== typeof undefined) ? isMobile : 0, 54 enableGallery: (typeof enableGallery !== typeof undefined) ? enableGallery : 0, 55 gallery: false, 56 lastDisplayedBannerIndex: -1, 57 testCount: 0, 58 salePriceCheckbox: 1, 59 sortSelected: '', 60 checkedButton: 0, 61 runningAjaxes: [], 62 multiboxCols: 0, 63 //activeFilters: new Vue.FilterList(), 64 activeFilters: {}, 65 lastFilters: [], 66 openedFilter:'', 67 searchUrl: '', 68 rawUrl: '', 69 more: 0 70 }, 71 computed: { 72 productsSort: function () { 73 return this.products.sort; 74 }, 75 menusRows: function () { 76 return this.menus.rows; 77 } 78 }, 79 watch:{ 80 productsSort: function () { 81 this.$nextTick(function () { 82 try {$('#filters').parents('#search').find('.selectpicker2').selectpicker();} 83 catch (ex) {console.log(['no selectpicker plugin']);} 84 }); 85 }, 86 menusRows: function () { 87 this.$nextTick(function () { 88 try { 89 // $('ul.filter .collapse') 90 // .on('show.bs.collapse',function () { 91 // console.log($(this).parents('ul.filter').eq(0).addClass('collapse-open')); 92 // }) 93 // .on('hide.bs.collapse',function () { 94 // $(this).parents('ul.filter').eq(0).removeClass('collapse-open'); 95 // }); 96 } 97 catch (ex) {console.log(['no selectpicker plugin']);} 98 }); 99 } 100 }, 101 mounted: function() { 102 var _self = this; 103 _self.getMenus(); 104 _self.checkSale(); 105 106 $('.background-filter').show(); 107 $('.loader-filter').show(); 108 109 window.onpopstate = function(event) { 110 // this.priceRange(this.menus.price); 111 this.$nextTick(function(){ 112 this.setUrl( window.location.search.substr(1) , false, true ); 113 }); 114 return; 115 }.bind(this); 116 117 /*$(window).scroll(function() { 118 if ( ( $(window).scrollTop() > $(window).height() * 1.8 ) && ( $(window).scrollTop() < $(window).height() * 1.85 ) ) { 119 _self.getMoreProducts(); 120 } 121 });*/ 122 123 $('#filters form').on( 'submit', function (event) { 124 event.preventDefault(); 125 _self.sendForm(); 126 }); 127 128 $(document).click( function (event) { 129 130 var clickover = $(event.target); 131 var _openedShow = $(".collapse").hasClass("show"); 132 var _openedMultiShow = $(".multibox").hasClass("show"); 133 if($(event.target).parents('.collapse.open,.multibox.show').length) return; 134
135 if($('#filters .singlebox div[id].collapse.open, #filters .multibox.show').length && this.filtersChaged() && this.openedFilter.length) 136 { 137 this.closeCollapse(this.openedFilter); 138 } 139 140 $('.collapse.open').collapse('hide'); 141 $(".multibox.show").each(function(){ 142 $(this).removeClass('show').addClass('d-none').siblings().css('display','block'); 143 }); 144 } 145 .bind(this) 146 ); 147 148 var filtersForm = $('#filters'); 149 filtersForm.on('shown.bs.collapse', '.collapse', function () { 150 $(this).find('.scroll-600').css({ 151 'overflow': 'visible', 152 'padding-right': '14px' 153 }).find('.nano').css({ 154 'margin-right': '-10px', 155 'padding-right': '10px' 156 }).nanoScroller({alwaysVisible:true}).find('.nano-content').css('padding-right','10px'); 157 }).on('show.bs.collapse reinit.nano','.collapse', function () { 158 var sixH = $(this).find('.scroll-600'); 159 // wyÅÄ czone - zgÅoszone przyz klienta jako bÅÄ d 160 // sixH.css({ 161 // 'height': (window.innerHeight - 60) + 'px' 162 // }); 163 setTimeout(function () { sixH.height(sixH.find('.nano-content > *').height() + 30); },0); 164 }).on('shown.bs.collapse hidden.bs.collapse', '.filter', '.collapse', function () { 165 $(this).parents('.scroll-600').parents('.collapse').eq(0).trigger('reinit.nano'); 166 }).on('show.bs.collapse ajax.end', 'form, .collapse', function () { 167 var slider = this.filters.find('.price-slider').filter(function() {return $(this).data('ionRangeSlider');}).data('ionRangeSlider'); 168 // console.log(['range baaam!',slider,{ 169 // 'min': this.vue.menus.price.max.from, 170 // 'max': this.vue.menus.price.max.to, 171 // 'from': this.vue.menus.price.start.from, 172 // 'to': this.vue.menus.price.start.to 173 // }]); 174 if(slider) slider.update({ 175 'min': this.vue.menus.price.max.from, 176 'max': this.vue.menus.price.max.to, 177 'from': this.vue.menus.price.start.from, 178 'to': this.vue.menus.price.start.to 179 }); 180 }.bind({'vue':this,'filters':filtersForm})); 181 182 var imagesToLoad = []; 183 var infoResponse = []; 184 var mouseEnterXhrs; 185 186 var selectWidth; 187 188 // $( 'body' ).on('click', '.category-product-absolute [data-target=color]', function( e ) { 189 190 $( 'body' ).on('mouseenter', '.category-product-absolute [data-target=color]', function( e ) { 191 e.preventDefault(); 192 193 var id = $(this).data().id; 194 var product_box = $(this).closest(".relative-category-product"); 195 var product = this; 196 // product_box.find('[data-target=add-1]').attr('data-id',''); 197 var activeColorBox = product_box.find('.category-product-absolute .color-box.active'); 198 //console.log(activeColorBox) 199 if (!product_box.data('original')) { 200 product_box.data('original', { 201 src: product_box.find('.category-product-absolute .product-image .image img').attr('src'), 202 href: product_box.find('.category-product-absolute .product-image .url').attr('href'), 203 label: product_box.find('.category-product-absolute .product-label').html(), 204 price: product_box.find('.category-product-absolute .product-price').html(), 205 sizes: product_box.find('.sizes').html(), 206 activeColor: activeColorBox, // tylko kolor 207 product: product_box.find('.category-product-absolute .color-box.active').closest('[data-target=color]').get(0) 208 }); 209 } 210 211 if(imagesToLoad[id]) { imagesToLoad[id].onload = function () {}; } 212 213 var image = $($(this).data('image'));
214 215 var img = new Image(); 216 var imgSource = image.attr('src') || image.find('img[src]').eq(0).attr('src'); 217 img.onload = function () { 218 $(this.product_box).find('.category-product-absolute .product-image .image').find('img').attr('src', imgSource ); //DISABLED 219 //$(this.product_box).find(".category-product-absolute .product-image .image").html(this.image); //DISABLED 220 console.log( 'onload', imgSource, $(this.product_box).find('.category-product-absolute .product-image .image').find('img') ); 221 } 222 .bind({'product_box':product_box,'image':image}); 223 224 img.src = imgSource; 225 226 imagesToLoad[id] = img; 227 228 if(img.complete) { 229 img.onload(); 230 } 231 232 //$(product_box).find(".category-product-absolute .product-image .image").html($(this).data("image")); 233 $(product_box).find('.category-product-absolute .product-image .url').attr('href', $(this).attr('href')); 234 $(product_box).find('.category-product-absolute .product-label').html($(this).data('label')); 235 $(product_box).find('.category-product-absolute .product-price').html($(this).data('price')); 236 237 $(product_box).find(".color-box").removeClass("active"); 238 $(this).find(".color-box").addClass("active"); 239 240 _self.showButtons( product ); 241 var url = _self.getUrl(); 242 url+= !_self.isLogged() ? '/info/id/' : '/rawInfo/id/'; 243 244 try {mouseEnterXhrs.clear();} catch (ex) {} 245 246 mouseEnterXhrs = $.ajax({ 247 url : url + $(this).data("id") + '/mod/sizes', 248 type : "GET", 249 // data : { mod: "sizes" }, 250 dataType : "html", 251 success : function( data ) { 252 var d = $(data).find('select.sizes'); 253 data = d.length ? d : data; 254 $(product_box).find(".sizes").html( data ); 255 // var wrapper = $(product_box).find(".sizes + .btn").parent(); 256 // wrapper.find(".sizes").selectpicker('destroy'); 257 // wrapper.find(".sizes").remove(); 258 // wrapper.prepend(data); 259 _self.showButtons( product ); 260 // $(product_box).find('.selectpicker').addClass('sizes').selectpicker(); 261 }.bind(this) 262 }); 263 }) 264 .on('mouseleave', '.relative-category-product', function( e ) { 265 var product_box = $(this); 266 267 var original = product_box.data('original'); 268 if (original) { 269 product_box.find('.category-product-absolute .product-image .image img').attr('src', original.src); 270 product_box.find('.category-product-absolute .product-image .url').attr('href', original.href); 271 product_box.find('.category-product-absolute .product-label').html(original.label); 272 product_box.find('.category-product-absolute .product-price').html(original.price); 273 product_box.find('.sizes').html(original.sizes); 274 console.log(JSON.stringify(original, null, 2)); 275 276 product_box.find(".color-box").removeClass("active"); 277 if (original.activeColor) { 278 original.activeColor.addClass("active"); 279 280 } 281 if (original.product) { 282 _self.showButtons(original.product); 283 } 284 285 } 286 287 product_box.removeData('original'); 288 }) 289 .on("click", ".category-product-absolute [data-target=size]", function( e ) { 290 291 if( $(this).closest("a").hasClass( "no-javascript" ) ) return false; 292 e.preventDefault(); 293 294 var $pk = $( this ).data( "id" ); 295 296 var product_box = $(this).closest(".relative-category-product"); 297 var product = this; 298 299 $(product_box).find(".size-box").removeClass("active"); 300 $(this).addClass("active"); 301 302 if( $(this).data("price").length ) 303 $(product_box).find(".category-product-absolute .product-price").html($(this).data("price")); 304 305 $(product_box).find("[data-target=add-1]").data( "id", $pk ); 306 $(product_box).find("[data-target=add-2]").data( "id", $pk ); 307 308 _self.showButtons( product ); 309 }) 310 .on('loaded.bs.select', '#search #products .sizes.bootstrap-select',function (ev) { 311 var wrapper = $(this); 312 var button = wrapper.find('.dropdown-toggle'); 313 selectWidth = button.css('width'); 314 button.css({ 315 'flex-basis': selectWidth, 316 'justify-content': 'space-between', 317 'min-wdth': selectWidth 318 }); 319 }) 320 .on('changed.bs.select','#search #products .sizes.bootstrap-select',function (ev) { 321 var wrapper = $(this); 322 var button = wrapper.find('.dropdown-toggle'); 323 button.css({ 324 'flex-basis': selectWidth, 325 'justify-content': 'space-between', 326 'min-wdth': selectWidth 327 }); 328 } ) 329 .on('change','#filters input[type="checkbox"]', function () { 330 if(this.checked) $(this).parents('label').eq(0).siblings('.collapse').collapse('show'); 331 }); 332 333 $( 'body' ).on( "click", "[data-target=add-1]" , function( e ) { 334 if(!website.config.baseUrl) return false; 335 e.preventDefault(); 336 337 website.basketAdd( this, e ); 338 return false; 339 340 } ).one('menus.run.once', function (e,data) { 341 if(!data) return; 342 var paths = []; 343 for (var i = 0, keys = Object.keys(data), key; key = keys[i]; i++ ) 344 { 345 if(data[key].rows) 346 paths.push(this.getPaths(data[key].rows, 1, 'checked', 'submenu','filterPath')); 347 } 348 for(var f = 0, item; item = paths[f]; f++) 349 { 350 if(item.length) 351 { 352 for(var k = 0, key, keys = Object.keys(item); key = keys[k]; k++) 353 { 354 item[key].expanded = 1; 355 } 356 } 357 } 358 }.bind(this)); 359 360 $( "[data-target=add-2]" ).live( "click", function( e ) { 361 if(!website.config.baseUrl) return false; 362 e.preventDefault(); 363 364 website.wishlistAdd( this, e ); 365 return false; 366 367 } ); 368 369 $( "body" ).on("mouseleave",'.category-product-wrapper', function () { 370 filters.onProductMouseLeave.call(this); 371 } ); 372 373 function alertMsg( $data ) { setTimeout( function() { this.fadeOut( "slow" ); }.bind( $( "#eCms-alert" ).css( { display : "none" } ).html( $data ).fadeIn( "slow" ) ), 5000 ); } 374 375 function reloadBasket() { 376 if(!website.config.baseUrl) return false; 377 $.ajax( { 378 url : website.config.baseUrl + '/' + website.config.pathLang + "/basket/ajaxRequest", 379 data : { ajax : { action : "reload" } }, 380 type : "POST", 381 dataType : "html", 382 success : function( data ) { $( "div[data-target=reload]" ).html( data ); }, 383 complete : function( data ) { } 384 } ); 385 } 386 }, 387 methods: { 388 handlePatchClick: function(event) { 389 const el = event.currentTarget; 390 391 const translated = el.dataset.alert || 'Kod zostaÅ skopiowany!'; 392 393 const strong = el.querySelector('strong'); 394 if (strong) { 395 const code = strong.innerText; 396 website.copyToClipboard?.(code); 397 398 const $el = $("#eCms-alert").css({ display: "none" }).html(`<div class="alert alert-success"><a class="close" data-dismiss="alert">Ã</a>${translated}</div>`).fadeIn("slow"); 399 setTimeout(() => { 400 $el.fadeOut("slow"); 401 }, 5000); 402 } 403 }, 404 showMore: function(){ 405 var menu = this.menus; 406 var _self = this; 407 408 $.each(menu, function(key, val) { 409 if( menu[key].hide ) { 410 _self.more = 2; 411 if( menu[key].hide!=2 ) menu[key].hide = 0; 412 } 413 }); 414 }, 415 hideMore: function(){ 416 var menu = this.menus; 417 var _self = this; 418 var counter = 0; 419 420 if( $("#filters-mobile").length ) return; 421 422 $.each(menu, function(key, val) { 423 counter++; 424 if( Object.keys(menu).length > 10 && counter >= 10 ) { 425 _self.more = 1; 426 if( menu[key].hide!=2 ) menu[key].hide = 1; 427 } 428 }); 429 }, 430 onProductClick: function(ev, productIndex){ 431 history.replaceState({productIndex: productIndex}, null); 432 }, 433 onProductMouseLeave: function() 434 { 435 $(this).parents('.mouse-over').removeClass('mouse-over'); 436 // var parent = $(this).find(".color-box.default-active").parent(); 437 $(this).find(".category-product-absolute .product-image .image img").attr( 'src', $(this).find('.product-image[data-hover-img]').attr('data-hover-img')); 438 }, 439 emitSelectEvent: function (el) { 440 441 if(this.$refs.selectNew) 442 { 443 var event = document.createEvent('MouseEvents'); 444 event.initMouseEvent('mousedown', true, true, window); 445 this.$refs.selectNew.dispatchEvent(event); 446 } 447 }, 448 rows: function (list,split,index,flat,disregardFilter) { 449 450 if(!list || !list.length) return []; 451 this.multiboxCols = this.multiboxCols || this.multiColumnCount(); 452 var ret = []; 453 for(var i = 0, item; item = list[i];i++ ) 454 { 455 if(item.display && ( item.filter || disregardFilter )) 456 {
457 ret.push(item); 458 if(flat && item.submenu) 459 { 460 for(var j = 0, child; child = item.submenu[j]; j++ ) 461 { 462 if(child.display && ( child.filter || disregardFilter ) ) 463 { 464 ret.push(child); 465 } 466 } 467 } 468 } 469 } 470 if(split !== undefined) 471 { 472 var ret2 = [], len = Math.ceil( ret.length / this.multiboxCols ); 473 for(var l = 0; l < this.multiboxCols; l++ ) 474 { 475 ret2.push(ret.slice(l*len,(l*len) + len)); 476 } 477 ret = ret2[index]; 478 } 479 return ret; 480 }, 481 getClassShowFilter: function() { 482 return 'd-none'; 483 }, 484 multiColumnCount: function(){ return window.innerWidth < 1024 ? 2 : 4; }, 485 checkEmpty: function( el ){ 486 487 if( !el['submenu'] ) return 0; 488 489 var displayed = this.filterArray( el.submenu, 1, 'display', 'submenu' ); 490 var checked = this.filterArray( el.submenu, 1, 'checked', 'submenu' ); 491 492 return displayed.length + checked.length; 493 }, 494 checkSale: function() { 495 var sale = document.getElementById('sale'); 496 497 if(sale) { 498 if(sale.value) 499 { 500 this.salePriceCheckbox = 0; 501 } 502 } 503 }, 504 getUrl: function() { 505 var url = $('#filters form').attr('data-action'); 506 return url; 507 }, 508 getPageUrl: function( page ) { 509 var url = this.searchUrl.length ? this.searchUrl : window.location.href; 510 url = url.replace(/[\?\&]p=[0-9]+/, ''); 511 512 if( page>1 ) 513 url = url + ( url.indexOf('?')>0 ? '&' : '?' ) + 'p='+page; 514 515 return url; 516 }, 517 getUrlSuffix: function() { 518 url = ''; 519 var logged = $('#filters form').attr('data-logged'); 520 if( logged=='1' ) url+= '?user'; 521 522 return url; 523 }, 524 isLogged: function() { 525 526 var logged = $('#filters form').attr('data-logged'); 527 528 if( logged=='1' ) return true; 529 else return false; 530 }, 531 countSelected: function ( index ) { 532 return this.changeButton[index] 533 }, 534 getUrlImage: function ( base, path, width, height, action ) { 535 var pathImage = path.split("."); 536 return base + "/assets/photo" + pathImage[0] + "-" + action + "-" + width + "-" + height + "." + pathImage[1]; 537 }, 538 round: function(n, k) 539 { 540 var factor = Math.pow(10, k); 541 return Math.round(n*factor)/factor; 542 }, 543 clearString: function(text) 544 { 545 return text.replace(/[\W_]+/g," ").trim(" ").replaceAll(" ", "-"); 546 }, 547 checkSelected: function (index) { 548 var selected = this.changeButton[index]; 549 550 if(selected == 0 || index == "price") 551 return false; 552 else 553 return true; 554 }, 555 showButtons: function ( el ) { 556 var product_box = $(el).closest(".relative-category-product"); 557 if( $(product_box).find(".colors .active").length < 1 || $(product_box).find(".sizes .active").length < 1 ) 558 { 559 //alertMsg( "<div class=\"alert alert-danger\">'.Yii::t( 'web/shop', 'Choose a size' ).'</div>" ); 560 //return false; 561 $( product_box ).find( ".buttons" ).removeClass( "active" ); 562 } 563 else 564 { 565 $( product_box ).find( "[data-target=add-1]" ).attr( "href", $(el).attr("href") ); 566 $( product_box ).find( "[data-target=add-2]" ).attr( "href", $(el).attr("href").replace("basket","wishlist") ); 567 $( product_box ).find( "[data-target=add-1]" ).data( "id", $(el).data("id") ); 568 $( product_box ).find( "[data-target=add-2]" ).data( "id", $(el).data("id") ); 569 570 $( product_box ).find( ".buttons" ).addClass( "active" ); 571 } 572 }, 573 filterArray: function(arr, val, key, childrenKey ) { 574 var matches = [], keys = Object.keys(arr); 575 if (!keys.length) return matches; 576 577 for (var i = 0, item; item = arr[keys[i]]; i++ ) 578 { 579 if(item[key] !== undefined && ( item[key] === val || ( ( typeof item[key] === 'string' || item[key] instanceof String ) && ( typeof val === 'string' || val instanceof String ) && val.indexOf('%') == 0 && item[key].match( new RegExp( val.substr(1,val.length-1), 'i' ) ) ) ) ) 580 { 581 matches.push(item); 582 } 583 if(item[childrenKey]) 584 { 585 var recItems = this.filterArray(item[childrenKey],val,key,childrenKey); 586 for(var j = 0, rec; rec = recItems[j]; j++) 587 { 588 matches.push(rec) 589 } 590 } 591 } 592 return matches; 593 }, 594 getPaths: function(arr, val, key, childrenKey, pathKey){ 595 var ret = []; 596 function _getPaths(a,v,k,c,r,p) /// arr:[],val,key,childrenKey,return:[],parent:arr 597 { 598 if(!r) r = []; 599 var keys = Object.keys(a); 600 if (keys.length) 601 { 602 603 if(p) r.push(p); 604 for (var i = 0, item; item = a[keys[i]]; i++ ) 605 { 606 if(item[k] !== undefined && ( item[k] === v || ( ( typeof item[k] === 'string' || item[k] instanceof String ) && ( typeof v === 'string' || v instanceof String ) && v.indexOf('%') == 0 && item[k].match( new RegExp( v.substr(1,v.length-1), 'i' ) ) ) ) ) 607 { 608 item[(pathKey || 'path')] = []; 609 for(var f = 0, el; el = r[f]; f++) item[(pathKey || 'path')].push(el);
610 ret.push(item); 611 } 612 613 if(item[c]) 614 { 615 _getPaths(item[c],v,k,c,r,item); 616 } 617 618 } 619 if(p) r.pop(); 620 } 621 622 } 623 _getPaths(arr, val, key, childrenKey); 624 return ret; 625 }, 626 627 /** 628 * Sets value inside the object tree 629 * @param {Object} rootObject Root element - must be a checkbox/rows element 630 * @param {any} val Any value will be set at given property name in the 'key' parameter 631 * @param {string} key Name 632 * @param {string} childrenKey Property name of children array; Used for recursive lookup 633 */ 634 setValue: function(rootObject,val,key,childrenKey){ 635 var keys = Object.keys(rootObject); 636 637 if(keys && keys.length) 638 { 639 for(var i = 0, item; item = keys[i]; i++ ) 640 { 641 if(item === key) 642 { 643 rootObject[item] = val; 644 } 645 646 if(item === childrenKey) 647 { 648 var childKeys = Object.keys(rootObject[childrenKey]); 649 for(var j = 0, child; child = rootObject[childrenKey][childKeys[j]]; j++) 650 { 651 this.setValue(child,val,key,childrenKey); 652 } 653 } 654 } 655 } 656 657 }, 658 filter: function(menuName, noReset) { 659 var search = this.search[menuName]; 660 661 var arr = this.menus[menuName].rows; 662 663 if((typeof search === 'string' || search instanceof String) && search.length) 664 { 665 for(var i = 0, elem, keys = Object.keys(arr); elem = arr[keys[i]]; i++) 666 { 667 this.setValue( elem, 0, 'filter', 'submenu' ); 668 this.setValue( elem, 0, 'expanded', 'submenu' ); 669 } 670 var items = this.getPaths( arr, "%.*" + search, 'name', 'submenu', 'filterPath' ); 671 672 for(var i = 0,item; item = items[i]; i++) 673 { 674 item.expanded = 1; 675 item.filter = 1; 676 for(var um = 0, path; path = item.filterPath[um]; um++) 677 { 678 path.expanded = 1; 679 path.filter = 1; 680 } 681 } 682 } 683 else if( noReset!=true ) 684 { 685 for(var am = 0, elem, keys = Object.keys(arr); elem = arr[keys[am]]; am++) 686 { 687 this.setValue( elem, 0, 'expanded', 'submenu' ); 688 this.setValue( elem, 1, 'filter', 'submenu' ); 689 } 690 } 691 692 this.$nextTick(function() { 693 $('#' + menuName + '.collapse').trigger('reinit.nano').find('.collapse').eq(0).trigger('shown.bs.collapse'); 694 }); 695 }, 696 changeHandler: function (event) { 697 this[event.target.dataset.inputMethod](event.target.dataset.inputName); 698 }, 699 filterMultibox: function(menuName) { 700 701 var search = this.search[menuName]; 702 703 var pattern = new RegExp( ".*" + search,"i" ); 704 var arr = this.menus[menuName].rows; 705 706 $.each(arr, function (key, val) { 707 val.showMultibox = 0; 708 if(val.submenu) { 709 $.each(val.submenu, function (key1, val1) { 710 val1.showMultibox = 0; 711 }); 712 } 713 }); 714 715 if(search.length > 0) { 716 $.each(arr, function (key, val) { 717 if(pattern.exec(val.name) == null) { 718 719 } else { 720 val.showMultibox = 1; 721 } 722 723 if(val.submenu) { 724 $.each(val.submenu, function (key1, val1) { 725 726 if(pattern.exec(val1.name) == null) { 727 } else { 728 val.showMultibox = 1; 729 val.expanded = 1; 730 val1.showMultibox = 1; 731 } 732 }); 733 } 734 }); 735 } else { 736 $.each(arr, function (key, val) { 737 val.showMultibox = 0; 738 //val.expanded = 0; 739 if(val.submenu) { 740 $.each(val.submenu, function (key2, val2) { 741 val2.showMultibox = 0; 742 }); 743 } 744 }); 745 } 746 747 }, 748 checked: function (menuName, id, attr) { 749 750 // console.log( ['menuName',menuName] ); 751 var _self = this; 752 var menu = this.menus[menuName].rows; 753 754 //var elements = this.filterArray( menu, id, 'id', 'submenu' ); 755 var elements = this.getPaths( menu, id, 'id', 'submenu' ); 756 757 for(var i = 0, item; item = elements[i]; i++ ) 758 { 759 item.checked = item.checked ? 0 : 1; 760 item.selectedChild = item.checked; 761 762 if( menuName!='cat' ) { //DONT check childs for CATEGORIES 763 this.setValue(item, item.checked, 'checked', 'submenu'); 764 765 if( ( item.checked || menuName=='brand' ) && item.related && item.related.length ){ 766 var related = item.related.split(','); 767 $.each(related, function (keyRel,keVal) { 768 var rel = _self.filterArray(menu, parseInt(keVal), 'id'); 769 770 if( rel.length && rel[0].display ) rel[0].checked = item.checked; 771 }); 772 } 773 } 774 775 var path = item.path; 776 777 $.each(path, function (key2,val2) { 778 var checked = _self.filterArray( val2.submenu, 1, 'checked', 'submenu' ); 779 val2.checked = 0; 780 val2.selectedChild = checked.length; 781 }); 782 } 783 784 var checked = this.filterArray( menu, 1, 'checked', 'submenu' ); 785 786 this.changeButton[menuName] = checked.length; 787 this.countSelectedButton(); 788 789 this.getActiveFilters(); 790 791 return; 792 }, 793 subChecked: function (menuName, mainId, id) { 794 795 this.checked( menuName, id ); 796 797 return; 798 }, 799 800 countSelectedButton: function (){ 801 var changeButton = this.changeButton; 802 var countSelected = 0; 803 804 this.checkedButton = countSelected 805 806 for (var prop in changeButton) { 807 if ( changeButton.hasOwnProperty(prop) ) { 808 countSelected += changeButton[prop]; 809 } 810 } 811 812 this.checkedButton = countSelected; 813 }, 814 closeCollapse: function(index) { 815 var _self = this; 816 $('#' + index).collapse('hide'); 817 818 this.saveCollapse(index); 819 this.showHeader(index); 820 }, 821 822 saveCollapse: function(index) { 823 console.log( ["saveCollapse", index] ); 824 if(index !== "price") 825 { 826 var prices = $('[data-target="price-range"]'); 827 // prices.prop('value',0); 828 // prices.eq(1).prop('value',this.menus.price.max.to); 829 } 830 if(index === "limit") { 831 this.savePagination(index); 832 } 833 this.$nextTick(function () {
834 var formSerialize = this.serializeForm(); 835 this.setUrl(formSerialize, false, undefined, index == 'page'); 836 this.closeAllCollapse(); 837 838 console.log( ["index", index] ); 839 // if( index == 'page') 840 // { 841 $([document.documentElement, document.body]).animate({ 842 scrollTop: $("#filters").offset().top - 150 843 //scrollTop: $(".pagination-top").last().offset().top-10 844 }, 1000); 845 // } 846 }); 847 }, 848 849 savePagination: function(index, el) { 850 var value = this.$data.products && this.$data.products.pageSize || 29; 851 var val; 852 val = parseInt($( ".pagination-top [data-target="+index+"]" ).val() || 0); 853 if (val && val !== value) { 854 $( ".pagination-top [data-target="+index+"]" ).selectpicker( 'val', value ); 855 } 856 857 val = parseInt($( ".pagination-bottom [data-target="+index+"]" ).val() || 0); 858 if (val && val !== value) { 859 $( ".pagination-bottom [data-target="+index+"]" ).selectpicker( 'val', value ); 860 } 861 862 val = parseInt($( ".pagination-mobile [data-target="+index+"]" ).val() || 0); 863 if (val && val !== value) { 864 $( ".pagination-mobile [data-target="+index+"]" ).selectpicker( 'val', value ); 865 } 866 867 return; 868 if( $( ".pagination-mobile" ).length ) 869 var val = $( ".pagination-mobile [data-target="+index+"]" ).val(); 870 else 871 var val = $( ".pagination-bottom [data-target="+index+"]" ).val(); 872 873 $( ".pagination-top [data-target="+index+"]" ).selectpicker( 'val', val ); 874 // $( ".pagination-top [data-target="+index+"]" ).val( $( ".pagination-bottom [data-target="+index+"]" ).val() ); 875 // this.saveCollapse( index ); 876 }, 877 878 879 sendForm: function() { 880 var formSerialize = this.serializeForm(); 881 this.getProducts(formSerialize); 882 this.getActiveMenus(formSerialize); 883 }, 884 885 serializeForm: function() { 886 var form = $( '#filters form' ); 887 888 var ret = form.serialize(); 889 console.log( 'serialize', ret ); 890 891 var price = form.find('[data-target="price-range"]'); 892 if( this.menus && this.menus.price && !(this.menus.price.max.from != this.menus.price.start.from || this.menus.price.max.to != this.menus.price.start.to ) ) 893 { 894 ret = ret.replace( /((&?price.+?=)(\d{0,20}))((&?price.+?=)(\d{0,20}))/gm, '' ); 895 } 896 897 return ret; 898 }, 899 expande: function(menuName, id, multi, toSet) { 900 var menu = this.menus[menuName].rows; 901 var ex = 0; 902 for(var i=0; i<menu.length; i++) { 903 if(menu[i].id == id) { 904 if(menu[i].expanded == 1) { 905 menu[i].expanded = 0; 906 } else { 907 menu[i].expanded = 1; 908 ex = 1; 909 } 910 911 if(toSet !== undefined) ex = menu[i].expanded = toSet; 912 } 913 } 914 915 return ex; 916 }, 917 showHeader: function (index) { 918 // index == menus > 919 $('.header-' + index).css('display', 'block'); 920 }, 921 hideHeader: function (index) { 922 // index == menus > 923 this.openedFilter = index; 924 925 this.closeAllCollapse(); 926 927 if(this.menus[index].multiBox) { 928 this.multibox.rows = this.menus[index]; 929 this.multibox.rows.index = index; 930 931 // $('.singlebox').hide(); 932 $('.multibox').removeClass('d-none'); 933 934 setTimeout(function() { 935 $('.multibox').addClass('show open').trigger('multibox.show'); 936 }, 1 ); 937 } 938 939 this.filter(index, true); 940 941 // if(window.innerWidth > 1024) 942 // { 943 // this.$nextTick(function() { 944 // 945 // $('.input-' + index).show().focus().trigger('input.focus'); 946 // 947 // }, 10 ); 948 // } 949 950 setTimeout(function() { 951 $('.header-' + index).css('display', 'none'); 952 }, 150 ); 953 954 }, 955 showAll: function (index) { 956 957 this.closeCollapse(index); 958 // $('.singlebox').show(); 959 $('.multibox').addClass('d-none').trigger('multibox.hide'); 960 },
961 setActive: function() { 962 963 }, 964 setChecked: function() { 965 966 }, 967 getFitersInUrl: function() { 968 var queryString = window.location.search.slice(1); 969 970 if( this.rawUrl && this.rawUrl.length>0 ){ //SEO FRIENDLY 971 queryString = this.rawUrl.substr( this.rawUrl.indexOf('?')+1 ); 972 console.log( ['queryString',queryString] ); 973 } 974 975 var obj = {}; 976 977 if (queryString) { 978 queryString = queryString.split('#')[0]; 979 var arr = queryString.split('&'); 980 981 for (var i=0; i<arr.length; i++) { 982 var a; 983 984 if(arr[i].search("sort=") == 0 ) { continue; } 985 if(arr[i].search("limit=") == 0) { continue; } 986 if(arr[i].search("p=") == 0) { continue; } 987 988 989 if(arr[i].search("%5B%5D=") > 0 ) { 990 a = arr[i].split('%5B%5D='); 991 } else { 992 a = arr[i].split('[]='); 993 } 994 995 var paramNum = undefined; 996 var paramName = a[0].replace(/\[\d*\]/, function(v) { 997 paramNum = v.slice(1,-1); 998 return ''; 999 }); 1000 1001 var paramValue = typeof(a[1])==='undefined' ? true : a[1]; 1002 1003 if (paramName != 'name=' && typeof paramValue === "string") 1004 { 1005 paramName = paramName.replace('%5B','[').replace('%5D',']').toLowerCase(); 1006 paramValue = paramValue.toLowerCase(); 1007 if (obj[paramName]) { 1008 if (typeof obj[paramName] === 'string') { 1009 obj[paramName] = [obj[paramName]]; 1010 } 1011 if (typeof paramNum === 'undefined') { 1012 obj[paramName].push(paramValue); 1013 } 1014 else { 1015 obj[paramName][paramNum] = paramValue; 1016 } 1017 } 1018 else { 1019 obj[paramName] = [paramValue]; 1020 } 1021 } 1022 1023 if(arr[i].search("price_sale=1") == 0) 1024 { 1025 obj['price_sale'] = "1"; 1026 } 1027 } 1028 } 1029 1030 return obj; 1031 }, 1032 isEmptyObj: function (obj) { 1033 if (obj == null) return true; 1034 if (obj.length > 0) return false; 1035 if (obj.length === 0) return true; 1036 if (typeof obj !== "object") return true; 1037 for (var key in obj) { 1038 if (hasOwnProperty.call(obj, key)) return false; 1039 } 1040 1041 return true; 1042 }, 1043 setInGet: function() { 1044 1045 var obj = this.getFitersInUrl(); 1046 var _self = this; 1047 1048 var href = window.location.href; 1049 if( this.rawUrl && this.rawUrl.length > 0 ) { 1050 href = this.rawUrl; 1051 console.log( ['rawUrl', this.rawUrl ]); 1052 } 1053 1054 if( $('#cid').length && $('#cid').val() && obj.cat == undefined && href.search('search') < 0 && href.search('group') < 0) { 1055 obj.cat = $('#cid').val() 1056 } 1057 1058 if( this.isEmptyObj(obj) ) { 1059 _self.showFilterButton = 0; 1060 } 1061 1062 _self.showFilterButton = 0; 1063 if( _self.menus && _self.menus.price ) 1064 { 1065 _self.menus.price.price_sale.show = 0; 1066 _self.menus.price.price_sale.checked = 0; 1067 } 1068 1069 for (var v in this.changeButton) { this.changeButton[v] = 0; } 1070 this.changeButton.price = 1; 1071 1072 if( _self.menus ) { 1073 $.each( _self.menus, function(key, val) { 1074 1075 var menu = _self.menus[key].rows; 1076 if( menu == undefined ) return; 1077 1078 if( !Array.isArray( menu ) ) menu = [menu]; 1079 1080 /* RESET FILTERS */ 1081 var checked = _self.filterArray( menu, 1, 'checked', 'submenu' ); 1082 var show = _self.filterArray( menu, 1, 'show', 'submenu' ); 1083 var selectedChild = _self.filterArray( menu, 1, 'selectedChild', 'submenu' ); 1084 1085 $.each( checked , function (k,el) { el.checked = 0; }); 1086 $.each( show , function (k,el) { el.show = 0; }); 1087 $.each( selectedChild , function (k,el) { el.selectedChild = 0; }); 1088 1089 /* SET FILTERS */ 1090 if (obj[key] != undefined) { 1091 1092 if( _self.menus[key].multiBox ) { //MULTIBOX FIX 1093 _self.multibox.rows = _self.menus[key]; 1094 _self.multibox.rows.index = key; 1095 } 1096 1097 var selected = $.isArray(obj[key]) ? obj[key] : [obj[key]]; 1098 1099 $.each( selected, function (k, id) { 1100 1101 var itemList = _self.getPaths( menu, id.indexOf('all')>-1 ? id : parseInt(id), 'id', 'submenu' ); 1102 var item = $.isArray(itemList) ? itemList[0] : undefined; 1103 1104 if( item == undefined ) return; 1105 1106 item.checked = 1; 1107 item.show = 1; 1108 item.selectedChild = item.checked; 1109 1110 var path = item.path; 1111 $.each(path, function (key2,val2) { 1112 var checked = _self.filterArray( val2.submenu, 1, 'checked', 'submenu' ); 1113 //val2.checked = 0; 1114 val2.expanded = 1; 1115 val2.selectedChild = checked.length; 1116 }); 1117 1118 }); 1119 } 1120 1121 var checked = _self.filterArray( menu, 1, 'checked', 'submenu' ); 1122 _self.changeButton[key] = checked.length; 1123 }); 1124 } 1125 1126 1127 if (obj['price'] != undefined) { 1128 if(obj['price'][0] != undefined){ 1129 _self.menus.price.start.from = parseInt(obj['price'][0]) || 0; 1130 _self.filterPrice.from = _self.menus.price.start.from < _self.menus.price.max.from ? _self.menus.price.max.from : _self.menus.price.start.from; 1131 } 1132 if(obj['price'][1] != undefined) { 1133 _self.menus.price.start.to = parseInt(obj['price'][1]) || 0; 1134 _self.filterPrice.to = _self.menus.price.start.to > _self.menus.price.max.to ? _self.menus.price.max.to : _self.menus.price.start.to; 1135 } 1136 } 1137 1138 if (obj['price_sale'] != undefined) { 1139 _self.menus.price.price_sale.show = 1; 1140 _self.menus.price.price_sale.checked = 1; 1141 } 1142 1143 _self.showFilterButton = 1; 1144 this.countSelectedButton(); 1145 this.getActiveFilters(); 1146 }, 1147 getActiveFilters: function() { 1148 1149 var _self = this, items = [], names = {}, index = 0; 1150 1151 // console.log( "menus" ); 1152 // console.log( _self.menus ); 1153 1154 $.each(_self.menus, function(key, val) { 1155 1156 var menu = _self.menus[key].rows; 1157 if( menu == undefined ) return; 1158 1159 /* RESET FILTERS */ 1160 var checked = _self.filterArray( menu, 1, 'checked', 'submenu' ); 1161 // console.log( "checked", key, ); 1162 // console.log( checked ); 1163 1164 for (var i = 0; i < checked.length; i++) 1165 { 1166 delete checked[i].filters; 1167 if(!checked[i].display) continue; 1168 1169 var name = checked[i].name; 1170 1171 if(names[name] === undefined) 1172 { 1173 names[name] = index; 1174 items[names[name]] = checked[i]; 1175 items[names[name]].filters = []; 1176 } 1177 1178 items[names[name]].filters.push(checked[i]); 1179 index++; 1180 } 1181 }); 1182 1183 //RESET KEYS TO ARRAY 1184 var list=[]; 1185 for (key in items) { list[list.length] = items[key]; } 1186 1187 this.activeFilters = list; 1188 return this.activeFilters; 1189 }, 1190 removeDups: function(names) { 1191 var unique = {};
1192 names.forEach(function(i) { 1193 if(!unique[i]) { 1194 unique[i] = true; 1195 } 1196 }); 1197 return Object.keys(unique); 1198 }, 1199 findInArray: function(arr, id) { 1200 var ret = ""; 1201 if(Array.isArray(arr)) { 1202 for(el in arr) { 1203 if(arr[el].submenu) { 1204 for (var i=0; i<arr[el].submenu.length; i++) { 1205 if (arr[el].submenu[i].id == id) { 1206 ret = { "submenu": arr[el].submenu[i], "main": arr[el], "test": 3}; 1207 } else { 1208 if (arr[el].id == id) { 1209 ret = { "main": arr[el], "test": 0}; 1210 } 1211 } 1212 } 1213 } else { 1214 if (arr[el].id == id) { 1215 ret = { "main": arr[el] , "test": 6}; 1216 } 1217 } 1218 } 1219 } else { 1220 $.each(arr, function (key, val) { 1221 if(val.submenu) { 1222 $.each(val['submenu'], function (key2, val2) { 1223 if(val2['submenu']) { 1224 $.each(val2['submenu'], function (key3, val3) { 1225 if (val3['submenu']) { 1226 $.each(val3['submenu'], function (key4, val4) { 1227 if (val4['submenu']) { 1228 $.each(val4['submenu'], function (key5, val5) 1229 { 1230 if (val5.id == id) 1231 { 1232 ret = { "submenu4": val5, "submenu3": val4, "submenu2": val3, "submenu": val2, "main": val }; 1233 } 1234 }); 1235 } 1236 1237 if (val4.id == id) 1238 { 1239 ret = { "submenu3": val4, "submenu2": val3, "submenu": val2, "main": val }; 1240 } 1241 1242 }); 1243 } 1244 1245 if (val3.id == id) 1246 { 1247 ret = { "submenu2": val3, "submenu": val2, "main": val }; 1248 } 1249 1250 }); 1251 1252 } 1253 1254 if (val2.id == id) 1255 { 1256 ret = { "submenu": val2, "main": val }; 1257 } 1258 1259 }); 1260 } 1261 1262 if (val.id == id) { 1263 ret = {"main": val, "test": 4}; 1264 } 1265 }); 1266 } 1267 1268 return ret; 1269 }, 1270 priceRange:function(obj) { 1271 // console.log([obj ,obj.min ,obj.max ,this.menus.price]); 1272 if (!obj || obj.min === undefined || !obj.max || this.menus.price === undefined) return; 1273 // return; 1274 1275 if(parseInt(this.menus.price.max.from) === parseInt(this.menus.price.start.from)) 1276 { 1277 this.filterPrice.from = this.menus.price.start.from = obj.min; 1278 } 1279 if(parseInt(this.menus.price.max.to) === parseInt(this.menus.price.start.to)) 1280 { 1281 this.filterPrice.to = this.menus.price.start.to = obj.max; 1282 } 1283 1284 // console.log([obj]); 1285 this.menus.price.max.from = obj.min; 1286 this.menus.price.max.to = obj.max; 1287 1288 if(parseInt(this.menus.price.start.from) < obj.min) 1289 { 1290 this.filterPrice.from = this.menus.price.start.from = obj.min; 1291 } 1292 if(parseInt(this.menus.price.start.to) > obj.max) 1293 { 1294 this.filterPrice.to = this.menus.price.start.to = obj.max; 1295 } 1296 1297 // $( '#filters form input[name="price[]"]' ).eq(-2).val(this.menus.price.max.from); 1298 // $( '#filters form input[name="price[]"]' ).eq(-1).val(this.menus.price.max.to); 1299 } 1300 , 1301 changePrice: function() { 1302 1303 try{ 1304 var min = this.menus.price.max.from; 1305 var max = this.menus.price.max.to; 1306 1307 var from = this.menus.price.start.from; 1308 var to = this.menus.price.start.to; 1309 1310 $("#price-slider").slider().on("slide", function(ev){ 1311 $("#price-range input").eq(0).val( ev.value[0] ); 1312 $("#price-range input").eq(1).val( ev.value[1] ); 1313 }); 1314 }catch (omg) { } 1315 1316 try { 1317 if($.fn.ionRangeSlider) 1318 { 1319 1320 var vueCtx = this; 1321 var slider = $(".price-slider").data('ionRangeSlider');
1322 if(!slider) 1323 { 1324 $("input.price-slider").each(function () { 1325 1326 var item = $(this).ionRangeSlider({ min:min, max:max, to:to, from:from, type:'double', labels:false, hide_min_max:true, hide_from_to:true }); 1327 item.val(min+';'+max); 1328 var inputs = item.parents('[id*="price"]').find('[data-target="price-range"]'); 1329 1330 item.on('change',function (el,vc) { 1331 var vals = this.prop('value').split(';'); 1332 vc.menus.price.start.from = vals[0]; 1333 vc.menus.price.start.to = vals[1]; 1334 el.eq(0).val(vals[0]); 1335 el.eq(1).val(vals[1]); 1336 }.bind(item,inputs,vueCtx)); 1337 1338 inputs.on('input',function (el,a,z) { 1339 this.data('ionRangeSlider').update({ from:el.eq(0).val(), to:el.eq(1).val() }); //min:a, max:z, 1340 // console.log([this, arguments,this.val(el.eq(0).val()+';'+el.eq(1).val()).data('ionRangeSlider')]); 1341 // this.val(el.eq(0).val()+';'+el.eq(1).val()).data('ionRangeSlider').reset(); 1342 }.bind(item,inputs,min,max)); 1343 }); 1344 } 1345 1346 1347 } 1348 }catch (ex) 1349 { 1350 1351 } 1352 1353 $('.slider-handle.round').addClass('open'); 1354 1355 $("#price-range input").each(function( id, el ) { 1356 $(this).change(function( ev ) { 1357 1358 var val = Number( $(el).val().replace(/[^0-9\\.]+/g, "") ) || 0; 1359 1360 if( val < $("#price-slider").data("slider-min") ) val = $("#price-slider").data("slider-min"); 1361 if( val > $("#price-slider").data("slider-max") ) val = $("#price-slider").data("slider-max"); 1362 val = Number( val ); 1363 $(el).val( val ); 1364 1365 try{ 1366 var sliderValue = $("#price-slider").data("slider").getValue(); 1367 sliderValue[id] = val; 1368 1369 $("#price-slider").data("slider").setValue( sliderValue ); 1370 }catch (o){} 1371 }); 1372 }); 1373 $("#price-range input").trigger("change"); 1374 }, 1375 showButtonAllFilterDelete: function() { 1376 var menus = this.menus; 1377 var count = 0; 1378 1379 $.each(menus, function (key, val) { 1380 if(val.rows) 1381 $.each(val.rows, function (keyRows, valRows) { 1382 if(valRows.show) 1383 count++ 1384 if(valRows.submenu) 1385 $.each(valRows.submenu, function (keySub, valSub){ 1386 if(valSub.show) 1387 count++ 1388 }) 1389 }); 1390 }); 1391 1392 if( this.filterPrice.from > 0 ) { 1393 count++; 1394 } 1395 1396 if(this.menus.price) { 1397 if( this.filterPrice.to < this.menus.price.max.to ) { 1398 count++; 1399 } 1400 } 1401 1402 this.testCount = count; 1403 1404 if(count > 2 ) { 1405 return true; 1406 } 1407 1408 return false; 1409 }, 1410 getMenus: function() { 1411 1412 var url = this.getUrl(); 1413 var params = this.serializeForm(); 1414 1415 axios.get(url + '/rawFilterData?' + params + '&url=' + encodeURIComponent( window.location.href ) ).then(function(res) { 1416 if( !res.data ) { return; } 1417 1418 if( 'searchQuery' in res.data ) { 1419 this.rawUrl = res.data.searchQuery; 1420 delete res.data.searchQuery; 1421 } 1422 this.menus = res.data; 1423 1424 this.setInGet(); 1425 1426 var href = window.location.href; 1427 var t = href.split("?"); 1428 var newUrl = t[1]; 1429 1430 if( this.rawUrl && this.rawUrl.length > 0 ) { 1431 newUrl = this.rawUrl; 1432 console.log( ['rawUrl', this.rawUrl ]); 1433 } 1434 1435 this.getProducts(newUrl); 1436 this.getActiveMenus(newUrl); 1437 this.hideMore(); 1438 $('body').trigger('menus.run.once',[this.menus]); 1439 1440 this.$nextTick(function() { 1441 this.changePrice(); 1442 this.copyFilters(); 1443 }); 1444 this.getMenusFlag = 1; 1445 }.bind(this)).catch(); 1446 1447 1448 }, 1449 getProducts: function (newUrl) { 1450 1451 var scrollToProductAfterBack = { 1452 enabled: false, 1453 timeoutId: null, 1454 executed: false, 1455 request: function(){ 1456 if (scrollToProductAfterBack.enabled) { 1457 if (scrollToProductAfterBack.timeoutId !== null) { 1458 clearTimeout(scrollToProductAfterBack.timeoutId); 1459 } 1460 scrollToProductAfterBack.timeoutId = setTimeout(scrollToProductAfterBack.scroll, 300); 1461 } 1462 }, 1463 scroll: function(){ 1464 if (!this.executed) { 1465 this.executed = true; 1466 scrollToProductAfterBack.timeoutId = null; 1467 1468 var $productElement = $('.product-item[data-index="' + history.state.productIndex + '"]'); 1469 if ($productElement.length) { 1470 // $(document.body.parentElement).stop().animate({ 1471 // scrollTop: $productElement.offset().top 1472 // }, 0); 1473 $(window).scrollTop($productElement.offset().top - 28); 1474 } 1475 } 1476 }, 1477 }; 1478 1479 if (history.state && history.state.productIndex !== undefined) { 1480 scrollToProductAfterBack.enabled = true; 1481 } 1482 1483 if( typeof newUrl == "undefined") newUrl = ''; 1484 //newUrl = this.getUrl() + '/json?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl; 1485 newUrl = this.getUrl() + '/rawJson?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl; 1486 1487 if(!this.runningAjaxes[newUrl]) { 1488 this.runningAjaxes[newUrl] = true; 1489 axios.get(newUrl).then(function (res) { 1490 var _self = this; 1491 this.vue.runningAjaxes[this.url] = false; 1492 this.vue.products = res.data; 1493 this.vue.banners = res.data.banners; 1494 1495 1496 1497 if (res.data) { 1498 $('.background-filter').hide(); 1499 1500 this.vue.$nextTick(function () { 1501 $('.loader-filter').hide(); 1502 $('.mouse-over').removeClass('mouse-over'); 1503 var products = $('#products'); 1504 1505 $(this.products.data).each(function ( index, el) { 1506 var img = products.find('#' + el.id + ' .image img').attr('alt', el.translationTitle + ' ' + el.label); 1507 1508 //img.get(0).src = ''; 1509 // if( img.get(0) ) 1510 // img.get(0).src = el.imageHover; 1511 1512 img.on('load', function(){ 1513 requestAnimationFrame(scrollToProductAfterBack.request) 1514 }) 1515 }.bind(this)); 1516 1517 $('.category-product-wrapper').each(function () { 1518 filters.onProductMouseLeave.call(this); 1519 });
1520 $('#filters form').trigger('ajax.end'); 1521 1522 scrollToProductAfterBack.request(); 1523 1524 // ecommerce 1525 $('#products').find('[data-ecommerce]').attr('data-ecommerce-inited',null); 1526 website.tryInitECommerce('#products'); // try init until ajax has been finished 1527 if( typeof this.bannerSlider === 'function' ) this.bannerSlider(); 1528 if( typeof this.productSlider === 'function' ) this.productSlider(); 1529 const productIndexes = this.products.data.map((item, index) => index); 1530 const productIds = this.products.data.map(item => item.id); 1531 1532 this.productsMobileSlider(productIndexes, productIds); 1533 //website.initLazyLoad( website.config.lazyload ); 1534 1535 _self.vue.$nextTick(function () { 1536 website.initLazyLoad( website.config.lazyload ); 1537 }) 1538 if( this.banners ) { 1539 const banners = Object.values(this.banners); 1540 const bannerKeys = banners.map(banner => banner.id).join(","); 1541 this.bannerStats(bannerKeys); 1542 } 1543 1544 }); 1545 } 1546 }.bind({'vue': this, 'url': newUrl})).catch(function(ex){(console.warn || console.log)(['axios failed retrieving content',ex])}); 1547 } 1548 }, 1549 mouseOverBanner(id, event) { 1550 this.isHover = true; 1551 }, 1552 mouseLeaveBanner(id, event) { 1553 this.isHover = false; 1554 }, 1555 1556 getBannersIndex: function(k, key) { 1557 if (key.startsWith("i")) { 1558 const index = this.banners[key].index; 1559 if (k == index) { 1560 return true; 1561 } 1562 } 1563 return false; 1564 }, 1565 1566 bannerStats: function(key){ 1567 const bannerId = key; 1568 $(document).ready(function() { 1569 const name = `banner_` + bannerId; 1570 if( !$.cookie( name ) ){ 1571 $.cookie( name , 1, { expires: 7, path: "/" }); 1572 $.post( website.getBaseUrl() + "/socialProof/show", { pk : bannerId } ); 1573 const array = bannerId.split(","); 1574 array.forEach(function(item) { 1575 const bannerName = `banners_` + item; 1576 $("#" + bannerName).on("click", function(){ 1577 $.post( website.getBaseUrl() + "/socialProof/click", { pk : item } ); 1578 }); 1579 }); 1580 } 1581 }); 1582 }, 1583 1584 productsMobileSlider: function(productIndexes, productIds) { 1585 if(this.enableGallery /*&& this.isMobile*/ ){ 1586 1587 productIds.forEach(function(productId) { 1588 $('#productSlider-pagination-' + productId).each(function() { 1589 $(this).html(''); 1590 }); 1591 }); 1592 1593 this.swipers.forEach(swiper => { 1594 swiper.destroy(false); 1595 }); 1596 1597 productIndexes.forEach(index => { 1598 const swiper = new Swiper('#slider-mobile-product-'+index, { 1599 slidesPerView: 1, 1600 observer: true, 1601 pagination: { 1602 el: '#productSlider-pagination-'+productIds[index], 1603 clickable: true, 1604 }, 1605 lazy: { 1606 checkInView: true, 1607 loadOnTransitionStart: true, 1608 loadPrevNext: false, 1609 }, 1610 speed: 1000, 1611 effect: 'slider', 1612 loop: false, 1613 }); 1614 const button = document.getElementById('add-to-cart-'+index); 1615 if( button ) { 1616 button.classList.remove('hide'); 1617 button.classList.add('hide'); 1618 1619 swiper.on('slideChange', () => { 1620 if (swiper.activeIndex === 0) { 1621 button.classList.remove('show'); 1622 button.classList.add('hide'); 1623 } else { 1624 button.classList.remove('hide'); 1625 button.classList.add('show'); 1626 } 1627 }); 1628 } 1629 // swiper.on('lazyImageLoad', (slideEl, imageEl) => { 1630 // $(imageEl).removeClass('lazy-loading').addClass('lazy-loaded'); 1631 // }); 1632 1633 this.swipers.push(swiper); 1634 }); 1635 } 1636 }, 1637 bannerSlider: function() { 1638 var productSlider = new Swiper( '#slider-product', 1639 { 1640 slidesPerView: 3, 1641 speed: 1000, 1642 effect: 'slider', 1643 loop: true, 1644 breakpoints: { 1645 1366:{ 1646 slidesPerView: 3, 1647 }, 1648 1024:{ 1649 slidesPerView: 3, 1650 }, 1651 768: { 1652 slidesPerView: 2, 1653 }, 1654 568: { 1655 slidesPerView: 2, 1656 } 1657 }, 1658 autoplay: { 1659 delay: 5000, 1660 pauseOnMouseEnter: true, 1661 }, 1662 }); 1663 $('#slider-product').on('mouseenter', function(e){
1664 productSlider.autoplay.stop(); 1665 }) 1666 .on('mouseleave', function(e){ 1667 productSlider.autoplay.start(); 1668 }) 1669 }, 1670 1671 getActiveMenus: function(newUrl) { 1672 1673 if( typeof newUrl == "undefined") newUrl = ''; 1674 newUrl = this.getUrl() + '/rawFilter?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl; 1675 1676 if(!this.runningAjaxes[newUrl]) { 1677 this.runningAjaxes[newUrl] = true; 1678 axios.get(newUrl).then(function (res) { 1679 this.vue.runningAjaxes[this.url] = false; 1680 this.vue.priceRange(res.data.price); 1681 // this.vue.setInActiveFiltersMenu(); // _self.setInActiveFiltersMenu(); 1682 this.vue.setActiveMenu(res.data); 1683 this.vue.priceRange(res.data.price); 1684 this.vue.getActiveFilters(); 1685 this.vue.priceRange(res.data.price); 1686 this.vue.$nextTick(function () { 1687 $('#filters form').trigger('ajax.end'); 1688 }); 1689 // this.vue.changePrice(res.data.price); 1690 }.bind({'vue':this,'url':newUrl})).catch(); 1691 } 1692 }, 1693 setInActiveFiltersMenu: function() { 1694 var menu = this.menus; 1695 $.each(menu, function(key, val) { 1696 if(val.rows) { 1697 $.each(val.rows, function(key2, val2) { 1698 if(val2.submenu) { 1699 $.each(val2.submenu, function(key5, val5) { 1700 // val5.filter = 0; 1701 // val5.expanded = 0; 1702 }); 1703 } 1704 // val.expanded = 0; 1705 // val2.expanded = 0; 1706 // val2.filter = 0; 1707 }); 1708 } 1709 }); 1710 }, 1711 1712 1713 1714 setActiveMenu: function(resData) { 1715 var menu = this.menus; 1716 1717 $.each(menu, function(key, val) { 1718 if(val.rows) { 1719 $.each(val.rows, function (key3, val3) { 1720 1721 if( resData[key] != undefined ) { 1722 val3.display = 0; 1723 $.each(resData[key], function (keyRes, valRes) { 1724 if(valRes && val3.id.toString() == valRes.toString()) { 1725 val3.filter = 1; 1726 val3.display = 1; 1727 } 1728 }) 1729 1730 if( key.indexOf('param')>=0 && resData[key].length == 0 ) val.hide = 2; 1731 if( key.indexOf('param')>=0 && resData[key].length > 0 && val.hide == 2 ) val.hide = 0; 1732 1733 //console.log( 'hide', key, resData[key].length, val.hide ); 1734 1735 if (val3.submenu) { 1736 $.each(val3.submenu, function (key4, val4) { 1737 val4.display = 0; 1738 if(resData[key]) { 1739 $.each(resData[key], function (keyRes, valRes) { 1740 if(valRes && val4.id.toString() == valRes.toString()) { 1741 val4.filter = 1; 1742 val3.filter = 1; 1743 val4.display = 1; 1744 } 1745 }); 1746 1747 if (val4.submenu) { 1748 $.each(val4.submenu, function (key5, val5) { 1749 val5.display = 0; 1750 if(resData[key]) { 1751 $.each(resData[key], function (keyRes, valRes) { 1752 if(valRe
1752s && val5.id.toString() == valRes.toString()) { 1753 val5.filter = 1; 1754 val4.filter = 1; 1755 val5.display = 1; 1756 } 1757 }); 1758 1759 if (val5.submenu) { 1760 $.each(val5.submenu, function (key6, val6) { 1761 val6.display = 0; 1762 if(resData[key]) { 1763 $.each(resData[key], function (keyRes, valRes) { 1764 if(valRes && val6.id.toString() == valRes.toString()) { 1765 val6.filter = 1; 1766 val5.filter = 1; 1767 val6.display = 1; 1768 } 1769 }); 1770 } 1771 }); 1772 } 1773 } 1774 }); 1775 } 1776 } 1777 }); 1778 } 1779 } 1780 }) 1781 } 1782 }); 1783 }, 1784 deleteFilter: function(name) { 1785 for(var i = 0, menuKeys = Object.keys(this.menus), menu; i < menuKeys.length; i++ ) 1786 { 1787 menu = this.menus[menuKeys[i]]; 1788 if(menu && menu.rows) 1789 { 1790 for(var f = 0, item, items = this.filterArray( menu.rows,name,'name','submenu'); item = items[f] ;f++) 1791 { 1792 item.checked = 0; 1793 } 1794 } 1795 delete this.activeFilters[name]; 1796 } 1797 1798 var _self = this; 1799 _self.$nextTick(function () { 1800 console.log( ["deleteFilter"] ); 1801 _self.saveCollapse(true); 1802 }); 1803 1804 return; 1805 }, 1806 deleteFilterByObj:function(obj){ 1807 for(var i = 0, item; item = obj.filters[i]; i++) 1808 { 1809 item.checked = 0; 1810 } 1811 delete obj.filters; 1812 1813 var _self = this; 1814 _self.$nextTick(function () { 1815 console.log( ["deleteFilterByObj"] ); 1816 _self.saveCollapse(true); 1817 }); 1818 }, 1819 deleteFilterPrice: function(position) { 1820 if( this.menus.price ) { 1821 if (position == 'sale') { 1822 this.menus.price.price_sale.show = 0; 1823 this.menus.price.price_sale.checked = 0; 1824 } else { 1825 this.menus.price.start[position] = this.menus.price.max[position]; 1826 } 1827 } 1828 1829 var _self = this; 1830 _self.$nextTick(function () { 1831 console.log( ["deleteFilterPrice"] ); 1832 _self.saveCollapse(true); 1833 }) 1834 }, 1835 deleteAllFilter: function() { 1836 1837 var menu = this.menus; 1838 this.showFilterButton = 0; 1839 $.each(menu, function (key, val) { 1840 if(val.rows) { 1841 $.each(val.rows, function (key1, val1) { 1842 1843 if(val1.submenu) { 1844 $.each(val1.submenu, function (key2, val2) { 1845 1846 if(val2.submenu) { 1847 $.each(val2.submenu, function (key3, val3) { 1848 1849 if(val3.submenu) { 1850 $.each(val3.submenu, function (key4, val4) { 1851 val4.show = 0; 1852 val4.checked = 0; 1853 }); 1854 } 1855 1856 val3.show = 0; 1857 val3.checked = 0; 1858 }); 1859 } 1860 1861 val2.show = 0; 1862 val2.checked = 0; 1863 }); 1864 } 1865 1866 val1.show = 0; 1867 val1.checked = 0; 1868 }); 1869 } 1870 val.show = 0; 1871 val.checked = 0; 1872 }); 1873 1874 this.deleteFilterPrice('from'); 1875 this.deleteFilterPrice('to'); 1876 this.deleteFilterPrice('sale'); 1877 1878 _self.$nextTick(function () { 1879 console.log( ["deleteAllFilter"] ); 1880 _self.saveCollapse(); 1881 }) 1882 }, 1883 1884 setUrl: function (newUrl, filterDelete, noHistory, noFilterAjax ) { 1885 $('.background-filter, .loader-filter').show(); 1886 1887 var url = window.location.protocol + "//" + window.location.host + window.location.pathname; 1888 1889 if(filterDelete) { 1890 url = url; 1891 } else { 1892 url = url + "?" + newUrl; 1893 } 1894 1895 function changeUrl( vue, newUrl, filterDelete, noHistory, noFilterAjax ){ 1896 $('#filter-product').val(newUrl); 1897 1898 vue.getProducts(newUrl); 1899 if(noFilterAjax !== true) 1900 vue.getActiveMenus(newUrl); 1901 1902 _self = vue; 1903 1904 _self.$nextTick(function () { 1905 _self.setInGet( noHistory ); 1906 _self.copyFilters(); //TODO 1907 // _self.filtersChaged(); 1908 }); 1909 } 1910 if( noHistory!==true ) { 1911 1912 this.rawUrl = url; 1913 axios.get(this.getUrl() + '/filterUrl?' + this.serializeForm()).then(function(res) { 1914 if (res.data) { 1915 if( res.data.searchUrl && res.data.searchUrl.length > 0) 1916 this.vue.searchUrl = res.data.searchUrl; 1917 else 1918 this.vue.searchUrl = this.newUrl; 1919 1920 window.history.pushState({path:this.vue.searchUrl},'',this.vue.searchUrl); 1921 1922 console.log( ["_filterUrl", res.data.searchUrl, res.data.web.web_heading ] ); 1923 1924 $( "[data-target=heading]" ).html( res.data.web.web_heading ); 1925 $( "[data-target=sub_title]" ).html( res.data.web.web_sub_title ); 1926 $( "title" ).html( res.data.web.web_title ); 1927 $( "meta[property=\"og:title\"]" ).attr( "content", res.data.web.web_title ); 1928 $( "meta[name=description], meta[property=\"og:description\"]" ).attr( "content", res.data.web.web_description ); 1929 $( "meta[name=keywords], meta[property=\"og:keywords\"]" ).attr( "content", res.data.web.web_keywords ); 1930 1931 console.log( 'alternate', res.data.web.web_alternate ); 1932 if( res.data.web.web_alternate ){ 1933 $.each( res.data.web.web_alternate, function( key, value ){ 1934 console.log( key, value ); 1935 $( "link[hreflang="+key+"]" ).attr( "href", value ); 1936 }); 1937 } 1938 1939 changeUrl( this.vue, this.newUrl, this.filterDelete, this.noHistory, this.noFilterAjax ) 1940 } 1941 }.bind({'vue':this,'newUrl':newUrl,'filterDelete':filterDelete,'noHistory':noHistory,'noFilterAjax':noFilterAjax})).catch(); 1942 1943 } 1944 else{ 1945 axios.get(this.getUrl() + '/parseUrl?url=' + encodeURIComponent( url ) ).then(function(res) { 1946 if (res.data) { 1947 if( res.data.searchQuery && res.data.searchQuery.length > 0) { 1948 this.vue.rawUrl = res.data.searchQuery; 1949 this.newUrl = res.data.searchQuery; 1950 } 1951 1952 console.log( ["_parseUrl", res.data.searchQuery] ); 1953 1954 changeUrl( this.vue, this.newUrl, this.filterDelete, this.noHistory, this.noFilterAjax ) 1955 } 1956 }.bind({'vue':this,'newUrl':newUrl,'filterDelete':filterDelete,'noHistory':noHistory,'noFilterAjax':noFilterAjax})).catch(); 1957 1958 //changeUrl( this, newUrl, filterDelete, noHistory, noFilterAjax ) 1959 } 1960 1961 /* 1962 $('#filter-product').val(newUrl); 1963 1964 this.getProducts(newUrl); 1965 if(noFilterAjax !== true) 1966 this.getActiveMenus(newUrl); 1967 1968 _self = this; 1969 1970 _self.$nextTick(function () { 1971 _self.setInGet( noHistory ); 1972 // _self.filtersChaged(); 1973 }); 1974 */ 1975 }, 1976 1977 getUrlVars: function(url) { 1978 var hash; 1979 var myJson = {}; 1980 var hashes = url.slice(url.indexOf('?') + 1).split('&'); 1981 for (var i = 0; i < hashes.length; i++) { 1982 hash = hashes[i].split('='); 1983 myJson[hash[0]] = hash[1]; 1984 } 1985 return myJson; 1986 }, 1987 closeAllCollapse: function () { 1988// $('.open.in, .open.show').removeClass('in open show'); 1989 $('.open.in, .open.show').collapse('hide'); 1990 $('.allheader').show(); 1991 1992 for (var v in this.changeButton) { 1993 if (v != 6) { 1994 this.changeButton[v] = 0; 1995 } 1996 } 1997 this.changeButton.price = 1; 1998 this.setInGet(); 1999 2000 $('.singlebox').show(); 2001 $('.multibox').addClass('d-none').trigger('multibox.hide'); 2002 2003 this.$nextTick(function () { 2004 jQuery('body').trigger('onend.filter'); 2005 }); 2006 }, 2007 mouseOver: function(id,ev) { 2008 if(window.innerWidth < 1025) return false; 2009 var target = ev.target; 2010 if(target.classList.contains('mouse-over')/* || $('#product-' + id + ' > [data-parent-id="' + id + '"]').length*/) return false; 2011 var url = this.getUrl(); 2012 url+= !this.isLogged() ? '/info/id/' : '/rawInfo/id/'; 2013 2014 axios.get(url + id + '?layout=api' ).then(function(res) { 2015 target.classList.add('mouse-over'); 2016 $('#product-' + id).html(res.data); 2017 //DO NOT CHAIN 2018 $('#product-' + id).find('.selectpicker').selectpicker(); 2019 //website.initSwiper( $('#product-hover-' + id).find('.swiper') ); 2020 var price = $(target).find('.default-active').closest('a').data('price'); 2021 $(target).find(".category-product-absolute .product-price").html(price); 2022 console.log( $('#product-' + id).find('.default-active').closest('a') ); 2023 }).catch(); 2024 }, 2025 checkWindow: function(top, heigth) { 2026 $(window).scroll(function(top, heigth) { 2027 if ( ( top > heigth * 1.8 ) && ( top < heigth * 1.85 ) ) { 2028 _self.getMoreProducts(); 2029 } 2030 }); 2031 }, 2032 getMoreProducts: function () { 2033 var url = window.location.search; 2034 2035 if( this.rawUrl && this.rawUrl.length>0 ){ 2036 url = this.rawUrl.substr( this.rawUrl.indexOf('?')+1 ); 2037 console.log( ['queryString',url] ); 2038 } 2039 2040 var limit = this.products.itemCount + 20; 2041 var newUrl = url.replace(/limit=[0-9]*/, ''); 2042 var newUrl = newUrl.substr(1); 2043 newUrl = newUrl + 'limit='+limit; 2044 2045 this.setUrl(newUrl, false); 2046 2047 setTimeout(function() { 2048 $(window).scroll(function() { 2049 if ( ( $(window).scrollTop() > $(window).height() * 1.8 ) && ( $(window).scrollTop() < $(window).height() * 1.85 ) ) { 2050 _self.getMoreProducts(); 2051 } 2052 }); 2053 }, 2000) 2054 }, 2055 hideAllMobile: function () { 2056 $('body').trigger('close.all.mobile'); 2057 }, 2058 resetFilter: function (filterName) { 2059 function setValRec(arr, key, val, sub) 2060 { 2061 if(!arr || !arr.length) return; 2062 for(var i = 0, item; item = arr[i]; i++) 2063 { 2064 item[key] = val; 2065 if(item[sub] && item[sub].length) 2066 { 2067 setValRec(item[sub],key,val,sub); 2068 } 2069 } 2070 } 2071 2072 setValRec(this.menus[filterName].rows,'checked',0,'submenu'); 2073 this.$nextTick(function () {
2074 var formSerialize = this.serializeForm(); 2075 this.setUrl(formSerialize, false); 2076 }.bind(this)); 2077 2078 } 2079 ,filtersChaged: function() 2080 { 2081 var change = false; 2082 console.log( ["activeFilters", this.lastFilters.length, this.activeFilters.length ] ); 2083 $(window).trigger("scroll") 2084 if(this.lastFilters.length !== this.activeFilters.length) 2085 { 2086 change = true; 2087 // console.log( this.lastFilters ); 2088 // console.log( this.activeFilters ); 2089 } 2090 else if(Array.isArray(this.activeFilters)) 2091 { 2092 this.activeFilters.forEach(function (value, index) { 2093 if( 2094 this.lastFilters[index].name !== value.name 2095 || 2096 ( value.filters && !this.lastFilters[index].filters ) 2097 || 2098 ( value.filters && this.lastFilters[index].filters.length !== value.filters.length ) 2099 ) 2100 { 2101 change = true; 2102 return null; 2103 } 2104 else if(value.filters && value.filters.length && this.lastFilters[index].filters && this.lastFilters[index].filters.length) 2105 { 2106 var lastSub = this.lastFilters[index].filters; 2107 value.filters.forEach(function (val2, index2) { 2108 if( 2109 lastSub[index2].name !== val2.name 2110 || 2111 ( val2.filters && !lastSub[index2].filters ) 2112 || 2113 ( val2.filters && lastSub[index2].filters.length !== val2.filters.length ) 2114 ) 2115 { 2116 change = true; 2117 return null; 2118 } 2119 }.bind(this)); 2120 } 2121 }.bind(this)); 2122 } 2123 this.copyFilters(); 2124 if(change) 2125 { 2126 this.pageNumber = 1; 2127 $('[name="p"]').removeAttr('checked').filter('[value="1"]').attr('checked','checked'); 2128 } 2129 return change; 2130 } 2131 ,copyFilters: function () { 2132 if(Array.isArray(this.activeFilters)) 2133 { 2134 this.lastFilters = []; 2135 this.activeFilters.forEach(function (value, index) { 2136 this.lastFilters[index] = Object.assign( {}, value ); 2137 if(value.filters && Array.isArray(value.filters)) 2138 { 2139 this.lastFilters[index].filters = []; 2140 value.filters.forEach(function (val2, ind2) { 2141 this.lastFilters[index].filters[ind2] = Object.assign( {}, val2 ); 2142 }.bind(this)); 2143 } 2144 }.bind(this)); 2145 } 2146 2147 } 2148 } 2149});/* Modernizr 2.6.2 (Custom Build) | MIT & BSD 2150 * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 2151 */ 2152;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;
vendor: 14,233 bytes, lines 2152-2159
2152var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; 2153 2154/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ 2155/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ 2156window.matchMedia=window.matchMedia||(function(e,f){var c,a=e.documentElement,b=a.firstElementChild||a.firstChild,d=e.createElement("body"),g=e.createElement("div");g.id="mq-test-1";g.style.cssText="position:absolute;top:-100em";d.style.background="none";d.appendChild(g);return function(h){g.innerHTML='­<style media="'+h+'"> #mq-test-1 { width: 42px; }</style>';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document); 2157 2158/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 2159(function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B<y;B++){A=D[B],z=A.href,C=A.media,x=A.rel&&A.rel.toLowerCase()==="stylesheet";if(!!z&&x&&!o[z]){if(A.styleSheet&&A.styleSheet.rawCssText){m(A.styleSheet.rawCssText,z,C);o[z]=true}else{if((!/^([a-zA-Z:]*\/\/)/.test(z)&&!g)||z.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:z,media:C})}}}}u()},u=function(){if(d.length){var x=d.shift();n(x.href,function(y){m(y,x.href,x.media);o[x.href]=true;u()})}},m=function(I,x,z){var G=I.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),J=G&&G.length||0,x=x.substring(0,x.lastIndexOf("/")),y=function(K){return K.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+x+"$2$3")},A=!J&&z,D=0,C,E,F,B,H;if(x.length){x+="/"}if(A){J=1}for(;D<J;D++){C=0;if(A){E=z;k.push(y(I))}else{E=G[D].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&y(RegExp.$2))}B=E.split(",");H=B.length;for(;C<H;C++){F=B[C];i.push({media:F.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:k.length-1,hasquery:F.indexOf("(")>-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);
vendor: 1,401 bytes, line 2159
2159s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l<h){clearTimeout(r);r=setTimeout(j,h);return}else{l=z}for(var E in i){var K=i[E],C=K.minw,J=K.maxw,A=C===null,L=J===null,y="em";if(!!C){C=parseFloat(C)*(C.indexOf(y)>-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this);
vendor: 19,187 bytes, lines 2159-2163
2159/* 2160 Copyright (C) Federico Zivolo 2017 2161 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 2162 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe}); 2163//# sourceMappingURL=popper.min.js.map
2163
vendor: 137,714 bytes, lines 2164-6519
2164/*! 2165 * Bootstrap v4.6.2 (https://getbootstrap.com/) 2166 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 2167 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2168 */ 2169(function (global, factory) { 2170 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : 2171 typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : 2172 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper)); 2173})(this, (function (exports, $, Popper) { 'use strict'; 2174 2175 function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } 2176 2177 var $__default = /*#__PURE__*/_interopDefaultLegacy($); 2178 var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); 2179 2180 function _defineProperties(target, props) { 2181 for (var i = 0; i < props.length; i++) { 2182 var descriptor = props[i]; 2183 descriptor.enumerable = descriptor.enumerable || false; 2184 descriptor.configurable = true; 2185 if ("value" in descriptor) descriptor.writable = true; 2186 Object.defineProperty(target, descriptor.key, descriptor); 2187 } 2188 } 2189 2190 function _createClass(Constructor, protoProps, staticProps) { 2191 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 2192 if (staticProps) _defineProperties(Constructor, staticProps); 2193 Object.defineProperty(Constructor, "prototype", { 2194 writable: false 2195 }); 2196 return Constructor; 2197 } 2198 2199 function _extends() { 2200 _extends = Object.assign ? Object.assign.bind() : function (target) { 2201 for (var i = 1; i < arguments.length; i++) { 2202 var source = arguments[i]; 2203 2204 for (var key in source) { 2205 if (Object.prototype.hasOwnProperty.call(source, key)) { 2206 target[key] = source[key]; 2207 } 2208 } 2209 } 2210 2211 return target; 2212 }; 2213 return _extends.apply(this, arguments); 2214 } 2215 2216 function _inheritsLoose(subClass, superClass) { 2217 subClass.prototype = Object.create(superClass.prototype); 2218 subClass.prototype.constructor = subClass; 2219 2220 _setPrototypeOf(subClass, superClass); 2221 } 2222 2223 function _setPrototypeOf(o, p) { 2224 _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { 2225 o.__proto__ = p; 2226 return o; 2227 }; 2228 return _setPrototypeOf(o, p); 2229 } 2230 2231 /** 2232 * -------------------------------------------------------------------------- 2233 * Bootstrap (v4.6.2): util.js 2234 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2235 * -------------------------------------------------------------------------- 2236 */ 2237 /** 2238 * Private TransitionEnd Helpers 2239 */ 2240 2241 var TRANSITION_END = 'transitionend'; 2242 var MAX_UID = 1000000; 2243 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 2244 2245 function toType(obj) { 2246 if (obj === null || typeof obj === 'undefined') { 2247 return "" + obj; 2248 } 2249 2250 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 2251 } 2252 2253 function getSpecialTransitionEndEvent() { 2254 return { 2255 bindType: TRANSITION_END, 2256 delegateType: TRANSITION_END, 2257 handle: function handle(event) { 2258 if ($__default["default"](event.target).is(this)) { 2259 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 2260 } 2261 2262 return undefined; 2263 } 2264 }; 2265 } 2266 2267 function transitionEndEmulator(duration) { 2268 var _this = this; 2269 2270 var called = false; 2271 $__default["default"](this).one(Util.TRANSITION_END, function () { 2272 called = true; 2273 }); 2274 setTimeout(function () { 2275 if (!called) { 2276 Util.triggerTransitionEnd(_this); 2277 } 2278 }, duration); 2279 return this; 2280 } 2281 2282 function setTransitionEndSupport() { 2283 $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator; 2284 $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 2285 } 2286 /** 2287 * Public Util API 2288 */ 2289 2290 2291 var Util = { 2292 TRANSITION_END: 'bsTransitionEnd', 2293 getUID: function getUID(prefix) { 2294 do { 2295 // eslint-disable-next-line no-bitwise 2296 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 2297 } while (document.getElementById(prefix)); 2298 2299 return prefix; 2300 }, 2301 getSelectorFromElement: function getSelectorFromElement(element) { 2302 var selector = element.getAttribute('data-target'); 2303 2304 if (!selector || selector === '#') { 2305 var hrefAttr = element.getAttribute('href'); 2306 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; 2307 } 2308 2309 try { 2310 return document.querySelector(selector) ? selector : null; 2311 } catch (_) { 2312 return null; 2313 } 2314 }, 2315 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 2316 if (!element) { 2317 return 0; 2318 } // Get transition-duration of the element 2319 2320 2321 var transitionDuration = $__default["default"](element).css('transition-duration'); 2322 var transitionDelay = $__default["default"](element).css('transition-delay'); 2323 var floatTransitionDuration = parseFloat(transitionDuration); 2324 var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 2325 2326 if (!floatTransitionDuration && !floatTransitionDelay) { 2327 return 0; 2328 } // If multiple durations are defined, take the first 2329 2330 2331 transitionDuration = transitionDuration.split(',')[0]; 2332 transitionDelay = transitionDelay.split(',')[0]; 2333 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 2334 }, 2335 reflow: function reflow(element) { 2336 return element.offsetHeight; 2337 }, 2338 triggerTransitionEnd: function triggerTransitionEnd(element) { 2339 $__default["default"](element).trigger(TRANSITION_END); 2340 }, 2341 supportsTransitionEnd: function supportsTransitionEnd() { 2342 return Boolean(TRANSITION_END); 2343 }, 2344 isElement: function isElement(obj) { 2345 return (obj[0] || obj).nodeType; 2346 }, 2347 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 2348 for (var property in configTypes) { 2349 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 2350 var expectedTypes = configTypes[property]; 2351 var value = config[property]; 2352 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 2353 2354 if (!new RegExp(expectedTypes).test(valueType)) { 2355 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 2356 } 2357 } 2358 } 2359 }, 2360 findShadowRoot: function findShadowRoot(element) { 2361 if (!document.documentElement.attachShadow) { 2362 return null; 2363 } // Can find the shadow root otherwise it'll return the document 2364 2365 2366 if (typeof element.getRootNode === 'function') { 2367 var root = element.getRootNode(); 2368 return root instanceof ShadowRoot ? root : null; 2369 } 2370 2371 if (element instanceof ShadowRoot) { 2372 return element; 2373 } // when we don't find a shadow root 2374 2375 2376 if (!element.parentNode) { 2377 return null; 2378 } 2379 2380 return Util.findShadowRoot(element.parentNode); 2381 }, 2382 jQueryDetection: function jQueryDetection() { 2383 if (typeof $__default["default"] === 'undefined') { 2384 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 2385 } 2386 2387 var version = $__default["default"].fn.jquery.split(' ')[0].split('.'); 2388 var minMajor = 1; 2389 var ltMajor = 2; 2390 var minMinor = 9; 2391 var minPatch = 1; 2392 var maxMajor = 4; 2393 2394 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 2395 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 2396 } 2397 } 2398 }; 2399 Util.jQueryDetection(); 2400 setTransitionEndSupport(); 2401 2402 /** 2403 * Constants 2404 */ 2405 2406 var NAME$a = 'alert'; 2407 var VERSION$a = '4.6.2'; 2408 var DATA_KEY$a = 'bs.alert'; 2409 var EVENT_KEY$a = "." + DATA_KEY$a; 2410 var DATA_API_KEY$7 = '.data-api'; 2411 var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a]; 2412 var CLASS_NAME_ALERT = 'alert'; 2413 var CLASS_NAME_FADE$5 = 'fade'; 2414 var CLASS_NAME_SHOW$7 = 'show'; 2415 var EVENT_CLOSE = "close" + EVENT_KEY$a; 2416 var EVENT_CLOSED = "closed" + EVENT_KEY$a; 2417 var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7; 2418 var SELECTOR_DISMISS = '[data-dismiss="alert"]'; 2419 /** 2420 * Class definition 2421 */ 2422 2423 var Alert = /*#__PURE__*/function () { 2424 function Alert(element) { 2425 this._element = element; 2426 } // Getters 2427 2428 2429 var _proto = Alert.prototype; 2430 2431 // Public 2432 _proto.close = function close(element) { 2433 var rootElement = this._element; 2434 2435 if (element) { 2436 rootElement = this._getRootElement(element); 2437 } 2438 2439 var customEvent = this._triggerCloseEvent(rootElement); 2440 2441 if (customEvent.isDefaultPrevented()) { 2442 return; 2443 } 2444 2445 this._removeElement(rootElement); 2446 }; 2447 2448 _proto.dispose = function dispose() { 2449 $__default["default"].removeData(this._element, DATA_KEY$a); 2450 this._element = null; 2451 } // Private 2452 ; 2453 2454 _proto._getRootElement = function _getRootElement(element) { 2455 var selector = Util.getSelectorFromElement(element); 2456 var parent = false; 2457 2458 if (selector) { 2459 parent = document.querySelector(selector); 2460 } 2461 2462 if (!parent) { 2463 parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0]; 2464 } 2465 2466 return parent; 2467 }; 2468 2469 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 2470 var closeEvent = $__default["default"].Event(EVENT_CLOSE); 2471 $__default["default"](element).trigger(closeEvent); 2472 return closeEvent; 2473 }; 2474 2475 _proto._removeElement = function _removeElement(element) { 2476 var _this = this; 2477 2478 $__default["default"](element).removeClass(CLASS_NAME_SHOW$7); 2479 2480 if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) { 2481 this._destroyElement(element); 2482 2483 return; 2484 } 2485 2486 var transitionDuration = Util.getTransitionDurationFromElement(element); 2487 $__default["default"](element).one(Util.TRANSITION_END, function (event) { 2488 return _this._destroyElement(element, event); 2489 }).emulateTransitionEnd(transitionDuration); 2490 }; 2491 2492 _proto._destroyElement = function _destroyElement(element) { 2493 $__default["default"](element).detach().trigger(EVENT_CLOSED).remove(); 2494 } // Static 2495 ; 2496 2497 Alert._jQueryInterface = function _jQueryInterface(config) { 2498 return this.each(function () { 2499 var $element = $__default["default"](this); 2500 var data = $element.data(DATA_KEY$a); 2501 2502 if (!data) { 2503 data = new Alert(this); 2504 $element.data(DATA_KEY$a, data); 2505 } 2506 2507 if (config === 'close') { 2508 data[config](this); 2509 } 2510 }); 2511 }; 2512 2513 Alert._handleDismiss = function _handleDismiss(alertInstance) { 2514 return function (event) { 2515 if (event) { 2516 event.preventDefault(); 2517 } 2518 2519 alertInstance.close(this); 2520 }; 2521 }; 2522 2523 _createClass(Alert, null, [{ 2524 key: "VERSION", 2525 get: function get() { 2526 return VERSION$a; 2527 } 2528 }]); 2529 2530 return Alert; 2531 }(); 2532 /** 2533 * Data API implementation 2534 */ 2535 2536 2537 $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert())); 2538 /** 2539 * jQuery 2540 */ 2541 2542 $__default["default"].fn[NAME$a] = Alert._jQueryInterface; 2543 $__default["default"].fn[NAME$a].Constructor = Alert; 2544 2545 $__default["default"].fn[NAME$a].noConflict = function () { 2546 $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a; 2547 return Alert._jQueryInterface; 2548 }; 2549 2550 /** 2551 * Constants 2552 */ 2553 2554 var NAME$9 = 'button'; 2555 var VERSION$9 = '4.6.2'; 2556 var DATA_KEY$9 = 'bs.button'; 2557 var EVENT_KEY$9 = "." + DATA_KEY$9; 2558 var DATA_API_KEY$6 = '.data-api'; 2559 var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9]; 2560 var CLASS_NAME_ACTIVE$3 = 'active'; 2561 var CLASS_NAME_BUTTON = 'btn'; 2562 var CLASS_NAME_FOCUS = 'focus'; 2563 var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6; 2564 var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6); 2565 var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6; 2566 var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'; 2567 var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'; 2568 var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]'; 2569 var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'; 2570 var SELECTOR_INPUT = 'input:not([type="hidden"])'; 2571 var SELECTOR_ACTIVE$2 = '.active'; 2572 var SELECTOR_BUTTON = '.btn'; 2573 /** 2574 * Class definition 2575 */ 2576 2577 var Button = /*#__PURE__*/function () { 2578 function Button(element) { 2579 this._element = element; 2580 this.shouldAvoidTriggerChange = false; 2581 } // Getters 2582 2583 2584 var _proto = Button.prototype; 2585 2586 // Public 2587 _proto.toggle = function toggle() { 2588 var triggerChangeEvent = true; 2589 var addAriaPressed = true; 2590 var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0]; 2591 2592 if (rootElement) { 2593 var input = this._element.querySelector(SELECTOR_INPUT); 2594 2595 if (input) { 2596 if (input.type === 'radio') { 2597 if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) { 2598 triggerChangeEvent = false; 2599 } else { 2600 var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2); 2601 2602 if (activeElement) { 2603 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3); 2604 } 2605 } 2606 } 2607 2608 if (triggerChangeEvent) { 2609 // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input 2610 if (input.type === 'checkbox' || input.type === 'radio') { 2611 input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3); 2612 } 2613 2614 if (!this.shouldAvoidTriggerChange) { 2615 $__default["default"](input).trigger('change'); 2616 } 2617 } 2618 2619 input.focus(); 2620 addAriaPressed = false; 2621 } 2622 } 2623 2624 if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { 2625 if (addAriaPressed) { 2626 this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3)); 2627 } 2628 2629 if (triggerChangeEvent) { 2630 $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3); 2631 } 2632 } 2633 }; 2634 2635 _proto.dispose = function dispose() { 2636 $__default["default"].removeData(this._element, DATA_KEY$9); 2637 this._element = null; 2638 } // Static 2639 ; 2640 2641 Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) { 2642 return this.each(function () { 2643 var $element = $__default["default"](this); 2644 var data = $element.data(DATA_KEY$9); 2645 2646 if (!data) { 2647 data = new Button(this); 2648 $element.data(DATA_KEY$9, data); 2649 } 2650 2651 data.shouldAvoidTriggerChange = avoidTriggerChange; 2652 2653 if (config === 'toggle') { 2654 data[config](); 2655 } 2656 }); 2657 }; 2658 2659 _createClass(Button, null, [{ 2660 key: "VERSION", 2661 get: function get() { 2662 return VERSION$9; 2663 } 2664 }]); 2665 2666 return Button; 2667 }(); 2668 /** 2669 * Data API implementation 2670 */ 2671 2672 2673 $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 2674 var button = event.target; 2675 var initialButton = button; 2676 2677 if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) { 2678 button = $__default["default"](button).closest(SELECTOR_BUTTON)[0]; 2679 } 2680 2681 if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { 2682 event.preventDefault(); // work around Firefox bug #1540995 2683 } else { 2684 var inputBtn = button.querySelector(SELECTOR_INPUT); 2685 2686 if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { 2687 event.preventDefault(); // work around Firefox bug #1540995 2688 2689 return; 2690 } 2691 2692 if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') { 2693 Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT'); 2694 } 2695 } 2696 }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) { 2697 var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0]; 2698 $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)); 2699 }); 2700 $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () { 2701 // ensure correct active class is set to match the controls' actual values/states 2702 // find all checkboxes/readio buttons inside data-toggle groups 2703 var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)); 2704 2705 for (var i = 0, len = buttons.length; i < len; i++) { 2706 var button = buttons[i]; 2707 var input = button.querySelector(SELECTOR_INPUT); 2708 2709 if (input.checked || input.hasAttribute('checked')) { 2710 button.classList.add(CLASS_NAME_ACTIVE$3); 2711 } else { 2712 button.classList.remove(CLASS_NAME_ACTIVE$3); 2713 } 2714 } // find all button toggles 2715 2716 2717 buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4)); 2718 2719 for (var _i = 0, _len = buttons.length; _i < _len; _i++) { 2720 var _button = buttons[_i]; 2721 2722 if (_button.getAttribute('aria-pressed') === 'true') { 2723 _button.classList.add(CLASS_NAME_ACTIVE$3); 2724 } else { 2725 _button.classList.remove(CLASS_NAME_ACTIVE$3); 2726 } 2727 } 2728 }); 2729 /** 2730 * jQuery 2731 */ 2732 2733 $__default["default"].fn[NAME$9] = Button._jQueryInterface; 2734 $__default["default"].fn[NAME$9].Constructor = Button; 2735 2736 $__default["default"].fn[NAME$9].noConflict = function () { 2737 $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9; 2738 return Button._jQueryInterface; 2739 }; 2740 2741 /** 2742 * Constants 2743 */ 2744 2745 var NAME$8 = 'carousel'; 2746 var VERSION$8 = '4.6.2'; 2747 var DATA_KEY$8 = 'bs.carousel'; 2748 var EVENT_KEY$8 = "." + DATA_KEY$8; 2749 var DATA_API_KEY$5 = '.data-api'; 2750 var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8]; 2751 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 2752 2753 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 2754 2755 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 2756 2757 var SWIPE_THRESHOLD = 40; 2758 var CLASS_NAME_CAROUSEL = 'carousel'; 2759 var CLASS_NAME_ACTIVE$2 = 'active'; 2760 var CLASS_NAME_SLIDE = 'slide'; 2761 var CLASS_NAME_RIGHT = 'carousel-item-right'; 2762 var CLASS_NAME_LEFT = 'carousel-item-left'; 2763 var CLASS_NAME_NEXT = 'carousel-item-next'; 2764 var CLASS_NAME_PREV = 'carousel-item-prev'; 2765 var CLASS_NAME_POINTER_EVENT = 'pointer-event'; 2766 var DIRECTION_NEXT = 'next'; 2767 var DIRECTION_PREV = 'prev'; 2768 var DIRECTION_LEFT = 'left'; 2769 var DIRECTION_RIGHT = 'right'; 2770 var EVENT_SLIDE = "slide" + EVENT_KEY$8; 2771 var EVENT_SLID = "slid" + EVENT_KEY$8; 2772 var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8; 2773 var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8; 2774 var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8; 2775 var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8; 2776 var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8; 2777 var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8; 2778 var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8; 2779 var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8; 2780 var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8; 2781 var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5; 2782 var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5; 2783 var SELECTOR_ACTIVE$1 = '.active'; 2784 var SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 2785 var SELECTOR_ITEM = '.carousel-item'; 2786 var SELECTOR_ITEM_IMG = '.carousel-item img'; 2787 var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 2788 var SELECTOR_INDICATORS = '.carousel-indicators'; 2789 var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'; 2790 var SELECTOR_DATA_RIDE = '[data-ride="carousel"]'; 2791 var Default$7 = { 2792 interval: 5000, 2793 keyboard: true, 2794 slide: false, 2795 pause: 'hover', 2796 wrap: true, 2797 touch: true 2798 }; 2799 var DefaultType$7 = { 2800 interval: '(number|boolean)', 2801 keyboard: 'boolean', 2802 slide: '(boolean|string)', 2803 pause: '(string|boolean)', 2804 wrap: 'boolean', 2805 touch: 'boolean' 2806 }; 2807 var PointerType = { 2808 TOUCH: 'touch', 2809 PEN: 'pen' 2810 }; 2811 /** 2812 * Class definition 2813 */ 2814 2815 var Carousel = /*#__PURE__*/function () { 2816 function Carousel(element, config) { 2817 this._items = null; 2818 this._interval = null; 2819 this._activeElement = null; 2820 this._isPaused = false; 2821 this._isSliding = false; 2822 this.touchTimeout = null; 2823 this.touchStartX = 0; 2824 this.touchDeltaX = 0; 2825 this._config = this._getConfig(config); 2826 this._element = element; 2827 this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS); 2828 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 2829 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); 2830 2831 this._addEventListeners(); 2832 } // Getters 2833 2834 2835 var _proto = Carousel.prototype; 2836 2837 // Public 2838 _proto.next = function next() { 2839 if (!this._isSliding) { 2840 this._slide(DIRECTION_NEXT); 2841 } 2842 }; 2843 2844 _proto.nextWhenVisible = function nextWhenVisible() { 2845 var $element = $__default["default"](this._element); // Don't call next when the page isn't visible 2846 // or the carousel or its parent isn't visible 2847 2848 if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') { 2849 this.next(); 2850 } 2851 }; 2852 2853 _proto.prev = function prev() { 2854 if (!this._isSliding) { 2855 this._slide(DIRECTION_PREV); 2856 } 2857 }; 2858 2859 _proto.pause = function pause(event) { 2860 if (!event) { 2861 this._isPaused = true; 2862 } 2863 2864 if (this._element.querySelector(SELECTOR_NEXT_PREV)) { 2865 Util.triggerTransitionEnd(this._element); 2866 this.cycle(true); 2867 } 2868 2869 clearInterval(this._interval); 2870 this._interval = null; 2871 }; 2872 2873 _proto.cycle = function cycle(event) { 2874 if (!event) { 2875 this._isPaused = false; 2876 } 2877 2878 if (this._interval) { 2879 clearInterval(this._interval); 2880 this._interval = null; 2881 } 2882 2883 if (this._config.interval && !this._isPaused) { 2884 this._updateInterval(); 2885 2886 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 2887 } 2888 }; 2889 2890 _proto.to = function to(index) { 2891 var _this = this; 2892 2893 this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 2894 2895 var activeIndex = this._getItemIndex(this._activeElement); 2896 2897 if (index > this._items.length - 1 || index < 0) { 2898 return; 2899 } 2900 2901 if (this._isSliding) { 2902 $__default["default"](this._element).one(EVENT_SLID, function () { 2903 return _this.to(index); 2904 }); 2905 return; 2906 } 2907 2908 if (activeIndex === index) { 2909 this.pause(); 2910 this.cycle(); 2911 return; 2912 } 2913 2914 var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV; 2915 2916 this._slide(direction, this._items[index]); 2917 }; 2918 2919 _proto.dispose = function dispose() { 2920 $__default["default"](this._element).off(EVENT_KEY$8); 2921 $__default["default"].removeData(this._element, DATA_KEY$8); 2922 this._items = null; 2923 this._config = null; 2924 this._element = null; 2925 this._interval = null; 2926 this._isPaused = null; 2927 this._isSliding = null; 2928 this._activeElement = null; 2929 this._indicatorsElement = null; 2930 } // Private 2931 ; 2932 2933 _proto._getConfig = function _getConfig(config) { 2934 config = _extends({}, Default$7, config); 2935 Util.typeCheckConfig(NAME$8, config, DefaultType$7); 2936 return config; 2937 }; 2938 2939 _proto._handleSwipe = function _handleSwipe() { 2940 var absDeltax = Math.abs(this.touchDeltaX); 2941 2942 if (absDeltax <= SWIPE_THRESHOLD) { 2943 return; 2944 } 2945 2946 var direction = absDeltax / this.touchDeltaX; 2947 this.touchDeltaX = 0; // swipe left 2948 2949 if (direction > 0) { 2950 this.prev(); 2951 } // swipe right 2952 2953 2954 if (direction < 0) { 2955 this.next(); 2956 } 2957 }; 2958 2959 _proto._addEventListeners = function _addEventListeners() { 2960 var _this2 = this; 2961 2962 if (this._config.keyboard) { 2963 $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) { 2964 return _this2._keydown(event); 2965 }); 2966 } 2967 2968 if (this._config.pause === 'hover') { 2969 $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) { 2970 return _this2.pause(event); 2971 }).on(EVENT_MOUSELEAVE, function (event) { 2972 return _this2.cycle(event); 2973 }); 2974 } 2975 2976 if (this._config.touch) { 2977 this._addTouchEventListeners(); 2978 } 2979 }; 2980 2981 _proto._addTouchEventListeners = function _addTouchEventListeners() { 2982 var _this3 = this; 2983 2984 if (!this._touchSupported) { 2985 return; 2986 } 2987 2988 var start = function start(event) { 2989 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 2990 _this3.touchStartX = event.originalEvent.clientX; 2991 } else if (!_this3._pointerEvent) { 2992 _this3.touchStartX = event.originalEvent.touches[0].clientX; 2993 } 2994 }; 2995 2996 var move = function move(event) { 2997 // ensure swiping with one touch and not pinching 2998 _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX; 2999 }; 3000 3001 var end = function end(event) { 3002 if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { 3003 _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; 3004 } 3005 3006 _this3._handleSwipe(); 3007 3008 if (_this3._config.pause === 'hover') { 3009 // If it's a touch-enabled device, mouseenter/leave are fired as 3010 // part of the mouse compatibility events on first tap - the carousel 3011 // would stop cycling until user tapped out of it; 3012 // here, we listen for touchend, explicitly pause the carousel 3013 // (as if it's the second time we tap on it, mouseenter compat event 3014 // is NOT fired) and after a timeout (to allow for mouse compatibility 3015 // events to fire) we explicitly restart cycling 3016 _this3.pause(); 3017 3018 if (_this3.touchTimeout) { 3019 clearTimeout(_this3.touchTimeout); 3020 } 3021 3022 _this3.touchTimeout = setTimeout(function (event) { 3023 return _this3.cycle(event); 3024 }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); 3025 } 3026 }; 3027 3028 $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) { 3029 return e.preventDefault(); 3030 }); 3031 3032 if (this._pointerEvent) { 3033 $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) { 3034 return start(event); 3035 }); 3036 $__default["default"](this._element).on(EVENT_POINTERUP, function (event) { 3037 return end(event); 3038 }); 3039 3040 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 3041 } else { 3042 $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) { 3043 return start(event); 3044 }); 3045 $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) { 3046 return move(event); 3047 }); 3048 $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) { 3049 return end(event); 3050 }); 3051 } 3052 }; 3053 3054 _proto._keydown = function _keydown(event) { 3055 if (/input|textarea/i.test(event.target.tagName)) { 3056 return; 3057 } 3058 3059 switch (event.which) { 3060 case ARROW_LEFT_KEYCODE: 3061 event.preventDefault(); 3062 this.prev(); 3063 break; 3064 3065 case ARROW_RIGHT_KEYCODE: 3066 event.preventDefault(); 3067 this.next(); 3068 break; 3069 } 3070 }; 3071 3072 _proto._getItemIndex = function _getItemIndex(element) { 3073 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : []; 3074 return this._items.indexOf(element); 3075 }; 3076 3077 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 3078 var isNextDirection = direction === DIRECTION_NEXT; 3079 var isPrevDirection = direction === DIRECTION_PREV; 3080 3081 var activeIndex = this._getItemIndex(activeElement); 3082 3083 var lastItemIndex = this._items.length - 1; 3084 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 3085 3086 if (isGoingToWrap && !this._config.wrap) { 3087 return activeElement; 3088 } 3089 3090 var delta = direction === DIRECTION_PREV ? -1 : 1; 3091 var itemIndex = (activeIndex + delta) % this._items.length; 3092 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 3093 }; 3094 3095 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 3096 var targetIndex = this._getItemIndex(relatedTarget); 3097 3098 var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)); 3099 3100 var slideEvent = $__default["default"].Event(EVENT_SLIDE, { 3101 relatedTarget: relatedTarget, 3102 direction: eventDirectionName, 3103 from: fromIndex, 3104 to: targetIndex 3105 }); 3106 $__default["default"](this._element).trigger(slideEvent); 3107 return slideEvent; 3108 }; 3109 3110 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 3111 if (this._indicatorsElement) { 3112 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)); 3113 $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2); 3114 3115 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 3116 3117 if (nextIndicator) { 3118 $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2); 3119 } 3120 } 3121 }; 3122 3123 _proto._updateInterval = function _updateInterval() { 3124 var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); 3125 3126 if (!element) { 3127 return; 3128 } 3129 3130 var elementInterval = parseInt(element.getAttribute('data-interval'), 10); 3131 3132 if (elementInterval) { 3133 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 3134 this._config.interval = elementInterval; 3135 } else { 3136 this._config.interval = this._config.defaultInterval || this._config.interval; 3137 } 3138 }; 3139 3140 _proto._slide = function _slide(direction, element) { 3141 var _this4 = this; 3142 3143 var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM); 3144 3145 var activeElementIndex = this._getItemIndex(activeElement); 3146 3147 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 3148 3149 var nextElementIndex = this._getItemIndex(nextElement); 3150 3151 var isCycling = Boolean(this._interval); 3152 var directionalClassName; 3153 var orderClassName; 3154 var eventDirectionName; 3155 3156 if (direction === DIRECTION_NEXT) { 3157 directionalClassName = CLASS_NAME_LEFT; 3158 orderClassName = CLASS_NAME_NEXT; 3159 eventDirectionName = DIRECTION_LEFT; 3160 } else { 3161 directionalClassName = CLASS_NAME_RIGHT; 3162 orderClassName = CLASS_NAME_PREV; 3163 eventDirectionName = DIRECTION_RIGHT; 3164 } 3165 3166 if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) { 3167 this._isSliding = false; 3168 return; 3169 } 3170 3171 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 3172 3173 if (slideEvent.isDefaultPrevented()) { 3174 return; 3175 } 3176 3177 if (!activeElement || !nextElement) { 3178 // Some weirdness is happening, so we bail 3179 return; 3180 } 3181 3182 this._isSliding = true; 3183 3184 if (isCycling) { 3185 this.pause(); 3186 } 3187 3188 this._setActiveIndicatorElement(nextElement); 3189 3190 this._activeElement = nextElement; 3191 var slidEvent = $__default["default"].Event(EVENT_SLID, { 3192 relatedTarget: nextElement, 3193 direction: eventDirectionName, 3194 from: activeElementIndex, 3195 to: nextElementIndex 3196 }); 3197 3198 if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) { 3199 $__default["default"](nextElement).addClass(orderClassName); 3200 Util.reflow(nextElement); 3201 $__default["default"](activeElement).addClass(directionalClassName); 3202 $__default["default"](nextElement).addClass(directionalClassName); 3203 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 3204 $__default["default"](activeElement).one(Util.TRANSITION_END, function () { 3205 $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2); 3206 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName); 3207 _this4._isSliding = false; 3208 setTimeout(function () { 3209 return $__default["default"](_this4._element).trigger(slidEvent); 3210 }, 0); 3211 }).emulateTransitionEnd(transitionDuration); 3212 } else { 3213 $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2); 3214 $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2); 3215 this._isSliding = false; 3216 $__default["default"](this._element).trigger(slidEvent); 3217 } 3218 3219 if (isCycling) { 3220 this.cycle(); 3221 } 3222 } // Static 3223 ; 3224 3225 Carousel._jQueryInterface = function _jQueryInterface(config) { 3226 return this.each(function () { 3227 var data = $__default["default"](this).data(DATA_KEY$8); 3228 3229 var _config = _extends({}, Default$7, $__default["default"](this).data()); 3230 3231 if (typeof config === 'object') { 3232 _config = _extends({}, _config, config); 3233 } 3234 3235 var action = typeof config === 'string' ? config : _config.slide; 3236 3237 if (!data) { 3238 data = new Carousel(this, _config); 3239 $__default["default"](this).data(DATA_KEY$8, data); 3240 } 3241 3242 if (typeof config === 'number') { 3243 data.to(config); 3244 } else if (typeof action === 'string') { 3245 if (typeof data[action] === 'undefined') { 3246 throw new TypeError("No method named \"" + action + "\""); 3247 } 3248 3249 data[action](); 3250 } else if (_config.interval && _config.ride) { 3251 data.pause(); 3252 data.cycle(); 3253 } 3254 }); 3255 }; 3256 3257 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 3258 var selector = Util.getSelectorFromElement(this); 3259 3260 if (!selector) { 3261 return; 3262 } 3263 3264 var target = $__default["default"](selector)[0]; 3265 3266 if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) { 3267 return; 3268 } 3269 3270 var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 3271 3272 var slideIndex = this.getAttribute('data-slide-to'); 3273 3274 if (slideIndex) { 3275 config.interval = false; 3276 } 3277 3278 Carousel._jQueryInterface.call($__default["default"](target), config); 3279 3280 if (slideIndex) { 3281 $__default["default"](target).data(DATA_KEY$8).to(slideIndex); 3282 } 3283 3284 event.preventDefault(); 3285 }; 3286 3287 _createClass(Carousel, null, [{ 3288 key: "VERSION", 3289 get: function get() { 3290 return VERSION$8; 3291 } 3292 }, { 3293 key: "Default", 3294 get: function get() { 3295 return Default$7; 3296 } 3297 }]); 3298 3299 return Carousel; 3300 }(); 3301 /** 3302 * Data API implementation 3303 */ 3304 3305 3306 $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler); 3307 $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () { 3308 var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)); 3309 3310 for (var i = 0, len = carousels.length; i < len; i++) { 3311 var $carousel = $__default["default"](carousels[i]); 3312 3313 Carousel._jQueryInterface.call($carousel, $carousel.data()); 3314 } 3315 }); 3316 /** 3317 * jQuery 3318 */ 3319 3320 $__default["default"].fn[NAME$8] = Carousel._jQueryInterface; 3321 $__default["default"].fn[NAME$8].Constructor = Carousel; 3322 3323 $__default["default"].fn[NAME$8].noConflict = function () { 3324 $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8; 3325 return Carousel._jQueryInterface; 3326 }; 3327 3328 /** 3329 * Constants 3330 */ 3331 3332 var NAME$7 = 'collapse'; 3333 var VERSION$7 = '4.6.2'; 3334 var DATA_KEY$7 = 'bs.collapse'; 3335 var EVENT_KEY$7 = "." + DATA_KEY$7; 3336 var DATA_API_KEY$4 = '.data-api'; 3337 var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7]; 3338 var CLASS_NAME_SHOW$6 = 'show'; 3339 var CLASS_NAME_COLLAPSE = 'collapse'; 3340 var CLASS_NAME_COLLAPSING = 'collapsing'; 3341 var CLASS_NAME_COLLAPSED = 'collapsed'; 3342 var DIMENSION_WIDTH = 'width'; 3343 var DIMENSION_HEIGHT = 'height'; 3344 var EVENT_SHOW$4 = "show" + EVENT_KEY$7; 3345 var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7; 3346 var EVENT_HIDE$4 = "hide" + EVENT_KEY$7; 3347 var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7; 3348 var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4; 3349 var SELECTOR_ACTIVES = '.show, .collapsing'; 3350 var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]'; 3351 var Default$6 = { 3352 toggle: true, 3353 parent: '' 3354 }; 3355 var DefaultType$6 = { 3356 toggle: 'boolean', 3357 parent: '(string|element)' 3358 }; 3359 /** 3360 * Class definition 3361 */ 3362 3363 var Collapse = /*#__PURE__*/function () { 3364 function Collapse(element, config) { 3365 this._isTransitioning = false; 3366 this._element = element; 3367 this._config = this._getConfig(config); 3368 this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 3369 var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3)); 3370 3371 for (var i = 0, len = toggleList.length; i < len; i++) { 3372 var elem = toggleList[i]; 3373 var selector = Util.getSelectorFromElement(elem); 3374 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 3375 return foundElem === element; 3376 }); 3377 3378 if (selector !== null && filterElement.length > 0) { 3379 this._selector = selector; 3380 3381 this._triggerArray.push(elem); 3382 } 3383 } 3384 3385 this._parent = this._config.parent ? this._getParent() : null; 3386 3387 if (!this._config.parent) { 3388 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 3389 } 3390 3391 if (this._config.toggle) { 3392 this.toggle(); 3393 } 3394 } // Getters 3395 3396 3397 var _proto = Collapse.prototype; 3398 3399 // Public 3400 _proto.toggle = function toggle() { 3401 if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3402 this.hide(); 3403 } else { 3404 this.show(); 3405 } 3406 }; 3407 3408 _proto.show = function show() { 3409 var _this = this; 3410 3411 if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3412 return; 3413 } 3414 3415 var actives; 3416 var activesData; 3417 3418 if (this._parent) { 3419 actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { 3420 if (typeof _this._config.parent === 'string') { 3421 return elem.getAttribute('data-parent') === _this._config.parent; 3422 } 3423 3424 return elem.classList.contains(CLASS_NAME_COLLAPSE); 3425 }); 3426 3427 if (actives.length === 0) { 3428 actives = null; 3429 } 3430 } 3431 3432 if (actives) { 3433 activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7); 3434 3435 if (activesData && activesData._isTransitioning) { 3436 return; 3437 } 3438 } 3439 3440 var startEvent = $__default["default"].Event(EVENT_SHOW$4); 3441 $__default["default"](this._element).trigger(startEvent); 3442 3443 if (startEvent.isDefaultPrevented()) { 3444 return; 3445 } 3446 3447 if (actives) { 3448 Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide'); 3449 3450 if (!activesData) { 3451 $__default["default"](actives).data(DATA_KEY$7, null); 3452 } 3453 } 3454 3455 var dimension = this._getDimension(); 3456 3457 $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); 3458 this._element.style[dimension] = 0; 3459 3460 if (this._triggerArray.length) { 3461 $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); 3462 } 3463 3464 this.setTransitioning(true); 3465 3466 var complete = function complete() { 3467 $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 3468 _this._element.style[dimension] = ''; 3469 3470 _this.setTransitioning(false); 3471 3472 $__default["default"](_this._element).trigger(EVENT_SHOWN$4); 3473 }; 3474 3475 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 3476 var scrollSize = "scroll" + capitalizedDimension; 3477 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 3478 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3479 this._element.style[dimension] = this._element[scrollSize] + "px"; 3480 }; 3481 3482 _proto.hide = function hide() { 3483 var _this2 = this; 3484 3485 if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) { 3486 return; 3487 } 3488 3489 var startEvent = $__default["default"].Event(EVENT_HIDE$4); 3490 $__default["default"](this._element).trigger(startEvent); 3491 3492 if (startEvent.isDefaultPrevented()) { 3493 return; 3494 } 3495 3496 var dimension = this._getDimension(); 3497 3498 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 3499 Util.reflow(this._element); 3500 $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6); 3501 var triggerArrayLength = this._triggerArray.length; 3502 3503 if (triggerArrayLength > 0) { 3504 for (var i = 0; i < triggerArrayLength; i++) { 3505 var trigger = this._triggerArray[i]; 3506 var selector = Util.getSelectorFromElement(trigger); 3507 3508 if (selector !== null) { 3509 var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector))); 3510 3511 if (!$elem.hasClass(CLASS_NAME_SHOW$6)) { 3512 $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); 3513 } 3514 } 3515 } 3516 } 3517 3518 this.setTransitioning(true); 3519 3520 var complete = function complete() { 3521 _this2.setTransitioning(false); 3522 3523 $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4); 3524 }; 3525 3526 this._element.style[dimension] = ''; 3527 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 3528 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 3529 }; 3530 3531 _proto.setTransitioning = function setTransitioning(isTransitioning) { 3532 this._isTransitioning = isTransitioning; 3533 }; 3534 3535 _proto.dispose = function dispose() { 3536 $__default["default"].removeData(this._element, DATA_KEY$7); 3537 this._config = null; 3538 this._parent = null; 3539 this._element = null; 3540 this._triggerArray = null; 3541 this._isTransitioning = null; 3542 } // Private 3543 ; 3544 3545 _proto._getConfig = function _getConfig(config) { 3546 config = _extends({}, Default$6, config); 3547 config.toggle = Boolean(config.toggle); // Coerce string values 3548 3549 Util.typeCheckConfig(NAME$7, config, DefaultType$6); 3550 return config; 3551 }; 3552 3553 _proto._getDimension = function _getDimension() { 3554 var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH); 3555 return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; 3556 }; 3557 3558 _proto._getParent = function _getParent() { 3559 var _this3 = this; 3560 3561 var parent; 3562 3563 if (Util.isElement(this._config.parent)) { 3564 parent = this._config.parent; // It's a jQuery object 3565 3566 if (typeof this._config.parent.jquery !== 'undefined') { 3567 parent = this._config.parent[0]; 3568 } 3569 } else { 3570 parent = document.querySelector(this._config.parent); 3571 } 3572 3573 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 3574 var children = [].slice.call(parent.querySelectorAll(selector)); 3575 $__default["default"](children).each(function (i, element) { 3576 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 3577 }); 3578 return parent; 3579 }; 3580 3581 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 3582 var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6); 3583 3584 if (triggerArray.length) { 3585 $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 3586 } 3587 } // Static 3588 ; 3589 3590 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 3591 var selector = Util.getSelectorFromElement(element); 3592 return selector ? document.querySelector(selector) : null; 3593 }; 3594 3595 Collapse._jQueryInterface = function _jQueryInterface(config) { 3596 return this.each(function () { 3597 var $element = $__default["default"](this); 3598 var data = $element.data(DATA_KEY$7); 3599 3600 var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {}); 3601 3602 if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { 3603 _config.toggle = false; 3604 } 3605 3606 if (!data) { 3607 data = new Collapse(this, _config); 3608 $element.data(DATA_KEY$7, data); 3609 } 3610 3611 if (typeof config === 'string') { 3612 if (typeof data[config] === 'undefined') { 3613 throw new TypeError("No method named \"" + config + "\""); 3614 } 3615 3616 data[config](); 3617 } 3618 }); 3619 }; 3620 3621 _createClass(Collapse, null, [{ 3622 key: "VERSION", 3623 get: function get() { 3624 return VERSION$7; 3625 } 3626 }, { 3627 key: "Default", 3628 get: function get() { 3629 return Default$6; 3630 } 3631 }]); 3632 3633 return Collapse; 3634 }(); 3635 /** 3636 * Data API implementation 3637 */ 3638 3639 3640 $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 3641 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 3642 if (event.currentTarget.tagName === 'A') { 3643 event.preventDefault(); 3644 } 3645 3646 var $trigger = $__default["default"](this); 3647 var selector = Util.getSelectorFromElement(this); 3648 var selectors = [].slice.call(document.querySelectorAll(selector)); 3649 $__default["default"](selectors).each(function () { 3650 var $target = $__default["default"](this); 3651 var data = $target.data(DATA_KEY$7); 3652 var config = data ? 'toggle' : $trigger.data(); 3653 3654 Collapse._jQueryInterface.call($target, config); 3655 }); 3656 }); 3657 /** 3658 * jQuery 3659 */ 3660 3661 $__default["default"].fn[NAME$7] = Collapse._jQueryInterface; 3662 $__default["default"].fn[NAME$7].Constructor = Collapse; 3663 3664 $__default["default"].fn[NAME$7].noConflict = function () { 3665 $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7; 3666 return Collapse._jQueryInterface; 3667 }; 3668 3669 /** 3670 * Constants 3671 */ 3672 3673 var NAME$6 = 'dropdown'; 3674 var VERSION$6 = '4.6.2'; 3675 var DATA_KEY$6 = 'bs.dropdown'; 3676 var EVENT_KEY$6 = "." + DATA_KEY$6; 3677 var DATA_API_KEY$3 = '.data-api'; 3678 var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6]; 3679 var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key 3680 3681 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 3682 3683 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 3684 3685 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 3686 3687 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 3688 3689 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 3690 3691 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1); 3692 var CLASS_NAME_DISABLED$1 = 'disabled'; 3693 var CLASS_NAME_SHOW$5 = 'show'; 3694 var CLASS_NAME_DROPUP = 'dropup'; 3695 var CLASS_NAME_DROPRIGHT = 'dropright'; 3696 var CLASS_NAME_DROPLEFT = 'dropleft'; 3697 var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; 3698 var CLASS_NAME_POSITION_STATIC = 'position-static'; 3699 var EVENT_HIDE$3 = "hide" + EVENT_KEY$6; 3700 var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6; 3701 var EVENT_SHOW$3 = "show" + EVENT_KEY$6; 3702 var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6; 3703 var EVENT_CLICK = "click" + EVENT_KEY$6; 3704 var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3; 3705 var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3; 3706 var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3; 3707 var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]'; 3708 var SELECTOR_FORM_CHILD = '.dropdown form'; 3709 var SELECTOR_MENU = '.dropdown-menu'; 3710 var SELECTOR_NAVBAR_NAV = '.navbar-nav'; 3711 var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 3712 var PLACEMENT_TOP = 'top-start'; 3713 var PLACEMENT_TOPEND = 'top-end'; 3714 var PLACEMENT_BOTTOM = 'bottom-start'; 3715 var PLACEMENT_BOTTOMEND = 'bottom-end'; 3716 var PLACEMENT_RIGHT = 'right-start'; 3717 var PLACEMENT_LEFT = 'left-start'; 3718 var Default$5 = { 3719 offset: 0, 3720 flip: true, 3721 boundary: 'scrollParent', 3722 reference: 'toggle', 3723 display: 'dynamic', 3724 popperConfig: null 3725 }; 3726 var DefaultType$5 = { 3727 offset: '(number|string|function)', 3728 flip: 'boolean', 3729 boundary: '(string|element)', 3730 reference: '(string|element)', 3731 display: 'string', 3732 popperConfig: '(null|object)' 3733 }; 3734 /** 3735 * Class definition 3736 */ 3737 3738 var Dropdown = /*#__PURE__*/function () { 3739 function Dropdown(element, config) { 3740 this._element = element; 3741 this._popper = null; 3742 this._config = this._getConfig(config); 3743 this._menu = this._getMenuElement(); 3744 this._inNavbar = this._detectNavbar(); 3745 3746 this._addEventListeners(); 3747 } // Getters 3748 3749 3750 var _proto = Dropdown.prototype; 3751 3752 // Public 3753 _proto.toggle = function toggle() { 3754 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) { 3755 return; 3756 } 3757 3758 var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5); 3759 3760 Dropdown._clearMenus(); 3761 3762 if (isActive) { 3763 return; 3764 } 3765 3766 this.show(true); 3767 }; 3768 3769 _proto.show = function show(usePopper) { 3770 if (usePopper === void 0) { 3771 usePopper = false; 3772 } 3773 3774 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 3775 return; 3776 } 3777 3778 var relatedTarget = { 3779 relatedTarget: this._element 3780 }; 3781 var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget); 3782 3783 var parent = Dropdown._getParentFromElement(this._element); 3784 3785 $__default["default"](parent).trigger(showEvent); 3786 3787 if (showEvent.isDefaultPrevented()) { 3788 return; 3789 } // Totally disable Popper for Dropdowns in Navbar 3790 3791 3792 if (!this._inNavbar && usePopper) { 3793 // Check for Popper dependency 3794 if (typeof Popper__default["default"] === 'undefined') { 3795 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 3796 } 3797 3798 var referenceElement = this._element; 3799 3800 if (this._config.reference === 'parent') { 3801 referenceElement = parent; 3802 } else if (Util.isElement(this._config.reference)) { 3803 referenceElement = this._config.reference; // Check if it's jQuery element 3804 3805 if (typeof this._config.reference.jquery !== 'undefined') { 3806 referenceElement = this._config.reference[0]; 3807 } 3808 } // If boundary is not `scrollParent`, then set position to `static` 3809 // to allow the menu to "escape" the scroll parent's boundaries 3810 // https://github.com/twbs/bootstrap/issues/24251 3811 3812 3813 if (this._config.boundary !== 'scrollParent') { 3814 $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC); 3815 } 3816 3817 this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig()); 3818 } // If this is a touch-enabled device we add extra 3819 // empty mouseover listeners to the body's immediate children; 3820 // only needed because of broken event delegation on iOS 3821 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3822 3823 3824 if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { 3825 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 3826 } 3827 3828 this._element.focus(); 3829 3830 this._element.setAttribute('aria-expanded', true); 3831 3832 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 3833 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget)); 3834 }; 3835 3836 _proto.hide = function hide() { 3837 if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) { 3838 return; 3839 } 3840 3841 var relatedTarget = { 3842 relatedTarget: this._element 3843 }; 3844 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 3845 3846 var parent = Dropdown._getParentFromElement(this._element); 3847 3848 $__default["default"](parent).trigger(hideEvent); 3849 3850 if (hideEvent.isDefaultPrevented()) { 3851 return; 3852 } 3853 3854 if (this._popper) { 3855 this._popper.destroy(); 3856 } 3857 3858 $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5); 3859 $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 3860 }; 3861 3862 _proto.dispose = function dispose() { 3863 $__default["default"].removeData(this._element, DATA_KEY$6); 3864 $__default["default"](this._element).off(EVENT_KEY$6); 3865 this._element = null; 3866 this._menu = null; 3867 3868 if (this._popper !== null) { 3869 this._popper.destroy(); 3870 3871 this._popper = null; 3872 } 3873 }; 3874 3875 _proto.update = function update() { 3876 this._inNavbar = this._detectNavbar(); 3877 3878 if (this._popper !== null) { 3879 this._popper.scheduleUpdate(); 3880 } 3881 } // Private 3882 ; 3883 3884 _proto._addEventListeners = function _addEventListeners() { 3885 var _this = this; 3886 3887 $__default["default"](this._element).on(EVENT_CLICK, function (event) { 3888 event.preventDefault(); 3889 event.stopPropagation(); 3890 3891 _this.toggle(); 3892 }); 3893 }; 3894 3895 _proto._getConfig = function _getConfig(config) { 3896 config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config); 3897 Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); 3898 return config; 3899 }; 3900 3901 _proto._getMenuElement = function _getMenuElement() { 3902 if (!this._menu) { 3903 var parent = Dropdown._getParentFromElement(this._element); 3904 3905 if (parent) { 3906 this._menu = parent.querySelector(SELECTOR_MENU); 3907 } 3908 } 3909 3910 return this._menu; 3911 }; 3912 3913 _proto._getPlacement = function _getPlacement() { 3914 var $parentDropdown = $__default["default"](this._element.parentNode); 3915 var placement = PLACEMENT_BOTTOM; // Handle dropup 3916 3917 if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { 3918 placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; 3919 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { 3920 placement = PLACEMENT_RIGHT; 3921 } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { 3922 placement = PLACEMENT_LEFT; 3923 } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) { 3924 placement = PLACEMENT_BOTTOMEND; 3925 } 3926 3927 return placement; 3928 }; 3929 3930 _proto._detectNavbar = function _detectNavbar() { 3931 return $__default["default"](this._element).closest('.navbar').length > 0; 3932 }; 3933 3934 _proto._getOffset = function _getOffset() { 3935 var _this2 = this; 3936 3937 var offset = {}; 3938 3939 if (typeof this._config.offset === 'function') { 3940 offset.fn = function (data) { 3941 data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element)); 3942 return data; 3943 }; 3944 } else { 3945 offset.offset = this._config.offset; 3946 } 3947 3948 return offset; 3949 }; 3950 3951 _proto._getPopperConfig = function _getPopperConfig() { 3952 var popperConfig = { 3953 placement: this._getPlacement(), 3954 modifiers: { 3955 offset: this._getOffset(), 3956 flip: { 3957 enabled: this._config.flip 3958 }, 3959 preventOverflow: { 3960 boundariesElement: this._config.boundary 3961 } 3962 } 3963 }; // Disable Popper if we have a static display 3964 3965 if (this._config.display === 'static') { 3966 popperConfig.modifiers.applyStyle = { 3967 enabled: false 3968 }; 3969 } 3970 3971 return _extends({}, popperConfig, this._config.popperConfig); 3972 } // Static 3973 ; 3974 3975 Dropdown._jQueryInterface = function _jQueryInterface(config) { 3976 return this.each(function () { 3977 var data = $__default["default"](this).data(DATA_KEY$6); 3978 3979 var _config = typeof config === 'object' ? config : null; 3980 3981 if (!data) { 3982 data = new Dropdown(this, _config); 3983 $__default["default"](this).data(DATA_KEY$6, data); 3984 } 3985 3986 if (typeof config === 'string') { 3987 if (typeof data[config] === 'undefined') { 3988 throw new TypeError("No method named \"" + config + "\""); 3989 } 3990 3991 data[config](); 3992 } 3993 }); 3994 }; 3995 3996 Dropdown._clearMenus = function _clearMenus(event) { 3997 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 3998 return; 3999 } 4000 4001 var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)); 4002 4003 for (var i = 0, len = toggles.length; i < len; i++) { 4004 var parent = Dropdown._getParentFromElement(toggles[i]); 4005 4006 var context = $__default["default"](toggles[i]).data(DATA_KEY$6); 4007 var relatedTarget = { 4008 relatedTarget: toggles[i] 4009 }; 4010 4011 if (event && event.type === 'click') { 4012 relatedTarget.clickEvent = event; 4013 } 4014 4015 if (!context) { 4016 continue; 4017 } 4018 4019 var dropdownMenu = context._menu; 4020 4021 if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) { 4022 continue; 4023 } 4024 4025 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) { 4026 continue; 4027 } 4028 4029 var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget); 4030 $__default["default"](parent).trigger(hideEvent); 4031 4032 if (hideEvent.isDefaultPrevented()) { 4033 continue; 4034 } // If this is a touch-enabled device we remove the extra 4035 // empty mouseover listeners we added for iOS support 4036 4037 4038 if ('ontouchstart' in document.documentElement) { 4039 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 4040 } 4041 4042 toggles[i].setAttribute('aria-expanded', 'false'); 4043 4044 if (context._popper) { 4045 context._popper.destroy(); 4046 } 4047 4048 $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5); 4049 $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget)); 4050 } 4051 }; 4052 4053 Dropdown._getParentFromElement = function _getParentFromElement(element) { 4054 var parent; 4055 var selector = Util.getSelectorFromElement(element); 4056 4057 if (selector) { 4058 parent = document.querySelector(selector); 4059 } 4060 4061 return parent || element.parentNode; 4062 } // eslint-disable-next-line complexity 4063 ; 4064 4065 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 4066 // If not input/textarea: 4067 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 4068 // If input/textarea: 4069 // - If space key => not a dropdown command 4070 // - If key is other than escape 4071 // - If key is not up or down => not a dropdown command 4072 // - If trigger inside the menu => not a dropdown command 4073 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 4074 return; 4075 } 4076 4077 if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) { 4078 return; 4079 } 4080 4081 var parent = Dropdown._getParentFromElement(this); 4082 4083 var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5); 4084 4085 if (!isActive && event.which === ESCAPE_KEYCODE$1) { 4086 return; 4087 } 4088 4089 event.preventDefault(); 4090 event.stopPropagation(); 4091 4092 if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) { 4093 if (event.which === ESCAPE_KEYCODE$1) { 4094 $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus'); 4095 } 4096 4097 $__default["default"](this).trigger('click'); 4098 return; 4099 } 4100 4101 var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { 4102 return $__default["default"](item).is(':visible'); 4103 }); 4104 4105 if (items.length === 0) { 4106 return; 4107 } 4108 4109 var index = items.indexOf(event.target); 4110 4111 if (event.which === ARROW_UP_KEYCODE && index > 0) { 4112 // Up 4113 index--; 4114 } 4115 4116 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 4117 // Down 4118 index++; 4119 } 4120 4121 if (index < 0) { 4122 index = 0; 4123 } 4124 4125 items[index].focus(); 4126 }; 4127 4128 _createClass(Dropdown, null, [{ 4129 key: "VERSION", 4130 get: function get() { 4131 return VERSION$6; 4132 } 4133 }, { 4134 key: "Default", 4135 get: function get() { 4136 return Default$5; 4137 } 4138 }, { 4139 key: "DefaultType", 4140 get: function get() { 4141 return DefaultType$5; 4142 } 4143 }]); 4144 4145 return Dropdown; 4146 }(); 4147 /** 4148 * Data API implementation 4149 */ 4150 4151 4152 $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 4153 event.preventDefault(); 4154 event.stopPropagation(); 4155 4156 Dropdown._jQueryInterface.call($__default["default"](this), 'toggle'); 4157 }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) { 4158 e.stopPropagation(); 4159 }); 4160 /** 4161 * jQuery 4162 */ 4163 4164 $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface; 4165 $__default["default"].fn[NAME$6].Constructor = Dropdown; 4166 4167 $__default["default"].fn[NAME$6].noConflict = function () { 4168 $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6; 4169 return Dropdown._jQueryInterface; 4170 }; 4171 4172 /** 4173 * Constants 4174 */ 4175 4176 var NAME$5 = 'modal'; 4177 var VERSION$5 = '4.6.2'; 4178 var DATA_KEY$5 = 'bs.modal'; 4179 var EVENT_KEY$5 = "." + DATA_KEY$5; 4180 var DATA_API_KEY$2 = '.data-api'; 4181 var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5]; 4182 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 4183 4184 var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; 4185 var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; 4186 var CLASS_NAME_BACKDROP = 'modal-backdrop'; 4187 var CLASS_NAME_OPEN = 'modal-open'; 4188 var CLASS_NAME_FADE$4 = 'fade'; 4189 var CLASS_NAME_SHOW$4 = 'show'; 4190 var CLASS_NAME_STATIC = 'modal-static'; 4191 var EVENT_HIDE$2 = "hide" + EVENT_KEY$5; 4192 var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5; 4193 var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5; 4194 var EVENT_SHOW$2 = "show" + EVENT_KEY$5; 4195 var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5; 4196 var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5; 4197 var EVENT_RESIZE = "resize" + EVENT_KEY$5; 4198 var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5; 4199 var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5; 4200 var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5; 4201 var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5; 4202 var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2; 4203 var SELECTOR_DIALOG = '.modal-dialog'; 4204 var SELECTOR_MODAL_BODY = '.modal-body'; 4205 var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]'; 4206 var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]'; 4207 var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 4208 var SELECTOR_STICKY_CONTENT = '.sticky-top'; 4209 var Default$4 = { 4210 backdrop: true, 4211 keyboard: true, 4212 focus: true, 4213 show: true 4214 }; 4215 var DefaultType$4 = { 4216 backdrop: '(boolean|string)', 4217 keyboard: 'boolean', 4218 focus: 'boolean', 4219 show: 'boolean' 4220 }; 4221 /** 4222 * Class definition 4223 */ 4224 4225 var Modal = /*#__PURE__*/function () { 4226 function Modal(element, config) { 4227 this._config = this._getConfig(config); 4228 this._element = element; 4229 this._dialog = element.querySelector(SELECTOR_DIALOG); 4230 this._backdrop = null; 4231 this._isShown = false; 4232 this._isBodyOverflowing = false; 4233 this._ignoreBackdropClick = false; 4234 this._isTransitioning = false; 4235 this._scrollbarWidth = 0; 4236 } // Getters 4237 4238 4239 var _proto = Modal.prototype; 4240 4241 // Public 4242 _proto.toggle = function toggle(relatedTarget) { 4243 return this._isShown ? this.hide() : this.show(relatedTarget); 4244 }; 4245 4246 _proto.show = function show(relatedTarget) { 4247 var _this = this; 4248 4249 if (this._isShown || this._isTransitioning) { 4250 return; 4251 } 4252 4253 var showEvent = $__default["default"].Event(EVENT_SHOW$2, { 4254 relatedTarget: relatedTarget 4255 }); 4256 $__default["default"](this._element).trigger(showEvent); 4257 4258 if (showEvent.isDefaultPrevented()) { 4259 return; 4260 } 4261 4262 this._isShown = true; 4263 4264 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 4265 this._isTransitioning = true; 4266 } 4267 4268 this._checkScrollbar(); 4269 4270 this._setScrollbar(); 4271 4272 this._adjustDialog(); 4273 4274 this._setEscapeEvent(); 4275 4276 this._setResizeEvent(); 4277 4278 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) { 4279 return _this.hide(event); 4280 }); 4281 $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { 4282 $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { 4283 if ($__default["default"](event.target).is(_this._element)) { 4284 _this._ignoreBackdropClick = true; 4285 } 4286 }); 4287 }); 4288 4289 this._showBackdrop(function () { 4290 return _this._showElement(relatedTarget); 4291 }); 4292 }; 4293 4294 _proto.hide = function hide(event) { 4295 var _this2 = this; 4296 4297 if (event) { 4298 event.preventDefault(); 4299 } 4300 4301 if (!this._isShown || this._isTransitioning) { 4302 return; 4303 } 4304 4305 var hideEvent = $__default["default"].Event(EVENT_HIDE$2); 4306 $__default["default"](this._element).trigger(hideEvent); 4307 4308 if (!this._isShown || hideEvent.isDefaultPrevented()) { 4309 return; 4310 } 4311 4312 this._isShown = false; 4313 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 4314 4315 if (transition) { 4316 this._isTransitioning = true; 4317 } 4318 4319 this._setEscapeEvent(); 4320 4321 this._setResizeEvent(); 4322 4323 $__default["default"](document).off(EVENT_FOCUSIN); 4324 $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4); 4325 $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1); 4326 $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); 4327 4328 if (transition) { 4329 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 4330 $__default["default"](this._element).one(Util.TRANSITION_END, function (event) { 4331 return _this2._hideModal(event); 4332 }).emulateTransitionEnd(transitionDuration); 4333 } else { 4334 this._hideModal(); 4335 } 4336 }; 4337 4338 _proto.dispose = function dispose() { 4339 [window, this._element, this._dialog].forEach(function (htmlElement) { 4340 return $__default["default"](htmlElement).off(EVENT_KEY$5); 4341 }); 4342 /** 4343 * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` 4344 * Do not move `document` in `htmlElements` array 4345 * It will remove `EVENT_CLICK_DATA_API` event that should remain 4346 */ 4347 4348 $__default["default"](document).off(EVENT_FOCUSIN); 4349 $__default["default"].removeData(this._element, DATA_KEY$5); 4350 this._config = null; 4351 this._element = null; 4352 this._dialog = null; 4353 this._backdrop = null; 4354 this._isShown = null; 4355 this._isBodyOverflowing = null; 4356 this._ignoreBackdropClick = null; 4357 this._isTransitioning = null; 4358 this._scrollbarWidth = null; 4359 }; 4360 4361 _proto.handleUpdate = function handleUpdate() { 4362 this._adjustDialog(); 4363 } // Private 4364 ; 4365 4366 _proto._getConfig = function _getConfig(config) { 4367 config = _extends({}, Default$4, config); 4368 Util.typeCheckConfig(NAME$5, config, DefaultType$4); 4369 return config; 4370 }; 4371 4372 _proto._triggerBackdropTransition = function _triggerBackdropTransition() { 4373 var _this3 = this; 4374 4375 var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); 4376 $__default["default"](this._element).trigger(hideEventPrevented); 4377 4378 if (hideEventPrevented.isDefaultPrevented()) { 4379 return; 4380 } 4381 4382 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4383 4384 if (!isModalOverflowing) { 4385 this._element.style.overflowY = 'hidden'; 4386 } 4387 4388 this._element.classList.add(CLASS_NAME_STATIC); 4389 4390 var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); 4391 $__default["default"](this._element).off(Util.TRANSITION_END); 4392 $__default["default"](this._element).one(Util.TRANSITION_END, function () { 4393 _this3._element.classList.remove(CLASS_NAME_STATIC); 4394 4395 if (!isModalOverflowing) { 4396 $__default["default"](_this3._element).one(Util.TRANSITION_END, function () { 4397 _this3._element.style.overflowY = ''; 4398 }).emulateTransitionEnd(_this3._element, modalTransitionDuration); 4399 } 4400 }).emulateTransitionEnd(modalTransitionDuration); 4401 4402 this._element.focus(); 4403 }; 4404 4405 _proto._showElement = function _showElement(relatedTarget) { 4406 var _this4 = this; 4407 4408 var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4); 4409 var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; 4410 4411 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 4412 // Don't move modal's DOM position 4413 document.body.appendChild(this._element); 4414 } 4415 4416 this._element.style.display = 'block'; 4417 4418 this._element.removeAttribute('aria-hidden'); 4419 4420 this._element.setAttribute('aria-modal', true); 4421 4422 this._element.setAttribute('role', 'dialog'); 4423 4424 if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { 4425 modalBody.scrollTop = 0; 4426 } else { 4427 this._element.scrollTop = 0; 4428 } 4429 4430 if (transition) { 4431 Util.reflow(this._element); 4432 } 4433 4434 $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4); 4435 4436 if (this._config.focus) { 4437 this._enforceFocus(); 4438 } 4439 4440 var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, { 4441 relatedTarget: relatedTarget 4442 }); 4443 4444 var transitionComplete = function transitionComplete() { 4445 if (_this4._config.focus) { 4446 _this4._element.focus(); 4447 } 4448 4449 _this4._isTransitioning = false; 4450 $__default["default"](_this4._element).trigger(shownEvent); 4451 }; 4452 4453 if (transition) { 4454 var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); 4455 $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 4456 } else { 4457 transitionComplete(); 4458 } 4459 }; 4460 4461 _proto._enforceFocus = function _enforceFocus() { 4462 var _this5 = this; 4463 4464 $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop 4465 .on(EVENT_FOCUSIN, function (event) { 4466 if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { 4467 _this5._element.focus(); 4468 } 4469 }); 4470 }; 4471 4472 _proto._setEscapeEvent = function _setEscapeEvent() { 4473 var _this6 = this; 4474 4475 if (this._isShown) { 4476 $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { 4477 if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 4478 event.preventDefault(); 4479 4480 _this6.hide(); 4481 } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { 4482 _this6._triggerBackdropTransition(); 4483 } 4484 }); 4485 } else if (!this._isShown) { 4486 $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); 4487 } 4488 }; 4489 4490 _proto._setResizeEvent = function _setResizeEvent() { 4491 var _this7 = this; 4492 4493 if (this._isShown) { 4494 $__default["default"](window).on(EVENT_RESIZE, function (event) { 4495 return _this7.handleUpdate(event); 4496 }); 4497 } else { 4498 $__default["default"](window).off(EVENT_RESIZE); 4499 } 4500 }; 4501 4502 _proto._hideModal = function _hideModal() { 4503 var _this8 = this; 4504 4505 this._element.style.display = 'none'; 4506 4507 this._element.setAttribute('aria-hidden', true); 4508 4509 this._element.removeAttribute('aria-modal'); 4510 4511 this._element.removeAttribute('role'); 4512 4513 this._isTransitioning = false; 4514 4515 this._showBackdrop(function () { 4516 $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); 4517 4518 _this8._resetAdjustments(); 4519 4520 _this8._resetScrollbar(); 4521 4522 $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2); 4523 }); 4524 }; 4525 4526 _proto._removeBackdrop = function _removeBackdrop() { 4527 if (this._backdrop) { 4528 $__default["default"](this._backdrop).remove(); 4529 this._backdrop = null; 4530 } 4531 }; 4532 4533 _proto._showBackdrop = function _showBackdrop(callback) { 4534 var _this9 = this; 4535 4536 var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : ''; 4537 4538 if (this._isShown && this._config.backdrop) { 4539 this._backdrop = document.createElement('div'); 4540 this._backdrop.className = CLASS_NAME_BACKDROP; 4541 4542 if (animate) { 4543 this._backdrop.classList.add(animate); 4544 } 4545 4546 $__default["default"](this._backdrop).appendTo(document.body); 4547 $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) { 4548 if (_this9._ignoreBackdropClick) { 4549 _this9._ignoreBackdropClick = false; 4550 return; 4551 } 4552 4553 if (event.target !== event.currentTarget) { 4554 return; 4555 } 4556 4557 if (_this9._config.backdrop === 'static') { 4558 _this9._triggerBackdropTransition(); 4559 } else { 4560 _this9.hide(); 4561 } 4562 }); 4563 4564 if (animate) { 4565 Util.reflow(this._backdrop); 4566 } 4567 4568 $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4); 4569 4570 if (!callback) { 4571 return; 4572 } 4573 4574 if (!animate) { 4575 callback(); 4576 return; 4577 } 4578 4579 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 4580 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 4581 } else if (!this._isShown && this._backdrop) { 4582 $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4); 4583 4584 var callbackRemove = function callbackRemove() { 4585 _this9._removeBackdrop(); 4586 4587 if (callback) { 4588 callback(); 4589 } 4590 }; 4591 4592 if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) { 4593 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 4594 4595 $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 4596 } else { 4597 callbackRemove(); 4598 } 4599 } else if (callback) { 4600 callback(); 4601 } 4602 } // ---------------------------------------------------------------------- 4603 // the following methods are used to handle overflowing modals 4604 // todo (fat): these should probably be refactored out of modal.js 4605 // ---------------------------------------------------------------------- 4606 ; 4607 4608 _proto._adjustDialog = function _adjustDialog() { 4609 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4610 4611 if (!this._isBodyOverflowing && isModalOverflowing) { 4612 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 4613 } 4614 4615 if (this._isBodyOverflowing && !isModalOverflowing) { 4616 this._element.style.paddingRight = this._scrollbarWidth + "px"; 4617 } 4618 }; 4619 4620 _proto._resetAdjustments = function _resetAdjustments() { 4621 this._element.style.paddingLeft = ''; 4622 this._element.style.paddingRight = ''; 4623 }; 4624 4625 _proto._checkScrollbar = function _checkScrollbar() { 4626 var rect = document.body.getBoundingClientRect(); 4627 this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; 4628 this._scrollbarWidth = this._getScrollbarWidth(); 4629 }; 4630 4631 _proto._setScrollbar = function _setScrollbar() { 4632 var _this10 = this; 4633 4634 if (this._isBodyOverflowing) { 4635 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 4636 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 4637 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 4638 var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding 4639 4640 $__default["default"](fixedContent).each(function (index, element) { 4641 var actualPadding = element.style.paddingRight; 4642 var calculatedPadding = $__default["default"](element).css('padding-right'); 4643 $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); 4644 }); // Adjust sticky content margin 4645 4646 $__default["default"](stickyContent).each(function (index, element) { 4647 var actualMargin = element.style.marginRight; 4648 var calculatedMargin = $__default["default"](element).css('margin-right'); 4649 $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); 4650 }); // Adjust body padding 4651 4652 var actualPadding = document.body.style.paddingRight; 4653 var calculatedPadding = $__default["default"](document.body).css('padding-right'); 4654 $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 4655 } 4656 4657 $__default["default"](document.body).addClass(CLASS_NAME_OPEN); 4658 }; 4659 4660 _proto._resetScrollbar = function _resetScrollbar() { 4661 // Restore fixed content padding 4662 var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); 4663 $__default["default"](fixedContent).each(function (index, element) { 4664 var padding = $__default["default"](element).data('padding-right'); 4665 $__default["default"](element).removeData('padding-right'); 4666 element.style.paddingRight = padding ? padding : ''; 4667 }); // Restore sticky content 4668 4669 var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); 4670 $__default["default"](elements).each(function (index, element) { 4671 var margin = $__default["default"](element).data('margin-right'); 4672 4673 if (typeof margin !== 'undefined') { 4674 $__default["default"](element).css('margin-right', margin).removeData('margin-right'); 4675 } 4676 }); // Restore body padding 4677 4678 var padding = $__default["default"](document.body).data('padding-right'); 4679 $__default["default"](document.body).removeData('padding-right'); 4680 document.body.style.paddingRight = padding ? padding : ''; 4681 }; 4682 4683 _proto._getScrollbarWidth = function _getScrollbarWidth() { 4684 // thx d.walsh 4685 var scrollDiv = document.createElement('div'); 4686 scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; 4687 document.body.appendChild(scrollDiv); 4688 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 4689 document.body.removeChild(scrollDiv); 4690 return scrollbarWidth; 4691 } // Static 4692 ; 4693 4694 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 4695 return this.each(function () { 4696 var data = $__default["default"](this).data(DATA_KEY$5); 4697 4698 var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); 4699 4700 if (!data) { 4701 data = new Modal(this, _config); 4702 $__default["default"](this).data(DATA_KEY$5, data); 4703 } 4704 4705 if (typeof config === 'string') { 4706 if (typeof data[config] === 'undefined') { 4707 throw new TypeError("No method named \"" + config + "\""); 4708 } 4709 4710 data[config](relatedTarget); 4711 } else if (_config.show) { 4712 data.show(relatedTarget); 4713 } 4714 }); 4715 }; 4716 4717 _createClass(Modal, null, [{ 4718 key: "VERSION", 4719 get: function get() { 4720 return VERSION$5; 4721 } 4722 }, { 4723 key: "Default", 4724 get: function get() { 4725 return Default$4; 4726 } 4727 }]); 4728 4729 return Modal; 4730 }(); 4731 /** 4732 * Data API implementation 4733 */ 4734 4735 4736 $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 4737 var _this11 = this; 4738 4739 var target; 4740 var selector = Util.getSelectorFromElement(this); 4741 4742 if (selector) { 4743 target = document.querySelector(selector); 4744 } 4745 4746 var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); 4747 4748 if (this.tagName === 'A' || this.tagName === 'AREA') { 4749 event.preventDefault(); 4750 } 4751 4752 var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) { 4753 if (showEvent.isDefaultPrevented()) { 4754 // Only register focus restorer if modal will actually get shown 4755 return; 4756 } 4757 4758 $target.one(EVENT_HIDDEN$2, function () { 4759 if ($__default["default"](_this11).is(':visible')) { 4760 _this11.focus(); 4761 } 4762 }); 4763 }); 4764 4765 Modal._jQueryInterface.call($__default["default"](target), config, this); 4766 }); 4767 /** 4768 * jQuery 4769 */ 4770 4771 $__default["default"].fn[NAME$5] = Modal._jQueryInterface; 4772 $__default["default"].fn[NAME$5].Constructor = Modal; 4773 4774 $__default["default"].fn[NAME$5].noConflict = function () { 4775 $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5; 4776 return Modal._jQueryInterface; 4777 }; 4778 4779 /** 4780 * -------------------------------------------------------------------------- 4781 * Bootstrap (v4.6.2): tools/sanitizer.js 4782 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4783 * -------------------------------------------------------------------------- 4784 */ 4785 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; 4786 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 4787 var DefaultWhitelist = { 4788 // Global attributes allowed on any supplied element below. 4789 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 4790 a: ['target', 'href', 'title', 'rel'], 4791 area: [], 4792 b: [], 4793 br: [], 4794 col: [], 4795 code: [], 4796 div: [], 4797 em: [], 4798 hr: [], 4799 h1: [], 4800 h2: [], 4801 h3: [], 4802 h4: [], 4803 h5: [], 4804 h6: [], 4805 i: [], 4806 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 4807 li: [], 4808 ol: [], 4809 p: [], 4810 pre: [], 4811 s: [], 4812 small: [], 4813 span: [], 4814 sub: [], 4815 sup: [], 4816 strong: [], 4817 u: [], 4818 ul: [] 4819 }; 4820 /** 4821 * A pattern that recognizes a commonly useful subset of URLs that are safe. 4822 * 4823 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 4824 */ 4825 4826 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 4827 /** 4828 * A pattern that matches safe data URLs. Only matches image, video and audio types. 4829 * 4830 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 4831 */ 4832 4833 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 4834 4835 function allowedAttribute(attr, allowedAttributeList) { 4836 var attrName = attr.nodeName.toLowerCase(); 4837 4838 if (allowedAttributeList.indexOf(attrName) !== -1) { 4839 if (uriAttrs.indexOf(attrName) !== -1) { 4840 return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)); 4841 } 4842 4843 return true; 4844 } 4845 4846 var regExp = allowedAttributeList.filter(function (attrRegex) { 4847 return attrRegex instanceof RegExp; 4848 }); // Check if a regular expression validates the attribute. 4849 4850 for (var i = 0, len = regExp.length; i < len; i++) { 4851 if (regExp[i].test(attrName)) { 4852 return true; 4853 } 4854 } 4855 4856 return false; 4857 } 4858 4859 function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 4860 if (unsafeHtml.length === 0) { 4861 return unsafeHtml; 4862 } 4863 4864 if (sanitizeFn && typeof sanitizeFn === 'function') { 4865 return sanitizeFn(unsafeHtml); 4866 } 4867 4868 var domParser = new window.DOMParser(); 4869 var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 4870 var whitelistKeys = Object.keys(whiteList); 4871 var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); 4872 4873 var _loop = function _loop(i, len) { 4874 var el = elements[i]; 4875 var elName = el.nodeName.toLowerCase(); 4876 4877 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 4878 el.parentNode.removeChild(el); 4879 return "continue"; 4880 } 4881 4882 var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread 4883 4884 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 4885 attributeList.forEach(function (attr) { 4886 if (!allowedAttribute(attr, whitelistedAttributes)) { 4887 el.removeAttribute(attr.nodeName); 4888 } 4889 }); 4890 }; 4891 4892 for (var i = 0, len = elements.length; i < len; i++) { 4893 var _ret = _loop(i); 4894 4895 if (_ret === "continue") continue; 4896 } 4897 4898 return createdDocument.body.innerHTML; 4899 } 4900 4901 /** 4902 * Constants 4903 */ 4904 4905 var NAME$4 = 'tooltip'; 4906 var VERSION$4 = '4.6.2'; 4907 var DATA_KEY$4 = 'bs.tooltip'; 4908 var EVENT_KEY$4 = "." + DATA_KEY$4; 4909 var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4]; 4910 var CLASS_PREFIX$1 = 'bs-tooltip'; 4911 var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); 4912 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 4913 var CLASS_NAME_FADE$3 = 'fade'; 4914 var CLASS_NAME_SHOW$3 = 'show'; 4915 var HOVER_STATE_SHOW = 'show'; 4916 var HOVER_STATE_OUT = 'out'; 4917 var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 4918 var SELECTOR_ARROW = '.arrow'; 4919 var TRIGGER_HOVER = 'hover'; 4920 var TRIGGER_FOCUS = 'focus'; 4921 var TRIGGER_CLICK = 'click'; 4922 var TRIGGER_MANUAL = 'manual'; 4923 var AttachmentMap = { 4924 AUTO: 'auto', 4925 TOP: 'top', 4926 RIGHT: 'right', 4927 BOTTOM: 'bottom', 4928 LEFT: 'left' 4929 }; 4930 var Default$3 = { 4931 animation: true, 4932 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 4933 trigger: 'hover focus', 4934 title: '', 4935 delay: 0, 4936 html: false, 4937 selector: false, 4938 placement: 'top', 4939 offset: 0, 4940 container: false, 4941 fallbackPlacement: 'flip', 4942 boundary: 'scrollParent', 4943 customClass: '', 4944 sanitize: true, 4945 sanitizeFn: null, 4946 whiteList: DefaultWhitelist, 4947 popperConfig: null 4948 }; 4949 var DefaultType$3 = { 4950 animation: 'boolean', 4951 template: 'string', 4952 title: '(string|element|function)', 4953 trigger: 'string', 4954 delay: '(number|object)', 4955 html: 'boolean', 4956 selector: '(string|boolean)', 4957 placement: '(string|function)', 4958 offset: '(number|string|function)', 4959 container: '(string|element|boolean)', 4960 fallbackPlacement: '(string|array)', 4961 boundary: '(string|element)', 4962 customClass: '(string|function)', 4963 sanitize: 'boolean', 4964 sanitizeFn: '(null|function)', 4965 whiteList: 'object', 4966 popperConfig: '(null|object)' 4967 }; 4968 var Event$1 = { 4969 HIDE: "hide" + EVENT_KEY$4, 4970 HIDDEN: "hidden" + EVENT_KEY$4, 4971 SHOW: "show" + EVENT_KEY$4, 4972 SHOWN: "shown" + EVENT_KEY$4, 4973 INSERTED: "inserted" + EVENT_KEY$4, 4974 CLICK: "click" + EVENT_KEY$4, 4975 FOCUSIN: "focusin" + EVENT_KEY$4, 4976 FOCUSOUT: "focusout" + EVENT_KEY$4, 4977 MOUSEENTER: "mouseenter" + EVENT_KEY$4, 4978 MOUSELEAVE: "mouseleave" + EVENT_KEY$4 4979 }; 4980 /** 4981 * Class definition 4982 */ 4983 4984 var Tooltip = /*#__PURE__*/function () { 4985 function Tooltip(element, config) { 4986 if (typeof Popper__default["default"] === 'undefined') { 4987 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 4988 } // Private 4989 4990 4991 this._isEnabled = true; 4992 this._timeout = 0; 4993 this._hoverState = ''; 4994 this._activeTrigger = {}; 4995 this._popper = null; // Protected 4996 4997 this.element = element; 4998 this.config = this._getConfig(config); 4999 this.tip = null; 5000 5001 this._setListeners(); 5002 } // Getters 5003 5004 5005 var _proto = Tooltip.prototype; 5006 5007 // Public 5008 _proto.enable = function enable() { 5009 this._isEnabled = true; 5010 }; 5011 5012 _proto.disable = function disable() { 5013 this._isEnabled = false; 5014 }; 5015 5016 _proto.toggleEnabled = function toggleEnabled() { 5017 this._isEnabled = !this._isEnabled; 5018 }; 5019 5020 _proto.toggle = function toggle(event) { 5021 if (!this._isEnabled) { 5022 return; 5023 } 5024 5025 if (event) { 5026 var dataKey = this.constructor.DATA_KEY; 5027 var context = $__default["default"](event.currentTarget).data(dataKey); 5028 5029 if (!context) { 5030 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 5031 $__default["default"](event.currentTarget).data(dataKey, context); 5032 } 5033 5034 context._activeTrigger.click = !context._activeTrigger.click; 5035 5036 if (context._isWithActiveTrigger()) { 5037 context._enter(null, context); 5038 } else { 5039 context._leave(null, context); 5040 } 5041 } else { 5042 if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) { 5043 this._leave(null, this); 5044 5045 return; 5046 } 5047 5048 this._enter(null, this); 5049 } 5050 }; 5051 5052 _proto.dispose = function dispose() { 5053 clearTimeout(this._timeout); 5054 $__default["default"].removeData(this.element, this.constructor.DATA_KEY); 5055 $__default["default"](this.element).off(this.constructor.EVENT_KEY); 5056 $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); 5057 5058 if (this.tip) { 5059 $__default["default"](this.tip).remove(); 5060 } 5061 5062 this._isEnabled = null; 5063 this._timeout = null; 5064 this._hoverState = null; 5065 this._activeTrigger = null; 5066 5067 if (this._popper) { 5068 this._popper.destroy(); 5069 } 5070 5071 this._popper = null; 5072 this.element = null; 5073 this.config = null; 5074 this.tip = null; 5075 }; 5076 5077 _proto.show = function show() { 5078 var _this = this; 5079 5080 if ($__default["default"](this.element).css('display') === 'none') { 5081 throw new Error('Please use show on visible elements'); 5082 } 5083 5084 var showEvent = $__default["default"].Event(this.constructor.Event.SHOW); 5085 5086 if (this.isWithContent() && this._isEnabled) { 5087 $__default["default"](this.element).trigger(showEvent); 5088 var shadowRoot = Util.findShadowRoot(this.element); 5089 var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); 5090 5091 if (showEvent.isDefaultPrevented() || !isInTheDom) { 5092 return; 5093 } 5094 5095 var tip = this.getTipElement(); 5096 var tipId = Util.getUID(this.constructor.NAME); 5097 tip.setAttribute('id', tipId); 5098 this.element.setAttribute('aria-describedby', tipId); 5099 this.setContent(); 5100 5101 if (this.config.animation) { 5102 $__default["default"](tip).addClass(CLASS_NAME_FADE$3); 5103 } 5104 5105 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 5106 5107 var attachment = this._getAttachment(placement); 5108 5109 this.addAttachmentClass(attachment); 5110 5111 var container = this._getContainer(); 5112 5113 $__default["default"](tip).data(this.constructor.DATA_KEY, this); 5114 5115 if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) { 5116 $__default["default"](tip).appendTo(container); 5117 } 5118 5119 $__default["default"](this.element).trigger(this.constructor.Event.INSERTED); 5120 this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment)); 5121 $__default["default"](tip).addClass(CLASS_NAME_SHOW$3); 5122 $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra 5123 // empty mouseover listeners to the body's immediate children; 5124 // only needed because of broken event delegation on iOS 5125 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5126 5127 if ('ontouchstart' in document.documentElement) { 5128 $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop); 5129 } 5130 5131 var complete = function complete() { 5132 if (_this.config.animation) { 5133 _this._fixTransition(); 5134 } 5135 5136 var prevHoverState = _this._hoverState; 5137 _this._hoverState = null; 5138 $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN); 5139 5140 if (prevHoverState === HOVER_STATE_OUT) { 5141 _this._leave(null, _this); 5142 } 5143 }; 5144 5145 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 5146 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 5147 $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 5148 } else { 5149 complete(); 5150 } 5151 } 5152 }; 5153 5154 _proto.hide = function hide(callback) { 5155 var _this2 = this; 5156 5157 var tip = this.getTipElement(); 5158 var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE); 5159 5160 var complete = function complete() { 5161 if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { 5162 tip.parentNode.removeChild(tip); 5163 } 5164 5165 _this2._cleanTipClass(); 5166 5167 _this2.element.removeAttribute('aria-describedby'); 5168 5169 $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN); 5170 5171 if (_this2._popper !== null) { 5172 _this2._popper.destroy(); 5173 } 5174 5175 if (callback) { 5176 callback(); 5177 } 5178 }; 5179 5180 $__default["default"](this.element).trigger(hideEvent); 5181 5182 if (hideEvent.isDefaultPrevented()) { 5183 return; 5184 } 5185 5186 $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra 5187 // empty mouseover listeners we added for iOS support 5188 5189 if ('ontouchstart' in document.documentElement) { 5190 $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop); 5191 } 5192 5193 this._activeTrigger[TRIGGER_CLICK] = false; 5194 this._activeTrigger[TRIGGER_FOCUS] = false; 5195 this._activeTrigger[TRIGGER_HOVER] = false; 5196 5197 if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) { 5198 var transitionDuration = Util.getTransitionDurationFromElement(tip); 5199 $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 5200 } else { 5201 complete(); 5202 } 5203 5204 this._hoverState = ''; 5205 }; 5206 5207 _proto.update = function update() { 5208 if (this._popper !== null) { 5209 this._popper.scheduleUpdate(); 5210 } 5211 } // Protected 5212 ; 5213 5214 _proto.isWithContent = function isWithContent() { 5215 return Boolean(this.getTitle()); 5216 }; 5217 5218 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 5219 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); 5220 }; 5221 5222 _proto.getTipElement = function getTipElement() { 5223 this.tip = this.tip || $__default["default"](this.config.template)[0]; 5224 return this.tip; 5225 }; 5226 5227 _proto.setContent = function setContent() { 5228 var tip = this.getTipElement(); 5229 this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); 5230 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3); 5231 }; 5232 5233 _proto.setElementContent = function setElementContent($element, content) { 5234 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 5235 // Content is a DOM node or a jQuery 5236 if (this.config.html) { 5237 if (!$__default["default"](content).parent().is($element)) { 5238 $element.empty().append(content); 5239 } 5240 } else { 5241 $element.text($__default["default"](content).text()); 5242 } 5243 5244 return; 5245 } 5246 5247 if (this.config.html) { 5248 if (this.config.sanitize) { 5249 content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); 5250 } 5251 5252 $element.html(content); 5253 } else { 5254 $element.text(content); 5255 } 5256 }; 5257 5258 _proto.getTitle = function getTitle() { 5259 var title = this.element.getAttribute('data-original-title'); 5260 5261 if (!title) { 5262 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 5263 } 5264 5265 return title; 5266 } // Private 5267 ; 5268 5269 _proto._getPopperConfig = function _getPopperConfig(attachment) { 5270 var _this3 = this; 5271 5272 var defaultBsConfig = { 5273 placement: attachment, 5274 modifiers: { 5275 offset: this._getOffset(), 5276 flip: { 5277 behavior: this.config.fallbackPlacement 5278 }, 5279 arrow: { 5280 element: SELECTOR_ARROW 5281 }, 5282 preventOverflow: { 5283 boundariesElement: this.config.boundary 5284 } 5285 }, 5286 onCreate: function onCreate(data) { 5287 if (data.originalPlacement !== data.placement) { 5288 _this3._handlePopperPlacementChange(data); 5289 } 5290 }, 5291 onUpdate: function onUpdate(data) { 5292 return _this3._handlePopperPlacementChange(data); 5293 } 5294 }; 5295 return _extends({}, defaultBsConfig, this.config.popperConfig); 5296 }; 5297 5298 _proto._getOffset = function _getOffset() { 5299 var _this4 = this; 5300 5301 var offset = {}; 5302 5303 if (typeof this.config.offset === 'function') { 5304 offset.fn = function (data) { 5305 data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element)); 5306 return data; 5307 }; 5308 } else { 5309 offset.offset = this.config.offset; 5310 } 5311 5312 return offset; 5313 }; 5314 5315 _proto._getContainer = function _getContainer() { 5316 if (this.config.container === false) { 5317 return document.body; 5318 } 5319 5320 if (Util.isElement(this.config.container)) { 5321 return $__default["default"](this.config.container); 5322 } 5323 5324 return $__default["default"](document).find(this.config.container); 5325 }; 5326 5327 _proto._getAttachment = function _getAttachment(placement) { 5328 return AttachmentMap[placement.toUpperCase()]; 5329 }; 5330 5331 _proto._setListeners = function _setListeners() { 5332 var _this5 = this; 5333 5334 var triggers = this.config.trigger.split(' '); 5335 triggers.forEach(function (trigger) { 5336 if (trigger === 'click') { 5337 $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { 5338 return _this5.toggle(event); 5339 }); 5340 } else if (trigger !== TRIGGER_MANUAL) { 5341 var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; 5342 var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; 5343 $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) { 5344 return _this5._enter(event); 5345 }).on(eventOut, _this5.config.selector, function (event) { 5346 return _this5._leave(event); 5347 }); 5348 } 5349 }); 5350 5351 this._hideModalHandler = function () { 5352 if (_this5.element) { 5353 _this5.hide(); 5354 } 5355 }; 5356 5357 $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); 5358 5359 if (this.config.selector) { 5360 this.config = _extends({}, this.config, { 5361 trigger: 'manual', 5362 selector: '' 5363 }); 5364 } else { 5365 this._fixTitle(); 5366 } 5367 }; 5368 5369 _proto._fixTitle = function _fixTitle() { 5370 var titleType = typeof this.element.getAttribute('data-original-title'); 5371 5372 if (this.element.getAttribute('title') || titleType !== 'string') { 5373 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 5374 this.element.setAttribute('title', ''); 5375 } 5376 }; 5377 5378 _proto._enter = function _enter(event, context) { 5379 var dataKey = this.constructor.DATA_KEY; 5380 context = context || $__default["default"](event.currentTarget).data(dataKey); 5381 5382 if (!context) { 5383 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 5384 $__default["default"](event.currentTarget).data(dataKey, context); 5385 } 5386 5387 if (event) { 5388 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 5389 } 5390 5391 if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) { 5392 context._hoverState = HOVER_STATE_SHOW; 5393 return; 5394 } 5395 5396 clearTimeout(context._timeout); 5397 context._hoverState = HOVER_STATE_SHOW; 5398 5399 if (!context.config.delay || !context.config.delay.show) { 5400 context.show(); 5401 return; 5402 } 5403 5404 context._timeout = setTimeout(function () { 5405 if (context._hoverState === HOVER_STATE_SHOW) { 5406 context.show(); 5407 } 5408 }, context.config.delay.show); 5409 }; 5410 5411 _proto._leave = function _leave(event, context) { 5412 var dataKey = this.constructor.DATA_KEY; 5413 context = context || $__default["default"](event.currentTarget).data(dataKey); 5414 5415 if (!context) { 5416 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 5417 $__default["default"](event.currentTarget).data(dataKey, context); 5418 } 5419 5420 if (event) { 5421 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; 5422 } 5423 5424 if (context._isWithActiveTrigger()) { 5425 return; 5426 } 5427 5428 clearTimeout(context._timeout); 5429 context._hoverState = HOVER_STATE_OUT; 5430 5431 if (!context.config.delay || !context.config.delay.hide) { 5432 context.hide(); 5433 return; 5434 } 5435 5436 context._timeout = setTimeout(function () { 5437 if (context._hoverState === HOVER_STATE_OUT) { 5438 context.hide(); 5439 } 5440 }, context.config.delay.hide); 5441 }; 5442 5443 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 5444 for (var trigger in this._activeTrigger) { 5445 if (this._activeTrigger[trigger]) { 5446 return true; 5447 } 5448 } 5449 5450 return false; 5451 }; 5452 5453 _proto._getConfig = function _getConfig(config) { 5454 var dataAttributes = $__default["default"](this.element).data(); 5455 Object.keys(dataAttributes).forEach(function (dataAttr) { 5456 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 5457 delete dataAttributes[dataAttr]; 5458 } 5459 }); 5460 config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); 5461 5462 if (typeof config.delay === 'number') { 5463 config.delay = { 5464 show: config.delay, 5465 hide: config.delay 5466 }; 5467 } 5468 5469 if (typeof config.title === 'number') { 5470 config.title = config.title.toString(); 5471 } 5472 5473 if (typeof config.content === 'number') { 5474 config.content = config.content.toString(); 5475 } 5476 5477 Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 5478 5479 if (config.sanitize) { 5480 config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); 5481 } 5482 5483 return config; 5484 }; 5485 5486 _proto._getDelegateConfig = function _getDelegateConfig() { 5487 var config = {}; 5488 5489 if (this.config) { 5490 for (var key in this.config) { 5491 if (this.constructor.Default[key] !== this.config[key]) { 5492 config[key] = this.config[key]; 5493 } 5494 } 5495 } 5496 5497 return config; 5498 }; 5499 5500 _proto._cleanTipClass = function _cleanTipClass() { 5501 var $tip = $__default["default"](this.getTipElement()); 5502 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); 5503 5504 if (tabClass !== null && tabClass.length) { 5505 $tip.removeClass(tabClass.join('')); 5506 } 5507 }; 5508 5509 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 5510 this.tip = popperData.instance.popper; 5511 5512 this._cleanTipClass(); 5513 5514 this.addAttachmentClass(this._getAttachment(popperData.placement)); 5515 }; 5516 5517 _proto._fixTransition = function _fixTransition() { 5518 var tip = this.getTipElement(); 5519 var initConfigAnimation = this.config.animation; 5520 5521 if (tip.getAttribute('x-placement') !== null) { 5522 return; 5523 } 5524 5525 $__default["default"](tip).removeClass(CLASS_NAME_FADE$3); 5526 this.config.animation = false; 5527 this.hide(); 5528 this.show(); 5529 this.config.animation = initConfigAnimation; 5530 } // Static 5531 ; 5532 5533 Tooltip._jQueryInterface = function _jQueryInterface(config) { 5534 return this.each(function () { 5535 var $element = $__default["default"](this); 5536 var data = $element.data(DATA_KEY$4); 5537 5538 var _config = typeof config === 'object' && config; 5539 5540 if (!data && /dispose|hide/.test(config)) { 5541 return; 5542 } 5543 5544 if (!data) { 5545 data = new Tooltip(this, _config); 5546 $element.data(DATA_KEY$4, data); 5547 } 5548 5549 if (typeof config === 'string') { 5550 if (typeof data[config] === 'undefined') { 5551 throw new TypeError("No method named \"" + config + "\""); 5552 } 5553 5554 data[config](); 5555 } 5556 }); 5557 }; 5558 5559 _createClass(Tooltip, null, [{ 5560 key: "VERSION", 5561 get: function get() { 5562 return VERSION$4; 5563 } 5564 }, { 5565 key: "Default", 5566 get: function get() { 5567 return Default$3; 5568 } 5569 }, { 5570 key: "NAME", 5571 get: function get() { 5572 return NAME$4; 5573 } 5574 }, { 5575 key: "DATA_KEY", 5576 get: function get() { 5577 return DATA_KEY$4; 5578 } 5579 }, { 5580 key: "Event", 5581 get: function get() { 5582 return Event$1; 5583 } 5584 }, { 5585 key: "EVENT_KEY", 5586 get: function get() { 5587 return EVENT_KEY$4; 5588 } 5589 }, { 5590 key: "DefaultType", 5591 get: function get() { 5592 return DefaultType$3; 5593 } 5594 }]); 5595 5596 return Tooltip; 5597 }(); 5598 /** 5599 * jQuery 5600 */ 5601 5602 5603 $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface; 5604 $__default["default"].fn[NAME$4].Constructor = Tooltip; 5605 5606 $__default["default"].fn[NAME$4].noConflict = function () { 5607 $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4; 5608 return Tooltip._jQueryInterface; 5609 }; 5610 5611 /** 5612 * Constants 5613 */ 5614 5615 var NAME$3 = 'popover'; 5616 var VERSION$3 = '4.6.2'; 5617 var DATA_KEY$3 = 'bs.popover'; 5618 var EVENT_KEY$3 = "." + DATA_KEY$3; 5619 var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3]; 5620 var CLASS_PREFIX = 'bs-popover'; 5621 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 5622 var CLASS_NAME_FADE$2 = 'fade'; 5623 var CLASS_NAME_SHOW$2 = 'show'; 5624 var SELECTOR_TITLE = '.popover-header'; 5625 var SELECTOR_CONTENT = '.popover-body'; 5626 5627 var Default$2 = _extends({}, Tooltip.Default, { 5628 placement: 'right', 5629 trigger: 'click', 5630 content: '', 5631 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 5632 }); 5633 5634 var DefaultType$2 = _extends({}, Tooltip.DefaultType, { 5635 content: '(string|element|function)' 5636 }); 5637 5638 var Event = { 5639 HIDE: "hide" + EVENT_KEY$3, 5640 HIDDEN: "hidden" + EVENT_KEY$3, 5641 SHOW: "show" + EVENT_KEY$3, 5642 SHOWN: "shown" + EVENT_KEY$3, 5643 INSERTED: "inserted" + EVENT_KEY$3, 5644 CLICK: "click" + EVENT_KEY$3, 5645 FOCUSIN: "focusin" + EVENT_KEY$3, 5646 FOCUSOUT: "focusout" + EVENT_KEY$3, 5647 MOUSEENTER: "mouseenter" + EVENT_KEY$3, 5648 MOUSELEAVE: "mouseleave" + EVENT_KEY$3 5649 }; 5650 /** 5651 * Class definition 5652 */ 5653 5654 var Popover = /*#__PURE__*/function (_Tooltip) { 5655 _inheritsLoose(Popover, _Tooltip); 5656 5657 function Popover() { 5658 return _Tooltip.apply(this, arguments) || this; 5659 } 5660 5661 var _proto = Popover.prototype; 5662 5663 // Overrides 5664 _proto.isWithContent = function isWithContent() { 5665 return this.getTitle() || this._getContent(); 5666 }; 5667 5668 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 5669 $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 5670 }; 5671 5672 _proto.getTipElement = function getTipElement() { 5673 this.tip = this.tip || $__default["default"](this.config.template)[0]; 5674 return this.tip; 5675 }; 5676 5677 _proto.setContent = function setContent() { 5678 var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events 5679 5680 this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()); 5681 5682 var content = this._getContent(); 5683 5684 if (typeof content === 'function') { 5685 content = content.call(this.element); 5686 } 5687 5688 this.setElementContent($tip.find(SELECTOR_CONTENT), content); 5689 $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2); 5690 } // Private 5691 ; 5692 5693 _proto._getContent = function _getContent() { 5694 return this.element.getAttribute('data-content') || this.config.content; 5695 }; 5696 5697 _proto._cleanTipClass = function _cleanTipClass() { 5698 var $tip = $__default["default"](this.getTipElement()); 5699 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 5700 5701 if (tabClass !== null && tabClass.length > 0) { 5702 $tip.removeClass(tabClass.join('')); 5703 } 5704 } // Static 5705 ; 5706 5707 Popover._jQueryInterface = function _jQueryInterface(config) { 5708 return this.each(function () { 5709 var data = $__default["default"](this).data(DATA_KEY$3); 5710 5711 var _config = typeof config === 'object' ? config : null; 5712 5713 if (!data && /dispose|hide/.test(config)) { 5714 return; 5715 } 5716 5717 if (!data) { 5718 data = new Popover(this, _config); 5719 $__default["default"](this).data(DATA_KEY$3, data); 5720 } 5721 5722 if (typeof config === 'string') { 5723 if (typeof data[config] === 'undefined') { 5724 throw new TypeError("No method named \"" + config + "\""); 5725 } 5726 5727 data[config](); 5728 } 5729 }); 5730 }; 5731 5732 _createClass(Popover, null, [{ 5733 key: "VERSION", 5734 get: // Getters 5735 function get() { 5736 return VERSION$3; 5737 } 5738 }, { 5739 key: "Default", 5740 get: function get() { 5741 return Default$2; 5742 } 5743 }, { 5744 key: "NAME", 5745 get: function get() { 5746 return NAME$3; 5747 } 5748 }, { 5749 key: "DATA_KEY", 5750 get: function get() { 5751 return DATA_KEY$3; 5752 } 5753 }, { 5754 key: "Event", 5755 get: function get() { 5756 return Event; 5757 } 5758 }, { 5759 key: "EVENT_KEY", 5760 get: function get() { 5761 return EVENT_KEY$3; 5762 } 5763 }, { 5764 key: "DefaultType", 5765 get: function get() { 5766 return DefaultType$2; 5767 } 5768 }]); 5769 5770 return Popover; 5771 }(Tooltip); 5772 /** 5773 * jQuery 5774 */ 5775 5776 5777 $__default["default"].fn[NAME$3] = Popover._jQueryInterface; 5778 $__default["default"].fn[NAME$3].Constructor = Popover; 5779 5780 $__default["default"].fn[NAME$3].noConflict = function () { 5781 $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3; 5782 return Popover._jQueryInterface; 5783 }; 5784 5785 /** 5786 * Constants 5787 */ 5788 5789 var NAME$2 = 'scrollspy'; 5790 var VERSION$2 = '4.6.2'; 5791 var DATA_KEY$2 = 'bs.scrollspy'; 5792 var EVENT_KEY$2 = "." + DATA_KEY$2; 5793 var DATA_API_KEY$1 = '.data-api'; 5794 var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2]; 5795 var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 5796 var CLASS_NAME_ACTIVE$1 = 'active'; 5797 var EVENT_ACTIVATE = "activate" + EVENT_KEY$2; 5798 var EVENT_SCROLL = "scroll" + EVENT_KEY$2; 5799 var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1; 5800 var METHOD_OFFSET = 'offset'; 5801 var METHOD_POSITION = 'position'; 5802 var SELECTOR_DATA_SPY = '[data-spy="scroll"]'; 5803 var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 5804 var SELECTOR_NAV_LINKS = '.nav-link'; 5805 var SELECTOR_NAV_ITEMS = '.nav-item'; 5806 var SELECTOR_LIST_ITEMS = '.list-group-item'; 5807 var SELECTOR_DROPDOWN$1 = '.dropdown'; 5808 var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'; 5809 var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 5810 var Default$1 = { 5811 offset: 10, 5812 method: 'auto', 5813 target: '' 5814 }; 5815 var DefaultType$1 = { 5816 offset: 'number', 5817 method: 'string', 5818 target: '(string|element)' 5819 }; 5820 /** 5821 * Class definition 5822 */ 5823 5824 var ScrollSpy = /*#__PURE__*/function () { 5825 function ScrollSpy(element, config) { 5826 var _this = this; 5827 5828 this._element = element; 5829 this._scrollElement = element.tagName === 'BODY' ? window : element; 5830 this._config = this._getConfig(config); 5831 this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS); 5832 this._offsets = []; 5833 this._targets = []; 5834 this._activeTarget = null; 5835 this._scrollHeight = 0; 5836 $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) { 5837 return _this._process(event); 5838 }); 5839 this.refresh(); 5840 5841 this._process(); 5842 } // Getters 5843 5844 5845 var _proto = ScrollSpy.prototype; 5846 5847 // Public 5848 _proto.refresh = function refresh() { 5849 var _this2 = this; 5850 5851 var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 5852 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 5853 var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 5854 this._offsets = []; 5855 this._targets = []; 5856 this._scrollHeight = this._getScrollHeight(); 5857 var targets = [].slice.call(document.querySelectorAll(this._selector)); 5858 targets.map(function (element) { 5859 var target; 5860 var targetSelector = Util.getSelectorFromElement(element); 5861 5862 if (targetSelector) { 5863 target = document.querySelector(targetSelector); 5864 } 5865 5866 if (target) { 5867 var targetBCR = target.getBoundingClientRect(); 5868 5869 if (targetBCR.width || targetBCR.height) { 5870 // TODO (fat): remove sketch reliance on jQuery position/offset 5871 return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector]; 5872 } 5873 } 5874 5875 return null; 5876 }).filter(Boolean).sort(function (a, b) { 5877 return a[0] - b[0]; 5878 }).forEach(function (item) { 5879 _this2._offsets.push(item[0]); 5880 5881 _this2._targets.push(item[1]); 5882 }); 5883 }; 5884 5885 _proto.dispose = function dispose() { 5886 $__default["default"].removeData(this._element, DATA_KEY$2); 5887 $__default["default"](this._scrollElement).off(EVENT_KEY$2); 5888 this._element = null; 5889 this._scrollElement = null; 5890 this._config = null; 5891 this._selector = null; 5892 this._offsets = null; 5893 this._targets = null; 5894 this._activeTarget = null; 5895 this._scrollHeight = null; 5896 } // Private 5897 ; 5898 5899 _proto._getConfig = function _getConfig(config) { 5900 config = _extends({}, Default$1, typeof config === 'object' && config ? config : {}); 5901 5902 if (typeof config.target !== 'string' && Util.isElement(config.target)) { 5903 var id = $__default["default"](config.target).attr('id'); 5904 5905 if (!id) { 5906 id = Util.getUID(NAME$2); 5907 $__default["default"](config.target).attr('id', id); 5908 } 5909 5910 config.target = "#" + id; 5911 } 5912 5913 Util.typeCheckConfig(NAME$2, config, DefaultType$1); 5914 return config; 5915 }; 5916 5917 _proto._getScrollTop = function _getScrollTop() { 5918 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 5919 }; 5920 5921 _proto._getScrollHeight = function _getScrollHeight() { 5922 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 5923 }; 5924 5925 _proto._getOffsetHeight = function _getOffsetHeight() { 5926 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 5927 }; 5928 5929 _proto._process = function _process() { 5930 var scrollTop = this._getScrollTop() + this._config.offset; 5931 5932 var scrollHeight = this._getScrollHeight(); 5933 5934 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 5935 5936 if (this._scrollHeight !== scrollHeight) { 5937 this.refresh(); 5938 } 5939 5940 if (scrollTop >= maxScroll) { 5941 var target = this._targets[this._targets.length - 1]; 5942 5943 if (this._activeTarget !== target) { 5944 this._activate(target); 5945 } 5946 5947 return; 5948 } 5949 5950 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 5951 this._activeTarget = null; 5952 5953 this._clear(); 5954 5955 return; 5956 } 5957 5958 for (var i = this._offsets.length; i--;) { 5959 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 5960 5961 if (isActiveTarget) { 5962 this._activate(this._targets[i]); 5963 } 5964 } 5965 }; 5966 5967 _proto._activate = function _activate(target) { 5968 this._activeTarget = target; 5969 5970 this._clear(); 5971 5972 var queries = this._selector.split(',').map(function (selector) { 5973 return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; 5974 }); 5975 5976 var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(',')))); 5977 5978 if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { 5979 $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1); 5980 $link.addClass(CLASS_NAME_ACTIVE$1); 5981 } else { 5982 // Set triggered link as active 5983 $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active 5984 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 5985 5986 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item 5987 5988 $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1); 5989 } 5990 5991 $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, { 5992 relatedTarget: target 5993 }); 5994 }; 5995 5996 _proto._clear = function _clear() { 5997 [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { 5998 return node.classList.contains(CLASS_NAME_ACTIVE$1); 5999 }).forEach(function (node) { 6000 return node.classList.remove(CLASS_NAME_ACTIVE$1); 6001 }); 6002 } // Static 6003 ; 6004 6005 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 6006 return this.each(function () { 6007 var data = $__default["default"](this).data(DATA_KEY$2); 6008 6009 var _config = typeof config === 'object' && config; 6010 6011 if (!data) { 6012 data = new ScrollSpy(this, _config); 6013 $__default["default"](this).data(DATA_KEY$2, data); 6014 } 6015 6016 if (typeof config === 'string') { 6017 if (typeof data[config] === 'undefined') { 6018 throw new TypeError("No method named \"" + config + "\""); 6019 } 6020 6021 data[config](); 6022 } 6023 }); 6024 }; 6025 6026 _createClass(ScrollSpy, null, [{ 6027 key: "VERSION", 6028 get: function get() { 6029 return VERSION$2; 6030 } 6031 }, { 6032 key: "Default", 6033 get: function get() { 6034 return Default$1; 6035 } 6036 }]); 6037 6038 return ScrollSpy; 6039 }(); 6040 /** 6041 * Data API implementation 6042 */ 6043 6044 6045 $__default["default"](window).on(EVENT_LOAD_DATA_API, function () { 6046 var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY)); 6047 var scrollSpysLength = scrollSpys.length; 6048 6049 for (var i = scrollSpysLength; i--;) { 6050 var $spy = $__default["default"](scrollSpys[i]); 6051 6052 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 6053 } 6054 }); 6055 /** 6056 * jQuery 6057 */ 6058 6059 $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface; 6060 $__default["default"].fn[NAME$2].Constructor = ScrollSpy; 6061 6062 $__default["default"].fn[NAME$2].noConflict = function () { 6063 $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2; 6064 return ScrollSpy._jQueryInterface; 6065 }; 6066 6067 /** 6068 * Constants 6069 */ 6070 6071 var NAME$1 = 'tab'; 6072 var VERSION$1 = '4.6.2'; 6073 var DATA_KEY$1 = 'bs.tab'; 6074 var EVENT_KEY$1 = "." + DATA_KEY$1; 6075 var DATA_API_KEY = '.data-api'; 6076 var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1]; 6077 var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 6078 var CLASS_NAME_ACTIVE = 'active'; 6079 var CLASS_NAME_DISABLED = 'disabled'; 6080 var CLASS_NAME_FADE$1 = 'fade'; 6081 var CLASS_NAME_SHOW$1 = 'show'; 6082 var EVENT_HIDE$1 = "hide" + EVENT_KEY$1; 6083 var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1; 6084 var EVENT_SHOW$1 = "show" + EVENT_KEY$1; 6085 var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1; 6086 var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY; 6087 var SELECTOR_DROPDOWN = '.dropdown'; 6088 var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 6089 var SELECTOR_ACTIVE = '.active'; 6090 var SELECTOR_ACTIVE_UL = '> li > .active'; 6091 var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; 6092 var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 6093 var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; 6094 /** 6095 * Class definition 6096 */ 6097 6098 var Tab = /*#__PURE__*/function () { 6099 function Tab(element) { 6100 this._element = element; 6101 } // Getters 6102 6103 6104 var _proto = Tab.prototype; 6105 6106 // Public 6107 _proto.show = function show() { 6108 var _this = this; 6109 6110 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) { 6111 return; 6112 } 6113 6114 var target; 6115 var previous; 6116 var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; 6117 var selector = Util.getSelectorFromElement(this._element); 6118 6119 if (listElement) { 6120 var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 6121 previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector)); 6122 previous = previous[previous.length - 1]; 6123 } 6124 6125 var hideEvent = $__default["default"].Event(EVENT_HIDE$1, { 6126 relatedTarget: this._element 6127 }); 6128 var showEvent = $__default["default"].Event(EVENT_SHOW$1, { 6129 relatedTarget: previous 6130 }); 6131 6132 if (previous) { 6133 $__default["default"](previous).trigger(hideEvent); 6134 } 6135 6136 $__default["default"](this._element).trigger(showEvent); 6137 6138 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 6139 return; 6140 } 6141 6142 if (selector) { 6143 target = document.querySelector(selector); 6144 } 6145 6146 this._activate(this._element, listElement); 6147 6148 var complete = function complete() { 6149 var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, { 6150 relatedTarget: _this._element 6151 }); 6152 var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, { 6153 relatedTarget: previous 6154 }); 6155 $__default["default"](previous).trigger(hiddenEvent); 6156 $__default["default"](_this._element).trigger(shownEvent); 6157 }; 6158 6159 if (target) { 6160 this._activate(target, target.parentNode, complete); 6161 } else { 6162 complete(); 6163 } 6164 }; 6165 6166 _proto.dispose = function dispose() { 6167 $__default["default"].removeData(this._element, DATA_KEY$1); 6168 this._element = null; 6169 } // Private 6170 ; 6171 6172 _proto._activate = function _activate(element, container, callback) { 6173 var _this2 = this; 6174 6175 var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE); 6176 var active = activeElements[0]; 6177 var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1); 6178 6179 var complete = function complete() { 6180 return _this2._transitionComplete(element, active, callback); 6181 }; 6182 6183 if (active && isTransitioning) { 6184 var transitionDuration = Util.getTransitionDurationFromElement(active); 6185 $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6186 } else { 6187 complete(); 6188 } 6189 }; 6190 6191 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 6192 if (active) { 6193 $__default["default"](active).removeClass(CLASS_NAME_ACTIVE); 6194 var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; 6195 6196 if (dropdownChild) { 6197 $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE); 6198 } 6199 6200 if (active.getAttribute('role') === 'tab') { 6201 active.setAttribute('aria-selected', false); 6202 } 6203 } 6204 6205 $__default["default"](element).addClass(CLASS_NAME_ACTIVE); 6206 6207 if (element.getAttribute('role') === 'tab') { 6208 element.setAttribute('aria-selected', true); 6209 } 6210 6211 Util.reflow(element); 6212 6213 if (element.classList.contains(CLASS_NAME_FADE$1)) { 6214 element.classList.add(CLASS_NAME_SHOW$1); 6215 } 6216 6217 var parent = element.parentNode; 6218 6219 if (parent && parent.nodeName === 'LI') { 6220 parent = parent.parentNode; 6221 } 6222 6223 if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) { 6224 var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0]; 6225 6226 if (dropdownElement) { 6227 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); 6228 $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE); 6229 } 6230 6231 element.setAttribute('aria-expanded', true); 6232 } 6233 6234 if (callback) { 6235 callback(); 6236 } 6237 } // Static 6238 ; 6239 6240 Tab._jQueryInterface = function _jQueryInterface(config) { 6241 return this.each(function () { 6242 var $this = $__default["default"](this); 6243 var data = $this.data(DATA_KEY$1); 6244 6245 if (!data) { 6246 data = new Tab(this); 6247 $this.data(DATA_KEY$1, data); 6248 } 6249 6250 if (typeof config === 'string') { 6251 if (typeof data[config] === 'undefined') { 6252 throw new TypeError("No method named \"" + config + "\""); 6253 } 6254 6255 data[config](); 6256 } 6257 }); 6258 }; 6259 6260 _createClass(Tab, null, [{ 6261 key: "VERSION", 6262 get: function get() { 6263 return VERSION$1; 6264 } 6265 }]); 6266 6267 return Tab; 6268 }(); 6269 /** 6270 * Data API implementation 6271 */ 6272 6273 6274 $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 6275 event.preventDefault(); 6276 6277 Tab._jQueryInterface.call($__default["default"](this), 'show'); 6278 }); 6279 /** 6280 * jQuery 6281 */ 6282 6283 $__default["default"].fn[NAME$1] = Tab._jQueryInterface; 6284 $__default["default"].fn[NAME$1].Constructor = Tab; 6285 6286 $__default["default"].fn[NAME$1].noConflict = function () { 6287 $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1; 6288 return Tab._jQueryInterface; 6289 }; 6290 6291 /** 6292 * Constants 6293 */ 6294 6295 var NAME = 'toast'; 6296 var VERSION = '4.6.2'; 6297 var DATA_KEY = 'bs.toast'; 6298 var EVENT_KEY = "." + DATA_KEY; 6299 var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; 6300 var CLASS_NAME_FADE = 'fade'; 6301 var CLASS_NAME_HIDE = 'hide'; 6302 var CLASS_NAME_SHOW = 'show'; 6303 var CLASS_NAME_SHOWING = 'showing'; 6304 var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; 6305 var EVENT_HIDE = "hide" + EVENT_KEY; 6306 var EVENT_HIDDEN = "hidden" + EVENT_KEY; 6307 var EVENT_SHOW = "show" + EVENT_KEY; 6308 var EVENT_SHOWN = "shown" + EVENT_KEY; 6309 var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'; 6310 var Default = { 6311 animation: true, 6312 autohide: true, 6313 delay: 500 6314 }; 6315 var DefaultType = { 6316 animation: 'boolean', 6317 autohide: 'boolean', 6318 delay: 'number' 6319 }; 6320 /** 6321 * Class definition 6322 */ 6323 6324 var Toast = /*#__PURE__*/function () { 6325 function Toast(element, config) { 6326 this._element = element; 6327 this._config = this._getConfig(config); 6328 this._timeout = null; 6329 6330 this._setListeners(); 6331 } // Getters 6332 6333 6334 var _proto = Toast.prototype; 6335 6336 // Public 6337 _proto.show = function show() { 6338 var _this = this; 6339 6340 var showEvent = $__default["default"].Event(EVENT_SHOW); 6341 $__default["default"](this._element).trigger(showEvent); 6342 6343 if (showEvent.isDefaultPrevented()) { 6344 return; 6345 } 6346 6347 this._clearTimeout(); 6348 6349 if (this._config.animation) { 6350 this._element.classList.add(CLASS_NAME_FADE); 6351 } 6352 6353 var complete = function complete() { 6354 _this._element.classList.remove(CLASS_NAME_SHOWING); 6355 6356 _this._element.classList.add(CLASS_NAME_SHOW); 6357 6358 $__default["default"](_this._element).trigger(EVENT_SHOWN); 6359 6360 if (_this._config.autohide) { 6361 _this._timeout = setTimeout(function () { 6362 _this.hide(); 6363 }, _this._config.delay); 6364 } 6365 }; 6366 6367 this._element.classList.remove(CLASS_NAME_HIDE); 6368 6369 Util.reflow(this._element); 6370 6371 this._element.classList.add(CLASS_NAME_SHOWING); 6372 6373 if (this._config.animation) { 6374 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 6375 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6376 } else { 6377 complete(); 6378 } 6379 }; 6380 6381 _proto.hide = function hide() { 6382 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 6383 return; 6384 } 6385 6386 var hideEvent = $__default["default"].Event(EVENT_HIDE); 6387 $__default["default"](this._element).trigger(hideEvent); 6388 6389 if (hideEvent.isDefaultPrevented()) { 6390 return; 6391 } 6392 6393 this._close(); 6394 }; 6395 6396 _proto.dispose = function dispose() { 6397 this._clearTimeout(); 6398 6399 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 6400 this._element.classList.remove(CLASS_NAME_SHOW); 6401 } 6402 6403 $__default["default"](this._element).off(EVENT_CLICK_DISMISS); 6404 $__default["default"].removeData(this._element, DATA_KEY); 6405 this._element = null; 6406 this._config = null; 6407 } // Private 6408 ; 6409 6410 _proto._getConfig = function _getConfig(config) { 6411 config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {}); 6412 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 6413 return config; 6414 }; 6415 6416 _proto._setListeners = function _setListeners() { 6417 var _this2 = this; 6418 6419 $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () { 6420 return _this2.hide(); 6421 }); 6422 }; 6423 6424 _proto._close = function _close() { 6425 var _this3 = this; 6426 6427 var complete = function complete() { 6428 _this3._element.classList.add(CLASS_NAME_HIDE); 6429 6430 $__default["default"](_this3._element).trigger(EVENT_HIDDEN); 6431 }; 6432 6433 this._element.classList.remove(CLASS_NAME_SHOW); 6434 6435 if (this._config.animation) { 6436 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 6437 $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 6438 } else { 6439 complete(); 6440 } 6441 }; 6442 6443 _proto._clearTimeout = function _clearTimeout() { 6444 clearTimeout(this._timeout); 6445 this._timeout = null; 6446 } // Static 6447 ; 6448 6449 Toast._jQueryInterface = function _jQueryInterface(config) { 6450 return this.each(function () { 6451 var $element = $__default["default"](this); 6452 var data = $element.data(DATA_KEY); 6453 6454 var _config = typeof config === 'object' && config; 6455 6456 if (!data) { 6457 data = new Toast(this, _config); 6458 $element.data(DATA_KEY, data); 6459 } 6460 6461 if (typeof config === 'string') { 6462 if (typeof data[config] === 'undefined') { 6463 throw new TypeError("No method named \"" + config + "\""); 6464 } 6465 6466 data[config](this); 6467 } 6468 }); 6469 }; 6470 6471 _createClass(Toast, null, [{ 6472 key: "VERSION", 6473 get: function get() { 6474 return VERSION; 6475 } 6476 }, { 6477 key: "DefaultType", 6478 get: function get() { 6479 return DefaultType; 6480 } 6481 }, { 6482 key: "Default", 6483 get: function get() { 6484 return Default; 6485 } 6486 }]); 6487 6488 return Toast; 6489 }(); 6490 /** 6491 * jQuery 6492 */ 6493 6494 6495 $__default["default"].fn[NAME] = Toast._jQueryInterface; 6496 $__default["default"].fn[NAME].Constructor = Toast; 6497 6498 $__default["default"].fn[NAME].noConflict = function () { 6499 $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; 6500 return Toast._jQueryInterface; 6501 }; 6502 6503 exports.Alert = Alert; 6504 exports.Button = Button; 6505 exports.Carousel = Carousel; 6506 exports.Collapse = Collapse; 6507 exports.Dropdown = Dropdown; 6508 exports.Modal = Modal; 6509 exports.Popover = Popover; 6510 exports.Scrollspy = ScrollSpy; 6511 exports.Tab = Tab; 6512 exports.Toast = Toast; 6513 exports.Tooltip = Tooltip; 6514 exports.Util = Util; 6515 6516 Object.defineProperty(exports, '__esModule', { value: true }); 6517 6518})); 6519//# sourceMappingURL=bootstrap.js.map
6520/*! 6521 * jQuery Cookie Plugin v1.3.1 6522 * https://github.com/carhartl/jquery-cookie 6523 * 6524 * Copyright 2013 Klaus Hartl 6525 * Released under the MIT license 6526 */ 6527(function (factory) { 6528 if (typeof define === 'function' && define.amd) { 6529 // AMD. Register as anonymous module. 6530 define(['jquery'], factory); 6531 } else { 6532 // Browser globals. 6533 factory(jQuery); 6534 } 6535}(function ($) { 6536 6537 var pluses = /\+/g; 6538 6539 function raw(s) { 6540 return s; 6541 } 6542 6543 function decoded(s) { 6544 return decodeURIComponent(s.replace(pluses, ' ')); 6545 } 6546 6547 function converted(s) { 6548 if (s.indexOf('"') === 0) { 6549 // This is a quoted cookie as according to RFC2068, unescape 6550 s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 6551 } 6552 try { 6553 return config.json ? JSON.parse(s) : s; 6554 } catch(er) {} 6555 } 6556 6557 var config = $.cookie = function (key, value, options) { 6558 6559 // write 6560 if (value !== undefined) { 6561 options = $.extend({}, config.defaults, options); 6562 6563 if (typeof options.expires === 'number') { 6564 var days = options.expires, t = options.expires = new Date(); 6565 t.setDate(t.getDate() + days); 6566 } 6567 6568 value = config.json ? JSON.stringify(value) : String(value); 6569 6570 return (document.cookie = [ 6571 config.raw ? key : encodeURIComponent(key), 6572 '=', 6573 config.raw ? value : encodeURIComponent(value), 6574 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 6575 options.path ? '; path=' + options.path : '', 6576 options.domain ? '; domain=' + options.domain : '', 6577 options.secure ? '; secure' : '' 6578 ].join('')); 6579 } 6580 6581 // read 6582 var decode = config.raw ? raw : decoded; 6583 var cookies = document.cookie.split('; '); 6584 var result = key ? undefined : {}; 6585 for (var i = 0, l = cookies.length; i < l; i++) { 6586 var parts = cookies[i].split('='); 6587 var name = decode(parts.shift()); 6588 var cookie = decode(parts.join('=')); 6589 6590 if (key && key === name) { 6591 result = converted(cookie); 6592 break; 6593 } 6594 6595 if (!key) { 6596 result[name] = converted(cookie); 6597 } 6598 } 6599 6600 return result; 6601 }; 6602 6603 config.defaults = {}; 6604 6605 $.removeCookie = function (key, options) { 6606 if ($.cookie(key) !== undefined) { 6607 $.cookie(key, '', $.extend(options, { expires: -1 })); 6608 return true; 6609 } 6610 return false; 6611 }; 6612 6613})); 6614/*! 6615 * iCheck v1.0.2, http://git.io/arlzeA 6616 * =================================== 6617 * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization 6618 * 6619 * (c) 2013 Damir Sultanov, http://fronteed.com 6620 * MIT Licensed 6621 */ 6622 6623(function($) { 6624 6625 // Cached vars 6626 var _iCheck = 'iCheck', 6627 _iCheckHelper = _iCheck + '-helper', 6628 _checkbox = 'checkbox', 6629 _radio = 'radio', 6630 _checked = 'checked', 6631 _unchecked = 'un' + _checked, 6632 _disabled = 'disabled', 6633 _determinate = 'determinate', 6634 _indeterminate = 'in' + _determinate, 6635 _update = 'update', 6636 _type = 'type', 6637 _click = 'click', 6638 _touch = 'touchbegin.i touchend.i', 6639 _add = 'addClass', 6640 _remove = 'removeClass', 6641 _callback = 'trigger', 6642 _label = 'label', 6643 _cursor = 'cursor', 6644 _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent); 6645 6646 // Plugin init 6647 $.fn[_iCheck] = function(options, fire) { 6648 6649 // Walker 6650 var handle = 'input[type="' + _checkbox + '"], input[type="' + _radio + '"]', 6651 stack = $(), 6652 walker = function(object) { 6653 object.each(function() { 6654 var self = $(this); 6655 6656 if (self.is(handle)) { 6657 stack = stack.add(self); 6658 } else { 6659 stack = stack.add(self.find(handle)); 6660 } 6661 }); 6662 }; 6663 6664 // Check if we should operate with some method 6665 if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) { 6666 6667 // Normalize method's name 6668 options = options.toLowerCase(); 6669 6670 // Find checkboxes and radio buttons 6671 walker(this); 6672 6673 return stack.each(function() { 6674 var self = $(this); 6675 6676 if (options == 'destroy') { 6677 tidy(self, 'ifDestroyed'); 6678 } else { 6679 operate(self, true, options); 6680 } 6681 6682 // Fire method's callback 6683 if ($.isFunction(fire)) { 6684 fire(); 6685 } 6686 }); 6687 6688 // Customization 6689 } else if (typeof options == 'object' || !options) { 6690 6691 // Check if any options were passed 6692 var settings = $.extend({ 6693 checkedClass: _checked, 6694 disabledClass: _disabled, 6695 indeterminateClass: _indeterminate, 6696 labelHover: true 6697 }, options), 6698 6699 selector = settings.handle, 6700 hoverClass = settings.hoverClass || 'hover',
vendor: 10,149 bytes, lines 6701-7058
6701 focusClass = settings.focusClass || 'focus', 6702 activeClass = settings.activeClass || 'active', 6703 labelHover = !!settings.labelHover, 6704 labelHoverClass = settings.labelHoverClass || 'hover', 6705 6706 // Setup clickable area 6707 area = ('' + settings.increaseArea).replace('%', '') | 0; 6708 6709 // Selector limit 6710 if (selector == _checkbox || selector == _radio) { 6711 handle = 'input[type="' + selector + '"]'; 6712 } 6713 6714 // Clickable area limit 6715 if (area < -50) { 6716 area = -50; 6717 } 6718 6719 // Walk around the selector 6720 walker(this); 6721 6722 return stack.each(function() { 6723 var self = $(this); 6724 6725 // If already customized 6726 tidy(self); 6727 6728 var node = this, 6729 id = node.id, 6730 6731 // Layer styles 6732 offset = -area + '%', 6733 size = 100 + (area * 2) + '%', 6734 layer = { 6735 position: 'absolute', 6736 top: offset, 6737 left: offset, 6738 display: 'block', 6739 width: size, 6740 height: size, 6741 margin: 0, 6742 padding: 0, 6743 background: '#fff', 6744 border: 0, 6745 opacity: 0 6746 }, 6747 6748 // Choose how to hide input 6749 hide = _mobile ? { 6750 position: 'absolute', 6751 visibility: 'hidden' 6752 } : area ? layer : { 6753 position: 'absolute', 6754 opacity: 0 6755 }, 6756 6757 // Get proper class 6758 className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio, 6759 6760 // Find assigned labels 6761 label = $(_label + '[for="' + id + '"]').add(self.closest(_label)), 6762 6763 // Check ARIA option 6764 aria = !!settings.aria, 6765 6766 // Set ARIA placeholder 6767 ariaID = _iCheck + '-' + Math.random().toString(36).substr(2,6), 6768 6769 // Parent & helper 6770 parent = '<div class="' + className + '" ' + (aria ? 'role="' + node[_type] + '" ' : ''), 6771 helper; 6772 6773 // Set ARIA "labelledby" 6774 if (aria) { 6775 label.each(function() { 6776 parent += 'aria-labelledby="'; 6777 6778 if (this.id) { 6779 parent += this.id; 6780 } else { 6781 this.id = ariaID; 6782 parent += ariaID; 6783 } 6784 6785 parent += '"'; 6786 }); 6787 } 6788 6789 // Wrap input 6790 parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert); 6791 6792 // Layer addition 6793 helper = $('<ins class="' + _iCheckHelper + '"/>').css(layer).appendTo(parent); 6794 6795 // Finalize customization 6796 self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide); 6797 !!settings.inheritClass && parent[_add](node.className || ''); 6798 !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id); 6799 parent.css('position') == 'static' && parent.css('position', 'relative'); 6800 operate(self, true, _update); 6801 6802 // Label events 6803 if (label.length) { 6804 label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function(event) { 6805 var type = event[_type], 6806 item = $(this); 6807 6808 // Do nothing if input is disabled 6809 if (!node[_disabled]) { 6810 6811 // Click 6812 if (type == _click) { 6813 if ($(event.target).is('a')) { 6814 return; 6815 } 6816 operate(self, false, true); 6817 6818 // Hover state 6819 } else if (labelHover) { 6820 6821 // mouseout|touchend 6822 if (/ut|nd/.test(type)) { 6823 parent[_remove](hoverClass); 6824 item[_remove](labelHoverClass); 6825 } else { 6826 parent[_add](hoverClass); 6827 item[_add](labelHoverClass); 6828 } 6829 } 6830 6831 if (_mobile) { 6832 event.stopPropagation(); 6833 } else { 6834 return false; 6835 } 6836 } 6837 }); 6838 } 6839 6840 // Input events 6841 self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) { 6842 var type = event[_type], 6843 key = event.keyCode; 6844 6845 // Click 6846 if (type == _click) { 6847 return false; 6848 6849 // Keydown 6850 } else if (type == 'keydown' && key == 32) { 6851 if (!(node[_type] == _radio && node[_checked])) { 6852 if (node[_checked]) { 6853 off(self, _checked); 6854 } else { 6855 on(self, _checked); 6856 } 6857 } 6858 6859 return false; 6860 6861 // Keyup 6862 } else if (type == 'keyup' && node[_type] == _radio) { 6863 !node[_checked] && on(self, _checked); 6864 6865 // Focus/blur 6866 } else if (/us|ur/.test(type)) { 6867 parent[type == 'blur' ? _remove : _add](focusClass); 6868 } 6869 }); 6870 6871 // Helper events 6872 helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) { 6873 var type = event[_type], 6874 6875 // mousedown|mouseup 6876 toggle = /wn|up/.test(type) ? activeClass : hoverClass; 6877 6878 // Do nothing if input is disabled 6879 if (!node[_disabled]) { 6880 6881 // Click 6882 if (type == _click) { 6883 operate(self, false, true); 6884 6885 // Active and hover states 6886 } else { 6887 6888 // State is on 6889 if (/wn|er|in/.test(type)) { 6890 6891 // mousedown|mouseover|touchbegin 6892 parent[_add](toggle); 6893 6894 // State is off 6895 } else { 6896 parent[_remove](toggle + ' ' + activeClass); 6897 } 6898 6899 // Label hover 6900 if (label.length && labelHover && toggle == hoverClass) { 6901 6902 // mouseout|touchend 6903 label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass); 6904 } 6905 } 6906 6907 if (_mobile) { 6908 event.stopPropagation(); 6909 } else { 6910 return false; 6911 } 6912 } 6913 }); 6914 }); 6915 } else { 6916 return this; 6917 } 6918 }; 6919 6920 // Do something with inputs 6921 function operate(input, direct, method) { 6922 var node = input[0], 6923 state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked, 6924 active = method == _update ? { 6925 checked: node[_checked], 6926 disabled: node[_disabled], 6927 indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false' 6928 } : node[state]; 6929 6930 // Check, disable or indeterminate 6931 if (/^(ch|di|in)/.test(method) && !active) { 6932 on(input, state); 6933 6934 // Uncheck, enable or determinate 6935 } else if (/^(un|en|de)/.test(method) && active) { 6936 off(input, state); 6937 6938 // Update 6939 } else if (method == _update) { 6940 6941 // Handle states 6942 for (var each in active) { 6943 if (active[each]) { 6944 on(input, each, true); 6945 } else { 6946 off(input, each, true); 6947 } 6948 } 6949 6950 } else if (!direct || method == 'toggle') { 6951 6952 // Helper or label was clicked 6953 if (!direct) { 6954 input[_callback]('ifClicked'); 6955 } 6956 6957 // Toggle checked state 6958 if (active) { 6959 if (node[_type] !== _radio) { 6960 off(input, state); 6961 } 6962 } else { 6963 on(input, state); 6964 } 6965 } 6966 } 6967 6968 // Add checked, disabled or indeterminate state 6969 function on(input, state, keep) { 6970 var node = input[0], 6971 parent = input.parent(), 6972 checked = state == _checked, 6973 indeterminate = state == _indeterminate, 6974 disabled = state == _disabled, 6975 callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled', 6976 regular = option(input, callback + capitalize(node[_type])), 6977 specific = option(input, state + capitalize(node[_type])); 6978 6979 // Prevent unnecessary actions 6980 if (node[state] !== true) { 6981 6982 // Toggle assigned radio buttons 6983 if (!keep && state == _checked && node[_type] == _radio && node.name) { 6984 var form = input.closest('form'), 6985 inputs = 'input[name="' + node.name + '"]'; 6986 6987 inputs = form.length ? form.find(inputs) : $(inputs); 6988 6989 inputs.each(function() { 6990 if (this !== node && $(this).data(_iCheck)) { 6991 off($(this), state); 6992 } 6993 }); 6994 } 6995 6996 // Indeterminate state 6997 if (indeterminate) { 6998 6999 // Add indeterminate state 7000 node[state] = true; 7001 7002 // Remove checked state 7003 if (node[_checked]) { 7004 off(input, _checked, 'force'); 7005 } 7006 7007 // Checked or disabled state 7008 } else { 7009 7010 // Add checked or disabled state 7011 if (!keep) { 7012 node[state] = true; 7013 } 7014 7015 // Remove indeterminate state 7016 if (checked && node[_indeterminate]) { 7017 off(input, _indeterminate, false); 7018 } 7019 } 7020 7021 // Trigger callbacks 7022 callbacks(input, checked, state, keep); 7023 } 7024 7025 // Add proper cursor 7026 if (node[_disabled] && !!option(input, _cursor, true)) { 7027 parent.find('.' + _iCheckHelper).css(_cursor, 'default'); 7028 } 7029 7030 // Add state class 7031 parent[_add](specific || option(input, state) || ''); 7032 7033 // Set ARIA attribute 7034 if (!!parent.attr('role') && !indeterminate) { 7035 parent.attr('aria-' + (disabled ? _disabled : _checked), 'true'); 7036 } 7037 7038 // Remove regular state class 7039 parent[_remove](regular || option(input, callback) || ''); 7040 } 7041 7042 // Remove checked, disabled or indeterminate state 7043 function off(input, state, keep) { 7044 var node = input[0], 7045 parent = input.parent(), 7046 checked = state == _checked, 7047 indeterminate = state == _indeterminate, 7048 disabled = state == _disabled, 7049 callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled', 7050 regular = option(input, callback + capitalize(node[_type])), 7051 specific = option(input, state + capitalize(node[_type])); 7052 7053 // Prevent unnecessary actions 7054 if (node[state] !== false) { 7055 7056 // Toggle state 7057 if (indeterminate || !keep || keep == 'force') { 7058 node[state] = false;
7059 } 7060 7061 // Trigger callbacks 7062 callbacks(input, checked, callback, keep); 7063 } 7064 7065 // Add proper cursor 7066 if (!node[_disabled] && !!option(input, _cursor, true)) { 7067 parent.find('.' + _iCheckHelper).css(_cursor, 'pointer'); 7068 } 7069 7070 // Remove state class 7071 parent[_remove](specific || option(input, state) || ''); 7072 7073 // Set ARIA attribute 7074 if (!!parent.attr('role') && !indeterminate) { 7075 parent.attr('aria-' + (disabled ? _disabled : _checked), 'false'); 7076 } 7077 7078 // Add regular state class 7079 parent[_add](regular || option(input, callback) || ''); 7080 } 7081 7082 // Remove all traces 7083 function tidy(input, callback) { 7084 if (input.data(_iCheck)) { 7085 7086 // Remove everything except input 7087 input.parent().html(input.attr('style', input.data(_iCheck).s || '')); 7088 7089 // Callback 7090 if (callback) { 7091 input[_callback](callback); 7092 } 7093 7094 // Unbind events 7095 input.off('.i').unwrap(); 7096 $(_label + '[for="' + input[0].id + '"]').add(input.closest(_label)).off('.i'); 7097 } 7098 } 7099 7100 // Get some option 7101 function option(input, state, regular) { 7102 if (input.data(_iCheck)) { 7103 return input.data(_iCheck).o[state + (regular ? '' : 'Class')]; 7104 } 7105 } 7106 7107 // Capitalize some string 7108 function capitalize(string) { 7109 return string.charAt(0).toUpperCase() + string.slice(1); 7110 } 7111 7112 // Executable handlers 7113 function callbacks(input, checked, callback, keep) { 7114 if (!keep) { 7115 if (checked) { 7116 input[_callback]('ifToggled'); 7117 } 7118 7119 input[_callback]('ifChanged')[_callback]('if' + capitalize(callback)); 7120 } 7121 } 7122})(window.jQuery || window.Zepto); 7123/** 7124 * Swiper 4.1.6 7125 * Most modern mobile touch slider and framework with hardware accelerated transitions 7126 * http://www.idangero.us/swiper/ 7127 */ 7128!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){"use strict";var e="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,t="undefined"==typeof window?{document:e,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,i=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function s(s,a){var r=[],n=0;if(s&&!a&&s instanceof i)return s;if(s)if("string"==typeof s){var o,l,d=s.trim();if(d.indexOf("<")>=0&&d.indexOf(">")>=0){var h="div";for(0===d.indexOf("<li")&&(h="ul"),0===d.indexOf("<tr")&&(h="tbody"),0!==d.indexOf("<td")&&0!==d.indexOf("<th")||(h="tr"),0===d.indexOf("<tbody")&&(h="table"),0===d.indexOf("<option")&&(h="select"),(l=e.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)r.push(l.childNodes[n])}else for(o=a||"#"!==s[0]||s.match(/[ .<>:~]/)?(a||e).querySelectorAll(s.trim()):[e.getElementById(s.trim().split("#")[1])],n=0;n<o.length;n+=1)o[n]&&r.push(o[n])}else if(s.nodeType||s===t||s===e)r.push(s);else if(s.length>0&&s[0].nodeType)for(n=0;n<s.length;n+=1)r.push(s[n]);return new i(r)}function a(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}s.fn=i.prototype,s.Class=i,s.Dom7=i;"resize scroll".split(" ");var r={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a=e[0],r=e[1],n=e[2],o=e[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.unshift(e),s(t).is(r))n.apply(t,i);else for(var a=s(t).parents(),o=0;o<a.length;o+=1)s(a[o]).is(r)&&n.apply(a[o],i)}}function d(e){var t=e&&e.target?e.target.dom7EventData||[]:[];t.unshift(e),n.apply(this,t)}"function"==typeof e[1]&&(a=(i=e)[0],n=i[1],o=i[2],r=void 0),o||(o=!1);for(var h,p=a.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1)u.dom7LiveListeners||(u.dom7LiveListeners=[]),u.dom7LiveListeners.push({type:a,listener:n,proxyListener:l}),u.addEventListener(p[h],l,o);else for(h=0;h<p.length;h+=1)u.dom7Listeners||(u.dom7Listeners=[]),u.dom7Listeners.push({type:a,listener:n,proxyListener:d}),u.addEventListener(p[h],d,o)}return this},off:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s=e[0],a=e[1],r=e[2],n=e[3];"function"==typeof e[1]&&(s=(i=e)[0],r=i[1],n=i[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=0;d<this.length;d+=1){var h=this[d];if(a){if(h.dom7LiveListeners)for(var p=0;p<h.dom7LiveListeners.length;p+=1)r?h.dom7LiveListeners[p].listener===r&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n):h.dom7LiveListeners[p].type===o[l]&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n)}else if(h.dom7Listeners)for(var c=0;c<h.dom7Listeners.length;c+=1)r?h.dom7Listeners[c].listener===r&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n):h.dom7Listeners[c].type===o[l]&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n)}return this},trigger:function(){for(var i=[],s=arguments.length;s--;)i[s]=arguments[s];for(var a=i[0].split(" "),r=i[1],n=0;n<a.length;n+=1)for(var o=0;o<this.length;o+=1){var l=void 0;try{l=new t.CustomEvent(a[n],{detail:r,bubbles:!0,cancelable:!0})}catch(t){(l=e.createEvent("Event")).initEvent(a[n],!0,!0),l.detail=r}this[o].dom7EventData=i.filter(function(e,t){return t>0}),this[o].dispatchEvent(l),this[o].dom7EventData=[],delete this[o].dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionEnd","transitionend"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+
vendor: 7,689 bytes, line 7128
7128parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var i=this[0],s=i.getBoundingClientRect(),a=e.body,r=i.clientTop||a.clientTop||0,n=i.clientLeft||a.clientLeft||0,o=i===t?t.scrollY:i.scrollTop,l=i===t?t.scrollX:i.scrollLeft;return{top:s.top+o-r,left:s.left+l-n}}return null},css:function(e,i){var s;if(1===arguments.length){if("string"!=typeof e){for(s=0;s<this.length;s+=1)for(var a in e)this[s].style[a]=e[a];return this}if(this[0])return t.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=i;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(a){var r,n,o=this[0];if(!o||void 0===a)return!1;if("string"==typeof a){if(o.matches)return o.matches(a);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(a);if(o.msMatchesSelector)return o.msMatchesSelector(a);for(r=s(a),n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}if(a===e)return o===e;if(a===t)return o===t;if(a.nodeType||a instanceof i){for(r=a.nodeType?[a]:a,n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,s=this.length;return new i(e>s-1?[]:e<0?(t=s+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var t,s=[],a=arguments.length;a--;)s[a]=arguments[a];for(var r=0;r<s.length;r+=1){t=s[r];for(var n=0;n<this.length;n+=1)if("string"==typeof t){var o=e.createElement("div");for(o.innerHTML=t;o.firstChild;)this[n].appendChild(o.firstChild)}else if(t instanceof i)for(var l=0;l<t.length;l+=1)this[n].appendChild(t[l]);else this[n].appendChild(t)}return this},prepend:function(t){var s,a;for(s=0;s<this.length;s+=1)if("string"==typeof t){var r=e.createElement("div");for(r.innerHTML=t,a=r.childNodes.length-1;a>=0;a-=1)this[s].insertBefore(r.childNodes[a],this[s].childNodes[0])}else if(t instanceof i)for(a=0;a<t.length;a+=1)this[s].insertBefore(t[a],this[s].childNodes[0]);else this[s].insertBefore(t,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&s(this[0].nextElementSibling).is(e)?new i([this[0].nextElementSibling]):new i([]):this[0].nextElementSibling?new i([this[0].nextElementSibling]):new i([]):new i([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.nextElementSibling;){var r=a.nextElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&s(t.previousElementSibling).is(e)?new i([t.previousElementSibling]):new i([]):t.previousElementSibling?new i([t.previousElementSibling]):new i([])}return new i([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.previousElementSibling;){var r=a.previousElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?s(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return s(a(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var r=this[i].parentNode;r;)e?s(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return s(a(t))},closest:function(e){var t=this;return void 0===e?new i([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],s=0;s<this.length;s+=1)for(var a=this[s].querySelectorAll(e),r=0;r<a.length;r+=1)t.push(a[r]);return new i(t)},children:function(e){for(var t=[],r=0;r<this.length;r+=1)for(var n=this[r].childNodes,o=0;o<n.length;o+=1)e?1===n[o].nodeType&&s(n[o]).is(e)&&t.push(n[o]):1===n[o].nodeType&&t.push(n[o]);return new i(a(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a;for(i=0;i<e.length;i+=1){var r=s(e[i]);for(a=0;a<r.length;a+=1)this[this.length]=r[a],this.length+=1}return this},styles:function(){return this[0]?t.getComputedStyle(this[0],null):{}}};Object.keys(r).forEach(function(e){s.fn[e]=r[e]});var n,o,l,d={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,i){var s,a,r;void 0===i&&(i="x");var n=t.getComputedStyle(e,null);return t.WebKitCSSMatrix?((a=n.transform||n.webkitTransform).split(",").length>6&&(a=a.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new t.WebKitCSSMatrix("none"===a?"":a)):s=(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===i&&(a=t.WebKitCSSMatrix?r.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),"y"===i&&(a=t.WebKitCSSMatrix?r.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),a||0},parseUrlQuery:function(e){var i,s,a,r,n={},o=e||t.location.href;if("string"==typeof o&&o.length)for(r=(s=(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"").split("&").filter(function(e){return""!==e})).length,i=0;i<r;i+=1)a=s[i].replace(/#\S+/g,"").split("="),n[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||"";return n},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(void 0!==a&&null!==a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var l=r[n],h=Object.getOwnPropertyDescriptor(a,l);void 0!==h&&h.enumerable&&(d.isObject(i[l])&&d.isObject(a[l])?d.extend(i[l],a[l]):!d.isObject(i[l])&&d.isObject(a[l])?(i[l]={},d.extend(i[l],a[l])):i[l]=a[l])}}return i}},h=(l=e.createElement("div"),{touch:t.Modernizr&&!0===t.Modernizr.touch||!!("ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch),pointerEvents:!(!t.navigator.pointerEnabled&&!t.PointerEvent),prefixedPointerEvents:!!t.navigator.msPointerEnabled,transition:(o=l.style,"transition"in o||"webkitTransition"in o||"MozTransition"in o),transforms3d:t.Modernizr&&!0===t.Modernizr.csstransforms3d||(n=l.style,"webkitPerspective"in n||"MozPerspective"in n||"OPerspective"in n||"MsPerspective"in n||"perspective"in n),flexbox:function(){for(var e=l.style,t="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),i=0;i<t.length;i+=1)if(t[i]in e)return!0;return!1}(),observer:"MutationObserver"in t||"WebkitMutationObserver"in t,passiveListener:function(){var e=!1;try{var i=Object.defineProperty({},"passive",{get:function(){e=!0}});t.addEventListener("testPassiveListener",null,i)}catch(e){}return e}(),gestures:"ongesturestart"in t}),p=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={}
7128,t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},c={components:{configurable:!0}};p.prototype.on=function(e,t){var i=this;return"function"!=typeof t?i:(e.split(" ").forEach(function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e].push(t)}),i)},p.prototype.once=function(e,t){var i=this;if("function"!=typeof t)return i;return i.on(e,function s(){for(var a=[],r=arguments.length;r--;)a[r]=arguments[r];t.apply(i,a),i.off(e,s)})},p.prototype.off=function(e,t){var i=this;return e.split(" ").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e].forEach(function(s,a){s===t&&i.eventsListeners[e].splice(a,1)})}),i},p.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;return r.eventsListeners?("string"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r),(Array.isArray(i)?i:i.split(" ")).forEach(function(e){if(r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(a,s)})}}),r):r},p.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i];s.params&&d.extend(e,s.params)})},p.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach(function(e){var i=s.instance[e];t[e]="function"==typeof i?i.bind(t):i}),s.on&&t.on&&Object.keys(s.on).forEach(function(e){t.on(e,s.on[e])}),s.create&&s.create.bind(t)(a)})},c.components.set=function(e){this.use&&this.use(e)},p.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+"_"+d.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach(function(t){s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s},p.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach(function(e){return s.installModule(e)}),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(p,c);var u={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),d.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,t=this.$wrapperEl,i=this.size,s=this.rtl,a=this.wrongRTL,r=t.children("."+this.params.slideClass),n=this.virtual&&e.virtual.enabled?this.virtual.slides.length:r.length,o=[],l=[],p=[],c=e.slidesOffsetBefore;"function"==typeof c&&(c=e.slidesOffsetBefore.call(this));var u=e.slidesOffsetAfter;"function"==typeof u&&(u=e.slidesOffsetAfter.call(this));var v=n,f=this.snapGrid.length,m=this.snapGrid.length,g=e.spaceBetween,b=-c,w=0,y=0;if(void 0!==i){var x,E;"string"==typeof g&&g.indexOf("%")>=0&&(g=parseFloat(g.replace("%",""))/100*i),this.virtualSize=-g,s?r.css({marginLeft:"",marginTop:""}):r.css({marginRight:"",marginBottom:""}),e.slidesPerColumn>1&&(x=Math.floor(n/e.slidesPerColumn)===n/this.params.slidesPerColumn?n:Math.ceil(n/e.slidesPerColumn)*e.slidesPerColumn,"auto"!==e.slidesPerView&&"row"===e.slidesPerColumnFill&&(x=Math.max(x,e.slidesPerView*e.slidesPerColumn)));for(var T,S=e.slidesPerColumn,C=x/S,M=C-(e.slidesPerColumn*C-n),z=0;z<n;z+=1){E=0;var P=r.eq(z);if(e.slidesPerColumn>1){var k=void 0,$=void 0,L=void 0;"column"===e.slidesPerColumnFill?(L=z-($=Math.floor(z/S))*S,($>M||$===M&&L===S-1)&&(L+=1)>=S&&(L=0,$+=1),k=$+L*x/S,P.css({"-webkit-box-ordinal-group":k,"-moz-box-ordinal-group":k,"-ms-flex-order":k,"-webkit-order":k,order:k})):$=z-(L=Math.floor(z/C))*C,P.css("margin-"+(this.isHorizontal()?"top":"left"),0!==L&&e.spaceBetween&&e.spaceBetween+"px").attr("data-swiper-column",$).attr("data-swiper-row",L)}"none"!==P.css("display")&&("auto"===e.slidesPerView?(E=this.isHorizontal()?P.outerWidth(!0):P.outerHeight(!0),e.roundLengths&&(E=Math.floor(E))):(E=(i-(e.slidesPerView-1)*g)/e.slidesPerView,e.roundLengths&&(E=Math.floor(E)),r[z]&&(this.isHorizontal()?r[z].style.width=E+"px":r[z].style.height=E+"px")),r[z]&&(r[z].swiperSlideSize=E),p.push(E),e.centeredSlides?(b=b+E/2+w/2+g,0===w&&0!==z&&(b=b-i/2-g),0===z&&(b=b-i/2-g),Math.abs(b)<.001&&(b=0),y%e.slidesPerGroup==0&&o.push(b),l.push(b)):(y%e.slidesPerGroup==0&&o.push(b),l.push(b),b=b+E+g),this.virtualSize+=E+g,w=E,y+=1)}if(this.virtualSize=Math.max(this.virtualSize,i)+u,s&&a&&("slide"===e.effect||"coverflow"===e.effect)&&t.css({width:this.virtualSize+e.spaceBetween+"px"}),h.flexbox&&!e.setWrapperSize||(this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"})),e.slidesPerColumn>1&&(this.virtualSize=(E+e.spaceBetween)*x,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"}),e.centeredSlides)){T=[];for(var I=0;I<o.length;I+=1)o[I]<this.virtualSize+o[0]&&T.push(o[I]);o=T}if(!e.centeredSlides){T=[];for(var D=0;D<o.length;D+=1)o[D]<=this.virtualSize-i&&T.push(o[D]);o=T,Math.floor(this.virtualSize-i)-Math.floor(o[o.length-1])>1&&o.push(this.virtualSize-i)}0===o.length&&(o=[0]),0!==e.spaceBetween&&(this.isHorizontal()?s?r.css({marginLeft:g+"px"}):r.css({marginRight:g+"px"}):r.css({marginBottom:g+"px"})),d.extend(this,{slides:r,snapGrid:o,slidesGrid:l,slidesSizesGrid:p}
7128),n!==v&&this.emit("slidesLengthChange"),o.length!==f&&(this.params.watchOverflow&&this.checkOverflow(),this.emit("snapGridLengthChange")),l.length!==m&&this.emit("slidesGridLengthChange"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(){var e,t=[],i=0;if("auto"!==this.params.slidesPerView&&this.params.slidesPerView>1)for(e=0;e<Math.ceil(this.params.slidesPerView);e+=1){var s=this.activeIndex+e;if(s>this.slides.length)break;t.push(this.slides.eq(s)[0])}else t.push(this.slides.eq(this.activeIndex)[0]);for(e=0;e<t.length;e+=1)if(void 0!==t[e]){var a=t[e].offsetHeight;i=a>i?a:i}i&&this.$wrapperEl.css("height",i+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.slides,s=this.rtl;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var a=-e;s&&(a=e),i.removeClass(t.slideVisibleClass);for(var r=0;r<i.length;r+=1){var n=i[r],o=(a+(t.centeredSlides?this.minTranslate():0)-n.swiperSlideOffset)/(n.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var l=-(a-n.swiperSlideOffset),d=l+this.slidesSizesGrid[r];(l>=0&&l<this.size||d>0&&d<=this.size||l<=0&&d>=this.size)&&i.eq(r).addClass(t.slideVisibleClass)}n.progress=s?-o:o}}},updateProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.maxTranslate()-this.minTranslate(),s=this.progress,a=this.isBeginning,r=this.isEnd,n=a,o=r;0===i?(s=0,a=!0,r=!0):(a=(s=(e-this.minTranslate())/i)<=0,r=s>=1),d.extend(this,{progress:s,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.watchSlidesVisibility)&&this.updateSlidesProgress(e),a&&!n&&this.emit("reachBeginning toEdge"),r&&!o&&this.emit("reachEnd toEdge"),(n&&!a||o&&!r)&&this.emit("fromEdge"),this.emit("progress",s)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+a+'"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);
7128i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtl?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,l=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if((t=a.indexOf(i)>=0?a.indexOf(i):Math.floor(h/r.slidesPerGroup))>=a.length&&(t=a.length-1),h!==n){var c=parseInt(this.slides.eq(h).attr("data-swiper-slide-index")||h,10);d.extend(this,{snapIndex:t,realIndex:c,previousIndex:n,activeIndex:h}),this.emit("activeIndexChange"),this.emit("snapIndexChange"),o!==c&&this.emit("realIndexChange"),this.emit("slideChange")}else t!==l&&(this.snapIndex=t,this.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this.params,i=s(e.target).closest("."+t.slideClass)[0],a=!1;if(i)for(var r=0;r<this.slides.length;r+=1)this.slides[r]===i&&(a=!0);if(!i||!a)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(s(i).attr("data-swiper-slide-index"),10):this.clickedIndex=s(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}},v={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,i=this.rtl,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;var r=d.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtl,s=this.params,a=this.$wrapperEl,r=this.progress,n=0,o=0;this.isHorizontal()?n=i?-e:e:o=e,s.roundLengths&&(n=Math.floor(n),o=Math.floor(o)),s.virtualTranslate||(h.transforms3d?a.transform("translate3d("+n+"px, "+o+"px, 0px)"):a.transform("translate("+n+"px, "+o+"px)")),this.translate=this.isHorizontal()?n:o;var l=this.maxTranslate()-this.minTranslate();(0===l?0:(e-this.minTranslate())/l)!==r&&this.updateProgress(e),this.emit("setTranslate",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}},f={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),this.emit("transitionStart"),e&&i!==a){if("reset"===r)return void this.emit("slideResetTransitionStart");this.emit("slideChangeTransitionStart"),"next"===r?this.emit("slideNextTransitionStart"):this.emit("slidePrevTransitionStart")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex;this.animating=!1,this.setTransition(0);var a=t;if(a||(a=i>s?"next":i<s?"prev":"reset"),this.emit("transitionEnd"),e&&i!==s){if("reset"===a)return void this.emit("slideResetTransitionEnd");this.emit("slideChangeTransitionEnd"),"next"===a?this.emit("slideNextTransitionEnd"):this.emit("slidePrevTransitionEnd")}}},m={slideTo:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=this,r=e;r<0&&(r=0);var n=a.params,o=a.snapGrid,l=a.slidesGrid,d=a.previousIndex,p=a.activeIndex,c=a.rtl,u=a.$wrapperEl;if(a.animating&&n.preventIntercationOnTransition)return!1;var v=Math.floor(r/n.slidesPerGroup);v>=o.length&&(v=o.length-1),(p||n.initialSlide||0)===(d||0)&&i&&a.emit("beforeSlideChangeStart");var f,m=-o[v];if(a.updateProgress(m),n.normalizeSlideIndex)for(var g=0;g<l.length;g+=1)-Math.floor(100*m)>=Math.floor(100*l[g])&&(r=g);if(a.initialized&&r!==p){if(!a.allowSlideNext&&m<a.translate&&m<a.minTranslate())return!1;if(!a.allowSlidePrev&&m>a.translate&&m>a.maxTranslate()&&(p||0)!==r)return!1}return f=r>p?"next":r<p?"prev":"reset",c&&-m===a.translate||!c&&m===a.translate?(a.updateActiveIndex(r),n.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),"slide"!==n.effect&&a.setTranslate(m),"reset"!==f&&(a.transitionStart(i,f),a.transitionEnd(i,f)),!1):(0!==t&&h.transition?(a.setTransition(t),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,f),a.animating||(a.animating=!0,u.transitionEnd(function(){a&&!a.destroyed&&a.transitionEnd(i,f)}))):(a.setTransition(0),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,f),a.transitionEnd(i,f)),!0)},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)):this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex-1,e,t,i)):this.slideTo(this.activeIndex-1,e,t,i)},slideReset:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);return this.slideTo(this.activeIndex,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,a=t.$wrapperEl,r="auto"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,n=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(s(t.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?n<t.loopedSlides-r/2||n>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n):n>t.slides.length-r?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n)}else t.slideTo(n)}},g={loopCreate:function(){var t=this,i=t.params,a=t.$wrapperEl;a.children("."+i.slideClass+"."+i.slideDuplicateClass).remove();var r=a.children("."+i.slideClass);if(i.loopFillGroupWithBlank){var n=i.slidesPerGroup-r.length%i.slidesPerGroup;if(n!==i.slidesPerGroup){for(var o=0;o<n;o+=1){var l=s(e.createElement("div")).addClass(i.slideClass+" "+i.slideBlankClass);a.append(l)}r=a.children("."+i.slideClass)}}"auto"!==i.slidesPerView||i.loopedSlides||(i.loopedSlides=r.length),t.loopedSlides=parseInt(i.loopedSlides||i.slidesPerView,10),t.loopedSlides+=i.loopAdditionalSlides,t.loopedSlides>r.length&&(t.loopedSlides=r.length);var d=[],h=[];r.each(function(e,i){var a=s(i);e<t.loopedSlides&&h.push(i),e<r.length&&e>=r.length-t.loopedSlides&&d.push(i),a.attr("data-swiper-slide-index",e)});for(var p=0;p<h.length;p+=1)a.append(s(h[p].cloneNode(!0)).addClass(i.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)a.prepend(s(d[c].cloneNode(!0)).addClass(i.slideDuplicateClass))},loopFix:function(){var e,t=this.params,i=this.activeIndex,s=this.slides,a=this.loopedSlides,r=this.allowSlidePrev,n=this.allowSlideNext,o=this.snapGrid,l=this.rtl;this.allowSlidePrev=!0,this.allowSlideNext=!0;var d=-o[i]-this.getTranslate();i<a?(e=s.length-3*a+i,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)):("auto"===t.slidesPerView&&i>=2*a||i>
7128s.length-2*t.slidesPerView)&&(e=-s.length+i+a,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d));this.allowSlidePrev=r,this.allowSlideNext=n},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass).remove(),i.removeAttr("data-swiper-slide-index")}},b={setGrabCursor:function(e){if(!h.touch&&this.params.simulateTouch){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){h.touch||(this.el.style.cursor="")}},w={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&h.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if("object"==typeof e&&"length"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),this.slideTo(a,0,!1)},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(this.loopDestroy(),this.slides=i.children("."+t.slideClass));var a,r=s;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},y=function(){var i=t.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:t.cordova||t.phonegap,phonegap:t.cordova||t.phonegap},a=i.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),r=i.match(/(Android);?[\s\/]+([\d.]+)?/),n=i.match(/(iPad).*OS\s([\d_]+)/),o=i.match(/(iPod)(.*OS\s([\d_]+))?/),l=!n&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(a&&(s.os="windows",s.osVersion=a[2],s.windows=!0),r&&!a&&(s.os="android",s.osVersion=r[2],s.android=!0,s.androidChrome=i.toLowerCase().indexOf("chrome")>=0),(n||l||o)&&(s.os="ios",s.ios=!0),l&&!o&&(s.osVersion=l[2].replace(/_/g,"."),s.iphone=!0),n&&(s.osVersion=n[2].replace(/_/g,"."),s.ipad=!0),o&&(s.osVersion=o[3]?o[3].replace(/_/g,"."):null,s.iphone=!0),s.ios&&s.osVersion&&i.indexOf("Version/")>=0&&"10"===s.osVersion.split(".")[0]&&(s.osVersion=i.toLowerCase().split("version/")[1].split(" ")[0]),s.desktop=!(s.os||s.android||s.webView),s.webView=(l||n||o)&&i.match(/.*AppleWebKit(?!.*Safari)/i),s.os&&"ios"===s.os){var d=s.osVersion.split("."),h=e.querySelector('meta[name="viewport"]');s.minimalUi=!s.webView&&(o||l)&&(1*d[0]==7?1*d[1]>=1:1*d[0]>7)&&h&&h.getAttribute("content").indexOf("minimal-ui")>=0}return s.pixelRatio=t.devicePixelRatio||1,s}(),x=function(i){var a=this.touchEventsData,r=this.params,n=this.touches;if(!this.animating||!r.preventIntercationOnTransition){var o=i;if(o.originalEvent&&(o=o.originalEvent),a.isTouchEvent="touchstart"===o.type,(a.isTouchEvent||!("which"in o)||3!==o.which)&&(!a.isTouched||!a.isMoved))if(r.noSwiping&&s(o.target).closest(r.noSwipingSelector?r.noSwipingSelector:"."+r.noSwipingClass)[0])this.allowClick=!0;else if(!r.swipeHandler||s(o).closest(r.swipeHandler)[0]){n.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,n.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var l=n.currentX,h=n.currentY;if(!(y.ios&&!y.cordova&&r.iOSEdgeSwipeDetection&&l<=r.iOSEdgeSwipeThreshold&&l>=t.screen.width-r.iOSEdgeSwipeThreshold)){if(d.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),n.startX=l,n.startY=h,a.touchStartTime=d.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==o.type){var p=!0;s(o.target).is(a.formElements)&&(p=!1),e.activeElement&&s(e.activeElement).is(a.formElements)&&e.activeElement!==o.target&&e.activeElement.blur(),p&&this.allowTouchMove&&o.preventDefault()}
7128this.emit("touchStart",o)}}}},E=function(t){var i=this.touchEventsData,a=this.params,r=this.touches,n=this.rtl,o=t;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||"mousemove"!==o.type){var l="touchmove"===o.type?o.targetTouches[0].pageX:o.pageX,h="touchmove"===o.type?o.targetTouches[0].pageY:o.pageY;if(o.preventedByNestedSwiper)return r.startX=l,void(r.startY=h);if(!this.allowTouchMove)return this.allowClick=!1,void(i.isTouched&&(d.extend(r,{startX:l,startY:h,currentX:l,currentY:h}),i.touchStartTime=d.now()));if(i.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(this.isVertical()){if(h<r.startY&&this.translate<=this.maxTranslate()||h>r.startY&&this.translate>=this.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(l<r.startX&&this.translate<=this.maxTranslate()||l>r.startX&&this.translate>=this.minTranslate())return;if(i.isTouchEvent&&e.activeElement&&o.target===e.activeElement&&s(o.target).is(i.formElements))return i.isMoved=!0,void(this.allowClick=!1);if(i.allowTouchCallbacks&&this.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){r.currentX=l,r.currentY=h;var p,c=r.currentX-r.startX,u=r.currentY-r.startY;if(void 0===i.isScrolling)this.isHorizontal()&&r.currentY===r.startY||this.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:c*c+u*u>=25&&(p=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,i.isScrolling=this.isHorizontal()?p>a.touchAngle:90-p>a.touchAngle);if(i.isScrolling&&this.emit("touchMoveOpposite",o),"undefined"==typeof startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){this.allowClick=!1,o.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&o.stopPropagation(),i.isMoved||(a.loop&&this.loopFix(),i.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!a.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit("sliderFirstMove",o)),this.emit("sliderMove",o),i.isMoved=!0;var v=this.isHorizontal()?c:u;r.diff=v,v*=a.touchRatio,n&&(v=-v),this.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;var f=!0,m=a.resistanceRatio;if(a.touchReleaseOnEdges&&(m=0),v>0&&i.currentTranslate>this.minTranslate()?(f=!1,a.resistance&&(i.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+i.startTranslate+v,m))):v<0&&i.currentTranslate<this.maxTranslate()&&(f=!1,a.resistance&&(i.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-i.startTranslate-v,m))),f&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&"next"===this.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!this.allowSlidePrev&&"prev"===this.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),a.threshold>0){if(!(Math.abs(v)>a.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);
7128if(!i.allowThresholdMove)return i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,void(r.diff=this.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}a.followFinger&&((a.freeMode||a.watchSlidesProgress||a.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),a.freeMode&&(0===i.velocities.length&&i.velocities.push({position:r[this.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:r[this.isHorizontal()?"currentX":"currentY"],time:d.now()})),this.updateProgress(i.currentTranslate),this.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&this.emit("touchMoveOpposite",o)},T=function(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtl,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=d.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit("tap",h),u<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=d.nextTick(function(){t&&!t.destroyed&&t.emit("click",h)},300)),u<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit("doubleTap",h))),i.lastClickTime=d.now(),d.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||d.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,E=!1,T=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-T&&(y=t.maxTranslate()-T),x=t.maxTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.maxTranslate();else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>T&&(y=t.minTranslate()+T),x=t.minTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.minTranslate();else if(s.freeModeSticky){for(var S,C=0;C<l.length;C+=1)if(l[C]>-y){S=C;break}y=-(y=Math.abs(l[S]-y)<Math.abs(l[S-1]-y)||"next"===t.swipeDirection?l[S]:l[S-1])}if(0!==t.velocity)b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity);else if(s.freeModeSticky)return void t.slideReset();s.freeModeMomentumBounce&&E?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(s.speed),t.setTranslate(x),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,z=t.slidesSizesGrid[0],P=0;P<o.length;P+=s.slidesPerGroup)void 0!==o[P+s.slidesPerGroup]?p>=o[P]&&p<o[P+s.slidesPerGroup]&&(M=P,z=o[P+s.slidesPerGroup]-o[P]):p>=o[P]&&(M=P,z=o[o.length-1]-o[o.length-2]);var k=(p-o[M])/z;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(k>=s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(k>1-s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+s.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}},S=function(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev;if(this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),e.freeMode){var a=Math.min(Math.max(this.translate,this.maxTranslate()),this.minTranslate());this.setTranslate(a),this.updateActiveIndex(),this.updateSlidesClasses(),e.autoHeight&&this.updateAutoHeight()}else this.updateSlidesClasses(),("auto"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0);this.allowSlidePrev=s,this.allowSlideNext=i}},C=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))};var M={attachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl;this.onTouchStart=x.bind(this),this.onTouchMove=E.bind(this),this.onTouchEnd=T.bind(this),this.onClick=C.bind(this);var r="container"===t.touchEventsTarget?s:a,n=!!t.nested;
7128if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!("touchstart"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(i.start,this.onTouchStart,o),r.addEventListener(i.move,this.onTouchMove,h.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener("mousedown",this.onTouchStart,!1),e.addEventListener("mousemove",this.onTouchMove,n),e.addEventListener("mouseup",this.onTouchEnd,!1))}else r.addEventListener(i.start,this.onTouchStart,!1),e.addEventListener(i.move,this.onTouchMove,n),e.addEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",this.onClick,!0),this.on("resize observerUpdate",S)},detachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl,r="container"===t.touchEventsTarget?s:a,n=!!t.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!("onTouchStart"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,this.onTouchStart,o),r.removeEventListener(i.move,this.onTouchMove,n),r.removeEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.onTouchStart,!1),e.removeEventListener("mousemove",this.onTouchMove,n),e.removeEventListener("mouseup",this.onTouchEnd,!1))}else r.removeEventListener(i.start,this.onTouchStart,!1),e.removeEventListener(i.move,this.onTouchMove,n),e.removeEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",this.onClick,!0),this.off("resize observerUpdate",S)}},z={setBreakpoint:function(){var e=this.activeIndex,t=this.loopedSlides;void 0===t&&(t=0);var i=this.params,s=i.breakpoints;if(s&&(!s||0!==Object.keys(s).length)){var a=this.getBreakpoint(s);if(a&&this.currentBreakpoint!==a){var r=a in s?s[a]:this.originalParams,n=i.loop&&r.slidesPerView!==i.slidesPerView;d.extend(this.params,r),d.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=a,n&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-t+this.loopedSlides,0,!1)),this.emit("breakpoint",r)}}},getBreakpoint:function(e){if(e){var i=!1,s=[];Object.keys(e).forEach(function(e){s.push(e)}),s.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var a=0;a<s.length;a+=1){var r=s[a];r>=t.innerWidth&&!i&&(i=r)}return i||"max"}}},P=function(){return{isIE:!!t.navigator.userAgent.match(/Trident/g)||!!t.navigator.userAgent.match(/MSIE/g),isSafari:(e=t.navigator.userAgent.toLowerCase(),e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)};var e}();var k={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventIntercationOnTransition:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},$={update:u,translate:v,transition:f,slide:m,loop:g,grabCursor:b,manipulation:w,events:M,breakpoints:z,checkOverflow:{checkOverflow:function(){var e=this.isLocked;this.isLocked=1===this.snapGrid.length,this.allowTouchMove=!this.isLocked,e&&e!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push(t.direction),t.freeMode&&a.push("free-mode"),h.flexbox||a.push("no-flexbox"),t.autoHeight&&a.push("autoheight"),i&&a.push("rtl"),t.slidesPerColumn>1&&a.push("multirow"),y.android&&a.push("android"),y.ios&&a.push("ios"),P.isIE&&(h.pointerEvents||h.prefixedPointerEvents)&&a.push("wp8-"+t.direction),a.forEach(function(i){e.push(t.containerModifierClass+i)}),s.addClass(e.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,i,s,a,r,n){var o;function l(){n&&n()}e.complete&&r?l():i?((o=new t.Image).onload=l,o.onerror=l,a&&(o.sizes=a),s&&(o.srcset=s),i&&(o.src=i)):l()},preloadImages:function(){var e=this;function t(){void 0!==e&&null!==e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(
7128),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute("src"),s.srcset||s.getAttribute("srcset"),s.sizes||s.getAttribute("sizes"),!0,t)}}}},L={},I=function(e){function t(){for(var i,a,r,n=[],o=arguments.length;o--;)n[o]=arguments[o];1===n.length&&n[0].constructor&&n[0].constructor===Object?a=n[0]:(i=(r=n)[0],a=r[1]);a||(a={}),a=d.extend({},a),i&&!a.el&&(a.el=i),e.call(this,a),Object.keys($).forEach(function(e){Object.keys($[e]).forEach(function(i){t.prototype[i]||(t.prototype[i]=$[e][i])})});var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach(function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s)return;if(!(i in a&&"enabled"in s))return;!0===a[i]&&(a[i]={enabled:!0}),"object"!=typeof a[i]||"enabled"in a[i]||(a[i].enabled=!0),a[i]||(a[i]={enabled:!1})}});var p=d.extend({},k);l.useModulesParams(p),l.params=d.extend({},p,L,a),l.originalParams=d.extend({},l.params),l.passedParams=d.extend({},a),l.$=s;var c=s(l.params.el);if(i=c[0]){if(c.length>1){var u=[];return c.each(function(e,i){var s=d.extend({},a,{el:i});u.push(new t(s))}),u}i.swiper=l,c.data("swiper",l);var v,f,m=c.children("."+l.params.wrapperClass);return d.extend(l,{$el:c,el:i,$wrapperEl:m,wrapperEl:m[0],classNames:[],slides:s(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},rtl:"horizontal"===l.params.direction&&("rtl"===i.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===m.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(v=["touchstart","touchmove","touchend"],f=["mousedown","mousemove","mouseup"],h.pointerEvents?f=["pointerdown","pointermove","pointerup"]:h.prefixedPointerEvents&&(f=["MSPointerDown","MSPointerMove","MSPointerUp"]),l.touchEventsTouch={start:v[0],move:v[1],end:v[2]},l.touchEventsDesktop={start:f[0],move:f[1],end:f[2]},h.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:d.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(r+=1,(o+=t[l].swiperSlideSize)>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(r+=1,(o+=t[d].swiperSlideSize)>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;e&&!e.destroyed&&(e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(t(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||t(),e.emit("update"));function t(){var t=e.rtl?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.init=function(){this.initialized||(this.emit("beforeInit"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(
7128),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit("init"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),d.deleteProps(i)),i.destroyed=!0},t.extendDefaults=function(e){d.extend(L,e)},i.extendedDefaults.get=function(){return L},i.defaults.get=function(){return k},i.Class.get=function(){return e},i.$.get=function(){return s},Object.defineProperties(t,i),t}(p),D={name:"device",proto:{device:y},static:{device:y}},O={name:"support",proto:{support:h},static:{support:h}},A={name:"browser",proto:{browser:P},static:{browser:P}},H={name:"resize",create:function(){var e=this;d.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){t.addEventListener("resize",this.resize.resizeHandler),t.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){t.removeEventListener("resize",this.resize.resizeHandler),t.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},N={func:t.MutationObserver||t.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,s=new(0,N.func)(function(e){e.forEach(function(e){i.emit("observerUpdate",e)})});s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(s)},init:function(){if(h.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:!1}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},X={name:"observer",params:{observer:!1,observeParents:!1},create:function(){d.extend(this,{observer:{init:N.init.bind(this),attach:N.attach.bind(this),destroy:N.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},Y={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.virtual,o=n.from,l=n.to,h=n.slides,p=n.slidesGrid,c=n.renderSlide,u=n.offset;t.updateActiveIndex();var v,f,m,g=t.activeIndex||0;v=t.rtl&&t.isHorizontal()?"right":t.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a,m=Math.floor(s/2)+a):(f=s+(a-1),m=a);var b=Math.max((g||0)-m,0),w=Math.min((g||0)+f,h.length-1),y=(t.slidesGrid[b]||0)-(t.slidesGrid[0]||0);function x(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(d.extend(t.virtual,{from:b,to:w,offset:y,slidesGrid:t.slidesGrid}),o===b&&l===w&&!e)return t.slidesGrid!==p&&y!==u&&t.slides.css(v,y+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:y,from:b,to:w,slides:function(){for(var e=[],t=b;t<=w;t+=1)e.push(h[t]);return e}()}),void x();var E=[],T=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var S=o;S<=l;S+=1)(S<b||S>w)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+S+'"]').remove();for(var C=0;C<h.length;C+=1)C>=b&&C<=w&&(void 0===l||e?T.push(C):(C>l&&T.push(C),C<o&&E.push(C)));T.forEach(function(e){t.$wrapperEl.append(c(h[e],e))}),E.sort(function(e,t){return e<t}
7128).forEach(function(e){t.$wrapperEl.prepend(c(h[e],e))}),t.$wrapperEl.children(".swiper-slide").css(v,y+"px"),x()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var a=i.renderSlide?s(i.renderSlide.call(this,e,t)):s('<div class="'+this.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){if(this.virtual.slides.unshift(e),this.params.virtual.cache){var t=this.virtual.cache,i={};Object.keys(t).forEach(function(e){i[e+1]=t[e]}),this.virtual.cache=i}this.virtual.update(!0),this.slideNext(0)}},B={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null}},create:function(){d.extend(this,{virtual:{update:Y.update.bind(this),appendSlide:Y.appendSlide.bind(this),prependSlide:Y.prependSlide.bind(this),renderSlide:Y.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+"virtual");var e={watchSlidesProgress:!0};d.extend(this.params,e),d.extend(this.originalParams,e),this.virtual.update(
7128)}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},G={handle:function(i){var s=i;s.originalEvent&&(s=s.originalEvent);var a=s.keyCode||s.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===a||this.isVertical()&&40===a))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===a||this.isVertical()&&38===a))return!1;if(!(s.shiftKey||s.altKey||s.ctrlKey||s.metaKey||e.activeElement&&e.activeElement.nodeName&&("input"===e.activeElement.nodeName.toLowerCase()||"textarea"===e.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(37===a||39===a||38===a||40===a)){var r=!1;if(this.$el.parents("."+this.params.slideClass).length>0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var n=t.innerWidth,o=t.innerHeight,l=this.$el.offset();this.rtl&&(l.left-=this.$el[0].scrollLeft);for(var d=[[l.left,l.top],[l.left+this.width,l.top],[l.left,l.top+this.height],[l.left+this.width,l.top+this.height]],h=0;h<d.length;h+=1){var p=d[h];p[0]>=0&&p[0]<=n&&p[1]>=0&&p[1]<=o&&(r=!0)}if(!r)return}this.isHorizontal()?(37!==a&&39!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),(39===a&&!this.rtl||37===a&&this.rtl)&&this.slideNext(),(37===a&&!this.rtl||39===a&&this.rtl)&&this.slidePrev()):(38!==a&&40!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),40===a&&this.slideNext(),38===a&&this.slidePrev()),this.emit("keyPress",a)}},enable:function(){this.keyboard.enabled||(s(e).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},V={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){d.extend(this,{keyboard:{enabled:!1,enable:G.enable.bind(this),disable:G.disable.bind(this),handle:G.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var R={lastScrollTime:d.now(),event:t.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var t="onwheel"in e;if(!t){var i=e.createElement("div");i.setAttribute("onwheel","return;"),t="function"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(t=e.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel",normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handle:function(e){var i=e,s=this,a=s.params.mousewheel;i.originalEvent&&(i=i.originalEvent);var r=0,n=s.rtl?-1:1,o=R.normalize(i);if(a.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;r=o.pixelX*n}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;r=o.pixelY}else r=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*n:-o.pixelY;if(0===r)return!0;if(a.invert&&(r=-r),s.params.freeMode){var l=s.getTranslate()+r*a.sensitivity,h=s.isBeginning,p=s.isEnd;if(l>=s.minTranslate()&&(l=s.minTranslate()),l<=s.maxTranslate()&&(l=s.maxTranslate()),s.setTransition(0),s.setTranslate(l),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!h&&s.isBeginning||!p&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky&&(clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=d.nextTick(function(){s.slideReset()},300)),s.emit("scroll",i),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.stopAutoplay(),l===s.minTranslate()||l===s.maxTranslate())return!0}else{if(d.now()-s.mousewheel.lastScrollTime>60)if(r<0)if(s.isEnd&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slideNext(),s.emit("scroll",i);else if(s.isBeginning&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slidePrev(),s.emit("scroll",i);s.mousewheel.lastScrollTime=(new t.Date).getTime()}return i.preventDefault?i.preventDefault():i.returnValue=!1,!1},enable:function(){if(!R.event)return!1;if(this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.on(R.event,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){if(!R.event)return!1;if(!this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.off(R.event,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},F={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>
71280&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},init:function(){var e,t,i=this,a=i.params.navigation;(a.nextEl||a.prevEl)&&(a.nextEl&&(e=s(a.nextEl),i.params.uniqueNavElements&&"string"==typeof a.nextEl&&e.length>1&&1===i.$el.find(a.nextEl).length&&(e=i.$el.find(a.nextEl))),a.prevEl&&(t=s(a.prevEl),i.params.uniqueNavElements&&"string"==typeof a.prevEl&&t.length>1&&1===i.$el.find(a.prevEl).length&&(t=i.$el.find(a.prevEl))),e&&e.length>0&&e.on("click",function(e){e.preventDefault(),i.isEnd&&!i.params.loop||i.slideNext()}),t&&t.length>0&&t.on("click",function(e){e.preventDefault(),i.isBeginning&&!i.params.loop||i.slidePrev()}),d.extend(i.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click"),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click"),i.removeClass(this.params.navigation.disabledClass))}},W={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(i>this.previousIndex&&this.pagination.dynamicBulletIndex<t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex+=1:i<this.previousIndex&&this.pagination.dynamicBulletIndex>0&&(this.pagination.dynamicBulletIndex-=1)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(t.dynamicMainBullets-1))+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),r.length>1)h.each(function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+"-main"),n===o&&r.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),n===l&&r.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))});else if(h.eq(i).addClass(t.bulletActiveClass),t.dynamicBullets){for(var p=h.eq(o),c=h.eq(l),u=o;u<=l;u+=1)h.eq(u).addClass(t.bulletActiveClass+"-main");p.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),c.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}if(t.dynamicBullets){var v=Math.min(h.length,t.dynamicMainBullets+4),f=(this.pagination.bulletSize*v-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,m=e?"right":"left";h.css(this.isHorizontal()?m:"top",f+"px")}}if("fraction"===t.type&&(r.find("."+t.currentClass).text(i+1),r.find("."+t.totalClass).text(n)),"progressbar"===t.type){var g=(i+1)/n,b=g,w=1;this.isHorizontal()||(w=g,b=1),r.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+b+") scaleY("+w+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit("paginationRender",this,r[0])):this.emit
7128("paginationUpdate",this,r[0]),r[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+="<"+e.bulletElement+' class="'+e.bulletClass+'"></'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class="'+e.currentClass+'"></span> / <span class="'+e.totalClass+'"></span>',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class="'+e.progressbarFillClass+'"></span>',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),t.clickable&&i.on("click","."+t.bulletClass,function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)}),d.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},q={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtl,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t&&this.isHorizontal()?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>
7128a&&(l=a-d),this.isHorizontal()?(h.transforms3d?r.transform("translate3d("+d+"px, 0, 0)"):r.transform("translateX("+d+"px)"),r[0].style.width=l+"px"):(h.transforms3d?r.transform("translate3d(0px, "+d+"px, 0)"):r.transform("translateY("+d+"px)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout(function(){n[0].style.opacity=0,n.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbarHide&&(i[0].style.opacity=0),d.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i=this.scrollbar,s=i.$el,a=i.dragSize,r=i.trackSize;t=((this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-s.offset()[this.isHorizontal()?"left":"top"]-a/2)/(r-a),t=Math.max(Math.min(t,1),0),this.rtl&&(t=1-t);var n=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(n),this.setTranslate(n),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=d.nextTick(function(){i.css("opacity",0),i.transition(400)},1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideReset())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.addEventListener(i.start,this.scrollbar.onDragStart,n),r.addEventListener(i.move,this.scrollbar.onDragMove,n),r.addEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener("mousedown",this.scrollbar.onDragStart,n),e.addEventListener("mousemove",this.scrollbar.onDragMove,n),e.addEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),e.addEventListener(s.move,this.scrollbar.onDragMove,n),e.addEventListener(s.end,this.scrollbar.onDragEnd,o))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.removeEventListener(i.start,this.scrollbar.onDragStart,n),r.removeEventListener(i.move,this.scrollbar.onDragMove,n),r.removeEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.scrollbar.onDragStart,n),e.removeEventListener("mousemove",this.scrollbar.onDragMove,n),e.removeEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),e.removeEventListener(s.move,this.scrollbar.onDragMove,n),e.removeEventListener(s.end,this.scrollbar.onDragEnd,o))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find("."+this.params.scrollbar.dragClass);0===r.length&&(r=s('<div class="'+this.params.scrollbar.dragClass+'"></div>'),a.append(r)),d.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},j={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr("data-swiper-parallax")||"0",o=a.attr("data-swiper-parallax-x"),l=a.attr("data-swiper-parallax-y"),d=a.attr("data-swiper-parallax-scale"),h=a.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=n,l="0"):(l=n,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*r+"%":o*t*r+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",void 0!==h&&null!==h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(void 0===d||null===d)a.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));a.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,a)}),i.each(function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,n)})})},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){var a=s(i),r=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),a.transition(r)})}},K={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!h.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=K.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(".swiper-slide"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas"),a.$imageWrapEl=a.$imageEl.parent("."+t.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=K.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(h.gestures?this.zoom.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform("translate3d(0,
71280,0) scale("+i.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!y.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+i.scale+")"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(y.android&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=d.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=d.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX),this.rtl&&(s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,
71280,0)"),t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0,e.scale=1,e.currentScale=1)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b=this.zoom,w=this.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,i=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(m=y.$slideEl[0].offsetWidth,g=y.$slideEl[0].offsetHeight,a=y.$slideEl.offset().left+m/2-t,r=y.$slideEl.offset().top+g/2-i,l=y.$imageEl[0].offsetWidth,d=y.$imageEl[0].offsetHeight,h=l*b.scale,p=d*b.scale,v=-(c=Math.min(m/2-h/2,0)),f=-(u=Math.min(g/2-p/2,0)),n=a*b.scale,o=r*b.scale,n<c&&(n=c),n>v&&(n=v),o<u&&(o=u),o>f&&(o=f)):(n=0,o=0),y.$imageWrapEl.transition(300).transform("translate3d("+n+"px, "+o+"px,0)"),y.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+b.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.on("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.off("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}}},U={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),n=r.find("."+a.elementClass+":not(."+a.loadedClass+"):not(."+a.loadingClass+")");!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||(n=n.add(r[0])),0!==n.length&&n.each(function(e,n){var o=s(n);o.addClass(a.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes");i.loadImage(o[0],d||l,h,p,!1,function(){if(void 0!==i&&null!==i&&i&&(!i||i.params)&&!i.destroyed){
7128if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),r.find("."+a.preloaderClass).remove(),i.params.loop&&t){var e=r.attr("data-swiper-slide-index");if(r.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(s.index(),!1)}else{var n=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(n.index(),!1)}}i.emit("lazyImageReady",r[0],o[0])}}),i.emit("lazyImageLoad",r[0],o[0])})}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr("data-swiper-slide-index"):s(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each(function(t,i){var a=n?s(i).attr("data-swiper-slide-index"):s(i).index();e.lazy.loadInSlide(a)});else if(l>1)for(var p=r;p<r+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(r);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<r;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children("."+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},_={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new _.LinearSpline(this.slidesGrid,e.slidesGrid):new _.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=e.rtl&&"horizontal"===e.params.direction?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof I&&n(r[o]);else r instanceof I&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.$wrapperEl.transitionEnd(function(){a&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof I&&r(a[i]);else a instanceof I&&t!==a&&r(a)}},Z={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=s(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeg
7128inning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is("."+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){if(!this.params.loop){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each(function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,"button"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},Q={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=Q.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=Q.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),i=e.length;return{key:e[i-2],value:e[i-1]}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=Q.slugify(s.attr("data-history"));t.location.pathname.includes(e)||(a=e+"/"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s);if(Q.slugify(r.attr("data-history"))===t&&!r.hasClass(this.params.slideDuplicateClass)){var n=r.index();this.slideTo(n,e,i)}}else this.slideTo(0,e,i)}},J={onHashCange:function(){var t=e.location.hash.replace("#","");t!==this.slides.eq(this.activeIndex).attr("data-hash")&&this.slideTo(this.$wrapperEl.children("."+this.params.slideClass+'[data-hash="'+t+'"]').index())},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&t.history&&t.history.replaceState)t.history.replaceState(null,null,"#"+this.slides.eq(this.activeIndex).attr("data-hash")||"");else{var i=this.slides.eq(this.activeIndex),s=i.attr("data-hash")||i.attr("data-history");e.location.hash=s||""}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var i=e.location.hash.replace("#","");if(i)for(var a=0,r=this.slides.length;a<r;a+=1){var n=this.slides.eq(a);if((n.attr("data-hash")||n.attr("data-history"))===i&&!n.hasClass(this.params.slideDuplicateClass)){var o=n.index();this.slideTo(o,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&s(t).on("hashchange",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&s(t).off("hashchange",this.hashNavigation.onHashCange)}},ee={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(i=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),e.autoplay.timeout=
7128d.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay"))},i)},start:function(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0))},stop:function(){return!!this.autoplay.running&&(void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit("autoplayStop"),!0))},pause:function(e){var t=this;t.autoplay.running&&(t.autoplay.paused||(t.auto
vendor: 14,423 bytes, line 7128
7128play.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?t.$wrapperEl.transitionEnd(function(){t&&!t.destroyed&&(t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}):(t.autoplay.paused=!1,t.autoplay.run())))}},te={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=-i[0].swiperSlideOffset;this.params.virtualTranslate||(s-=this.translate);var a=0;this.isHorizontal()||(a=s,s=0);var r=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:r}).transform("translate3d("+s+"px, "+a+"px, 0px)")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd(function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)s.trigger(e[i])}})}}},ie={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,a=this.slides,r=this.width,n=this.height,o=this.rtl,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:r+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),t.append(e)));for(var u=0;u<a.length;u+=1){var v=a.eq(u),f=u;p&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var E="rotateX("+(h?0:-m)+"deg) rotateY("+(h?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(E),d.slideShadows){var T=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===T.length&&(T=s('<div class="swiper-slide-shadow-'+(h?"left":"top")+'"></div>'),v.append(T)),0===S.length&&(S=s('<div class="swiper-slide-shadow-'+(h?"right":"bottom")+'"></div>'),v.append(S)),T.length&&(T[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(c)-90*Math.floor(Math.abs(c)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),z=d.shadowScale,k=d.shadowScale/M,$=d.shadowOffset;e.transform("scale3d("+z+", 1, "+k+") translate3d(0px, "+(n/2+$)+"px, "+-n/2/k+"px) rotateX(-90deg)")}var L=P.isSafari||P.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+L+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},se={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=e.eq(t),a=i[0].progress;this.params.flipEffect.limitRotation&&(a=Math.max(Math.min(i[0].progress,1),-1));var r=-180*a,n=0,o=-i[0].swiperSlideOffset,l=0;if(this.isHorizontal()?this.rtl&&(r=-r):(l=o,o=0,n=-r,r=0),i[0].style.zIndex=-Math.abs(Math.round(a))+e.length,this.params.flipEffect.slideShadows){var d=this.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),h=this.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===d.length&&(d=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"left":"top")+'"></div>'),i.append(d)),0===h.length&&(h=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"right":"bottom")+'"></div>'),i.append(h)),d.length&&(d[0].style.opacity=Math.max(-a,0)),h.length&&(h[0].style.opacity=Math.max(a,0))}i.transform("translate3d("+o+"px, "+l+"px, 0px) rotateX("+n+"deg) rotateY("+r+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)a.trigger(e[i])}})}}},ae={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,a=this.$wrapperEl,r=this.slidesSizesGrid,n=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,d=o?e/2-l:t/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=r[u],g=(d-f[0].swiperSlideOffset-m/2)/m*n.modifier,b=o?p*g:0,w=o?0:p*g,y=-c*Math.abs(g),x=o?0:n.stretch*g,E=o?n.stretch*g:0;Math.abs(E)<.001&&(E=0),Math.abs(x)<.001&&(x=0),Math.abs(y)<.001&&(y=0),Math.abs(b)<.001&&(b=0),Math.abs(w)<.001&&(w=0);var T="translate3d("+E+"px,"+x+"px,"+y+"px) rotateX("+w+"deg) rotateY("+b+"deg)";if(f.transform(T),f[0].style.zIndex=1-Math.abs(Math.round(g)),n.slideShadows){var S=o?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),C=o?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===S.length&&(S=s('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),f.append(S)),0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),f.append(C)),S.length&&(S[0].style.opacity=g>0?g:0),C.length&&(C[0].style.opacity=-g>0?-g:0)}}(h.pointerEvents||h.prefixedPointerEvents)&&(a[0].style.perspectiveOrigin=d+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},re=[D,O,A,H,X,B,V,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){d.extend(this,{mousewheel:{enabled:!1,enable:R.enable.bind(this),disable:R.disable.bind(this),handle:R.handle.bind(this),lastScrollTime:d.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){d.extend(this,{navigation:{init:F.init.bind(this),update:F.update.bind(this),destroy:F.destroy.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,i=t.$nextEl,a=t.$prevEl;!this.params.navigation.hideOnClick||s(e.target).is(a)||s(e.target).is(i)||(i&&i.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){d.extend(this,{pagination:{init:W.init.bind(this),render:W.render.bind(this),update:W.update.bind(this),destroy:W.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){d.extend(this,{scrollbar:{init:q.init.bind(this),destroy:q.destroy.bind(this),updateSize:q.updateSize.bind(this),setTranslate:q.setTranslate.bind(this),setTransition:q.setTransition.bind(this),enableDraggable:q.enableDraggable.bind(this),disableDraggable:q.disableDraggable.bind(this),setDragPosition:q.setDragPosition.bind(this),onDragStart:q.onDragStart.bind(this),onDragMove:q.onDragMove.bind(this),onDragEnd:q.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){d.extend(this,{parallax:{setTransform:j.setTransform.bind(this),setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(i){t[i]=K[i].bind(e)}),d.extend(e,{zoom:t})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){d.extend(this,{lazy:{initialImageLoaded:!1,load:U.load.bind(this),loadInSlide:U.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){d.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:_.getInterpolateFunction.bind(this),setTranslate:_.setTranslate.bind(this),setTransition:_.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!1,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;d.extend(e,{a11y:{liveRegion:s('<span class="'+e.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}
7128),Object.keys(Z).forEach(function(t){e.a11y[t]=Z[t].bind(e)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){d.extend(this,{history:{init:Q.init.bind(this),setHistory:Q.setHistory.bind(this),setHistoryPopState:Q.setHistoryPopState.bind(this),scrollToSlide:Q.scrollToSlide.bind(this),destroy:Q.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){d.extend(this,{hashNavigation:{initialized:!1,init:J.init.bind(this),destroy:J.destroy.bind(this),setHash:J.setHash.bind(this),onHashCange:J.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){d.extend(this,{autoplay:{running:!1,paused:!1,run:ee.run.bind(this),start:ee.start.bind(this),stop:ee.stop.bind(this),pause:ee.pause.bind(this)}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){d.extend(this,{fadeEffect:{setTranslate:te.setTranslate.bind(this),setTransition:te.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){d.extend(this,{cubeEffect:{setTranslate:ie.setTranslate.bind(this),setTransition:ie.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){d.extend(this,{flipEffect:{setTranslate:se.setTranslate.bind(this),setTransition:se.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){d.extend(this,{coverflowEffect:{setTranslate:ae.setTranslate.bind(this),setTransition:ae.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}}];return void 0===I.use&&(I.use=I.Class.use,I.installModule=I.Class.installModule),I.use(re),I});/*! 7129 Zoom 1.7.14 7130 license: MIT 7131 http://www.jacklmoore.com/zoom 7132*/ 7133(function ($) { 7134 var defaults = { 7135 url: false, 7136 callback: false, 7137 target: false, 7138 duration: 120, 7139 on: 'mouseover', // other options: grab, click, toggle 7140 touch: true, // enables a touch fallback
7141 onZoomIn: false, 7142 onZoomOut: false, 7143 magnify: 1 7144 }; 7145 7146 // Core Zoom Logic, independent of event listeners. 7147 $.zoom = function(target, source, img, magnify) { 7148 var targetHeight, 7149 targetWidth, 7150 sourceHeight, 7151 sourceWidth, 7152 xRatio, 7153 yRatio, 7154 offset, 7155 $target = $(target), 7156 position = $target.css('position'), 7157 $source = $(source); 7158 7159 // The parent element needs positioning so that the zoomed element can be correctly positioned within. 7160 $target.css('position', /(absolute|fixed)/.test(position) ? position : 'relative'); 7161 $target.css('overflow', 'hidden'); 7162 7163 img.style.width = img.style.height = ''; 7164 7165 $(img) 7166 .addClass('zoomImg') 7167 .css({ 7168 position: 'absolute', 7169 top: 0, 7170 left: 0, 7171 opacity: 0, 7172 width: img.width * magnify, 7173 height: img.height * magnify, 7174 border: 'none', 7175 maxWidth: 'none', 7176 maxHeight: 'none' 7177 }) 7178 .appendTo(target); 7179 7180 return { 7181 init: function() { 7182 targetWidth = $target.outerWidth(); 7183 targetHeight = $target.outerHeight(); 7184 7185 if (source === $target[0]) { 7186 sourceWidth = targetWidth; 7187 sourceHeight = targetHeight; 7188 } else { 7189 sourceWidth = $source.outerWidth(); 7190 sourceHeight = $source.outerHeight(); 7191 } 7192 7193 xRatio = (img.width - targetWidth) / sourceWidth; 7194 yRatio = (img.height - targetHeight) / sourceHeight; 7195 7196 offset = $source.offset(); 7197 }, 7198 move: function (e) { 7199 var left = (e.pageX - offset.left), 7200 top = (e.pageY - offset.top); 7201 7202 top = Math.max(Math.min(top, sourceHeight), 0); 7203 left = Math.max(Math.min(left, sourceWidth), 0); 7204 7205 img.style.left = (left * -xRatio) + 'px'; 7206 img.style.top = (top * -yRatio) + 'px'; 7207 } 7208 }; 7209 }; 7210 7211 $.fn.zoom = function (options) { 7212 return this.each(function () { 7213 var 7214 settings = $.extend({}, defaults, options || {}), 7215 //target will display the zoomed image 7216 target = settings.target || this, 7217 //source will provide zoom location info (thumbnail) 7218 source = this, 7219 $source = $(source), 7220 $target = $(target), 7221 img = document.createElement('img'), 7222 $img = $(img), 7223 mousemove = 'mousemove.zoom', 7224 clicked = false, 7225 touched = false, 7226 $urlElement; 7227 7228 // If a url wasn't specified, look for an image element. 7229 if (!settings.url) { 7230 $urlElement = $source.find('img'); 7231 if ($urlElement[0]) { 7232 settings.url = $urlElement.data('src') || $urlElement.attr('src'); 7233 } 7234 if (!settings.url) { 7235 return; 7236 } 7237 } 7238 7239 (function(){ 7240 var position = $target.css('position'); 7241 var overflow = $target.css('overflow'); 7242 7243 $source.one('zoom.destroy', function(){ 7244 $source.off(".zoom"); 7245 $target.css('position', position); 7246 $target.css('overflow', overflow); 7247 $img.remove(); 7248 }); 7249 7250 }()); 7251 7252 img.onload = function () { 7253 var zoom = $.zoom(target, source, img, settings.magnify); 7254 7255 function start(e) { 7256 zoom.init(); 7257 zoom.move(e); 7258 7259 // Skip the fade-in for IE8 and lower since it chokes on fading-in 7260 // and changing position based on mousemovement at the same time. 7261 $img.stop() 7262 .fadeTo($.support.opacity ? settings.duration : 0, 1, $.isFunction(settings.onZoomIn) ? settings.onZoomIn.call(img) : false); 7263 } 7264 7265 function stop() { 7266 $img.stop() 7267 .fadeTo(settings.duration, 0, $.isFunction(settings.onZoomOut) ? settings.onZoomOut.call(img) : false); 7268 } 7269 7270 // Mouse events 7271 if (settings.on === 'grab') { 7272 $source 7273 .on('mousedown.zoom', 7274 function (e) { 7275 if (e.which === 1) { 7276 $(document).one('mouseup.zoom', 7277 function () { 7278 stop(); 7279 7280 $(document).off(mousemove, zoom.move); 7281 } 7282 ); 7283 7284 start(e); 7285 7286 $(document).on(mousemove, zoom.move); 7287 7288 e.preventDefault(); 7289 } 7290 } 7291 ); 7292 } else if (settings.on === 'click') { 7293 $source.on('click.zoom', 7294 function (e) { 7295 if (clicked) { 7296 // bubble the event up to the document to trigger the unbind. 7297 return; 7298 } else { 7299 clicked = true; 7300 start(e); 7301 $(document).on(mousemove, zoom.move); 7302 $(document).one('click.zoom', 7303 function () { 7304 stop(); 7305 clicked = false;
vendor: 6,995 bytes, lines 7306-7573
7306 $(document).off(mousemove, zoom.move); 7307 } 7308 ); 7309 return false; 7310 } 7311 } 7312 ); 7313 } else if (settings.on === 'toggle') { 7314 $source.on('click.zoom', 7315 function (e) { 7316 if (clicked) { 7317 stop(); 7318 } else { 7319 start(e); 7320 } 7321 clicked = !clicked; 7322 } 7323 ); 7324 } else if (settings.on === 'mouseover') { 7325 zoom.init(); // Preemptively call init because IE7 will fire the mousemove handler before the hover handler. 7326 7327 $source 7328 .on('mouseenter.zoom', start) 7329 .on('mouseleave.zoom', stop) 7330 .on(mousemove, zoom.move); 7331 } 7332 7333 // Touch fallback 7334 if (settings.touch) { 7335 $source 7336 .on('touchstart.zoom', function (e) { 7337 e.preventDefault(); 7338 if (touched) { 7339 touched = false; 7340 stop(); 7341 } else { 7342 touched = true; 7343 start( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] ); 7344 } 7345 }) 7346 .on('touchmove.zoom', function (e) { 7347 e.preventDefault(); 7348 zoom.move( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] ); 7349 }); 7350 } 7351 7352 if ($.isFunction(settings.callback)) { 7353 settings.callback.call(img); 7354 } 7355 }; 7356 7357 img.src = settings.url; 7358 }); 7359 }; 7360 7361 $.fn.zoom.defaults = defaults; 7362}(window.jQuery)); 7363/*! 7364 * fancyBox - jQuery Plugin 7365 * version: 2.1.4 (Thu, 10 Jan 2013) 7366 * @requires jQuery v1.6 or later 7367 * 7368 * Examples at http://fancyapps.com/fancybox/ 7369 * License: www.fancyapps.com/fancybox/#license 7370 * 7371 * Copyright 2012 Janis Skarnelis - [email protected] 7372 * 7373 */ 7374 7375(function (window, document, $, undefined) { 7376 "use strict"; 7377 7378 var W = $(window), 7379 D = $(document), 7380 F = $.fancybox = function () { 7381 F.open.apply( this, arguments ); 7382 }, 7383 IE = navigator.userAgent.match(/msie/), 7384 didUpdate = null, 7385 isTouch = document.createTouch !== undefined, 7386 7387 isQuery = function(obj) { 7388 return obj && obj.hasOwnProperty && obj instanceof $; 7389 }, 7390 isString = function(str) { 7391 return str && $.type(str) === "string"; 7392 }, 7393 isPercentage = function(str) { 7394 return isString(str) && str.indexOf('%') > 0; 7395 }, 7396 isScrollable = function(el) { 7397 return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); 7398 }, 7399 getScalar = function(orig, dim) { 7400 var value = parseInt(orig, 10) || 0; 7401 7402 if (dim && isPercentage(orig)) { 7403 value = F.getViewport()[ dim ] / 100 * value; 7404 } 7405 7406 return Math.ceil(value); 7407 }, 7408 getValue = function(value, dim) { 7409 return getScalar(value, dim) + 'px'; 7410 }; 7411 7412 $.extend(F, { 7413 // The current version of fancyBox 7414 version: '2.1.4', 7415 7416 defaults: { 7417 padding : 15, 7418 margin : 20, 7419 7420 width : 800, 7421 height : 600, 7422 minWidth : 100, 7423 minHeight : 100, 7424 maxWidth : 9999, 7425 maxHeight : 9999, 7426 7427 autoSize : true, 7428 autoHeight : false, 7429 autoWidth : false, 7430 7431 autoResize : true, 7432 autoCenter : !isTouch, 7433 fitToView : true, 7434 aspectRatio : false, 7435 topRatio : 0.5, 7436 leftRatio : 0.5, 7437 7438 scrolling : 'auto', // 'auto', 'yes' or 'no' 7439 wrapCSS : '', 7440 7441 arrows : true, 7442 closeBtn : true, 7443 closeClick : false, 7444 nextClick : false, 7445 mouseWheel : true, 7446 autoPlay : false, 7447 playSpeed : 3000, 7448 preload : 3, 7449 modal : false, 7450 loop : true, 7451 7452 ajax : { 7453 dataType : 'html', 7454 headers : { 'X-fancyBox': true } 7455 }, 7456 iframe : { 7457 scrolling : 'auto', 7458 preload : true 7459 }, 7460 swf : { 7461 wmode: 'transparent', 7462 allowfullscreen : 'true', 7463 allowscriptaccess : 'always' 7464 }, 7465 7466 keys : { 7467 next : { 7468 13 : 'left', // enter 7469 34 : 'up', // page down 7470 39 : 'left', // right arrow 7471 40 : 'up' // down arrow 7472 }, 7473 prev : { 7474 8 : 'right', // backspace 7475 33 : 'down', // page up 7476 37 : 'right', // left arrow 7477 38 : 'down' // up arrow 7478 }, 7479 close : [27], // escape key 7480 play : [32], // space - start/stop slideshow 7481 toggle : [70] // letter "f" - toggle fullscreen 7482 }, 7483 7484 direction : { 7485 next : 'left', 7486 prev : 'right' 7487 }, 7488 7489 scrollOutside : true, 7490 7491 // Override some properties 7492 index : 0, 7493 type : null, 7494 href : null, 7495 content : null, 7496 title : null, 7497 7498 // HTML templates 7499 tpl: { 7500 wrap : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>', 7501 image : '<img class="fancybox-image" src="{href}" alt="" />', 7502 iframe : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" allow="geolocation" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>', 7503 error : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>', 7504 closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>', 7505 next : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>', 7506 prev : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>' 7507 }, 7508 7509 // Properties for each animation type 7510 // Opening fancyBox 7511 openEffect : 'fade', // 'elastic', 'fade' or 'none' 7512 openSpeed : 250, 7513 openEasing : 'swing', 7514 openOpacity : true, 7515 openMethod : 'zoomIn', 7516 7517 // Closing fancyBox 7518 closeEffect : 'fade', // 'elastic', 'fade' or 'none' 7519 closeSpeed : 250, 7520 closeEasing : 'swing', 7521 closeOpacity : true, 7522 closeMethod : 'zoomOut', 7523 7524 // Changing next gallery item 7525 nextEffect : 'elastic', // 'elastic', 'fade' or 'none' 7526 nextSpeed : 250, 7527 nextEasing : 'swing', 7528 nextMethod : 'changeIn', 7529 7530 // Changing previous gallery item 7531 prevEffect : 'elastic', // 'elastic', 'fade' or 'none' 7532 prevSpeed : 250, 7533 prevEasing : 'swing', 7534 prevMethod : 'changeOut', 7535 7536 // Enable default helpers 7537 helpers : { 7538 overlay : true, 7539 title : true 7540 }, 7541 7542 // Callbacks 7543 onCancel : $.noop, // If canceling 7544 beforeLoad : $.noop, // Before loading 7545 afterLoad : $.noop, // After loading 7546 beforeShow : $.noop, // Before changing in current item 7547 afterShow : $.noop, // After opening 7548 beforeChange : $.noop, // Before changing gallery item 7549 beforeClose : $.noop, // Before closing 7550 afterClose : $.noop // After closing 7551 }, 7552 7553 //Current state 7554 group : {}, // Selected group 7555 opts : {}, // Group options 7556 previous : null, // Previous element 7557 coming : null, // Element being loaded 7558 current : null, // Currently loaded element 7559 isActive : false, // Is activated 7560 isOpen : false, // Is currently open 7561 isOpened : false, // Have been fully opened at least once 7562 7563 wrap : null, 7564 skin : null, 7565 outer : null, 7566 inner : null, 7567 7568 player : { 7569 timer : null, 7570 isActive : false 7571 }, 7572 7573 // Loaders
vendor: 34,999 bytes, lines 7574-9051
7574 ajaxLoad : null, 7575 imgPreload : null, 7576 7577 // Some collections 7578 transitions : {}, 7579 helpers : {}, 7580 7581 /* 7582 * Static methods 7583 */ 7584 7585 open: function (group, opts) { 7586 if (!group) { 7587 return; 7588 } 7589 7590 if (!$.isPlainObject(opts)) { 7591 opts = {}; 7592 } 7593 7594 // Close if already active 7595 if (false === F.close(true)) { 7596 return; 7597 } 7598 7599 // Normalize group 7600 if (!$.isArray(group)) { 7601 group = isQuery(group) ? $(group).get() : [group]; 7602 } 7603 7604 // Recheck if the type of each element is `object` and set content type (image, ajax, etc) 7605 $.each(group, function(i, element) { 7606 var obj = {}, 7607 href, 7608 title, 7609 content, 7610 type, 7611 rez, 7612 hrefParts, 7613 selector; 7614 7615 if ($.type(element) === "object") { 7616 // Check if is DOM element 7617 if (element.nodeType) { 7618 element = $(element); 7619 } 7620 7621 if (isQuery(element)) { 7622 obj = { 7623 href : element.data('fancybox-href') || element.attr('href'), 7624 title : element.data('fancybox-title') || element.attr('title'), 7625 isDom : true, 7626 element : element 7627 }; 7628 7629 if ($.metadata) { 7630 $.extend(true, obj, element.metadata()); 7631 } 7632 7633 } else { 7634 obj = element; 7635 } 7636 } 7637 7638 href = opts.href || obj.href || (isString(element) ? element : null); 7639 title = opts.title !== undefined ? opts.title : obj.title || ''; 7640 7641 content = opts.content || obj.content; 7642 type = content ? 'html' : (opts.type || obj.type); 7643 7644 if (!type && obj.isDom) { 7645 type = element.data('fancybox-type'); 7646 7647 if (!type) { 7648 rez = element.prop('class').match(/fancybox\.(\w+)/); 7649 type = rez ? rez[1] : null; 7650 } 7651 } 7652 7653 if (isString(href)) { 7654 // Try to guess the content type 7655 if (!type) { 7656 if (F.isImage(href)) { 7657 type = 'image'; 7658 7659 } else if (F.isSWF(href)) { 7660 type = 'swf'; 7661 7662 } else if (href.charAt(0) === '#') { 7663 type = 'inline'; 7664 7665 } else if (isString(element)) { 7666 type = 'html'; 7667 content = element; 7668 } 7669 } 7670 7671 // Split url into two pieces with source url and content selector, e.g, 7672 // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" 7673 if (type === 'ajax') { 7674 hrefParts = href.split(/\s+/, 2); 7675 href = hrefParts.shift(); 7676 selector = hrefParts.shift(); 7677 } 7678 } 7679 7680 if (!content) { 7681 if (type === 'inline') { 7682 if (href) { 7683 content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 7684 7685 } else if (obj.isDom) { 7686 content = element; 7687 } 7688 7689 } else if (type === 'html') { 7690 content = href; 7691 7692 } else if (!type && !href && obj.isDom) { 7693 type = 'inline'; 7694 content = element; 7695 } 7696 } 7697 7698 $.extend(obj, { 7699 href : href, 7700 type : type, 7701 content : content, 7702 title : title, 7703 selector : selector 7704 }); 7705 7706 group[ i ] = obj; 7707 }); 7708 7709 // Extend the defaults 7710 F.opts = $.extend(true, {}, F.defaults, opts); 7711 7712 // All options are merged recursive except keys 7713 if (opts.keys !== undefined) { 7714 F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; 7715 } 7716 7717 F.group = group; 7718 7719 return F._start(F.opts.index); 7720 }, 7721 7722 // Cancel image loading or abort ajax request 7723 cancel: function () { 7724 var coming = F.coming; 7725 7726 if (!coming || false === F.trigger('onCancel')) { 7727 return; 7728 } 7729 7730 F.hideLoading(); 7731 7732 if (F.ajaxLoad) { 7733 F.ajaxLoad.abort(); 7734 } 7735 7736 F.ajaxLoad = null; 7737 7738 if (F.imgPreload) { 7739 F.imgPreload.onload = F.imgPreload.onerror = null; 7740 } 7741 7742 if (coming.wrap) { 7743 coming.wrap.stop(true, true).trigger('onReset').remove(); 7744 } 7745 7746 F.coming = null; 7747 7748 // If the first item has been canceled, then clear everything 7749 if (!F.current) { 7750 F._afterZoomOut( coming ); 7751 } 7752 }, 7753 7754 // Start closing animation if is open; remove immediately if opening/closing 7755 close: function (event) { 7756 F.cancel(); 7757 7758 if (false === F.trigger('beforeClose')) { 7759 return; 7760 } 7761 7762 F.unbindEvents(); 7763 7764 if (!F.isActive) { 7765 return; 7766 } 7767 7768 if (!F.isOpen || event === true) { 7769 $('.fancybox-wrap').stop(true).trigger('onReset').remove(); 7770 7771 F._afterZoomOut(); 7772 7773 } else { 7774 F.isOpen = F.isOpened = false; 7775 F.isClosing = true; 7776 7777 $('.fancybox-item, .fancybox-nav').remove(); 7778 7779 F.wrap.stop(true, true).removeClass('fancybox-opened'); 7780 7781 F.transitions[ F.current.closeMethod ](); 7782 } 7783 }, 7784 7785 // Manage slideshow: 7786 // $.fancybox.play(); - toggle slideshow 7787 // $.fancybox.play( true ); - start 7788 // $.fancybox.play( false ); - stop 7789 play: function ( action ) { 7790 var clear = function () { 7791 clearTimeout(F.player.timer); 7792 }, 7793 set = function () { 7794 clear(); 7795 7796 if (F.current && F.player.isActive) { 7797 F.player.timer = setTimeout(F.next, F.current.playSpeed); 7798 } 7799 }, 7800 stop = function () { 7801 clear(); 7802 7803 $('body').unbind('.player'); 7804 7805 F.player.isActive = false; 7806 7807 F.trigger('onPlayEnd'); 7808 }, 7809 start = function () { 7810 if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { 7811 F.player.isActive = true; 7812 7813 $('body').bind({ 7814 'afterShow.player onUpdate.player' : set, 7815 'onCancel.player beforeClose.player' : stop, 7816 'beforeLoad.player' : clear 7817 }); 7818 7819 set(); 7820 7821 F.trigger('onPlayStart'); 7822 } 7823 }; 7824 7825 if (action === true || (!F.player.isActive && action !== false)) { 7826 start(); 7827 } else { 7828 stop(); 7829 } 7830 }, 7831 7832 // Navigate to next gallery item 7833 next: function ( direction ) { 7834 var current = F.current; 7835 7836 if (current) { 7837 if (!isString(direction)) { 7838 direction = current.direction.next; 7839 } 7840 7841 F.jumpto(current.index + 1, direction, 'next'); 7842 } 7843 }, 7844 7845 // Navigate to previous gallery item 7846 prev: function ( direction ) { 7847 var current = F.current; 7848 7849 if (current) { 7850 if (!isString(direction)) { 7851 direction = current.direction.prev; 7852 } 7853 7854 F.jumpto(current.index - 1, direction, 'prev'); 7855 } 7856 }, 7857 7858 // Navigate to gallery item by index 7859 jumpto: function ( index, direction, router ) { 7860 var current = F.current; 7861 7862 if (!current) { 7863 return; 7864 } 7865 7866 index = getScalar(index); 7867 7868 F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; 7869 F.router = router || 'jumpto'; 7870 7871 if (current.loop) { 7872 if (index < 0) { 7873 index = current.group.length + (index % current.group.length); 7874 } 7875 7876 index = index % current.group.length; 7877 } 7878 7879 if (current.group[ index ] !== undefined) { 7880 F.cancel(); 7881 7882 F._start(index); 7883 } 7884 }, 7885 7886 // Center inside viewport and toggle position type to fixed or absolute if needed 7887 reposition: function (e, onlyAbsolute) { 7888 var current = F.current, 7889 wrap = current ? current.wrap : null, 7890 pos; 7891 7892 if (wrap) { 7893 pos = F._getPosition(onlyAbsolute); 7894 7895 if (e && e.type === 'scroll') { 7896 delete pos.position; 7897 7898 wrap.stop(true, true).animate(pos, 200); 7899 7900 } else { 7901 wrap.css(pos); 7902 7903 current.pos = $.extend({}, current.dim, pos); 7904 } 7905 } 7906 }, 7907 7908 update: function (e) { 7909 var type = (e && e.type), 7910 anyway = !type || type === 'orientationchange'; 7911 7912 if (anyway) { 7913 clearTimeout(didUpdate); 7914 7915 didUpdate = null; 7916 } 7917 7918 if (!F.isOpen || didUpdate) { 7919 return; 7920 } 7921 7922 didUpdate = setTimeout(function() { 7923 var current = F.current; 7924 7925 if (!current || F.isClosing) { 7926 return; 7927 } 7928 7929 F.wrap.removeClass('fancybox-tmp'); 7930 7931 if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { 7932 F._setDimension(); 7933 } 7934 7935 if (!(type === 'scroll' && current.canShrink)) { 7936 F.reposition(e); 7937 } 7938 7939 F.trigger('onUpdate'); 7940 7941 didUpdate = null; 7942 7943 }, (anyway && !isTouch ? 0 : 300)); 7944 }, 7945 7946 // Shrink content to fit inside viewport or restore if resized 7947 toggle: function ( action ) { 7948 if (F.isOpen) { 7949 F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; 7950 7951 // Help browser to restore document dimensions 7952 if (isTouch) { 7953 F.wrap.removeAttr('style').addClass('fancybox-tmp'); 7954 7955 F.trigger('onUpdate'); 7956 } 7957 7958 F.update(); 7959 } 7960 }, 7961 7962 hideLoading: function () { 7963 D.unbind('.loading'); 7964 7965 $('#fancybox-loading').remove(); 7966 }, 7967 7968 showLoading: function () { 7969 var el, viewport; 7970 7971 F.hideLoading(); 7972 7973 el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body'); 7974 7975 // If user will press the escape-button, the request will be canceled 7976 D.bind('keydown.loading', function(e) { 7977 if ((e.which || e.keyCode) === 27) { 7978 e.preventDefault(); 7979 7980 F.cancel(); 7981 } 7982 }); 7983 7984 if (!F.defaults.fixed) { 7985 viewport = F.getViewport(); 7986 7987 el.css({ 7988 position : 'absolute', 7989 top : (viewport.h * 0.5) + viewport.y, 7990 left : (viewport.w * 0.5) + viewport.x 7991 }); 7992 } 7993 }, 7994 7995 getViewport: function () { 7996 var locked = (F.current && F.current.locked) || false, 7997 rez = { 7998 x: W.scrollLeft(), 7999 y: W.scrollTop() 8000 }; 8001 8002 if (locked) { 8003 rez.w = locked[0].clientWidth; 8004 rez.h = locked[0].clientHeight; 8005 8006 } else { 8007 // See http://bugs.jquery.com/ticket/6724 8008 rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); 8009 rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); 8010 } 8011 8012 return rez; 8013 }, 8014 8015 // Unbind the keyboard / clicking actions 8016 unbindEvents: function () { 8017 if (F.wrap && isQuery(F.wrap)) { 8018 F.wrap.unbind('.fb'); 8019 } 8020 8021 D.unbind('.fb'); 8022 W.unbind('.fb'); 8023 }, 8024 8025 bindEvents: function () { 8026 var current = F.current, 8027 keys; 8028 8029 if (!current) { 8030 return; 8031 } 8032 8033 // Changing document height on iOS devices triggers a 'resize' event, 8034 // that can change document height... repeating infinitely 8035 W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); 8036 8037 keys = current.keys; 8038 8039 if (keys) { 8040 D.bind('keydown.fb', function (e) { 8041 var code = e.which || e.keyCode, 8042 target = e.target || e.srcElement; 8043 8044 // Skip esc key if loading, because showLoading will cancel preloading 8045 if (code === 27 && F.coming) { 8046 return false; 8047 } 8048 8049 // Ignore key combinations and key events within form elements 8050 if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { 8051 $.each(keys, function(i, val) { 8052 if (current.group.length > 1 && val[ code ] !== undefined) { 8053 F[ i ]( val[ code ] ); 8054 8055 e.preventDefault(); 8056 return false; 8057 } 8058 8059 if ($.inArray(code, val) > -1) { 8060 F[ i ] (); 8061 8062 e.preventDefault(); 8063 return false; 8064 } 8065 }); 8066 } 8067 }); 8068 } 8069 8070 if ($.fn.mousewheel && current.mouseWheel) { 8071 F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { 8072 var target = e.target || null, 8073 parent = $(target), 8074 canScroll = false; 8075 8076 while (parent.length) { 8077 if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { 8078 break; 8079 } 8080 8081 canScroll = isScrollable( parent[0] ); 8082 parent = $(parent).parent(); 8083 } 8084 8085 if (delta !== 0 && !canScroll) { 8086 if (F.group.length > 1 && !current.canShrink) { 8087 if (deltaY > 0 || deltaX > 0) { 8088 F.prev( deltaY > 0 ? 'down' : 'left' ); 8089 8090 } else if (deltaY < 0 || deltaX < 0) { 8091 F.next( deltaY < 0 ? 'up' : 'right' ); 8092 } 8093 8094 e.preventDefault(); 8095 } 8096 } 8097 }); 8098 } 8099 }, 8100 8101 trigger: function (event, o) { 8102 var ret, obj = o || F.coming || F.current; 8103 8104 if (!obj) { 8105 return; 8106 } 8107 8108 if ($.isFunction( obj[event] )) { 8109 ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); 8110 } 8111 8112 if (ret === false) { 8113 return false; 8114 } 8115 8116 if (obj.helpers) { 8117 $.each(obj.helpers, function (helper, opts) { 8118 if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { 8119 opts = $.extend(true, {}, F.helpers[helper].defaults, opts); 8120 8121 F.helpers[helper][event](opts, obj); 8122 } 8123 }); 8124 } 8125 8126 $.event.trigger(event + '.fb'); 8127 }, 8128 8129 isImage: function (str) { 8130 return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i); 8131 }, 8132 8133 isSWF: function (str) { 8134 return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); 8135 }, 8136 8137 _start: function (index) { 8138 var coming = {}, 8139 obj, 8140 href, 8141 type, 8142 margin, 8143 padding; 8144 8145 index = getScalar( index ); 8146 obj = F.group[ index ] || null; 8147 8148 if (!obj) { 8149 return false; 8150 } 8151 8152 coming = $.extend(true, {}, F.opts, obj); 8153 8154 // Convert margin and padding properties to array - top, right, bottom, left 8155 margin = coming.margin; 8156 padding = coming.padding; 8157 8158 if ($.type(margin) === 'number') { 8159 coming.margin = [margin, margin, margin, margin]; 8160 } 8161 8162 if ($.type(padding) === 'number') { 8163 coming.padding = [padding, padding, padding, padding]; 8164 } 8165 8166 // 'modal' propery is just a shortcut 8167 if (coming.modal) { 8168 $.extend(true, coming, { 8169 closeBtn : false, 8170 closeClick : false, 8171 nextClick : false, 8172 arrows : false, 8173 mouseWheel : false, 8174 keys : null, 8175 helpers: { 8176 overlay : { 8177 closeClick : false 8178 } 8179 } 8180 }); 8181 } 8182 8183 // 'autoSize' property is a shortcut, too 8184 if (coming.autoSize) { 8185 coming.autoWidth = coming.autoHeight = true; 8186 } 8187 8188 if (coming.width === 'auto') { 8189 coming.autoWidth = true; 8190 } 8191 8192 if (coming.height === 'auto') { 8193 coming.autoHeight = true; 8194 } 8195 8196 /* 8197 * Add reference to the group, so it`s possible to access from callbacks, example: 8198 * afterLoad : function() { 8199 * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); 8200 * } 8201 */ 8202 8203 coming.group = F.group; 8204 coming.index = index; 8205 8206 // Give a chance for callback or helpers to update coming item (type, title, etc) 8207 F.coming = coming; 8208 8209 if (false === F.trigger('beforeLoad')) { 8210 F.coming = null; 8211 8212 return; 8213 } 8214 8215 type = coming.type; 8216 href = coming.href; 8217 8218 if (!type) { 8219 F.coming = null; 8220 8221 //If we can not determine content type then drop silently or display next/prev item if looping through gallery 8222 if (F.current && F.router && F.router !== 'jumpto') { 8223 F.current.index = index; 8224 8225 return F[ F.router ]( F.direction ); 8226 } 8227 8228 return false; 8229 } 8230 8231 F.isActive = true; 8232 8233 if (type === 'image' || type === 'swf') { 8234 coming.autoHeight = coming.autoWidth = false; 8235 coming.scrolling = 'visible'; 8236 } 8237 8238 if (type === 'image') { 8239 coming.aspectRatio = true; 8240 } 8241 8242 if (type === 'iframe' && isTouch) { 8243 coming.scrolling = 'scroll'; 8244 } 8245 8246 // Build the neccessary markup 8247 coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); 8248 8249 $.extend(coming, { 8250 skin : $('.fancybox-skin', coming.wrap), 8251 outer : $('.fancybox-outer', coming.wrap), 8252 inner : $('.fancybox-inner', coming.wrap) 8253 }); 8254 8255 $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { 8256 coming.skin.css('padding' + v, getValue(coming.padding[ i ])); 8257 }); 8258 8259 F.trigger('onReady'); 8260 8261 // Check before try to load; 'inline' and 'html' types need content, others - href 8262 if (type === 'inline' || type === 'html') { 8263 if (!coming.content || !coming.content.length) { 8264 return F._error( 'content' ); 8265 } 8266 8267 } else if (!href) { 8268 return F._error( 'href' ); 8269 } 8270 8271 if (type === 'image') { 8272 F._loadImage(); 8273 8274 } else if (type === 'ajax') { 8275 F._loadAjax(); 8276 8277 } else if (type === 'iframe') { 8278 F._loadIframe(); 8279 8280 } else { 8281 F._afterLoad(); 8282 } 8283 }, 8284 8285 _error: function ( type ) { 8286 $.extend(F.coming, { 8287 type : 'html', 8288 autoWidth : true, 8289 autoHeight : true, 8290 minWidth : 0, 8291 minHeight : 0, 8292 scrolling : 'no', 8293 hasError : type, 8294 content : F.coming.tpl.error 8295 }); 8296 8297 F._afterLoad(); 8298 }, 8299 8300 _loadImage: function () { 8301 // Reset preload image so it is later possible to check "complete" property 8302 var img = F.imgPreload = new Image(); 8303 8304 img.onload = function () { 8305 this.onload = this.onerror = null; 8306 8307 F.coming.width = this.width; 8308 F.coming.height = this.height; 8309 8310 F._afterLoad(); 8311 }; 8312 8313 img.onerror = function () { 8314 this.onload = this.onerror = null; 8315 8316 F._error( 'image' ); 8317 }; 8318 8319 img.src = F.coming.href; 8320 8321 if (img.complete !== true) { 8322 F.showLoading(); 8323 } 8324 }, 8325 8326 _loadAjax: function () { 8327 var coming = F.coming; 8328 8329 F.showLoading(); 8330 8331 F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { 8332 url: coming.href, 8333 error: function (jqXHR, textStatus) { 8334 if (F.coming && textStatus !== 'abort') { 8335 F._error( 'ajax', jqXHR ); 8336 8337 } else { 8338 F.hideLoading(); 8339 } 8340 }, 8341 success: function (data, textStatus) { 8342 if (textStatus === 'success') { 8343 coming.content = data; 8344 8345 F._afterLoad(); 8346 } 8347 } 8348 })); 8349 }, 8350 8351 _loadIframe: function() { 8352 var coming = F.coming, 8353 iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) 8354 .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) 8355 .attr('src', coming.href); 8356 8357 // This helps IE 8358 $(coming.wrap).bind('onReset', function () { 8359 try { 8360 $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); 8361 } catch (e) {} 8362 }); 8363 8364 if (coming.iframe.preload) { 8365 F.showLoading(); 8366 8367 iframe.one('load', function() { 8368 $(this).data('ready', 1); 8369 8370 // iOS will lose scrolling if we resize 8371 if (!isTouch) { 8372 $(this).bind('load.fb', F.update); 8373 } 8374 8375 // Without this trick: 8376 // - iframe won't scroll on iOS devices 8377 // - IE7 sometimes displays empty iframe 8378 $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); 8379 8380 F._afterLoad(); 8381 }); 8382 } 8383 8384 coming.content = iframe.appendTo( coming.inner ); 8385 8386 if (!coming.iframe.preload) { 8387 F._afterLoad(); 8388 } 8389 }, 8390 8391 _preloadImages: function() { 8392 var group = F.group, 8393 current = F.current, 8394 len = group.length, 8395 cnt = current.preload ? Math.min(current.preload, len - 1) : 0, 8396 item, 8397 i; 8398 8399 for (i = 1; i <= cnt; i += 1) { 8400 item = group[ (current.index + i ) % len ]; 8401 8402 if (item.type === 'image' && item.href) { 8403 new Image().src = item.href; 8404 } 8405 } 8406 }, 8407 8408 _afterLoad: function () { 8409 var coming = F.coming, 8410 previous = F.current, 8411 placeholder = 'fancybox-placeholder', 8412 current, 8413 content, 8414 type, 8415 scrolling, 8416 href, 8417 embed; 8418 8419 F.hideLoading(); 8420 8421 if (!coming || F.isActive === false) { 8422 return; 8423 } 8424 8425 if (false === F.trigger('afterLoad', coming, previous)) { 8426 coming.wrap.stop(true).trigger('onReset').remove(); 8427 8428 F.coming = null; 8429 8430 return; 8431 } 8432 8433 if (previous) { 8434 F.trigger('beforeChange', previous); 8435 8436 previous.wrap.stop(true).removeClass('fancybox-opened') 8437 .find('.fancybox-item, .fancybox-nav') 8438 .remove(); 8439 } 8440 8441 F.unbindEvents(); 8442 8443 current = coming; 8444 content = coming.content; 8445 type = coming.type; 8446 scrolling = coming.scrolling; 8447 8448 $.extend(F, { 8449 wrap : current.wrap, 8450 skin : current.skin, 8451 outer : current.outer, 8452 inner : current.inner, 8453 current : current, 8454 previous : previous 8455 }); 8456 8457 href = current.href; 8458 8459 switch (type) { 8460 case 'inline': 8461 case 'ajax': 8462 case 'html': 8463 if (current.selector) { 8464 content = $('<div>').html(content).find(current.selector); 8465 8466 } else if (isQuery(content)) { 8467 if (!content.data(placeholder)) { 8468 content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() ); 8469 } 8470 8471 content = content.show().detach(); 8472 8473 current.wrap.bind('onReset', function () { 8474 if ($(this).find(content).length) { 8475 content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); 8476 } 8477 }); 8478 } 8479 break; 8480 8481 case 'image': 8482 content = current.tpl.image.replace('{href}', href); 8483 break; 8484 8485 case 'swf': 8486 content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>'; 8487 embed = ''; 8488 8489 $.each(current.swf, function(name, val) { 8490 content += '<param name="' + name + '" value="' + val + '"></param>'; 8491 embed += ' ' + name + '="' + val + '"'; 8492 }); 8493 8494 content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>'; 8495 break; 8496 } 8497 8498 if (!(isQuery(content) && content.parent().is(current.inner))) { 8499 current.inner.append( content ); 8500 } 8501 8502 // Give a chance for helpers or callbacks to update elements 8503 F.trigger('beforeShow'); 8504 8505 // Set scrolling before calculating dimensions 8506 current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); 8507 8508 // Set initial dimensions and start position 8509 F._setDimension(); 8510 8511 F.reposition(); 8512 8513 F.isOpen = false; 8514 F.coming = null; 8515 8516 F.bindEvents(); 8517 8518 if (!F.isOpened) { 8519 $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); 8520 8521 } else if (previous.prevMethod) { 8522 F.transitions[ previous.prevMethod ](); 8523 } 8524 8525 F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); 8526 8527 F._preloadImages(); 8528 }, 8529 8530 _setDimension: function () { 8531 var viewport = F.getViewport(), 8532 steps = 0, 8533 canShrink = false, 8534 canExpand = false, 8535 wrap = F.wrap, 8536 skin = F.skin, 8537 inner = F.inner, 8538 current = F.current, 8539 width = current.width, 8540 height = current.height, 8541 minWidth = current.minWidth, 8542 minHeight = current.minHeight, 8543 maxWidth = current.maxWidth, 8544 maxHeight = current.maxHeight, 8545 scrolling = current.scrolling, 8546 scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, 8547 margin = current.margin, 8548 wMargin = getScalar(margin[1] + margin[3]), 8549 hMargin = getScalar(margin[0] + margin[2]), 8550 wPadding, 8551 hPadding, 8552 wSpace, 8553 hSpace, 8554 origWidth, 8555 origHeight, 8556 origMaxWidth, 8557 origMaxHeight, 8558 ratio, 8559 width_, 8560 height_, 8561 maxWidth_, 8562 maxHeight_, 8563 iframe, 8564 body; 8565 8566 // Reset dimensions so we could re-check actual size 8567 wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); 8568 8569 wPadding = getScalar(skin.outerWidth(true) - skin.width()); 8570 hPadding = getScalar(skin.outerHeight(true) - skin.height()); 8571 8572 // Any space between content and viewport (margin, padding, border, title) 8573 wSpace = wMargin + wPadding; 8574 hSpace = hMargin + hPadding; 8575 8576 origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; 8577 origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; 8578 8579 if (current.type === 'iframe') { 8580 iframe = current.content; 8581 8582 if (current.autoHeight && iframe.data('ready') === 1) { 8583 try { 8584 if (iframe[0].contentWindow.document.location) { 8585 inner.width( origWidth ).height(9999); 8586 8587 body = iframe.contents().find('body'); 8588 8589 if (scrollOut) { 8590 body.css('overflow-x', 'hidden'); 8591 } 8592 8593 origHeight = body.height(); 8594 } 8595 8596 } catch (e) {} 8597 } 8598 8599 } else if (current.autoWidth || current.autoHeight) { 8600 inner.addClass( 'fancybox-tmp' ); 8601 8602 // Set width or height in case we need to calculate only one dimension 8603 if (!current.autoWidth) { 8604 inner.width( origWidth ); 8605 } 8606 8607 if (!current.autoHeight) { 8608 inner.height( origHeight ); 8609 } 8610 8611 if (current.autoWidth) { 8612 origWidth = inner.width(); 8613 } 8614 8615 if (current.autoHeight) { 8616 origHeight = inner.height(); 8617 } 8618 8619 inner.removeClass( 'fancybox-tmp' ); 8620 } 8621 8622 width = getScalar( origWidth ); 8623 height = getScalar( origHeight ); 8624 8625 ratio = origWidth / origHeight; 8626 8627 // Calculations for the content 8628 minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); 8629 maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); 8630 8631 minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); 8632 maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); 8633 8634 // These will be used to determine if wrap can fit in the viewport 8635 origMaxWidth = maxWidth; 8636 origMaxHeight = maxHeight; 8637 8638 if (current.fitToView) { 8639 maxWidth = Math.min(viewport.w - wSpace, maxWidth); 8640 maxHeight = Math.min(viewport.h - hSpace, maxHeight); 8641 } 8642 8643 maxWidth_ = viewport.w - wMargin; 8644 maxHeight_ = viewport.h - hMargin; 8645 8646 if (current.aspectRatio) { 8647 if (width > maxWidth) { 8648 width = maxWidth; 8649 height = getScalar(width / ratio); 8650 } 8651 8652 if (height > maxHeight) { 8653 height = maxHeight; 8654 width = getScalar(height * ratio); 8655 } 8656 8657 if (width < minWidth) { 8658 width = minWidth; 8659 height = getScalar(width / ratio); 8660 } 8661 8662 if (height < minHeight) { 8663 height = minHeight; 8664 width = getScalar(height * ratio); 8665 } 8666 8667 } else { 8668 width = Math.max(minWidth, Math.min(width, maxWidth)); 8669 8670 if (current.autoHeight && current.type !== 'iframe') { 8671 inner.width( width ); 8672 8673 height = inner.height(); 8674 } 8675 8676 height = Math.max(minHeight, Math.min(height, maxHeight)); 8677 } 8678 8679 // Try to fit inside viewport (including the title) 8680 if (current.fitToView) { 8681 inner.width( width ).height( height ); 8682 8683 wrap.width( width + wPadding ); 8684 8685 // Real wrap dimensions 8686 width_ = wrap.width(); 8687 height_ = wrap.height(); 8688 8689 if (current.aspectRatio) { 8690 while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { 8691 if (steps++ > 19) { 8692 break; 8693 } 8694 8695 height = Math.max(minHeight, Math.min(maxHeight, height - 10)); 8696 width = getScalar(height * ratio); 8697 8698 if (width < minWidth) { 8699 width = minWidth; 8700 height = getScalar(width / ratio); 8701 } 8702 8703 if (width > maxWidth) { 8704 width = maxWidth; 8705 height = getScalar(width / ratio); 8706 } 8707 8708 inner.width( width ).height( height ); 8709 8710 wrap.width( width + wPadding ); 8711 8712 width_ = wrap.width(); 8713 height_ = wrap.height(); 8714 } 8715 8716 } else { 8717 width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); 8718 height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); 8719 } 8720 } 8721 8722 if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { 8723 width += scrollOut; 8724 } 8725 8726 inner.width( width ).height( height ); 8727 8728 wrap.width( width + wPadding ); 8729 8730 width_ = wrap.width(); 8731 height_ = wrap.height(); 8732 8733 canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; 8734 canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); 8735 8736 $.extend(current, { 8737 dim : { 8738 width : getValue( width_ ), 8739 height : getValue( height_ ) 8740 }, 8741 origWidth : origWidth, 8742 origHeight : origHeight, 8743 canShrink : canShrink, 8744 canExpand : canExpand, 8745 wPadding : wPadding, 8746 hPadding : hPadding, 8747 wrapSpace : height_ - skin.outerHeight(true), 8748 skinSpace : skin.height() - height 8749 }); 8750 8751 if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { 8752 inner.height('auto'); 8753 } 8754 }, 8755 8756 _getPosition: function (onlyAbsolute) { 8757 var current = F.current, 8758 viewport = F.getViewport(), 8759 margin = current.margin, 8760 width = F.wrap.width() + margin[1] + margin[3], 8761 height = F.wrap.height() + margin[0] + margin[2], 8762 rez = { 8763 position: 'absolute', 8764 top : margin[0], 8765 left : margin[3] 8766 }; 8767 8768 if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { 8769 rez.position = 'fixed'; 8770 8771 } else if (!current.locked) { 8772 rez.top += viewport.y; 8773 rez.left += viewport.x; 8774 } 8775 8776 rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); 8777 rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); 8778 8779 return rez; 8780 }, 8781 8782 _afterZoomIn: function () { 8783 var current = F.current; 8784 8785 if (!current) { 8786 return; 8787 } 8788 8789 F.isOpen = F.isOpened = true; 8790 8791 F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); 8792 8793 F.update(); 8794 8795 // Assign a click event 8796 if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { 8797 F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { 8798 if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { 8799 e.preventDefault(); 8800 8801 F[ current.closeClick ? 'close' : 'next' ](); 8802 } 8803 }); 8804 } 8805 8806 // Create a close button 8807 if (current.closeBtn) { 8808 $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { 8809 e.preventDefault(); 8810 8811 F.close(); 8812 }); 8813 } 8814 8815 // Create navigation arrows 8816 if (current.arrows && F.group.length > 1) { 8817 if (current.loop || current.index > 0) { 8818 $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); 8819 } 8820 8821 if (current.loop || current.index < F.group.length - 1) { 8822 $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); 8823 } 8824 } 8825 8826 F.trigger('afterShow'); 8827 8828 // Stop the slideshow if this is the last item 8829 if (!current.loop && current.index === current.group.length - 1) { 8830 F.play( false ); 8831 8832 } else if (F.opts.autoPlay && !F.player.isActive) { 8833 F.opts.autoPlay = false; 8834 8835 F.play(); 8836 } 8837 }, 8838 8839 _afterZoomOut: function ( obj ) { 8840 obj = obj || F.current; 8841 8842 $('.fancybox-wrap').trigger('onReset').remove(); 8843 8844 $.extend(F, { 8845 group : {}, 8846 opts : {}, 8847 router : false, 8848 current : null, 8849 isActive : false, 8850 isOpened : false, 8851 isOpen : false, 8852 isClosing : false, 8853 wrap : null, 8854 skin : null, 8855 outer : null, 8856 inner : null 8857 }); 8858 8859 F.trigger('afterClose', obj); 8860 } 8861 }); 8862 8863 /* 8864 * Default transitions 8865 */ 8866 8867 F.transitions = { 8868 getOrigPosition: function () { 8869 var current = F.current, 8870 element = current.element, 8871 orig = current.orig, 8872 pos = {}, 8873 width = 50, 8874 height = 50, 8875 hPadding = current.hPadding, 8876 wPadding = current.wPadding, 8877 viewport = F.getViewport(); 8878 8879 if (!orig && current.isDom && element.is(':visible')) { 8880 orig = element.find('img:first'); 8881 8882 if (!orig.length) { 8883 orig = element; 8884 } 8885 } 8886 8887 if (isQuery(orig)) { 8888 pos = orig.offset(); 8889 8890 if (orig.is('img')) { 8891 width = orig.outerWidth(); 8892 height = orig.outerHeight(); 8893 } 8894 8895 } else { 8896 pos.top = viewport.y + (viewport.h - height) * current.topRatio; 8897 pos.left = viewport.x + (viewport.w - width) * current.leftRatio; 8898 } 8899 8900 if (F.wrap.css('position') === 'fixed' || current.locked) { 8901 pos.top -= viewport.y; 8902 pos.left -= viewport.x; 8903 } 8904 8905 pos = { 8906 top : getValue(pos.top - hPadding * current.topRatio), 8907 left : getValue(pos.left - wPadding * current.leftRatio), 8908 width : getValue(width + wPadding), 8909 height : getValue(height + hPadding) 8910 }; 8911 8912 return pos; 8913 }, 8914 8915 step: function (now, fx) { 8916 var ratio, 8917 padding, 8918 value, 8919 prop = fx.prop, 8920 current = F.current, 8921 wrapSpace = current.wrapSpace, 8922 skinSpace = current.skinSpace; 8923 8924 if (prop === 'width' || prop === 'height') { 8925 ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); 8926 8927 if (F.isClosing) { 8928 ratio = 1 - ratio; 8929 } 8930 8931 padding = prop === 'width' ? current.wPadding : current.hPadding; 8932 value = now - padding; 8933 8934 F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); 8935 F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); 8936 } 8937 }, 8938 8939 zoomIn: function () { 8940 var current = F.current, 8941 startPos = current.pos, 8942 effect = current.openEffect, 8943 elastic = effect === 'elastic', 8944 endPos = $.extend({opacity : 1}, startPos); 8945 8946 // Remove "position" property that breaks older IE 8947 delete endPos.position; 8948 8949 if (elastic) { 8950 startPos = this.getOrigPosition(); 8951 8952 if (current.openOpacity) { 8953 startPos.opacity = 0.1; 8954 } 8955 8956 } else if (effect === 'fade') { 8957 startPos.opacity = 0.1; 8958 } 8959 8960 F.wrap.css(startPos).animate(endPos, { 8961 duration : effect === 'none' ? 0 : current.openSpeed, 8962 easing : current.openEasing, 8963 step : elastic ? this.step : null, 8964 complete : F._afterZoomIn 8965 }); 8966 }, 8967 8968 zoomOut: function () { 8969 var current = F.current, 8970 effect = current.closeEffect, 8971 elastic = effect === 'elastic', 8972 endPos = {opacity : 0.1}; 8973 8974 if (elastic) { 8975 endPos = this.getOrigPosition(); 8976 8977 if (current.closeOpacity) { 8978 endPos.opacity = 0.1; 8979 } 8980 } 8981 8982 F.wrap.animate(endPos, { 8983 duration : effect === 'none' ? 0 : current.closeSpeed, 8984 easing : current.closeEasing, 8985 step : elastic ? this.step : null, 8986 complete : F._afterZoomOut 8987 }); 8988 }, 8989 8990 changeIn: function () { 8991 var current = F.current, 8992 effect = current.nextEffect, 8993 startPos = current.pos, 8994 endPos = { opacity : 1 }, 8995 direction = F.direction, 8996 distance = 200, 8997 field; 8998 8999 startPos.opacity = 0.1; 9000 9001 if (effect === 'elastic') { 9002 field = direction === 'down' || direction === 'up' ? 'top' : 'left'; 9003 9004 if (direction === 'down' || direction === 'right') { 9005 startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); 9006 endPos[ field ] = '+=' + distance + 'px'; 9007 9008 } else { 9009 startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); 9010 endPos[ field ] = '-=' + distance + 'px'; 9011 } 9012 } 9013 9014 // Workaround for http://bugs.jquery.com/ticket/12273 9015 if (effect === 'none') { 9016 F._afterZoomIn(); 9017 9018 } else { 9019 F.wrap.css(startPos).animate(endPos, { 9020 duration : current.nextSpeed, 9021 easing : current.nextEasing, 9022 complete : F._afterZoomIn 9023 }); 9024 } 9025 }, 9026 9027 changeOut: function () { 9028 var previous = F.previous, 9029 effect = previous.prevEffect, 9030 endPos = { opacity : 0.1 }, 9031 direction = F.direction, 9032 distance = 200; 9033 9034 if (effect === 'elastic') { 9035 endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; 9036 } 9037 9038 previous.wrap.animate(endPos, { 9039 duration : effect === 'none' ? 0 : previous.prevSpeed, 9040 easing : previous.prevEasing, 9041 complete : function () { 9042 $(this).trigger('onReset').remove(); 9043 } 9044 }); 9045 } 9046 }; 9047 9048 /* 9049 * Overlay helper 9050 */ 9051
9052 F.helpers.overlay = { 9053 defaults : { 9054 closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay 9055 speedOut : 200, // duration of fadeOut animation 9056 showEarly : true, // indicates if should be opened immediately or wait until the content is ready 9057 css : {}, // custom CSS properties 9058 locked : !isTouch, // if true, the content will be locked into overlay 9059 fixed : true // if false, the overlay CSS position property will not be set to "fixed" 9060 }, 9061 9062 overlay : null, // current handle 9063 fixed : false, // indicates if the overlay has position "fixed" 9064 9065 // Public methods 9066 create : function(opts) { 9067 opts = $.extend({}, this.defaults, opts); 9068 9069 if (this.overlay) { 9070 this.close(); 9071 } 9072 9073 this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( 'body' ); 9074 this.fixed = false; 9075 9076 if (opts.fixed && F.defaults.fixed) { 9077 this.overlay.addClass('fancybox-overlay-fixed'); 9078 9079 this.fixed = true; 9080 } 9081 }, 9082 9083 open : function(opts) { 9084 var that = this; 9085 9086 opts = $.extend({}, this.defaults, opts); 9087 9088 if (this.overlay) { 9089 this.overlay.unbind('.overlay').width('auto').height('auto'); 9090 9091 } else { 9092 this.create(opts); 9093 } 9094 9095 if (!this.fixed) { 9096 W.bind('resize.overlay', $.proxy( this.update, this) ); 9097 9098 this.update(); 9099 } 9100 9101 if (opts.closeClick) { 9102 this.overlay.bind('click.overlay', function(e) { 9103 if ($(e.target).hasClass('fancybox-overlay')) { 9104 if (F.isActive) { 9105 F.close(); 9106 } else { 9107 that.close(); 9108 } 9109 } 9110 }); 9111 } 9112 9113 this.overlay.css( opts.css ).show(); 9114 }, 9115 9116 close : function() { 9117 $('.fancybox-overlay').remove(); 9118 9119 W.unbind('resize.overlay'); 9120 9121 this.overlay = null; 9122 9123 if (this.margin !== false) { 9124 $('body').css('margin-right', this.margin); 9125 9126 this.margin = false; 9127 } 9128 9129 if (this.el) { 9130 this.el.removeClass('fancybox-lock'); 9131 } 9132 }, 9133 9134 // Private, callbacks 9135 9136 update : function () { 9137 var width = '100%', offsetWidth; 9138 9139 // Reset width/height so it will not mess 9140 this.overlay.width(width).height('100%'); 9141 9142 // jQuery does not return reliable result for IE 9143 if (IE) { 9144 offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); 9145 9146 if (D.width() > offsetWidth) { 9147 width = D.width(); 9148 } 9149 9150 } else if (D.width() > W.width()) { 9151 width = D.width(); 9152 } 9153 9154 this.overlay.width(width).height(D.height()); 9155 }, 9156 9157 // This is where we can manipulate DOM, because later it would cause iframes to reload 9158 onReady : function (opts, obj) { 9159 $('.fancybox-overlay').stop(true, true); 9160 9161 if (!this.overlay) { 9162 this.margin = D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false; 9163 this.el = document.all && !document.querySelector ? $('html') : $('body'); 9164 9165 this.create(opts); 9166 } 9167 9168 if (opts.locked && this.fixed) { 9169 obj.locked = this.overlay.append( obj.wrap ); 9170 obj.fixed = false; 9171 } 9172 9173 if (opts.showEarly === true) { 9174 this.beforeShow.apply(this, arguments); 9175 } 9176 }, 9177 9178 beforeShow : function(opts, obj) { 9179 if (obj.locked) { 9180 this.el.addClass('fancybox-lock'); 9181 9182 if (this.margin !== false) { 9183 $('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth); 9184 } 9185 } 9186 9187 this.open(opts); 9188 }, 9189 9190 onUpdate : function() { 9191 if (!this.fixed) { 9192 this.update(); 9193 } 9194 }, 9195 9196 afterClose: function (opts) { 9197 // Remove overlay if exists and fancyBox is not opening 9198 // (e.g., it is not being open using afterClose callback) 9199 if (this.overlay && !F.isActive) { 9200 this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); 9201 } 9202 } 9203 }; 9204 9205 /* 9206 * Title helper 9207 */ 9208 9209 F.helpers.title = { 9210 defaults : { 9211 type : 'float', // 'float', 'inside', 'outside' or 'over', 9212 position : 'bottom' // 'top' or 'bottom' 9213 }, 9214 9215 beforeShow: function (opts) { 9216 var current = F.current, 9217 text = current.title, 9218 type = opts.type, 9219 title, 9220 target; 9221 9222 if ($.isFunction(text)) { 9223 text = text.call(current.element, current); 9224 } 9225 9226 if (!isString(text) || $.trim(text) === '') { 9227 return; 9228 } 9229 9230 title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">
9230' + text + '</div>'); 9231 9232 switch (type) { 9233 case 'inside': 9234 target = F.skin; 9235 break; 9236 9237 case 'outside': 9238 target = F.wrap; 9239 break; 9240 9241 case 'over': 9242 target = F.inner; 9243 break; 9244 9245 default: // 'float' 9246 target = F.skin; 9247 9248 title.appendTo('body'); 9249 9250 if (IE) { 9251 title.width( title.width() ); 9252 } 9253 9254 title.wrapInner('<span class="child"></span>'); 9255 9256 //Increase bottom margin so this title will also fit into viewport 9257 F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); 9258 break; 9259 } 9260 9261 title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); 9262 } 9263 }; 9264 9265 // jQuery plugin initialization 9266 $.fn.fancybox = function (options) { 9267 var index, 9268 that = $(this), 9269 selector = this.selector || '', 9270 run = function(e) { 9271 var what = $(this).blur(), idx = index, relType, relVal; 9272 9273 if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { 9274 relType = options.groupAttr || 'data-fancybox-group'; 9275 relVal = what.attr(relType); 9276 9277 if (!relVal) { 9278 relType = 'rel'; 9279 relVal = what.get(0)[ relType ]; 9280 } 9281 9282 if (relVal && relVal !== '' && relVal !== 'nofollow') { 9283 what = selector.length ? $(selector) : that; 9284 what = what.filter('[' + relType + '="' + relVal + '"]'); 9285 idx = what.index(this); 9286 } 9287 9288 options.index = idx; 9289 9290 // Stop an event from bubbling if everything is fine 9291 if (F.open(what, options) !== false) { 9292 e.preventDefault(); 9293 } 9294 } 9295 }; 9296 9297 options = options || {}; 9298 index = options.index || 0; 9299 9300 if (!selector || options.live === false) { 9301 that.unbind('click.fb-start').bind('click.fb-start', run); 9302 9303 } else { 9304 D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); 9305 } 9306 9307 this.filter('[data-fancybox-start=1]').trigger('click'); 9308 9309 return this; 9310 }; 9311 9312 // Tests that need a body at doc ready 9313 D.ready(function() { 9314 if ( $.scrollbarWidth === undefined ) { 9315 // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth 9316 $.scrollbarWidth = function() { 9317 var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'), 9318 child = parent.children(), 9319 width = child.innerWidth() - child.height( 99 ).innerWidth(); 9320 9321 parent.remove(); 9322 9323 return width; 9324 }; 9325 } 9326 9327 if ( $.support.fixedPosition === undefined ) { 9328 $.support.fixedPosition = (function() { 9329 var elem = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'), 9330 fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); 9331 9332 elem.remove(); 9333 9334 return fixed; 9335 }()); 9336 } 9337 9338 $.extend(F.defaults, { 9339 scrollbarWidth : $.scrollbarWidth(), 9340 fixed : $.support.fixedPosition, 9341 parent : $('body') 9342 }); 9343 }); 9344 9345}(window, document, jQuery));/* 9346 * Lazy Load - jQuery plugin for lazy loading images 9347 * 9348 * Copyright (c) 2007-2012 Mika Tuupola 9349 * 9350 * Licensed under the MIT license: 9351 * http://www.opensource.org/licenses/mit-license.php 9352 * 9353 * Project home: 9354 * http://www.appelsiini.net/projects/lazyload 9355 * 9356 * Version: 1.8.3 9357 * 9358 */ 9359(function($, window, document, undefined) { 9360 var $window = $(window); 9361 9362 $.fn.lazyload = function(options) { 9363 var elements = this; 9364 var $container; 9365 var settings = { 9366 threshold : 0, 9367 failure_limit : 0, 9368 event : "scroll", 9369 effect : "show", 9370 container : window, 9371 data_attribute : "original", 9372 skip_invisible : true, 9373 appear : null, 9374 load : null 9375 }; 9376 9377 function update() { 9378 var counter = 0; 9379 9380 elements.each(function() { 9381 var $this = $(this); 9382 if (settings.skip_invisible && !$this.is(":visible")) { 9383 return; 9384 } 9385 if ($.abovethetop(this, settings) || 9386 $.leftofbegin(this, settings)) { 9387 /* Nothing. */ 9388 } else if (!$.belowthefold(this, settings) && 9389 !$.rightoffold(this, settings)) { 9390 $this.trigger("appear"); 9391 /* if we found an image we'll load, reset the counter */ 9392 counter = 0; 9393 } else { 9394 if (++counter > settings.failure_limit) { 9395 return false; 9396 } 9397 } 9398 }); 9399 9400 } 9401 9402 if(options) { 9403 /* Maintain BC for a couple of versions. */ 9404 if (undefined !== options.failurelimit) { 9405 options.failure_limit = options.failurelimit; 9406 delete options.failurelimit; 9407 } 9408 if (undefined !== options.effectspeed) { 9409 options.effect_speed = options.effectspeed; 9410 delete options.effectspeed; 9411 } 9412 9413 $.extend(settings, options); 9414 } 9415 9416 /* Cache container as jQuery as object. */ 9417 $container = (settings.container === undefined || 9418 settings.container === window) ? $window : $(settings.container); 9419 9420 /* Fire one scroll event per scroll. Not one scroll event per image. */ 9421 if (0 === settings.event.indexOf("scroll")) { 9422 $container.bind(settings.event, function(event) {
vendor: 5,857 bytes, lines 9423-9569
9423 return update(); 9424 }); 9425 } 9426 9427 this.each(function() { 9428 var self = this; 9429 var $self = $(self); 9430 9431 self.loaded = false; 9432 9433 /* When appear is triggered load original image. */ 9434 $self.one("appear", function() { 9435 if (!this.loaded) { 9436 if (settings.appear) { 9437 var elements_left = elements.length; 9438 settings.appear.call(self, elements_left, settings); 9439 } 9440 $("<img />") 9441 .bind("load", function() { 9442 $self 9443 .hide() 9444 .attr("src", $self.data(settings.data_attribute)) 9445 [settings.effect](settings.effect_speed); 9446 self.loaded = true; 9447 9448 /* Remove image from array so it is not looped next time. */ 9449 var temp = $.grep(elements, function(element) { 9450 return !element.loaded; 9451 }); 9452 elements = $(temp); 9453 9454 if (settings.load) { 9455 var elements_left = elements.length; 9456 settings.load.call(self, elements_left, settings); 9457 } 9458 }) 9459 .attr("src", $self.data(settings.data_attribute)); 9460 } 9461 }); 9462 9463 /* When wanted event is triggered load original image */ 9464 /* by triggering appear. */ 9465 if (0 !== settings.event.indexOf("scroll")) { 9466 $self.bind(settings.event, function(event) { 9467 if (!self.loaded) { 9468 $self.trigger("appear"); 9469 } 9470 }); 9471 } 9472 }); 9473 9474 /* Check if something appears when window is resized. */ 9475 $window.bind("resize", function(event) { 9476 update(); 9477 }); 9478 9479 /* With IOS5 force loading images when navigating with back button. */ 9480 /* Non optimal workaround. */ 9481 if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) { 9482 $window.bind("pageshow", function(event) { 9483 if (event.originalEvent.persisted) { 9484 elements.each(function() { 9485 $(this).trigger("appear"); 9486 }); 9487 } 9488 }); 9489 } 9490 9491 /* Force initial check if images should appear. */ 9492 $(window).load(function() { 9493 update(); 9494 }); 9495 9496 return this; 9497 }; 9498 9499 /* Convenience methods in jQuery namespace. */ 9500 /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ 9501 9502 $.belowthefold = function(element, settings) { 9503 var fold; 9504 9505 if (settings.container === undefined || settings.container === window) { 9506 fold = $window.height() + $window.scrollTop(); 9507 } else { 9508 fold = $(settings.container).offset().top + $(settings.container).height(); 9509 } 9510 9511 return fold <= $(element).offset().top - settings.threshold; 9512 }; 9513 9514 $.rightoffold = function(element, settings) { 9515 var fold; 9516 9517 if (settings.container === undefined || settings.container === window) { 9518 fold = $window.width() + $window.scrollLeft(); 9519 } else { 9520 fold = $(settings.container).offset().left + $(settings.container).width(); 9521 } 9522 9523 return fold <= $(element).offset().left - settings.threshold; 9524 }; 9525 9526 $.abovethetop = function(element, settings) { 9527 var fold; 9528 9529 if (settings.container === undefined || settings.container === window) { 9530 fold = $window.scrollTop(); 9531 } else { 9532 fold = $(settings.container).offset().top; 9533 } 9534 9535 return fold >= $(element).offset().top + settings.threshold + $(element).height(); 9536 }; 9537 9538 $.leftofbegin = function(element, settings) { 9539 var fold; 9540 9541 if (settings.container === undefined || settings.container === window) { 9542 fold = $window.scrollLeft(); 9543 } else { 9544 fold = $(settings.container).offset().left; 9545 } 9546 9547 return fold >= $(element).offset().left + settings.threshold + $(element).width(); 9548 }; 9549 9550 $.inviewport = function(element, settings) { 9551 return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && 9552 !$.belowthefold(element, settings) && !$.abovethetop(element, settings); 9553 }; 9554 9555 /* Custom selectors for your convenience. */ 9556 /* Use as $("img:below-the-fold").something() or */ 9557 /* $("img").filter(":below-the-fold").something() which is faster */ 9558 9559 $.extend($.expr[':'], { 9560 "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, 9561 "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, 9562 "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, 9563 "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, 9564 "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, 9565 /* Maintain BC for couple of versions. */ 9566 "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, 9567 "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, 9568 "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } 9569 });
vendor: 9,339 bytes, lines 9570-9818
9570 9571})(jQuery, window, document); 9572/* 9573 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 9574 * 9575 * Uses the built in easing capabilities added In jQuery 1.1 9576 * to offer multiple easing options 9577 * 9578 * TERMS OF USE - jQuery Easing 9579 * 9580 * Open source under the BSD License. 9581 * 9582 * Copyright © 2008 George McGinley Smith 9583 * All rights reserved. 9584 * 9585 * Redistribution and use in source and binary forms, with or without modification, 9586 * are permitted provided that the following conditions are met: 9587 * 9588 * Redistributions of source code must retain the above copyright notice, this list of 9589 * conditions and the following disclaimer. 9590 * Redistributions in binary form must reproduce the above copyright notice, this list 9591 * of conditions and the following disclaimer in the documentation and/or other materials 9592 * provided with the distribution. 9593 * 9594 * Neither the name of the author nor the names of contributors may be used to endorse 9595 * or promote products derived from this software without specific prior written permission. 9596 * 9597 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 9598 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 9599 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 9600 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 9601 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 9602 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 9603 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 9604 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 9605 * OF THE POSSIBILITY OF SUCH DAMAGE. 9606 * 9607*/ 9608 9609// t: current time, b: begInnIng value, c: change In value, d: duration 9610jQuery.easing['jswing'] = jQuery.easing['swing']; 9611 9612jQuery.extend( jQuery.easing, 9613{ 9614 def: 'easeOutQuad', 9615 swing: function (x, t, b, c, d) { 9616 //alert(jQuery.easing.default); 9617 return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 9618 }, 9619 easeInQuad: function (x, t, b, c, d) { 9620 return c*(t/=d)*t + b; 9621 }, 9622 easeOutQuad: function (x, t, b, c, d) { 9623 return -c *(t/=d)*(t-2) + b; 9624 }, 9625 easeInOutQuad: function (x, t, b, c, d) { 9626 if ((t/=d/2) < 1) return c/2*t*t + b; 9627 return -c/2 * ((--t)*(t-2) - 1) + b; 9628 }, 9629 easeInCubic: function (x, t, b, c, d) { 9630 return c*(t/=d)*t*t + b; 9631 }, 9632 easeOutCubic: function (x, t, b, c, d) { 9633 return c*((t=t/d-1)*t*t + 1) + b; 9634 }, 9635 easeInOutCubic: function (x, t, b, c, d) { 9636 if ((t/=d/2) < 1) return c/2*t*t*t + b; 9637 return c/2*((t-=2)*t*t + 2) + b; 9638 }, 9639 easeInQuart: function (x, t, b, c, d) { 9640 return c*(t/=d)*t*t*t + b; 9641 }, 9642 easeOutQuart: function (x, t, b, c, d) { 9643 return -c * ((t=t/d-1)*t*t*t - 1) + b; 9644 }, 9645 easeInOutQuart: function (x, t, b, c, d) { 9646 if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 9647 return -c/2 * ((t-=2)*t*t*t - 2) + b; 9648 }, 9649 easeInQuint: function (x, t, b, c, d) { 9650 return c*(t/=d)*t*t*t*t + b; 9651 }, 9652 easeOutQuint: function (x, t, b, c, d) { 9653 return c*((t=t/d-1)*t*t*t*t + 1) + b; 9654 }, 9655 easeInOutQuint: function (x, t, b, c, d) { 9656 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 9657 return c/2*((t-=2)*t*t*t*t + 2) + b; 9658 }, 9659 easeInSine: function (x, t, b, c, d) { 9660 return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 9661 }, 9662 easeOutSine: function (x, t, b, c, d) { 9663 return c * Math.sin(t/d * (Math.PI/2)) + b; 9664 }, 9665 easeInOutSine: function (x, t, b, c, d) { 9666 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 9667 }, 9668 easeInExpo: function (x, t, b, c, d) { 9669 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 9670 }, 9671 easeOutExpo: function (x, t, b, c, d) { 9672 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 9673 }, 9674 easeInOutExpo: function (x, t, b, c, d) { 9675 if (t==0) return b; 9676 if (t==d) return b+c; 9677 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 9678 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 9679 }, 9680 easeInCirc: function (x, t, b, c, d) { 9681 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 9682 }, 9683 easeOutCirc: function (x, t, b, c, d) { 9684 return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 9685 }, 9686 easeInOutCirc: function (x, t, b, c, d) { 9687 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 9688 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 9689 }, 9690 easeInElastic: function (x, t, b, c, d) { 9691 var s=1.70158;var p=0;var a=c; 9692 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 9693 if (a < Math.abs(c)) { a=c; var s=p/4; } 9694 else var s = p/(2*Math.PI) * Math.asin (c/a); 9695 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 9696 }, 9697 easeOutElastic: function (x, t, b, c, d) { 9698 var s=1.70158;var p=0;var a=c; 9699 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 9700 if (a < Math.abs(c)) { a=c; var s=p/4; } 9701 else var s = p/(2*Math.PI) * Math.asin (c/a); 9702 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 9703 }, 9704 easeInOutElastic: function (x, t, b, c, d) { 9705 var s=1.70158;var p=0;var a=c; 9706 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 9707 if (a < Math.abs(c)) { a=c; var s=p/4; } 9708 else var s = p/(2*Math.PI) * Math.asin (c/a); 9709 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 9710 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 9711 }, 9712 easeInBack: function (x, t, b, c, d, s) { 9713 if (s == undefined) s = 1.70158; 9714 return c*(t/=d)*t*((s+1)*t - s) + b; 9715 }, 9716 easeOutBack: function (x, t, b, c, d, s) { 9717 if (s == undefined) s = 1.70158; 9718 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 9719 }, 9720 easeInOutBack: function (x, t, b, c, d, s) { 9721 if (s == undefined) s = 1.70158; 9722 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 9723 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 9724 }, 9725 easeInBounce: function (x, t, b, c, d) { 9726 return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 9727 }, 9728 easeOutBounce: function (x, t, b, c, d) { 9729 if ((t/=d) < (1/2.75)) { 9730 return c*(7.5625*t*t) + b; 9731 } else if (t < (2/2.75)) { 9732 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 9733 } else if (t < (2.5/2.75)) { 9734 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 9735 } else { 9736 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 9737 } 9738 }, 9739 easeInOutBounce: function (x, t, b, c, d) { 9740 if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 9741 return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 9742 } 9743}); 9744 9745/* 9746 * 9747 * TERMS OF USE - EASING EQUATIONS 9748 * 9749 * Open source under the BSD License. 9750 * 9751 * Copyright © 2001 Robert Penner 9752 * All rights reserved. 9753 * 9754 * Redistribution and use in source and binary forms, with or without modification, 9755 * are permitted provided that the following conditions are met: 9756 * 9757 * Redistributions of source code must retain the above copyright notice, this list of 9758 * conditions and the following disclaimer. 9759 * Redistributions in binary form must reproduce the above copyright notice, this list 9760 * of conditions and the following disclaimer in the documentation and/or other materials 9761 * provided with the distribution. 9762 * 9763 * Neither the name of the author nor the names of contributors may be used to endorse 9764 * or promote products derived from this software without specific prior written permission. 9765 * 9766 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 9767 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 9768 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 9769 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 9770 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 9771 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 9772 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 9773 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 9774 * OF THE POSSIBILITY OF SUCH DAMAGE. 9775 * 9776 */(function($) { 9777 'use strict'; 9778 9779 var _currentSpinnerId = 0; 9780 9781 function _scopedEventName(name, id) { 9782 return name + '.touchspin_' + id; 9783 } 9784 9785 function _scopeEventNames(names, id) { 9786 return $.map(names, function(name) { 9787 return _scopedEventName(name, id); 9788 }); 9789 } 9790 9791 $.fn.TouchSpin = function(options) { 9792 9793 if (options === 'destroy') { 9794 this.each(function() { 9795 var originalinput = $(this), 9796 originalinput_data = originalinput.data(); 9797 $(document).off(_scopeEventNames([ 9798 'mouseup', 9799 'touchend', 9800 'touchcancel', 9801 'mousemove', 9802 'touchmove', 9803 'scroll', 9804 'scrollstart'], originalinput_data.spinnerid).join(' ')); 9805 }); 9806 return; 9807 } 9808 9809 var defaults = { 9810 min: 0, 9811 max: 100, 9812 initval: '', 9813 replacementval: '', 9814 step: 1, 9815 decimals: 0, 9816 stepinterval: 100, 9817 forcestepdivisibility: 'round', // none | floor | round | ceil 9818 stepintervaldelay: 500,
9819 verticalbuttons: false, 9820 verticalupclass: 'glyphicon glyphicon-chevron-up', 9821 verticaldownclass: 'glyphicon glyphicon-chevron-down', 9822 prefix: '', 9823 postfix: '', 9824 prefix_extraclass: '', 9825 postfix_extraclass: '', 9826 booster: true, 9827 boostat: 10, 9828 maxboostedstep: false, 9829 mousewheel: true, 9830 buttondown_class: 'btn btn-default', 9831 buttonup_class: 'btn btn-default', 9832 buttondown_txt: '-', 9833 buttonup_txt: '+' 9834 }; 9835 9836 var attributeMap = { 9837 min: 'min', 9838 max: 'max', 9839 initval: 'init-val', 9840 replacementval: 'replacement-val', 9841 step: 'step', 9842 decimals: 'decimals', 9843 stepinterval: 'step-interval', 9844 verticalbuttons: 'vertical-buttons', 9845 verticalupclass: 'vertical-up-class', 9846 verticaldownclass: 'vertical-down-class', 9847 forcestepdivisibility: 'force-step-divisibility', 9848 stepintervaldelay: 'step-interval-delay', 9849 prefix: 'prefix', 9850 postfix: 'postfix', 9851 prefix_extraclass: 'prefix-extra-class', 9852 postfix_extraclass: 'postfix-extra-class', 9853 booster: 'booster', 9854 boostat: 'boostat', 9855 maxboostedstep: 'max-boosted-step', 9856 mousewheel: 'mouse-wheel', 9857 buttondown_class: 'button-down-class', 9858 buttonup_class: 'button-up-class', 9859 buttondown_txt: 'button-down-txt', 9860 buttonup_txt: 'button-up-txt' 9861 }; 9862 9863 return this.each(function() { 9864 9865 var settings, 9866 originalinput = $(this), 9867 originalinput_data = originalinput.data(), 9868 container, 9869 elements, 9870 value, 9871 downSpinTimer, 9872 upSpinTimer, 9873 downDelayTimeout, 9874 upDelayTimeout, 9875 spincount = 0, 9876 spinning = false; 9877 9878 init(); 9879 9880 9881 function init() { 9882 if (originalinput.data('alreadyinitialized')) { 9883 return; 9884 } 9885 9886 originalinput.data('alreadyinitialized', true); 9887 _currentSpinnerId += 1; 9888 originalinput.data('spinnerid', _currentSpinnerId); 9889 9890 9891 if (!originalinput.is('input')) { 9892 console.log('Must be an input.'); 9893 return; 9894 } 9895 9896 _initSettings(); 9897 _setInitval(); 9898 _checkValue(); 9899 _buildHtml(); 9900 _initElements(); 9901 _hideEmptyPrefixPostfix(); 9902 _bindEvents(); 9903 _bindEventsInterface(); 9904 elements.input.css('display', 'block'); 9905 } 9906 9907 function _setInitval() { 9908 if (settings.initval !== '' && originalinput.val() === '') { 9909 originalinput.val(settings.initval); 9910 } 9911 } 9912 9913 function changeSettings(newsettings) { 9914 _updateSettings(newsettings); 9915 _checkValue(); 9916 9917 var value = elements.input.val(); 9918 9919 if (value !== '') { 9920 value = Number(elements.input.val()); 9921 elements.input.val(value.toFixed(settings.decimals)); 9922 } 9923 } 9924 9925 function _initSettings() { 9926 settings = $.extend({}, defaults, originalinput_data, _parseAttributes(), options); 9927 } 9928 9929 function _parseAttributes() { 9930 var data = {}; 9931 $.each(attributeMap, function(key, value) { 9932 var attrName = 'bts-' + value + ''; 9933 if (originalinput.is('[data-' + attrName + ']')) { 9934 data[key] = originalinput.data(attrName); 9935 } 9936 }); 9937 return data; 9938 } 9939 9940 function _updateSettings(newsettings) { 9941 settings = $.extend({}, settings, newsettings); 9942 } 9943 9944 function _buildHtml() { 9945 var initval = originalinput.val(), 9946 parentelement = originalinput.parent(); 9947 9948 if (initval !== '') { 9949 initval = Number(initval).toFixed(settings.decimals); 9950 } 9951 9952 originalinput.data('initvalue', initval).val(initval); 9953 originalinput.addClass('form-control'); 9954 9955 if (parentelement.hasClass('input-group')) { 9956 _advanceInputGroup(parentelement); 9957 } 9958 else { 9959 _buildInputGroup(); 9960 } 9961 } 9962 9963 function _advanceInputGroup(parentelement) { 9964 parentelement.addClass('bootstrap-touchspin'); 9965 9966 var prev = originalinput.prev(), 9967 next = originalinput.next(); 9968 9969 var downhtml, 9970 uphtml, 9971 prefixhtml = '<span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span>', 9972 postfixhtml = '<span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span>'; 9973 9974 if (prev.hasClass('input-group-btn')) { 9975 downhtml = '<button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button>'; 9976 prev.append(downhtml); 9977 } 9978 else { 9979 downhtml = '<span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button></span>'; 9980 $(downhtml).insertBefore(originalinput); 9981 } 9982 9983 if (next.hasClass('input-group-btn')) { 9984 uphtml = '<button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button>'; 9985 next.prepend(uphtml); 9986 } 9987 else { 9988 uphtml = '<span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button></span>'; 9989 $(uphtml).insertAfter(originalinput); 9990 } 9991 9992 $(prefixhtml).insertBefore(originalinput); 9993 $(postfixhtml).insertAfter(originalinput); 9994 9995 container = parentelement; 9996 } 9997 9998 function _buildInputGroup() { 9999 var html; 10000 10001 if (settings.verticalbuttons) { 10002 html = '<div class="input-group bootstrap-touchspin"><span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span><span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span><span class="input-group-btn-vertical"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-up" type="button"><i class="' + settings.verticalupclass + '"></i></button><button class="' + settings.buttonup_class + ' bootstrap-touchspin-down" type="button"><i class="' + settings.verticaldownclass + '"></i></button></span></div>'; 10003 } 10004 else { 10005 html = '<div class="input-group bootstrap-touchspin"><span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button></span><span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span><span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span><span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button></span></div>'; 10006 } 10007 10008 container = $(html).insertBefore(originalinput); 10009 10010 $('.bootstrap-touchspin-prefix', container).after(originalinput); 10011 10012 if (originalinput.hasClass('input-sm')) { 10013 container.addClass('input-group-sm'); 10014 } 10015 else if (originalinput.hasClass('input-lg')) { 10016 container.addClass('input-group-lg'); 10017 } 10018 } 10019 10020 function _initElements() { 10021 elements = { 10022 down: $('.bootstrap-touchspin-down', container), 10023 up: $('.bootstrap-touchspin-up', container), 10024 input: $('input', container), 10025 prefix: $('.bootstrap-touchspin-prefix', container).addClass(settings.prefix_extraclass), 10026 postfix: $('.bootstrap-touchspin-postfix', container).addClass(settings.postfix_extraclass) 10027 }; 10028 } 10029 10030 function _hideEmptyPrefixPostfix() { 10031 if (settings.prefix === '') { 10032 elements.prefix.hide(); 10033 } 10034 10035 if (settings.postfix === '') { 10036 elements.postfix.hide(); 10037 } 10038 } 10039 10040 function _bindEvents() { 10041 originalinput.on('keydown', function(ev) { 10042 var code = ev.keyCode || ev.which; 10043 10044 if (code === 38) { 10045 if (spinning !== 'up') { 10046 upOnce(); 10047 startUpSpin(); 10048 } 10049 ev.preventDefault(); 10050 } 10051 else if (code === 40) { 10052 if (spinning !== 'down') { 10053 downOnce(); 10054 startDownSpin(); 10055 } 10056 ev.preventDefault(); 10057 } 10058 }); 10059 10060 originalinput.on('keyup', function(ev) { 10061 var code = ev.keyCode || ev.which; 10062 10063 if (code === 38) { 10064 stopSpin(); 10065 } 10066 else if (code === 40) { 10067 stopSpin(); 10068 } 10069 }); 10070 10071 originalinput.on('blur', function() { 10072 _checkValue(); 10073 }); 10074 10075 elements.down.on('keydown', function(ev) { 10076 var code = ev.keyCode || ev.which; 10077 10078 if (code === 32 || code === 13) { 10079 if (spinning !== 'down') { 10080 downOnce(); 10081 startDownSpin(); 10082 } 10083 ev.preventDefault(); 10084 } 10085 }); 10086 10087 elements.down.on('keyup', function(ev) { 10088 var code = ev.keyCode || ev.which; 10089 10090 if (code === 32 || code === 13) { 10091 stopSpin(); 10092 } 10093 }); 10094 10095 elements.up.on('keydown', function(ev) { 10096 var code = ev.keyCode || ev.which; 10097 10098 if (code === 32 || code === 13) { 10099 if (spinning !== 'up') { 10100 upOnce(); 10101 startUpSpin(); 10102 } 10103 ev.preventDefault(); 10104 } 10105 }); 10106 10107 elements.up.on('keyup', function(ev) { 10108 var code = ev.keyCode || ev.which; 10109 10110 if (code === 32 || code === 13) { 10111 stopSpin(); 10112 } 10113 }); 10114 10115 elements.down.on('mousedown.touchspin', function(ev) { 10116 elements.down.off('touchstart.touchspin'); // android 4 workaround 10117 10118 if (originalinput.is(':disabled')) { 10119 return; 10120 } 10121 10122 downOnce(); 10123 startDownSpin(); 10124 10125 ev.preventDefault(); 10126 ev.stopPropagation(); 10127 }); 10128 10129 elements.down.on('touchstart.touchspin', function(ev) { 10130 elements.down.off('mousedown.touchspin'); // android 4 workaround 10131 10132 if (originalinput.is(':disabled')) { 10133 return; 10134 } 10135 10136 downOnce(); 10137 startDownSpin(); 10138 10139 ev.preventDefault(); 10140 ev.stopPropagation(); 10141 }); 10142 10143 elements.up.on('mousedown.touchspin', function(ev) { 10144 elements.up.off('touchstart.touchspin'); // android 4 workaround 10145 10146 if (originalinput.is(':disabled')) { 10147 return; 10148 } 10149 10150 upOnce(); 10151 startUpSpin(); 10152 10153 ev.preventDefault(); 10154 ev.stopPropagation(); 10155 }); 10156 10157 elements.up.on('touchstart.touchspin', function(ev) { 10158 elements.up.off('mousedown.touchspin'); // android 4 workaround 10159 10160 if (originalinput.is(':disabled')) { 10161 return; 10162 } 10163 10164 upOnce(); 10165 startUpSpin(); 10166 10167 ev.preventDefault(); 10168 ev.stopPropagation(); 10169 }); 10170 10171 elements.up.on('mouseout touchleave touchend touchcancel', function(ev) { 10172 if (!spinning) { 10173 return; 10174 } 10175 10176 ev.stopPropagation(); 10177 stopSpin(); 10178 }); 10179 10180 elements.down.on('mouseout touchleave touchend touchcancel', function(ev) { 10181 if (!spinning) { 10182 return; 10183 } 10184 10185 ev.stopPropagation(); 10186 stopSpin(); 10187 }); 10188 10189 elements.down.on('mousemove touchmove', function(ev) { 10190 if (!spinning) { 10191 return; 10192 } 10193 10194 ev.stopPropagation(); 10195 ev.preventDefault(); 10196 }); 10197 10198 elements.up.on('mousemove touchmove', function(ev) { 10199 if (!spinning) { 10200 return; 10201 } 10202 10203 ev.stopPropagation(); 10204 ev.preventDefault(); 10205 }); 10206 10207 $(document).on(_scopeEventNames(['mouseup', 'touchend', 'touchcancel'], _currentSpinnerId).join(' '), function(ev) { 10208 if (!spinning) { 10209 return; 10210 } 10211 10212 ev.preventDefault(); 10213 stopSpin(); 10214 }); 10215 10216 $(document).on(_scopeEventNames(['mousemove', 'touchmove', 'scroll', 'scrollstart'], _currentSpinnerId).join(' '), function(ev) { 10217 if (!spinning) { 10218 return; 10219 } 10220 10221 ev.preventDefault(); 10222 stopSpin(); 10223 }); 10224 10225 originalinput.on('mousewheel DOMMouseScroll', function(ev) { 10226 if (!settings.mousewheel || !originalinput.is(':focus')) { 10227 return; 10228 } 10229 10230 var delta = ev.originalEvent.wheelDelta || -ev.originalEvent.deltaY || -ev.originalEvent.detail; 10231 10232 ev.stopPropagation(); 10233 ev.preventDefault(); 10234 10235 if (delta < 0) { 10236 downOnce(); 10237 } 10238 else { 10239 upOnce(); 10240 } 10241 }); 10242 } 10243 10244 function _bindEventsInterface() { 10245 originalinput.on('touchspin.uponce', function() { 10246 stopSpin(); 10247 upOnce(); 10248 }); 10249 10250 originalinput.on('touchspin.downonce', function() { 10251 stopSpin(); 10252 downOnce(); 10253 }); 10254 10255 originalinput.on('touchspin.startupspin', function() { 10256 startUpSpin(); 10257 }); 10258 10259 originalinput.on('touchspin.startdownspin', function() { 10260 startDownSpin(); 10261 }); 10262 10263 originalinput.on('touchspin.stopspin', function() { 10264 stopSpin(); 10265 }); 10266 10267 originalinput.on('touchspin.updatesettings', function(e, newsettings) { 10268 changeSettings(newsettings); 10269 }); 10270 } 10271 10272 function _forcestepdivisibility(value) { 10273 switch (settings.forcestepdivisibility) { 10274 case 'round': 10275 return (Math.round(value / settings.step) * settings.step).toFixed(settings.decimals); 10276 case 'floor': 10277 return (Math.floor(value / settings.step) * settings.step).toFixed(settings.decimals);
10278 case 'ceil': 10279 return (Math.ceil(value / settings.step) * settings.step).toFixed(settings.decimals); 10280 default: 10281 return value; 10282 } 10283 } 10284 10285 function _checkValue() { 10286 var val, parsedval, returnval; 10287 10288 val = originalinput.val(); 10289 10290 if (val === '') { 10291 if (settings.replacementval !== '') { 10292 originalinput.val(settings.replacementval); 10293 originalinput.trigger('change'); 10294 } 10295 return; 10296 } 10297 10298 if (settings.decimals > 0 && val === '.') { 10299 return; 10300 } 10301 10302 parsedval = parseFloat(val); 10303 10304 if (isNaN(parsedval)) { 10305 if (settings.replacementval !== '') { 10306 parsedval = settings.replacementval; 10307 } 10308 else { 10309 parsedval = 0; 10310 } 10311 } 10312 10313 returnval = parsedval; 10314 10315 if (parsedval.toString() !== val) { 10316 returnval = parsedval; 10317 } 10318 10319 if (parsedval < settings.min) { 10320 returnval = settings.min; 10321 } 10322 10323 if (parsedval > settings.max) { 10324 returnval = settings.max; 10325 } 10326 10327 returnval = _forcestepdivisibility(returnval); 10328 10329 if (Number(val).toString() !== returnval.toString()) { 10330 originalinput.val(returnval); 10331 originalinput.trigger('change'); 10332 } 10333 } 10334 10335 function _getBoostedStep() { 10336 if (!settings.booster) { 10337 return settings.step; 10338 } 10339 else { 10340 var boosted = Math.pow(2, Math.floor(spincount / settings.boostat)) * settings.step; 10341 10342 if (settings.maxboostedstep) { 10343 if (boosted > settings.maxboostedstep) { 10344 boosted = settings.maxboostedstep; 10345 value = Math.round((value / boosted)) * boosted; 10346 } 10347 } 10348 10349 return Math.max(settings.step, boosted); 10350 } 10351 } 10352 10353 function upOnce() { 10354 _checkValue(); 10355 10356 value = parseFloat(elements.input.val()); 10357 if (isNaN(value)) { 10358 value = 0; 10359 } 10360 10361 var initvalue = value, 10362 boostedstep = _getBoostedStep(); 10363 10364 value = value + boostedstep; 10365 10366 if (value > settings.max) { 10367 value = settings.max; 10368 originalinput.trigger('touchspin.on.max'); 10369 stopSpin(); 10370 } 10371 10372 elements.input.val(Number(value).toFixed(settings.decimals)); 10373 10374 if (initvalue !== value) { 10375 originalinput.trigger('change'); 10376 } 10377 } 10378 10379 function downOnce() { 10380 _checkValue(); 10381 10382 value = parseFloat(elements.input.val()); 10383 if (isNaN(value)) { 10384 value = 0; 10385 } 10386 10387 var initvalue = value, 10388 boostedstep = _getBoostedStep(); 10389 10390 value = value - boostedstep; 10391 10392 if (value < settings.min) { 10393 value = settings.min; 10394 originalinput.trigger('touchspin.on.min'); 10395 stopSpin(); 10396 } 10397 10398 elements.input.val(value.toFixed(settings.decimals)); 10399 10400 if (initvalue !== value) { 10401 originalinput.trigger('change'); 10402 } 10403 } 10404 10405 function startDownSpin() { 10406 stopSpin(); 10407 10408 spincount = 0; 10409 spinning = 'down'; 10410 10411 originalinput.trigger('touchspin.on.startspin'); 10412 originalinput.trigger('touchspin.on.startdownspin'); 10413 10414 downDelayTimeout = setTimeout(function() { 10415 downSpinTimer = setInterval(function() { 10416 spincount++; 10417 downOnce(); 10418 }, settings.stepinterval); 10419 }, settings.stepintervaldelay); 10420 } 10421 10422 function startUpSpin() { 10423 stopSpin(); 10424 10425 spincount = 0; 10426 spinning = 'up'; 10427 10428 originalinput.trigger('touchspin.on.startspin'); 10429 originalinput.trigger('touchspin.on.startupspin'); 10430 10431 upDelayTimeout = setTimeout(function() { 10432 upSpinTimer = setInterval(function() { 10433 spincount++; 10434 upOnce(); 10435 }, settings.stepinterval); 10436 }, settings.stepintervaldelay); 10437 } 10438 10439 function stopSpin() { 10440 clearTimeout(downDelayTimeout); 10441 clearTimeout(upDelayTimeout); 10442 clearInterval(downSpinTimer); 10443 clearInterval(upSpinTimer); 10444 10445 switch (spinning) { 10446 case 'up': 10447 originalinput.trigger('touchspin.on.stopupspin'); 10448 originalinput.trigger('touchspin.on.stopspin'); 10449 break; 10450 case 'down': 10451 originalinput.trigger('touchspin.on.stopdownspin'); 10452 originalinput.trigger('touchspin.on.stopspin'); 10453 break; 10454 } 10455 10456 spincount = 0; 10457 spinning = false;
vendor: 6,997 bytes, lines 10458-10467
10458 } 10459 10460 }); 10461 10462 }; 10463 10464})(jQuery); 10465/*! nanoScrollerJS - v0.8.7 - (c) 2015 James Florentino; Licensed MIT */ 10466 10467!function(a){return"function"==typeof define&&define.amd?define(["jquery"],function(b){return a(b,window,document)}):"object"==typeof exports?module.exports=a(require("jquery"),window,document):a(jQuery,window,document)}(function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H;z={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",enabledClass:"has-scrollbar",flashedClass:"flashed",activeClass:"active",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},u="scrollbar",t="scroll",l="mousedown",m="mouseenter",n="mousemove",p="mousewheel",o="mouseup",s="resize",h="drag",i="enter",w="up",r="panedown",f="DOMMouseScroll",g="down",x="wheel",j="keydown",k="keyup",v="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,D=b.requestAnimationFrame,y=b.cancelAnimationFrame,F=c.createElement("div").style,H=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in F)return d[a].substr(0,d[a].length-1);return!1}(),G=function(a){return H===!1?!1:""===H?a:H+a.charAt(0).toUpperCase()+a.substr(1)},E=G("transform"),B=E!==!1,A=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=t,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},C=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},q=function(){function j(d,f){this.el=d,this.options=f,e||(e=A()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.body=this.doc.find("body"),this.$content=this.$el.children("."+this.options.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.previousPosition=0,this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return j.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===w&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===p){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===w&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},j.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},j.prototype.updateScrollValues=function(){var a,b;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,b=this.contentScrollTop>this.previousPosition?"down":this.contentScrollTop<this.previousPosition?"up":"same",this.previousPosition=this.contentScrollTop,"same"!==b&&this.$el.trigger("update",{position:this.contentScrollTop,maximum:this.maxScrollTop,direction:b}),this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=0===this.maxScrollTop?0:this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},j.prototype.setOnScrollStyles=function(){var a;B?(a={},a[E]="translate(0, "+this.sliderTop+"px)"):a={top:this.sliderTop},D?(y&&this.scrollRAF&&y(this.scrollRAF),this.scrollRAF=D(function(b){return function(){return b.scrollRAF=null,b.slider.css(a)}}(this))):this.slider.css(a)},j.prototype.createEvents=function(){this.events={down:function(a){return function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.slider.is(b.target)||(a.offsetY=0),a.pane.addClass(a.options.activeClass),a.doc.bind(n,a.events[h]).bind(o,a.events[w]),a.body.bind(m,a.events[i]),!1}}(this),drag:function(a){return function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.paneTop-(a.offsetY||.5*a.sliderHeight),a.scroll(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1}}(this),up:function(a){return function(b){return a.isBeingDragged=!1,a.pane.removeClass(a.options.activeClass),a.doc.unbind(n,a.events[h]).unbind(o,a.events[w]),a.body.unbind(m,a.events[i]),!1}}(this),resize:function(a){return function(b){a.reset()}}(this),panedown:function(a){return function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1}}(this),scroll:function(a){return function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,w),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))}}(this),wheel:function(a){return function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}(this),enter:function(a){return function(b){var c;if(a.isBeingDragged)return 1!==(b.buttons||b.which)?(c=a.events)[w].apply(c,arguments):void 0}}(this)}},j.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(s,a[s]),this.iOSNativeScrolling||(this.slider.bind(l,a[g]),this.pane.bind(l,a[r]).bind(""+p+" "+f,a[x])),this.$content.bind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(s,a[s]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.generate=function(){var a,c,d,f,g,h,i;return f=this.options,h=f.paneClass,i=f.sliderClass,a=f.contentClass,(g=this.$el.children("."+h)).length||g.children("."+i).length||this.$el.append('<div class="'+h+'"><div class="'+i+'" /></div>'),this.pane=this.$el.children("."+h),this.slider=this.pane.find("."+i),0===e&&C()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/[^0-9.]+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass(f.enabledClass)),null!=c&&this.$content.css(c),this},j.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},j.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l,m,n;return this.iOSNativeScrolling?void(this.contentHeight=this.content.scrollHeight):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(
10467),a=this.content,f=a.style,g=f.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,l=parseInt(this.$el.css("max-height"),10),l>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>l?l:a.scrollHeight)),i=this.pane.outerHeight(!1),k=parseInt(this.pane.css("top"),10),h=parseInt(this.pane.css("bottom"),10),j=i+k+h,n=Math.round(j/b*i),n<this.options.sliderMinHeight?n=this.options.sliderMinHeight:null!=this.options.sliderMaxHeight&&n>this.options.sliderMaxHeight&&(n=this.options.sliderMaxHeight),g===t&&f.overflowX!==t&&(n+=e),this.maxSliderTop=j-n,this.contentHeight=b,this.paneHeight=i,this.paneOuterHeight=j,this.sliderHeight=n,this.paneTop=k,this.slider.height(n),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&g!==t?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&g===t?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),c=this.$content.css("position"),("static"===c||"relative"===c)&&(m=parseInt(this.$content.css("right"),10),m&&this.$content.css({right:"",marginRight:m})),this)},j.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(this.maxScrollTop*this.sliderY/this.maxSliderTop),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},j.prototype.scrollBottom=function(a){return this.isActive?(this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTop=function(a){return this.isActive?(this.$content.scrollTop(+a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTo=function(a){return this.isActive?(this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},j.prototype.stop=function(){return y&&this.scrollRAF&&(y(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},j.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass(this.options.enabledClass)&&(this.$el.removeClass(this.options.enabledClass),this.$content.css({right:""})),this},j.prototype.flash=function(){return!this.iOSNativeScrolling&&this.isActive?(this.reset(),this.pane.addClass(this.options.flashedClass),setTimeout(function(a){return function(){a.pane.removeClass(a.options.flashedClass)}}(this),this.options.flashDelay),this):void 0},j}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},z,b),this.nanoscroller=d=new q(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=q});/*! 10468 * Smooth Scroll - v1.4.10 - 2013-03-02 10469 * https://github.com/kswedberg/jquery-smooth-scroll 10470 * Copyright (c) 2013 Karl Swedberg 10471 * Licensed MIT (https://github.com/kswedberg/jquery-smooth-scroll/blob/master/LICENSE-MIT) 10472 */ 10473(function(l){function t(l){return l.replace(/(:|\.)/g,"\\$1")}var e="1.4.10",o={exclude:[],excludeWithin:[],offset:0,direction:"top",scrollElement:null,scrollTarget:null,beforeScroll:function(){},afterScroll:function(){},easing:"swing",speed:400,autoCoefficent:2},r=function(t){var e=[],o=!1,r=t.dir&&"left"==t.dir?"scrollLeft":"scrollTop";return this.each(function(){if(this!=document&&this!=window){var t=l(this);t[r]()>0?e.push(this):(t[r](1),o=t[r]()>0,o&&e.push(this),t[r](0))}}),e.length||this.each(function(){"BODY"===this.nodeName&&(e=[this])}),"first"===t.el&&e.length>1&&(e=[e[0]]),e};l.fn.extend({scrollable:function(l){var t=r.call(this,{dir:l});return this.pushStack(t)},firstScrollable:function(l){var t=r.call(this,{el:"first",dir:l});return this.pushStack(t)},smoothScroll:function(e){e=e||{};var o=l.extend({},l.fn.smoothScroll.defaults,e),r=l.smoothScroll.filterPath(location.pathname);return this.unbind("click.smoothscroll").bind("click.smoothscroll",function(e){var n=this,s=l(this),c=o.exclude,i=o.excludeWithin,a=0,f=0,h=!0,u={},d=location.hostname===n.hostname||!n.hostname,m=o.scrollTarget||(l.smoothScroll.filterPath(n.pathname)||r)===r,p=t(n.hash);if(o.scrollTarget||d&&m&&p){for(;
10473h&&c.length>a;)s.is(t(c[a++]))&&(h=!1);for(;h&&i.length>f;)s.closest(i[f++]).length&&(h=!1)}else h=!1;h&&(e.preventDefault(),l.extend(u,o,{scrollTarget:o.scrollTarget||p,link:n}),l.smoothScroll(u))}),this}}),l.smoothScroll=function(t,e){var o,r,n,s,c=0,i="offset",a="scrollTop",f={},h={};"number"==typeof t?(o=l.fn.smoothScroll.defaults,n=t):(o=l.extend({},l.fn.smoothScroll.defaults,t||{}),o.scrollElement&&(i="position","static"==o.scrollElement.css("position")&&o.scrollElement.css("position","relative"))),o=l.extend({link:null},o),a="left"==o.direction?"scrollLeft":a,o.scrollElement?(r=o.scrollElement,c=r[a]()):r=l("html, body").firstScrollable(),o.beforeScroll.call(r,o),n="number"==typeof t?t:e||l(o.scrollTarget)[i]()&&l(o.scrollTarget)[i]()[o.direction]||0,f[a]=n+c+o.offset,s=o.speed,"auto"===s&&(s=f[a]||r.scrollTop(),s/=o.autoCoefficent),h={duration:s,easing:o.easing,complete:function(){o.afterScroll.call(o.link,o)}},o.step&&(h.step=o.step),r.length?r.stop().animate(f,h):o.afterScroll.call(o.link,o)},l.smoothScroll.version=e,l.smoothScroll.filterPath=function(l){return l.replace(/^\//,"").replace(/(index|default).[a-zA-Z]{3,4}$/,"").replace(/\/$/,"")},l.fn.smoothScroll.defaults=o})(jQuery);/*! tooltipster v4.2.6 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}var f={animation:"fade",animationDuration:350,content:null,contentAsHTML:!1,contentCloning:!1,debug:!0,delay:300,delayTouch:[300,500],functionInit:null,functionBefore:null,functionReady:null,functionAfter:null,functionFormat:null,IEmin:6,interactive:!1,multiple:!1,parent:null,plugins:["sideTip"],repositionOnScroll:!1,restoration:"none",selfDestruction:!0,theme:[],timer:0,trackerInterval:500,trackOrigin:!1,trackTooltip:!1,trigger:"hover",triggerClose:{click:!1,mouseleave:!1,originClick:!1,scroll:!1,tap:!1,touchleave:!1},triggerOpen:{click:!1,mouseenter:!1,tap:!1,touchstart:!1},updateAnimation:"rotate",zIndex:9999999},g="undefined"!=typeof window?window:null,h={hasTouchCapability:!(!g||!("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch||g.navigator.maxTouchPoints)),hasTransitions:e(),IE:!1,semVer:"4.2.6
vendor: 28,893 bytes, line 10473
10473",window:g},i=function(){this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__instancesLatestArr=[],this.__plugins={},this._env=h};i.prototype={__bridge:function(b,c,d){if(!c[d]){var e=function(){};e.prototype=b;var g=new e;g.__init&&g.__init(c),a.each(b,function(a,b){0!=a.indexOf("__")&&(c[a]?f.debug&&console.log("The "+a+" method of the "+d+" plugin conflicts with another plugin or native methods"):(c[a]=function(){return g[a].apply(g,Array.prototype.slice.apply(arguments))},c[a].bridged=g))}),c[d]=g}return this},__setWindow:function(a){return h.window=a,this},_getRuler:function(a){return new b(a)},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_plugin:function(b){var c=this;if("string"==typeof b){var d=b,e=null;return d.indexOf(".")>0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;B<m.length;B++){var C=m[B];"even"==A?(C>y&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.left<i.left||e.origin.windowOffset.right>i.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.top<i.top||e.origin.windowOffset.bottom>i.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("<div></div>").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('<div class="tooltipster-ruler"></div>').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]))
vendor: 10,550 bytes, lines 10473-10509
10473;var k="tooltipster.sideTip";return a.tooltipster._plugin({name:k,instance:{__defaults:function(){return{arrow:!0,distance:6,functionPosition:null,maxWidth:null,minIntersection:16,minWidth:0,position:null,side:"top",viewportAware:!0}},__init:function(a){var b=this;b.__instance=a,b.__namespace="tooltipster-sideTip-"+Math.round(1e6*Math.random()),b.__previousState="closed",b.__options,b.__optionsFormat(),b.__instance._on("state."+b.__namespace,function(a){"closed"==a.state?b.__close():"appearing"==a.state&&"closed"==b.__previousState&&b.__create(),b.__previousState=a.state}),b.__instance._on("options."+b.__namespace,function(){b.__optionsFormat()}),b.__instance._on("reposition."+b.__namespace,function(a){b.__reposition(a.event,a.helper)})},__close:function(){this.__instance.content()instanceof a&&this.__instance.content().detach(),this.__instance._$tooltip.remove(),this.__instance._$tooltip=null},__create:function(){var b=a('<div class="tooltipster-base tooltipster-sidetip"><div class="tooltipster-box"><div class="tooltipster-content"></div></div><div class="tooltipster-arrow"><div class="tooltipster-arrow-uncropped"><div class="tooltipster-arrow-border"></div><div class="tooltipster-arrow-background"></div></div></div></div>');this.__options.arrow||b.find(".tooltipster-box").css("margin",0).end().find(".tooltipster-arrow").hide(),this.__options.minWidth&&b.css("min-width",this.__options.minWidth+"px"),this.__options.maxWidth&&b.css("max-width",this.__options.maxWidth+"px"), 10474this.__instance._$tooltip=b,this.__instance._trigger("created")},__destroy:function(){this.__instance._off("."+self.__namespace)},__optionsFormat:function(){var b=this;if(b.__options=b.__instance._optionsExtract(k,b.__defaults()),b.__options.position&&(b.__options.side=b.__options.position),"object"!=typeof b.__options.distance&&(b.__options.distance=[b.__options.distance]),b.__options.distance.length<4&&(void 0===b.__options.distance[1]&&(b.__options.distance[1]=b.__options.distance[0]),void 0===b.__options.distance[2]&&(b.__options.distance[2]=b.__options.distance[0]),void 0===b.__options.distance[3]&&(b.__options.distance[3]=b.__options.distance[1]),b.__options.distance={top:b.__options.distance[0],right:b.__options.distance[1],bottom:b.__options.distance[2],left:b.__options.distance[3]}),"string"==typeof b.__options.side){var c={top:"bottom",right:"left",bottom:"top",left:"right"};b.__options.side=[b.__options.side,c[b.__options.side]],"left"==b.__options.side[0]||"right"==b.__options.side[0]?b.__options.side.push("top","bottom"):b.__options.side.push("right","left")}6===a.tooltipster._env.IE&&b.__options.arrow!==!0&&(b.__options.arrow=!1)},__reposition:function(b,c){var d,e=this,f=e.__targetFind(c),g=[];e.__instance._$tooltip.detach();var h=e.__instance._$tooltip.clone(),i=a.tooltipster._getRuler(h),j=!1,k=e.__instance.option("animation");switch(k&&h.removeClass("tooltipster-"+k),a.each(["window","document"],function(d,k){var l=null;if(e.__instance._trigger({container:k,helper:c,satisfied:j,takeTest:function(a){l=a},results:g,type:"positionTest"}),1==l||0!=l&&0==j&&("window"!=k||e.__options.viewportAware))for(var d=0;d<e.__options.side.length;d++){var m={horizontal:0,vertical:0},n=e.__options.side[d];"top"==n||"bottom"==n?m.vertical=e.__options.distance[n]:m.horizontal=e.__options.distance[n],e.__sideChange(h,n),a.each(["natural","constrained"],function(a,d){if(l=null,e.__instance._trigger({container:k,event:b,helper:c,mode:d,results:g,satisfied:j,side:n,takeTest:function(a){l=a},type:"positionTest"}),1==l||0!=l&&0==j){var h={container:k,distance:m,fits:null,mode:d,outerSize:null,side:n,size:null,target:f[n],whole:null},o="natural"==d?i.free():i.constrain(c.geo.available[k][n].width-m.horizontal,c.geo.available[k][n].height-m.vertical),p=o.measure();if(h.size=p.size,h.outerSize={height:p.size.height+m.vertical,width:p.size.width+m.horizontal},"natural"==d?c.geo.available[k][n].width>=h.outerSize.width&&c.geo.available[k][n].height>=h.outerSize.height?h.fits=!0:h.fits=!1:h.fits=p.fits,"window"==k&&(h.fits?"top"==n||"bottom"==n?h.whole=c.geo.origin.windowOffset.right>=e.__options.minIntersection&&c.geo.window.size.width-c.geo.origin.windowOffset.left>=e.__options.minIntersection:h.whole=c.geo.origin.windowOffset.bottom>=e.__options.minIntersection&&c.geo.window.size.height-c.geo.origin.windowOffset.top>=e.__options.minIntersection:h.whole=!1),g.push(h),h.whole)j=!0;else if("natural"==h.mode&&(h.fits||h.size.width<=c.geo.available[k][n].width))return!1}})}}),e.__instance._trigger({edit:function(a){g=a},event:b,helper:c,results:g,type:"positionTested"}),g.sort(function(a,b){if(a.whole&&!b.whole)return-1;if(!a.whole&&b.whole)return 1;if(a.whole&&b.whole){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}if(a.fits&&!b.fits)return-1;if(!a.fits&&b.fits)return 1;if(a.fits&&b.fits){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}return"document"==a.container&&"bottom"==a.side&&"natural"==a.mode?-1:1}),d=g[0],d.coord={},d.side){case"left":case"right":d.coord.top=Math.floor(d.target-d.size.height/2);break;case"bottom":case"top":d.coord.left=Math.floor(d.target-d.size.width/2)}switch(d.side){case"left":d.coord.left=c.geo.origin.windowOffset.left-d.outerSize.width;break;case"right":d.coord.left=c.geo.origin.windowOffset.right+d.distance.horizontal;break;case"top":d.coord.top=c.geo.origin.windowOffset.top-d.outerSize.height;break;case"bottom":d.coord.top=c.geo.origin.windowOffset.bottom+d.distance.vertical}"window"==d.container?"top"==d.side||"bottom"==d.side?d.coord.left<0?c.geo.origin.windowOffset.right-this.__options.minIntersection>=0?d.coord.left=0:d.coord.left=c.geo.origin.windowOffset.right-this.__options.minIntersection-1:d.coord.left>c.geo.window.size.width-d.size.width&&(c.geo.origin.windowOffset.left+this.__options.minIntersection<=c.geo.window.size.width?d.coord.left=c.geo.window.size.width-d.size.width:d.coord.left=c.geo.origin.windowOffset.left+this.__options.minIntersection+1-d.size.width):d.coord.top<0?c.geo.origin.windowOffset.bottom-this.__options.minIntersection>=0?d.coord.top=0:d.coord.top=c.geo.origin.windowOffset.bottom-this.__options.minIntersection-1:d.coord.top>c.geo.window.size.height-d.size.height&&(c.geo.origin.windowOffset.top+this.__options.minIntersection<=c.geo.window.size.height?d.coord.top=c.geo.window.size.height-d.size.height:d.coord.top=c.geo.origin.windowOffset.top+this.__options.minIntersection+1-d.size.height):(d.coord.left>c.geo.window.size.width-d.size.width&&(d.coord.left=c.geo.window.size.width-d.size.width),d.coord.left<0&&(d.coord.left=0)),e.__sideChange(h,d.side),c.tooltipClone=h[0],c.tooltipParent=e.__instance.option("parent").parent[0],c.mode=d.mode,c.whole=d.whole,c.origin=e.__instance._$origin[0],c.tooltip=e.__instance._$tooltip[0],delete d.container,delete d.fits,delete d.mode,delete d.outerSize,delete d.whole,d.distance=d.distance.horizontal||d.distance.vertical;var l=a.extend(!0,{},d);if(e.__instance._trigger({edit:function(a){d=a},event:b,helper:c,position:l,type:"position"}),e.__options.functionPosition){var m=e.__options.functionPosition.call(e,e.__instance,c,l);m&&(d=m)}i.destroy();var n,o;"top"==d.side||"bottom"==d.side?(n={prop:"left",val:d.target-d.coord.left},o=d.size.width-this.__options.minIntersection):(n={prop:"top",val:d.target-d.coord.top},o=d.size.height-this.__options.minIntersection),n.val<this.__options.minIntersection?n.val=this.__options.minIntersection:n.val>o&&(n.val=o);var p;p=c.geo.origin.fixedLineage?c.geo.origin.windowOffset:{left:c.geo.origin.windowOffset.left+c.geo.window.scroll.left,top:c.geo.origin.windowOffset.top+c.geo.window.scroll.top},d.coord={left:p.left+(d.coord.left-c.geo.origin.windowOffset.left),top:p.top+(d.coord.top-c.geo.origin.windowOffset.top)},e.__sideChange(e.__instance._$tooltip,d.side),c.geo.origin.fixedLineage?e.__instance._$tooltip.css("position","fixed"):e.__instance._$tooltip.css("position",""),e.__instance._$tooltip.css({left:d.coord.left,top:d.coord.top,height:d.size.height,width:d.size.width}).find(".tooltipster-arrow").css({left:"",top:""}).css(n.prop,n.val),e.__instance._$tooltip.appendTo(e.__instance.option("parent")),e.__instance._trigger({type:"repositioned",event:b,position:d})},__sideChange:function(a,b){a.removeClass("tooltipster-bottom").removeClass("tooltipster-left").removeClass("tooltipster-right").removeClass("tooltipster-top").addClass("tooltipster-"+b)},__targetFind:function(a){var b={},c=this.__instance._$origin[0].getClientRects();if(c.length>1){var d=this.__instance._$origin.css("opacity");1==d&&(this.__instance._$origin.css("opacity",.99),c=this.__instance._$origin[0].getClientRects(),this.__instance._$origin.css("opacity",1))}if(c.length<2)b.top=Math.floor(a.geo.origin.windowOffset.left+a.geo.origin.size.width/2),b.bottom=b.top,b.left=Math.floor(a.geo.origin.windowOffset.top+a.geo.origin.size.height/2),b.right=b.left;else{var e=c[0];b.top=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil(c.length/2)-1]:c[0],b.right=Math.floor(e.top+(e.bottom-e.top)/2),e=c[c.length-1],b.bottom=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil((c.length+1)/2)-1]:c[c.length-1],b.left=Math.floor(e.top+(e.bottom-e.top)/2)}return b}}}),a});;(function (root, factory) { 10475 if (typeof define === 'function' && define.amd) { 10476 define(['jquery'], factory); 10477 } else if (typeof exports === 'object') { 10478 module.exports = factory(require('jquery')); 10479 } else { 10480 root.jquery_mmenu_js = factory(root.jQuery); 10481 } 10482}(this, function (jQuery) { 10483 /* 10484 * jQuery mmenu v7.0.0 10485 * @requires jQuery 1.7.0 or later 10486 * 10487 * mmenu.frebsite.nl 10488 * 10489 * Copyright (c) Fred Heusschen 10490 * www.frebsite.nl 10491 * 10492 * License: CC-BY-NC-4.0 10493 * http://creativecommons.org/licenses/by-nc/4.0/ 10494 */ 10495 !function (e) { 10496 function t() { 10497 e[n].glbl || (l = { 10498 $wndw: e(window), 10499 $docu: e(document), 10500 $html: e("html"), 10501 $body: e("body") 10502 }, s = {}, a = {}, r = {}, e.each([s, a, r], function (e, t) { 10503 t.add = function (e) { 10504 e = e.split(" "); 10505 for (var n = 0, i = e.length; n < i; n++) t[e[n]] = t.mm(e[n]) 10506 } 10507 }), s.mm = function (e) { 10508 return "mm-" + e 10509 }, s.add("wrapper menu panels panel nopanel navbar listview nolistview listitem btn hidden"), s.umm = function (e) {
vendor: 14,280 bytes, lines 10510-10684
10510 return "mm-" == e.slice(0, 3) && (e = e.slice(3)), e 10511 }, a.mm = function (e) { 10512 return "mm-" + e 10513 }, a.add("parent child title"), r.mm = function (e) { 10514 return e + ".mm" 10515 }, r.add("transitionend webkitTransitionEnd click scroll resize keydown mousedown mouseup touchstart touchmove touchend orientationchange"), e[n]._c = s, e[n]._d = a, e[n]._e = r, e[n].glbl = l) 10516 } 10517 10518 var n = "mmenu", i = "7.0.0"; 10519 if (!(e[n] && e[n].version > i)) { 10520 e[n] = function (e, t, n) { 10521 return this.$menu = e, this._api = ["bind", "getInstance", "initPanels", "openPanel", "closePanel", "closeAllPanels", "setSelected"], this.opts = t, this.conf = n, this.vars = {}, this.cbck = {}, this.mtch = {}, "function" == typeof this.___deprecated && this.___deprecated(), this._initHooks(), this._initWrappers(), this._initAddons(), this._initExtensions(), this._initMenu(), this._initPanels(), this._initOpened(), this._initAnchors(), this._initMatchMedia(), "function" == typeof this.___debug && this.___debug(), this 10522 }, e[n].version = i, e[n].uniqueId = 0, e[n].wrappers = {}, e[n].addons = {}, e[n].defaults = { 10523 hooks: {}, 10524 extensions: [], 10525 wrappers: [], 10526 navbar: {add: !0, title: "Menu", titleLink: "parent"}, 10527 onClick: {setSelected: !0}, 10528 slidingSubmenus: !0 10529 }, e[n].configuration = { 10530 classNames: { 10531 divider: "Divider", 10532 inset: "Inset", 10533 nolistview: "NoListview", 10534 nopanel: "NoPanel", 10535 panel: "Panel", 10536 selected: "Selected", 10537 spacer: "Spacer", 10538 vertical: "Vertical" 10539 }, clone: !1, openingInterval: 25, panelNodetype: "ul, ol, div", transitionDuration: 400 10540 }, e[n].prototype = { 10541 getInstance: function () { 10542 return this 10543 }, initPanels: function (e) { 10544 this._initPanels(e) 10545 }, openPanel: function (t, i) { 10546 if (this.trigger("openPanel:before", t), t && t.length && (t.is("." + s.panel) || (t = t.closest("." + s.panel)), t.is("." + s.panel))) { 10547 var r = this; 10548 if ("boolean" != typeof i && (i = !0), t.parent("." + s.listitem + "_vertical").length) t.parents("." + s.listitem + "_vertical").addClass(s.listitem + "_opened").children("." + s.panel).removeClass(s.hidden), this.openPanel(t.parents("." + s.panel).not(function () { 10549 return e(this).parent("." + s.listitem + "_vertical").length 10550 }).first()), this.trigger("openPanel:start", t), this.trigger("openPanel:finish", t); else { 10551 if (t.hasClass(s.panel + "_opened")) return; 10552 var l = this.$pnls.children("." + s.panel), 10553 o = this.$pnls.children("." + s.panel + "_opened"); 10554 if (!e[n].support.csstransitions) return o.addClass(s.hidden).removeClass(s.panel + "_opened"), t.removeClass(s.hidden).addClass(s.panel + "_opened"), this.trigger("openPanel:start", t), void this.trigger("openPanel:finish", t); 10555 l.not(t).removeClass(s.panel + "_opened-parent"); 10556 for (var d = t.data(a.parent); d;) d = d.closest("." + s.panel), d.parent("." + s.listitem + "_vertical").length || d.addClass(s.panel + "_opened-parent"), d = d.data(a.parent); 10557 l.removeClass(s.panel + "_highest").not(o).not(t).addClass(s.hidden), t.removeClass(s.hidden); 10558 var c = function () { 10559 o.removeClass(s.panel + "_opened"), t.addClass(s.panel + "_opened"), t.hasClass(s.panel + "_opened-parent") ? (o.addClass(s.panel + "_highest"), t.removeClass(s.panel + "_opened-parent")) : (o.addClass(s.panel + "_opened-parent"), t.addClass(s.panel + "_highest")), r.trigger("openPanel:start", t) 10560 }, h = function () { 10561 o.removeClass(s.panel + "_highest").addClass(s.hidden), t.removeClass(s.panel + "_highest"), r.trigger("openPanel:finish", t) 10562 }; 10563 i && !t.hasClass(s.panel + "_noanimation") ? setTimeout(function () { 10564 r.__transitionend(t, function () { 10565 h() 10566 }, r.conf.transitionDuration), c() 10567 }, r.conf.openingInterval) : (c(), h()) 10568 } 10569 this.trigger("openPanel:after", t) 10570 } 10571 }, closePanel: function (e) { 10572 this.trigger("closePanel:before", e); 10573 var t = e.parent(); 10574 t.hasClass(s.listitem + "_vertical") && (t.removeClass(s.listitem + "_opened"), e.addClass(s.hidden), this.trigger("closePanel", e)), this.trigger("closePanel:after", e) 10575 }, closeAllPanels: function (e) { 10576 this.trigger("closeAllPanels:before"), this.$pnls.find("." + s.listview).children().removeClass(s.listitem + "_selected").filter("." + s.listitem + "_vertical").removeClass(s.listitem + "_opened"); 10577 var t = this.$pnls.children("." + s.panel), n = e && e.length ? e : t.first(); 10578 this.$pnls.children("." + s.panel).not(n).removeClass(s.panel + "_opened").removeClass(s.panel + "_opened-parent").removeClass(s.panel + "_highest").addClass(s.hidden), this.openPanel(n, !1), this.trigger("closeAllPanels:after") 10579 }, togglePanel: function (e) { 10580 var t = e.parent(); 10581 t.hasClass(s.listitem + "_vertical") && this[t.hasClass(s.listitem + "_opened") ? "closePanel" : "openPanel"](e) 10582 }, setSelected: function (e) { 10583 this.trigger("setSelected:before", e), this.$menu.find("." + s.listitem + "_selected").removeClass(s.listitem + "_selected"), e.addClass(s.listitem + "_selected"), this.trigger("setSelected:after", e) 10584 }, bind: function (e, t) { 10585 this.cbck[e] = this.cbck[e] || [], this.cbck[e].push(t) 10586 }, trigger: function () { 10587 var e = this, t = Array.prototype.slice.call(arguments), n = t.shift(); 10588 if (this.cbck[n]) for (var i = 0, s = this.cbck[n].length; i < s; i++) this.cbck[n][i].apply(e, t) 10589 }, matchMedia: function (e, t, n) { 10590 var i = {yes: t, no: n}; 10591 this.mtch[e] = this.mtch[e] || [], this.mtch[e].push(i) 10592 }, _initHooks: function () { 10593 for (var e in this.opts.hooks) this.bind(e, this.opts.hooks[e]) 10594 }, _initWrappers: function () { 10595 this.trigger("initWrappers:before"); 10596 for (var t = 0; t < this.opts.wrappers.length; t++) { 10597 var i = e[n].wrappers[this.opts.wrappers[t]]; 10598 "function" == typeof i && i.call(this) 10599 } 10600 this.trigger("initWrappers:after") 10601 }, _initAddons: function () { 10602 this.trigger("initAddons:before"); 10603 var t; 10604 for (t in e[n].addons) e[n].addons[t].add.call(this), e[n].addons[t].add = function () { 10605 }; 10606 for (t in e[n].addons) e[n].addons[t].setup.call(this); 10607 this.trigger("initAddons:after") 10608 }, _initExtensions: function () { 10609 this.trigger("initExtensions:before"); 10610 var e = this; 10611 this.opts.extensions.constructor === Array && (this.opts.extensions = {all: this.opts.extensions}); 10612 for (var t in this.opts.extensions) this.opts.extensions[t] = this.opts.extensions[t].length ? s.menu + "_" + this.opts.extensions[t].join(" " + s.menu + "_") : "", this.opts.extensions[t] && !function (t) { 10613 e.matchMedia(t, function () { 10614 this.$menu.addClass(this.opts.extensions[t]) 10615 }, function () { 10616 this.$menu.removeClass(this.opts.extensions[t]) 10617 }) 10618 }(t); 10619 this.trigger("initExtensions:after") 10620 }, _initMenu: function () { 10621 this.trigger("initMenu:before"); 10622 this.conf.clone && (this.$orig = this.$menu, this.$menu = this.$orig.clone(), this.$menu.add(this.$menu.find("[id]")).filter("[id]").each(function () { 10623 e(this).attr("id", s.mm(e(this).attr("id"))) 10624 })), this.$menu.attr("id", this.$menu.attr("id") || this.__getUniqueId()), this.$pnls = e('<div class="' + s.panels + '" />').append(this.$menu.children(this.conf.panelNodetype)).prependTo(this.$menu), this.$menu.addClass(s.menu).parent().addClass(s.wrapper), this.trigger("initMenu:after") 10625 }, _initPanels: function (t) { 10626 this.trigger("initPanels:before", t), t = t || this.$pnls.children(this.conf.panelNodetype); 10627 var n = e(), i = this, a = function (t) { 10628 t.filter(i.conf.panelNodetype).each(function (t) { 10629 var r = i._initPanel(e(this)); 10630 if (r) { 10631 i._initNavbar(r), i._initListview(r), n = n.add(r); 10632 var l = r.children("." + s.listview).children("li").children(i.conf.panelNodeType).add(r.children("." + i.conf.classNames.panel)); 10633 l.length && a(l) 10634 } 10635 }) 10636 }; 10637 a(t), this.trigger("initPanels:after", n) 10638 }, _initPanel: function (e) { 10639 this.trigger("initPanel:before", e); 10640 if (e.hasClass(s.panel)) return e; 10641 if (this.__refactorClass(e, this.conf.classNames.panel, s.panel), this.__refactorClass(e, this.conf.classNames.nopanel, s.nopanel), this.__refactorClass(e, this.conf.classNames.inset, s.listview + "_inset"), e.filter("." + s.listview + "_inset").addClass(s.nopanel), e.hasClass(s.nopanel)) return !1; 10642 var t = e.hasClass(this.conf.classNames.vertical) || !this.opts.slidingSubmenus; 10643 e.removeClass(this.conf.classNames.vertical); 10644 var n = e.attr("id") || this.__getUniqueId(); 10645 e.is("ul, ol") && (e.removeAttr("id"), e.wrap("<div />"), e = e.parent()), e.attr("id", n), e.addClass(s.panel + " " + s.hidden); 10646 var i = e.parent("li"); 10647 return t ? i.addClass(s.listitem + "_vertical") : e.appendTo(this.$pnls), i.length && (i.data(a.child, e), e.data(a.parent, i)), this.trigger("initPanel:after", e), e 10648 }, _initNavbar: function (t) { 10649 if (this.trigger("initNavbar:before", t), !t.children("." + s.navbar).length) { 10650 var n = t.data(a.parent), i = e('<div class="' + s.navbar + '" />'), 10651 r = this.__getPanelTitle(t, this.opts.navbar.title), l = ""; 10652 if (n && n.length) { 10653 if (n.hasClass(s.listitem + "_vertical")) return; 10654 if (n.parent().is("." + s.listview)) var o = n.children("a, span").not("." + s.btn + "_next"); else var o = n.closest("." + s.panel).find('a[href="#' + t.attr("id") + '"]'); 10655 o = o.first(), n = o.closest("." + s.panel); 10656 var d = n.attr("id"); 10657 switch (r = this.__getPanelTitle(t, e("<span>" + o.text() + "</span>").text()), this.opts.navbar.titleLink) { 10658 case"anchor": 10659 l = o.attr("href"); 10660 break; 10661 case"parent": 10662 l = "#" + d 10663 } 10664 i.append('<a class="' + s.btn + " " + s.btn + "_prev " + s.navbar + '__btn" href="#' + d + '" />') 10665 } else if (!this.opts.navbar.title) return; 10666 this.opts.navbar.add && t.addClass(s.panel + "_has-navbar"), i.append('<a class="' + s.navbar + '__title"' + (l.length ? ' href="' + l + '"' : "") + ">" + r + "</a>").prependTo(t), this.trigger("initNavbar:after", t) 10667 } 10668 }, _initListview: function (t) { 10669 this.trigger("initListview:before", t); 10670 var n = this.__childAddBack(t, "ul, ol"); 10671 this.__refactorClass(n, this.conf.classNames.nolistview, s.nolistview); 10672 var i = n.not("." + s.nolistview).addClass(s.listview).children().addClass(s.listitem); 10673 this.__refactorClass(i, this.conf.classNames.selected, s.listitem + "_selected"), this.__refactorClass(i, this.conf.classNames.divider, s.listitem + "_divider"), this.__refactorClass(i, this.conf.classNames.spacer, s.listitem + "_spacer"); 10674 var r = t.data(a.parent); 10675 if (r && r.is("." + s.listitem) && !r.children("." + s.btn + "_next").length) { 10676 var l = r.children("a, span").first(), 10677 o = e('<a class="' + s.btn + '_next" href="#' + t.attr("id") + '" />').insertBefore(l); 10678 l.is("span") && o.addClass(s.btn + "_fullwidth") 10679 } 10680 this.trigger("initListview:after", t) 10681 }, _initOpened: function () { 10682 this.trigger("initOpened:before"); 10683 var e = this.$pnls.find("." + s.listitem + "_selected").removeClass(s.listitem + "_selected").last().addClass(s.listitem + "_selected"), 10684 t = e.length ? e.closest("." + s.panel) : this.$pnls.children("." + s.panel).first();
vendor: 4,573 bytes, lines 10685-10752
10685 this.openPanel(t, !1), this.trigger("initOpened:after") 10686 }, _initAnchors: function () { 10687 this.trigger("initAnchors:before"); 10688 var t = this; 10689 l.$body.on(r.click + "-oncanvas", "a[href]", function (i) { 10690 var a = e(this), r = a.attr("href"), l = t.$menu.find(a).length, 10691 o = a.is("." + s.listitem + " > a"), 10692 d = a.is('[rel="external"]') || a.is('[target="_blank"]'); 10693 if (l && r.length > 1 && "#" == r.slice(0, 1)) try { 10694 var c = t.$menu.find(r); 10695 if (c.is("." + s.panel)) return t[a.parent().hasClass(s.listitem + "_vertical") ? "togglePanel" : "openPanel"](c), void i.preventDefault() 10696 } catch (h) { 10697 } 10698 var f = {close: null, setSelected: null, preventDefault: "#" == r.slice(0, 1)}; 10699 for (var p in e[n].addons) { 10700 var u = e[n].addons[p].clickAnchor.call(t, a, l, o, d); 10701 if (u) { 10702 if ("boolean" == typeof u) return void i.preventDefault(); 10703 "object" == typeof u && (f = e.extend({}, f, u)) 10704 } 10705 } 10706 l && o && !d && (t.__valueOrFn(a, t.opts.onClick.setSelected, f.setSelected) && t.setSelected(e(i.target).parent()), t.__valueOrFn(a, t.opts.onClick.preventDefault, f.preventDefault) && i.preventDefault(), t.__valueOrFn(a, t.opts.onClick.close, f.close) && t.opts.offCanvas && "function" == typeof t.close && t.close()) 10707 }), this.trigger("initAnchors:after") 10708 }, _initMatchMedia: function () { 10709 var e = this; 10710 for (var t in this.mtch) !function () { 10711 var n = t, i = window.matchMedia(n); 10712 e._fireMatchMedia(n, i), i.addListener(function (t) { 10713 e._fireMatchMedia(n, t) 10714 }) 10715 }() 10716 }, _fireMatchMedia: function (e, t) { 10717 for (var n = t.matches ? "yes" : "no", i = 0; i < this.mtch[e].length; i++) this.mtch[e][i][n].call(this) 10718 }, _getOriginalMenuId: function () { 10719 var e = this.$menu.attr("id"); 10720 return this.conf.clone && e && e.length && (e = s.umm(e)), e 10721 }, __api: function () { 10722 var t = this, n = {}; 10723 return e.each(this._api, function (e) { 10724 var i = this; 10725 n[i] = function () { 10726 var e = t[i].apply(t, arguments); 10727 return "undefined" == typeof e ? n : e 10728 } 10729 }), n 10730 }, __valueOrFn: function (e, t, n) { 10731 if ("function" == typeof t) { 10732 var i = t.call(e[0]); 10733 if ("undefined" != typeof i) return i 10734 } 10735 return "function" != typeof t && "undefined" != typeof t || "undefined" == typeof n ? t : n 10736 }, __getPanelTitle: function (t, i) { 10737 var s; 10738 return "function" == typeof this.opts.navbar.title && (s = this.opts.navbar.title.call(t[0])), "undefined" == typeof s && (s = t.data(a.title)), "undefined" != typeof s ? s : "string" == typeof i ? e[n].i18n(i) : e[n].i18n(e[n].defaults.navbar.title) 10739 }, __refactorClass: function (e, t, n) { 10740 return e.filter("." + t).removeClass(t).addClass(n) 10741 }, __findAddBack: function (e, t) { 10742 return e.find(t).add(e.filter(t)) 10743 }, __childAddBack: function (e, t) { 10744 return e.children(t).add(e.filter(t)) 10745 }, __filterListItems: function (e) { 10746 return e.not("." + s.listitem + "_divider").not("." + s.hidden) 10747 }, __filterListItemAnchors: function (e) { 10748 return this.__filterListItems(e).children("a").not("." + s.btn + "_next") 10749 }, __openPanelWoAnimation: function (e) { 10750 e.hasClass(s.panel + "_noanimation") || (e.addClass(s.panel + "_noanimation"), this.__transitionend(e, function () { 10751 e.removeClass(s.panel + "_noanimation") 10752 }
10752, this.conf.openingInterval), this.openPanel(e)) 10753 }, __transitionend: function (e, t, n) { 10754 var i = !1, s = function (n) { 10755 "undefined" != typeof n && n.target != e[0] || (i || (e.off(r.transitionend), e.off(r.webkitTransitionEnd), t.call(e[0])), i = !0) 10756 }; 10757 e.on(r.transitionend, s), e.on(r.webkitTransitionEnd, s), setTimeout(s, 1.1 * n) 10758 }, __getUniqueId: function () { 10759 return s.mm(e[n].uniqueId++) 10760 } 10761 }, e.fn[n] = function (i, s) { 10762 t(), i = e.extend(!0, {}, e[n].defaults, i), s = e.extend(!0, {}, e[n].configuration, s); 10763 var a = e(); 10764 return this.each(function () { 10765 var t = e(this); 10766 if (!t.data(n)) { 10767 var r = new e[n](t, i, s); 10768 r.$menu.data(n, r.__api()), a = a.add(r.$menu) 10769 } 10770 }), a 10771 }, e[n].i18n = function () { 10772 var t = {}; 10773 return function (n) { 10774 switch (typeof n) { 10775 case"object": 10776 return e.extend(t, n), t; 10777 case"string": 10778 return t[n] || n; 10779 case"undefined": 10780 default: 10781 return t 10782 } 10783 } 10784 }(), e[n].support = { 10785 touch: "ontouchstart" in window || navigator.msMaxTouchPoints || !1, 10786 csstransitions: function () { 10787 return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransitions || Modernizr.csstransitions 10788 }(), 10789 csstransforms: function () { 10790 return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransforms || Modernizr.csstransforms 10791 }(), 10792 csstransforms3d: function () { 10793 return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransforms3d || Modernizr.csstransforms3d 10794 }() 10795 }; 10796 var s, a, r, l 10797 } 10798 }(jQuery); 10799 /* 10800 * jQuery mmenu offCanvas add-on 10801 * mmenu.frebsite.nl 10802 * 10803 * Copyright (c) Fred Heusschen 10804 */ 10805 !function (e) { 10806 var t = "mmenu", n = "offCanvas"; 10807 e[t].addons[n] = { 10808 setup: function () { 10809 if (this.opts[n]) { 10810 var i = this.opts[n], s = this.conf[n]; 10811 r = e[t].glbl, this._api = e.merge(this._api, ["open", "close", "setPage"]), "object" != typeof i && (i = {}), i = this.opts[n] = e.extend(!0, {}, e[t].defaults[n], i), "string" != typeof s.pageSelector && (s.pageSelector = "> " + s.pageNodetype), this.vars.opened = !1; 10812 var a = [o.menu + "_offcanvas"]; 10813 e[t].support.csstransforms || a.push(o["no-csstransforms"]), e[t].support.csstransforms3d || a.push(o["no-csstransforms3d"]), this.bind("initMenu:after", function () { 10814 var e = this; 10815 this.setPage(r.$page), this._initBlocker(), this["_initWindow_" + n](), this.$menu.addClass(a.join(" ")).parent("." + o.wrapper).removeClass(o.wrapper), this.$menu[s.menuInsertMethod](s.menuInsertSelector); 10816 var t = window.location.hash; 10817 if (t) { 10818 var i = this._getOriginalMenuId(); 10819 i && i == t.slice(1) && setTimeout(function () { 10820 e.open() 10821 }, 1e3) 10822 } 10823 }), this.bind("open:start:sr-aria", function () { 10824 this.__sr_aria(this.$menu, "hidden", !1) 10825 }), this.bind("close:finish:sr-aria", function () { 10826 this.__sr_aria(this.$menu, "hidden", !0) 10827 }), this.bind("initMenu:after:sr-aria", function () { 10828 this.__sr_aria(this.$menu, "hidden", !0) 10829 }) 10830 } 10831 }, add: function () { 10832 o = e[t]._c, i = e[t]._d, s = e[t]._e, o.add("slideout page no-csstransforms3d"), i.add("style") 10833 }, clickAnchor: function (e, t) { 10834 var i = this; 10835 if (this.opts[n]) { 10836 var s = this._getOriginalMenuId(); 10837 if (s && e.is('[href="#' + s + '"]')) { 10838 if (t) return this.open(), !0; 10839 var a = e.closest("." + o.menu); 10840 if (a.length) { 10841 var p = a.data("mmenu"); 10842 if (p && p.close) return p.close(), i.__transitionend(a, function () { 10843 i.open() 10844 }, i.conf.transitionDuration), !0 10845 } 10846 return this.open(), !0 10847 } 10848 if (r.$page) return s = r.$page.first().attr("id"), s && e.is('[href="#' + s + '"]') ? (this.close(), !0) : void 0 10849 } 10850 } 10851 }
10851, e[t].defaults[n] = {blockUI: !0, moveBackground: !0}, e[t].configuration[n] = { 10852 pageNodetype: "div", 10853 pageSelector: null, 10854 noPageSelector: [], 10855 wrapPageIfNeeded: !0, 10856 menuInsertMethod: "prependTo", 10857 menuInsertSelector: "body" 10858 }, e[t].prototype.open = function () { 10859 if (this.trigger("open:before"), !this.vars.opened) { 10860 var e = this; 10861 this._openSetup(), setTimeout(function () { 10862 e._openFinish() 10863 }, this.conf.openingInterval), this.trigger("open:after") 10864 } 10865 }, e[t].prototype._openSetup = function () { 10866 var t = this, a = this.opts[n]; 10867 this.closeAllOthers(), r.$page.each(function () { 10868 e(this).data(i.style, e(this).attr("style") || "") 10869 }), r.$wndw.trigger(s.resize + "-" + n, [!0]); 10870 var p = [o.wrapper + "_opened"]; 10871 a.blockUI && p.push(o.wrapper + "_blocking"), "modal" == a.blockUI && p.push(o.wrapper + "_modal"), a.moveBackground && p.push(o.wrapper + "_background"), r.$html.addClass(p.join(" ")), setTimeout(function () { 10872 t.vars.opened = !0 10873 }, this.conf.openingInterval), this.$menu.addClass(o.menu + "_opened") 10874 }, e[t].prototype._openFinish = function () { 10875 var e = this; 10876 this.__transitionend(r.$page.first(), function () { 10877 e.trigger("open:finish") 10878 }, this.conf.transitionDuration), this.trigger("open:start"), r.$html.addClass(o.wrapper + "_opening") 10879 }, e[t].prototype.close = function () { 10880 if (this.trigger("close:before"), this.vars.opened) { 10881 var t = this; 10882 this.__transitionend(r.$page.first(), function () { 10883 t.$menu.removeClass(o.menu + "_opened"); 10884 var n = [o.wrapper + "_opened", o.wrapper + "_blocking", o.wrapper + "_modal", o.wrapper + "_background"]; 10885 r.$html.removeClass(n.join(" ")), r.$page.each(function () { 10886 e(this).attr("style", e(this).data(i.style)) 10887 }), t.vars.opened = !1, t.trigger("close:finish") 10888 }, this.conf.transitionDuration), this.trigger("close:start"), r.$html.removeClass(o.wrapper + "_opening"), this.trigger("close:after") 10889 } 10890 }, e[t].prototype.closeAllOthers = function () { 10891 r.$body.find("." + o.menu + "_offcanvas").not(this.$menu).each(function () { 10892 var n = e(this).data(t); 10893 n && n.close && n.close() 10894 }) 10895 }, e[t].prototype.setPage = function (t) { 10896 this.trigger("setPage:before", t); 10897 var i = this, s = this.conf[n]; 10898 t && t.length || (t = r.$body.find(s.pageSelector), s.noPageSelector.length && (t = t.not(s.noPageSelector.join(", "))), t.length > 1 && s.wrapPageIfNeeded && (t = t.wrapAll("<" + this.conf[n].pageNodetype + " />").parent())), t.each(function () { 10899 e(this).attr("id", e(this).attr("id") || i.__getUniqueId()) 10900 }), t.addClass(o.page + " " + o.slideout), r.$page = t, this.trigger("setPage:after", t) 10901 }, e[t].prototype["_initWindow_" + n] = function () { 10902 r.$wndw.off(s.keydown + "-" + n).on(s.keydown + "-" + n, function (e) { 10903 if (r.$html.hasClass(o.wrapper + "_opened") && 9 == e.keyCode) return e.preventDefault(), !1 10904 }); 10905 var e = 0; 10906 r.$wndw.off(s.resize + "-" + n).on(s.resize + "-" + n, function (t, n) { 10907 if (1 == r.$page.length && (n || r.$html.hasClass(o.wrapper + "_opened"))) { 10908 var i = r.$wndw.height(); 10909 (n || i != e) && (e = i, r.$page.css("minHeight", i)) 10910 } 10911 }) 10912 }, e[t].prototype._initBlocker = function () { 10913 var t = this; 10914 this.opts[n].blockUI && (r.$blck || (r.$blck = e('<div class="' + o.page + "__blocker " + o.slideout + '" />')), r.$blck.appendTo(r.$body).off(s.touchstart + "-" + n + " " + s.touchmove + "-" + n).on(s.touchstart + "-" + n + " " + s.touchmove + "-" + n, function (e) { 10915 e.preventDefault(), e.stopPropagation(), r.$blck.trigger(s.mousedown + "-" + n) 10916 }
10916).off(s.mousedown + "-" + n).on(s.mousedown + "-" + n, function (e) { 10917 e.preventDefault(), r.$html.hasClass(o.wrapper + "_modal") || (t.closeAllOthers(), t.close()) 10918 })) 10919 }; 10920 var o, i, s, r 10921 }(jQuery); 10922 /* 10923 * jQuery mmenu screenReader add-on 10924 * mmenu.frebsite.nl 10925 * 10926 * Copyright (c) Fred Heusschen 10927 */ 10928 !function (t) { 10929 var i = "mmenu", n = "screenReader"; 10930 t[i].addons[n] = { 10931 setup: function () { 10932 var a = this, o = this.opts[n], h = this.conf[n]; 10933 s = t[i].glbl, "boolean" == typeof o && (o = { 10934 aria: o, 10935 text: o 10936 }), "object" != typeof o && (o = {}), o = this.opts[n] = t.extend(!0, {}, t[i].defaults[n], o), o.aria && (this.bind("initAddons:after", function () { 10937 this.bind("initMenu:after", function () { 10938 this.trigger("initMenu:after:sr-aria") 10939 }), this.bind("initNavbar:after", function () { 10940 this.trigger("initNavbar:after:sr-aria", arguments[0]) 10941 }), this.bind("openPanel:start", function () { 10942 this.trigger("openPanel:start:sr-aria", arguments[0]) 10943 }), this.bind("close:start", function () { 10944 this.trigger("close:start:sr-aria") 10945 }), this.bind("close:finish", function () { 10946 this.trigger("close:finish:sr-aria") 10947 }), this.bind("open:start", function () { 10948 this.trigger("open:start:sr-aria") 10949 }), this.bind("initOpened:after", function () { 10950 this.trigger("initOpened:after:sr-aria") 10951 }) 10952 }), this.bind("updateListview", function () { 10953 this.$pnls.find("." + e.listview).children().each(function () { 10954 a.__sr_aria(t(this), "hidden", t(this).is("." + e.hidden)) 10955 }) 10956 }), this.bind("openPanel:start", function (t) { 10957 var i = this.$menu.find("." + e.panel).not(t).not(t.parents("." + e.panel)), 10958 n = t.add(t.find("." + e.listitem + "_vertical ." + e.listitem + "_opened").children("." + e.panel)); 10959 this.__sr_aria(i, "hidden", !0), this.__sr_aria(n, "hidden", !1) 10960 }), this.bind("closePanel", function (t) { 10961 this.__sr_aria(t, "hidden", !0) 10962 }), this.bind("initPanels:after", function (i) { 10963 var n = i.find("." + e.btn).each(function () { 10964 a.__sr_aria(t(this), "owns", t(this).attr("href").replace("#", "")) 10965 }); 10966 this.__sr_aria(n, "haspopup", !0) 10967 }), this.bind("initNavbar:after", function (t) { 10968 var i = t.children("." + e.navbar); 10969 this.__sr_aria(i, "hidden", !t.hasClass(e.panel + "_has-navbar")) 10970 }), o.text && (this.bind("initlistview:after", function (t) { 10971 var i = t.find("." + e.listview).find("." + e.btn + "_fullwidth").parent().children("span"); 10972 this.__sr_aria(i, "hidden", !0) 10973 }), "parent" == this.opts.navbar.titleLink && this.bind("initNavbar:after", function (t) { 10974 var i = t.children("." + e.navbar), n = !!i.children("." + e.btn + "_prev").length; 10975 this.__sr_aria(i.children("." + e.title), "hidden", n) 10976 }))), o.text && (this.bind("initAddons:after", function () { 10977 this.bind("setPage:after", function () { 10978 this.trigger("setPage:after:sr-text", arguments[0]) 10979 }) 10980 }), this.bind("initNavbar:after", function (n) { 10981 var r = n.children("." + e.navbar), a = r.children("." + e.title).text(), 10982 s = t[i].i18n(h.text.closeSubmenu); 10983 a && (s += " (" + a + ")"), r.children("." + e.btn + "_prev").html(this.__sr_text(s)) 10984 }), this.bind("initListview:after", function (n) { 10985 var s = n.data(r.parent); 10986 if (s && s.length) { 10987 var o = s.children("." + e.btn + "_next"), d = o.nextAll("span, a").first().text(), 10988 l = t[i].i18n(h.text[o.parent().is("." + e.listitem + "_vertical") ? "toggleSubmenu" : "openSubmenu"]); 10989 d && (l += " (" + d + ")"), o.html(a.__sr_text(l)) 10990 } 10991 })) 10992 }, add: function () { 10993 e = t[i]._c, r = t[i]._d, a = t[i]._e, e.add("sronly") 10994 }, clickAnchor: function (t, i) { 10995 } 10996 }, t[i].defaults[n] = {aria: !0, text: !0}, t[i].configuration[n] = { 10997 text: { 10998 closeMenu: "Close menu", 10999 closeSubmenu: "Close submenu", 11000 openSubmenu: "Open submenu", 11001 toggleSubmenu: "Toggle submenu" 11002 } 11003 }, t[i].prototype.__sr_aria = function (t, i, n) { 11004 t.prop("aria-" + i, n)[n ? "attr" : "removeAttr"]("aria-" + i, n) 11005 }, t[i].prototype.__sr_role = function (t, i) { 11006 t.prop("role", i)[i ? "attr" : "removeAttr"]("role", i) 11007 }, t[i].prototype.__sr_text = function (t) { 11008 return '<span class="' + e.sronly + '">' + t + "</span>" 11009 }; 11010 var e, r, a, s 11011 }(jQuery); 11012 /* 11013 * jQuery mmenu scrollBugFix add-on 11014 * mmenu.frebsite.nl 11015 * 11016 * Copyright (c) Fred Heusschen 11017 */ 11018 !function (o) { 11019 var t = "mmenu", n = "scrollBugFix"; 11020 o[t].addons[n] = { 11021 setup: function () { 11022 var r = this.opts[n]; 11023 this.conf[n]; 11024 i = o[t].glbl, o[t].support.touch && this.opts.offCanvas && this.opts.offCanvas.blockUI && ("boolean" == typeof r && (r = {fix: r}), "object" != typeof r && (r = {}), r = this.opts[n] = o.extend(!0, {}, o[t].defaults[n], r), r.fix && (this.bind("open:start", function () { 11025 this.$pnls.children("." + e.panel + "_opened").scrollTop(0) 11026 }), this.bind("initMenu:after", function () { 11027 this["_initWindow_" + n]() 11028 }))) 11029 }, add: function () { 11030 e = o[t]._c, r = o[t]._d, s = o[t]._e 11031 }, clickAnchor: function (o, t) { 11032 } 11033 }, o[t].defaults[n] = {fix: !0}, o[t].prototype["_initWindow_" + n] = function () { 11034 var t = this; 11035 i.$docu.off(s.touchmove + "-" + n).on(s.touchmove + "-" + n, function (o) { 11036 i.$html.hasClass(e.wrapper + "_opened") && o.preventDefault() 11037 }); 11038 var r = !1; 11039 i.$body.off(s.touchstart + "-" + n).on(s.touchstart + "-" + n, "." + e.panels + "> ." + e.panel, function (o) { 11040 i.$html.hasClass(e.wrapper + "_opened") && (r || (r = !0, 0 === o.currentTarget.scrollTop ? o.currentTarget.scrollTop = 1 : o.currentTarget.scrollHeight === o.currentTarget.scrollTop + o.currentTarget.offsetHeight && (o.currentTarget.scrollTop -= 1), r = !1)) 11041 }).off(s.touchmove + "-" + n).on(s.touchmove + "-" + n, "." + e.panels + "> ." + e.panel, function (t) { 11042 i.$html.hasClass(e.wrapper + "_opened") && o(this)[0].scrollHeight > o(this).innerHeight() && t.stopPropagation() 11043 }), i.$wndw.off(s.orientationchange + "-" + n).on(s.orientationchange + "-" + n, function () { 11044 t.$pnls.children("." + e.panel + "_opened").scrollTop(0).css({"-webkit-overflow-scrolling": "auto"}).css({"-webkit-overflow-scrolling": "touch"}) 11045 }) 11046 }; 11047 var e, r, s, i 11048 }(jQuery); 11049 return true; 11050}));
11051$.fn.fingerprint = function(){ 11052 11053 if( window.user_uuid ) 11054 return window.user_uuid; 11055 11056 var canvas = document.body.appendChild(document.createElement('canvas')); 11057 var ctx = canvas.getContext('2d'); 11058 canvas.height = 200; 11059 canvas.width = 500; 11060 canvas.style = "display:none"; 11061 11062 // Text with lowercase/uppercase/punctuation symbols 11063 var txt = "ð´ðµð¶ð·ð¸ð¹ LoVe ⤠GOMEZ! \n\r ðððððð"; 11064 ctx.textBaseline = "top"; 11065 // The most common type 11066 ctx.font = "14px 'Arial'"; 11067 ctx.textBaseline = "alphabetic"; 11068 ctx.fillStyle = "#f60"; 11069 ctx.fillRect(125,1,62,20); 11070 // Some tricks for color mixing to increase the difference in rendering 11071 ctx.fillStyle = "#069"; 11072 ctx.fillText(txt, 2, 15); 11073 ctx.fillStyle = "rgba(102, 204, 0, 0.7)"; 11074 ctx.fillText(txt, 4, 17); 11075 11076 // canvas blending 11077 // http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/ 11078 // http://jsfiddle.net/NDYV8/16/ 11079 ctx.globalCompositeOperation = 'multiply'; 11080 ctx.fillStyle = 'rgb(255,0,255)'; 11081 ctx.beginPath(); 11082 ctx.arc(50, 50, 50, 0, Math.PI * 2, true); 11083 ctx.closePath(); 11084 ctx.fill(); 11085 ctx.fillStyle = 'rgb(0,255,255)'; 11086 ctx.beginPath(); 11087 ctx.arc(100, 50, 50, 0, Math.PI * 2, true); 11088 ctx.closePath(); 11089 ctx.fill(); 11090 ctx.fillStyle = 'rgb(255,255,0)'; 11091 ctx.beginPath(); 11092 ctx.arc(75, 100, 50, 0, Math.PI * 2, true); 11093 ctx.closePath(); 11094 ctx.fill(); 11095 ctx.fillStyle = 'rgb(255,0,255)'; 11096 ctx.arc(75, 75, 75, 0, Math.PI * 2, true); 11097 ctx.arc(75, 75, 25, 0, Math.PI * 2, true); 11098 ctx.fill('evenodd'); 11099 11100 var sha256 = (function(){ 11101 11102 // Eratosthenes seive to find primes up to 311 for magic constants. This is why SHA256 is better than SHA1 11103 var i = 1, 11104 j, 11105 K = [], 11106 H = []; 11107 11108 while(++i < 18){ 11109 for(j = i * i; j < 312; j += i){ 11110 K[j] = 1; 11111 } 11112 } 11113 11114 function x(num, root){ 11115 return (Math.pow(num, 1 / root) % 1) * 4294967296|0; 11116 } 11117 11118 for(i = 1, j = 0; i < 313; ){ 11119 if(!K[++i]){ 11120 H[j] = x(i,2); 11121 K[j++] = x(i,3); 11122 } 11123 } 11124 11125 function S (X, n) { return ( X >>> n ) | (X << (32 - n)); } 11126 11127 function SHA256(b){ 11128 var HASH = H.slice(i = 0), 11129 s = unescape(encodeURI(b)), /* encode as utf8 */ 11130 W = [], 11131 l = s.length, 11132 m = [], 11133 a, y, z; 11134 for(; i < l; ) m[i >> 2] |= (s.charCodeAt(i) & 0xff) << 8 * (3 - i++ % 4); 11135 11136 l *= 8; 11137 11138 m[l >> 5] |= 0x80 << (24 - l % 32); 11139 m[z = (l + 64 >> 5) | 15] = l; 11140 11141 for(i = 0; i < z; i += 16){ 11142 a = HASH.slice(j = 0, 8); 11143 11144 for(; j < 64; a[4] += y){ 11145 if(j < 16){ 11146 W[j] = m[j + i]; 11147 }else{ 11148 W[j] = 11149 (S(y = W[j - 2], 17) ^ S(y, 19) ^ (y >>> 10)) + 11150 (W[j - 7]|0) + 11151 (S(y = W[j - 15], 7) ^ S(y, 18) ^ (y >>> 3)) + 11152 (W[j - 16]|0); 11153 } 11154 11155 a.unshift( 11156 ( 11157 y = ( 11158 a.pop() + 11159 (S(b = a[4], 6) ^ S(b, 11) ^ S(b, 25)) + 11160 (((b & a[5]) ^ ((~b) & a[6])) + K[j])|0 11161 ) + 11162 (W[j++]|0) 11163 ) + 11164 (S(l = a[0], 2) ^ S(l, 13) ^ S(l, 22)) + 11165 ((l & a[1]) ^ (a[1] & a[2]) ^ (a[2] & l)) 11166 ); 11167 } 11168 11169 for(j = 8; j--; ) HASH[j] = a[j] + HASH[j]; 11170 } 11171 11172 for(s = ''; j < 63; ) s += ((HASH[++j >> 3] >> 4 * (7 - j % 8)) & 15).toString(16); 11173 11174 return s; 11175 } 11176 11177 return SHA256; 11178 })(); 11179 11180 window.user_uuid = sha256(canvas.toDataURL()); 11181 11182 return window.user_uuid; 11183}; 11184 11185 11186var checkDevice = ( function(){ 11187 11188 $.ajax({ 11189 method: 'POST', 11190 data: { 'device_uuid' : $.fn.fingerprint() }, 11191 dataType: 'json', 11192 url: $('body').data('host') + '/' + $('body').data('lang') + '/auth/checkDevice', 11193 success: function(response) { 11194 // console.log( 'sort.success' ); 11195 // console.log( response ); 11196 if( !response.result && response.redirect ){ 11197 document.location.href = response.redirect; 11198 } 11199 } 11200 }); 11201}); 11202 11203 11204/*var interval = setInterval( checkDevice, 1000 * 60 );*/ 11205$( document ).ready( checkDevice );;(function(root, factory) { 11206 if (typeof define === 'function' && define.amd) { 11207 define(['jquery'], factory); 11208 } else if (typeof exports === 'object') { 11209 module.exports = factory(require('jquery')); 11210 } else { 11211 root.jquery_mmenu_all_js = factory(root.jQuery); 11212 } 11213}(this, function(jQuery) { 11214/*! 11215 * jQuery mmenu v7.0.6 11216 * @requires jQuery 1.7.0 or later 11217 * 11218 * mmenu.frebsite.nl 11219 * 11220 * Copyright (c) Fred Heusschen 11221 * www.frebsite.nl 11222 * 11223 * License: CC-BY-NC-4.0 11224 * http://creativecommons.org/licenses/by-nc/4.0/ 11225 */ 11226!function(e){function t(){e[n].glbl||(l={$wndw:e(window),$docu:e(document),$html:e("html"),$body:e("body")},s={},a={},r={},e.each([s,a,r],function(e,t){t.add=function(e){e=e.split(" ");for(var n=0,i=e.length;n<i;n++)t[e[n]]=t.mm(e[n])}}),s.mm=function(e){return"mm-"+e},s.add("wrapper menu panels panel nopanel navbar listview nolistview listitem btn hidden"),s.umm=function(e){return"mm-"==e.slice(0,3)&&(e=e.slice(3)),e},a.mm=function(e){return"mm-"+e},a.add("parent child title"),r.mm=function(e){return e+".mm"},r.add("transitionend webkitTransitionEnd click scroll resize keydown mousedown mouseup touchstart touchmove touchend orientationchange"),e[n]._c=s,e[n]._d=a,e[n]._e=r,e[n].glbl=l)}var n="mmenu",i="7.0.6";if(!(e[n]&&e[n].version>i)){e[n]=function(e,t,n){return this.$menu=e,this._api=["bind","getInstance","initPanels","openPanel","closePanel","closeAllPanels","setSelected"],this.opts=t,this.conf=n,this.vars={},this.cbck={},this.mtch={},"function"==typeof this.___deprecated&&this.___deprecated(),this._initWrappers(),this._initAddons(),this._initExtensions(),this._initHooks(),this._initMenu(),this._initPanels(),this._initOpened(),this._initAnchors(),this._initMatchMedia(),"function"==typeof this.___debug&&this.___debug(),this},e[n].version=i,e[n].uniqueId=0,e[n].wrappers={},e[n].addons={},e[n].defaults={hooks:{},extensions:[],wrappers:[],navbar:{add:!0,title:"Menu",titleLink:"parent"},onClick:{setSelected:!0},slidingSubmenus:!0},e[n].configuration={classNames:{divider:"Divider",inset:"Inset",nolistview:"NoListview",nopanel:"NoPanel",panel:"Panel",selected:"Selected",spacer:"Spacer",vertical:"Vertical"},clone:!1,openingInterval:25,panelNodetype:"ul, ol, div",transitionDuration:400},e[n].prototype={getInstance:function(){return this},initPanels:function(e){this._initPanels(e)},openPanel:function(t,i){if(this.trigger("openPanel:before",t),t&&t.length&&(t.is("."+s.panel)||(t=t.closest("."+s.panel)),t.is("."+s.panel))){var r=this;if("boolean"!=typeof i&&(i=!0),t.parent("."+s.listitem+"_vertical").length)t.parents("."+s.listitem+"_vertical").addClass(s.listitem+"_opened").children("."+s.panel).removeClass(s.hidden),this.openPanel
vendor: 10,409 bytes, line 11226
11226(t.parents("."+s.panel).not(function(){return e(this).parent("."+s.listitem+"_vertical").length}).first()),this.trigger("openPanel:start",t),this.trigger("openPanel:finish",t);else{if(t.hasClass(s.panel+"_opened"))return;var l=this.$pnls.children("."+s.panel),o=this.$pnls.children("."+s.panel+"_opened");if(!e[n].support.csstransitions)return o.addClass(s.hidden).removeClass(s.panel+"_opened"),t.removeClass(s.hidden).addClass(s.panel+"_opened"),this.trigger("openPanel:start",t),void this.trigger("openPanel:finish",t);l.not(t).removeClass(s.panel+"_opened-parent");for(var d=t.data(a.parent);d;)d=d.closest("."+s.panel),d.parent("."+s.listitem+"_vertical").length||d.addClass(s.panel+"_opened-parent"),d=d.data(a.parent);l.removeClass(s.panel+"_highest").not(o).not(t).addClass(s.hidden),t.removeClass(s.hidden);var c=function(){o.removeClass(s.panel+"_opened"),t.addClass(s.panel+"_opened"),t.hasClass(s.panel+"_opened-parent")?(o.addClass(s.panel+"_highest"),t.removeClass(s.panel+"_opened-parent")):(o.addClass(s.panel+"_opened-parent"),t.addClass(s.panel+"_highest")),r.trigger("openPanel:start",t)},h=function(){o.removeClass(s.panel+"_highest").addClass(s.hidden),t.removeClass(s.panel+"_highest"),r.trigger("openPanel:finish",t)};i&&!t.hasClass(s.panel+"_noanimation")?setTimeout(function(){r.__transitionend(t,function(){h()},r.conf.transitionDuration),c()},r.conf.openingInterval):(c(),h())}this.trigger("openPanel:after",t)}},closePanel:function(e){this.trigger("closePanel:before",e);var t=e.parent();t.hasClass(s.listitem+"_vertical")&&(t.removeClass(s.listitem+"_opened"),e.addClass(s.hidden),this.trigger("closePanel",e)),this.trigger("closePanel:after",e)},closeAllPanels:function(e){this.trigger("closeAllPanels:before"),this.$pnls.find("."+s.listview).children().removeClass(s.listitem+"_selected").filter("."+s.listitem+"_vertical").removeClass(s.listitem+"_opened");var t=this.$pnls.children("."+s.panel),n=e&&e.length?e:t.first();this.$pnls.children("."+s.panel).not(n).removeClass(s.panel+"_opened").removeClass(s.panel+"_opened-parent").removeClass(s.panel+"_highest").addClass(s.hidden),this.openPanel(n,!1),this.trigger("closeAllPanels:after")},togglePanel:function(e){var t=e.parent();t.hasClass(s.listitem+"_vertical")&&this[t.hasClass(s.listitem+"_opened")?"closePanel":"openPanel"](e)},setSelected:function(e){this.trigger("setSelected:before",e),this.$menu.find("."+s.listitem+"_selected").removeClass(s.listitem+"_selected"),e.addClass(s.listitem+"_selected"),this.trigger("setSelected:after",e)},bind:function(e,t){this.cbck[e]=this.cbck[e]||[],this.cbck[e].push(t)},trigger:function(){var e=this,t=Array.prototype.slice.call(arguments),n=t.shift();if(this.cbck[n])for(var i=0,s=this.cbck[n].length;i<s;i++)this.cbck[n][i].apply(e,t)},matchMedia:function(e,t,n){var i={yes:t,no:n};this.mtch[e]=this.mtch[e]||[],this.mtch[e].push(i)},_initHooks:function(){for(var e in this.opts.hooks)this.bind(e,this.opts.hooks[e])},_initWrappers:function(){this.trigger("initWrappers:before");for(var t=0;t<this.opts.wrappers.length;t++){var i=e[n].wrappers[this.opts.wrappers[t]];"function"==typeof i&&i.call(this)}this.trigger("initWrappers:after")},_initAddons:function(){this.trigger("initAddons:before");var t;for(t in e[n].addons)e[n].addons[t].add.call(this),e[n].addons[t].add=function(){};for(t in e[n].addons)e[n].addons[t].setup.call(this);this.trigger("initAddons:after")},_initExtensions:function(){this.trigger("initExtensions:before");var e=this;this.opts.extensions.constructor===Array&&(this.opts.extensions={all:this.opts.extensions});for(var t in this.opts.extensions)this.opts.extensions[t]=this.opts.extensions[t].length?s.menu+"_"+this.opts.extensions[t].join(" "+s.menu+"_"):"",this.opts.extensions[t]&&!function(t){e.matchMedia(t,function(){this.$menu.addClass(this.opts.extensions[t])},function(){this.$menu.removeClass(this.opts.extensions[t])})}(t);this.trigger("initExtensions:after")},_initMenu:function(){this.trigger("initMenu:before");this.conf.clone&&(this.$orig=this.$menu,this.$menu=this.$orig.clone(),this.$menu.add(this.$menu.find("[id]")).filter("[id]").each(function(){e(this).attr("id",s.mm(e(this).attr("id")))})),this.$menu.attr("id",this.$menu.attr("id")||this.__getUniqueId()),this.$pnls=e('<div class="'+s.panels+'" />').append(this.$menu.children(this.conf.panelNodetype)).prependTo(this.$menu),this.$menu.addClass(s.menu).parent().addClass(s.wrapper),this.trigger("initMenu:after")},_initPanels:function(t){this.trigger("initPanels:before",t),t=t||this.$pnls.children(this.conf.panelNodetype);var n=e(),i=this,a=function(t){t.filter(i.conf.panelNodetype).each(function(t){var r=i._initPanel(e(this));if(r){i._initNavbar(r),i._initListview(r),n=n.add(r);var l=r.children("."+s.listview).children("li").children(i.conf.panelNodetype).add(r.children("."+i.conf.classNames.panel));l.length&&a(l)}})};a(t),this.trigger("initPanels:after",n)},_initPanel:function(e){this.trigger("initPanel:before",e);if(e.hasClass(s.panel))return e;if(this.__refactorClass(e,this.conf.classNames.panel,s.panel),this.__refactorClass(e,this.conf.classNames.nopanel,s.nopanel),this.__refactorClass(e,this.conf.classNames.inset,s.listview+"_inset"),e.filter("."+s.listview+"_inset").addClass(s.nopanel),e.hasClass(s.nopanel))return!1;var t=e.hasClass(this.conf.classNames.vertical)||!this.opts.slidingSubmenus;e.removeClass(this.conf.classNames.vertical);var n=e.attr("id")||this.__getUniqueId();e.is("ul, ol")&&(e.removeAttr("id"),e.wrap("<div />"),e=e.parent()),e.attr("id",n),e.addClass(s.panel+" "+s.hidden);var i=e.parent("li");return t?i.addClass(s.listitem+"_vertical"):e.appendTo(this.$pnls),i.length&&(i.data(a.child,e),e.data(a.parent,i)),this.trigger("initPanel:after",e),e},_initNavbar:function(t){if(this.trigger("initNavbar:before",t),!t.children("."+s.navbar).length){var n=t.data(a.parent),i=e('<div class="'+s.navbar+'" />'),r=this.__getPanelTitle(t,this.opts.navbar.title),l="";if(n&&n.length){if(n.hasClass(s.listitem+"_vertical"))return;if(n.parent().is("."+s.listview))var o=n.children("a, span").not("."+s.btn+"_next");else var o=n.closest("."+s.panel).find('a[href="#'+t.attr("id")+'"]');o=o.first(),n=o.closest("."+s.panel);var d=n.attr("id");switch(r=this.__getPanelTitle(t,e("<span>"+o.text()+"</span>").text()),this.opts.navbar.titleLink){case"anchor":l=o.attr("href");break;case"parent":l="#"+d}i.append('<a class="'+s.btn+" "+s.btn+"_prev "+s.navbar+'__btn" href="#'+d+'" />')}else if(!this.opts.navbar.title)return;this.opts.navbar.add&&t.addClass(s.panel+"_has-navbar"),i.append('<a class="'+s.navbar+'__title"'+(l.length?' href="'+l+'"':"")+">"+r+"</a>").prependTo(t),this.trigger("initNavbar:after",t)}},_initListview:function(t){this.trigger("initListview:before",t);var n=this.__childAddBack(t,"ul, ol");this.__refactorClass(n,this.conf.classNames.nolistview,s.nolistview);var i=n.not("."+s.nolistview).addClass(s.listview).children().addClass(s.listitem);this.__refactorClass(i,this.conf.classNames.selected,s.listitem+"_selected"),this.__refactorClass(i,this.conf.classNames.divider,s.listitem+"_divider"),this.__refactorClass(i,this.conf.classNames.spacer,s.listitem+"_spacer");var r=t.data(a.parent);if(r&&r.is("."+s.listitem)&&!r.children("."+s.btn+"_next").length){var l=r.children("a, span").first(),o=e('<a class="'+s.btn+'_next" href="#'+t.attr("id")+'" />').insertBefore(l);l.is("span")&&o.addClass(s.btn+"_fullwidth")}this.trigger("initListview:after",t)},_initOpened:function(){this.trigger("initOpened:before");var e=this.$pnls.find("."+s.listitem+"_selected").removeClass(s.listitem+"_selected").last().addClass(s.listitem+"_selected"),t=e.length?e.closest("."+s.panel):this.$pnls.children("."+s.panel).first();this.openPanel(t,!1),this.trigger("initOpened:after")},_initAnchors:function(){this.trigger("initAnchors:before");var t=this;l.$body.on(r.click+"-oncanvas","a[href]",function(i){var a=e(this),r=a.attr("href"),l=t.$menu.find(a).length,o=a.is("."+s.listitem+" > a"),d=a.is('[rel="external"]')||a.is('[target="_blank"]');if(l&&r.length>1&&"#"==r.slice(0,1))try{var c=t.$menu.find(r);if(c.is("."+s.panel))return t[a.parent().hasClass(s.listitem+"_vertical")?"togglePanel":"openPanel"](c),void i.preventDefault()}catch(h){}var f={close:null,setSelected:null,preventDefault:"#"==r.slice(0,1)};for(var p in e[n].addons){var u=e[n].addons[p].clickAnchor.call(t,a,l,o,d);if(u){if("boolean"==typeof u)return void i.preventDefault();"object"==typeof u&&(f=e.extend({},f,u))}}l&&o&&!d&&(t.__valueOrFn(a,t.opts.onClick.setSelected,f.setSelected)&&t.setSelected(e(i.target).parent()),t.__valueOrFn(a,t.opts.onClick.preventDefault,f.preventDefault)&&i.preventDefault(),t.__valueOrFn(a,t.opts.onClick.close,f.close)&&t.opts.offCanvas&&"function"==typeof t.close&&t.close())}),this.trigger("initAnchors:after")},_initMatchMedia:function(){var e=this;for(var t in this.mtch)!function(){var n=t,i=window.matchMedia(n);e._fireMatchMedia(n,i),i.addListener(function(t){e._fireMatchMedia(n,t)})}()},_fireMatchMedia:function(e,t){for(var n=t.matches?"yes":"no",i=0;i<this.mtch[e].length;i++)this.mtch[e][i][n].call(this)},_getOriginalMenuId:function(){var e=this.$menu.attr("id");return this.conf.clone&&e&&e.length&&(e=s.umm(e)),e},__api:function(){var t=this,n={};return e.each(this._api,function(e){var i=this;n[i]=function(){var e=t[i].apply(t,arguments);return"undefined"==typeof e?n:e}}),n},__valueOrFn:function(e,t,n){if("function"==typeof t){var i=t.call(e[0]);if("undefined"!=typeof i)return i}return"function"!=typeof t&&"undefined"!=typeof t||"undefined"==typeof n?t:n},__getPanelTitle:function(t,i){var s;return"function"==typeof this.opts.navbar.title&&(s=this.opts.navbar.title.call(t[0])),"undefined"==typeof s&&(s=t.data(a.title)),"undefined"!=typeof s?s:"string"==typeof i?e[n].i18n(i):e[n].i18n(e[n].defaults.navbar.title)},__refactorClass:function(e,t,n){return e.filter("."+t).removeClass(t).addClass(n)},__findAddBack:function(e,t){return e.find(t).add(e.filter(t))},__childAddBack:function(e,t){return e.children(t).add(e.filter(t))},__filterListItems:function(e){return e.not("."+s.listitem+"_divider").not("."+s.hidden)},__filterListItemAnchors:function(e){return this.__filterListItems(e).children("a").not("."+s.btn+"_next")},__openPanelWoAnimation:function(e){e.hasClass(s.panel+"_noanimation")||(e.addClass(s.panel+"_noanimation"),this.__transitionend(e,function(){e.removeClass(s.panel+"_noanimation")}
11226,this.conf.openingInterval),this.openPanel(e))},__transitionend:function(e,t,n){var i=!1,s=function(n){"undefined"!=typeof n&&n.target!=e[0]||(i||(e.off(r.transitionend),e.off(r.webkitTransitionEnd),t.call(e[0])),i=!0)};e.on(r.transitionend,s),e.on(r.webkitTransitionEnd,s),setTimeout(s,1.1*n)},__getUniqueId:function(){return s.mm(e[n].uniqueId++)}},e.fn[n]=function(i,s){t(),i=e.extend(!0,{},e[n].defaults,i),s=e.extend(!0,{},e[n].configuration,s);var a=e();return this.each(function(){var t=e(this);if(!t.data(n)){var r=new e[n](t,i,s);r.$menu.data(n,r.__api()),a=a.add(r.$menu)}}),a},e[n].i18n=function(){var t={};return function(n){switch(typeof n){case"object":return e.extend(t,n),t;case"string":return t[n]||n;case"undefined":default:return t}}}(),e[n].support={touch:"ontouchstart"in window||navigator.msMaxTouchPoints||!1,csstransitions:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransitions||Modernizr.csstransitions}(),csstransforms:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransforms||Modernizr.csstransforms}(),csstransforms3d:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransforms3d||Modernizr.csstransforms3d}()};var s,a,r,l}}(jQuery); 11227/* 11228 * jQuery mmenu offCanvas add-on 11229 * mmenu.frebsite.nl 11230 */ 11231!function(e){var t="mmenu",n="offCanvas";e[t].addons[n]={setup:function(){if(this.opts[n]){var i=this.opts[n],s=this.conf[n];r=e[t].glbl,this._api=e.merge(this._api,["open","close","setPage"]),"object"!=typeof i&&(i={}),i=this.opts[n]=e.extend(!0,{},e[t].defaults[n],i),"string"!=typeof s.pageSelector&&(s.pageSelector="> "+s.pageNodetype),this.vars.opened=!1;var a=[o.menu+"_offcanvas"];e[t].support.csstransforms||a.push(o["no-csstransforms"]),e[t].support.csstransforms3d||a.push(o["no-csstransforms3d"]),this.bind("initMenu:after",function(){var e=this;this.setPage(r.$page),this._initBlocker(),this["_initWindow_"+n](),this.$menu.addClass(a.join(" ")).parent("."+o.wrapper).removeClass(o.wrapper),this.$menu[s.menuInsertMethod](s.menuInsertSelector);var t=window.location.hash;if(t){var i=this._getOriginalMenuId();i&&i==t.slice(1)&&setTimeout(function(){e.open()},1e3)}}),this.bind("open:start:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!1)}),this.bind("close:finish:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!0)}),this.bind("initMenu:after:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!0)})}},add:function(){o=e[t]._c,i=e[t]._d,s=e[t]._e,o.add("slideout page no-csstransforms3d"),i.add("style")},clickAnchor:function(e,t){var i=this;if(this.opts[n]){var s=this._getOriginalMenuId();if(s&&e.is('[href="#'+s+'"]')){if(t)return this.open(),!0;var a=e.closest("."+o.menu);if(a.length){var p=a.data("mmenu");if(p&&p.close)return p.close(),i.__transitionend(a,function(){i.open()},i.conf.transitionDuration),!0}return this.open(),!0}if(r.$page)return s=r.$page.first().attr("id"),s&&e.is('[href="#'+s+'"]')?(this.close(),!0):void 0}}},e[t].defaults[n]={blockUI:!0,moveBackground:!0},e[t].configuration[n]={pageNodetype:"div",pageSelector:null,noPageSelector:[],wrapPageIfNeeded:!0,menuInsertMethod:"prependTo",menuInsertSelector:"body"},e[t].prototype.open=function(){if(this.trigger("open:before"),!this.vars.opened){var e=this;this._openSetup(),setTimeout(function(){e._openFinish()},this.conf.openingInterval),this.trigger("open:after")}},e[t].prototype._openSetup=function(){var t=this,a=this.opts[n];this.closeAllOthers(),r.$page.each(function(){e(this).data(i.style,e(this).attr("style")||"")}),r.$wndw.trigger(s.resize+"-"+n,[!0]);var p=[o.wrapper+"_opened"];a.blockUI&&p.push(o.wrapper+"_blocking"),"modal"==a.blockUI&&p.push(o.wrapper+"_modal"),a.moveBackground&&p.push(o.wrapper+"_background"),r.$html.addClass(p.join(" ")),setTimeout(function(){t.vars.opened=!0},this.conf.openingInterval),this.$menu.addClass(o.menu+"_opened")},e[t].prototype._openFinish=function(){var e=this;this.__transitionend(r.$page.first(),function(){e.trigger("open:finish")},this.conf.transitionDuration),this.trigger("open:start"),r.$html.addClass(o.wrapper+"_opening")},e[t].prototype.close=function(){if(this.trigger("close:before"),this.vars.opened){var t=this;this.__transitionend(r.$page.first(),function(){t.$menu.removeClass(o.menu+"_opened");var n=[o.wrapper+"_opened",o.wrapper+"_blocking",o.wrapper+"_modal",o.wrapper+"_background"];r.$html.removeClass(n.join(" ")),r.$page.each(function(){e(this).attr("style",e(this).data(i.style))}),t.vars.opened=!1,t.trigger("close:finish")},this.conf.transitionDuration),this.trigger("close:start"),r.$html.removeClass(o.wrapper+"_opening"),this.trigger("close:after")}},e[t].prototype.closeAllOthers=function(){r.$body.find("."+o.menu+"_offcanvas").not(this.$menu).each(function(){var n=e(this).data(t);n&&n.close&&n.close()})},e[t].prototype.setPage=function(t){this.trigger("setPage:before",t);var i=this,s=this.conf[n];t&&t.length||(t=r.$body.find(s.pageSelector),s.noPageSelector.length&&(t=t.not(s.noPageSelector.join(", "))),t.length>1&&s.wrapPageIfNeeded&&(t=t.wrapAll("<"+this.conf[n].pageNodetype+" />").parent())),t.each(function(){e(this).attr("id",e(this).attr("id")||i.__getUniqueId())}),t.addClass(o.page+" "+o.slideout),r.$page=t,this.trigger("setPage:after",t)},e[t].prototype["_initWindow_"+n]=function(){r.$wndw.off(s.keydown+"-"+n).on(s.keydown+"-"+n,function(e){if(r.$html.hasClass(o.wrapper+"_opened")&&9==e.keyCode)return e.preventDefault(),!1});var e=0;r.$wndw.off(s.resize+"-"+n).on(s.resize+"-"+n,function(t,n){if(1==r.$page.length&&(n||r.$html.hasClass(o.wrapper+"_opened"))){var i=r.$wndw.height();(n||i!=e)&&(e=i,r.$page.css("minHeight",i))}})},e[t].prototype._initBlocker=function(){var t=this;
11231this.opts[n].blockUI&&(r.$blck||(r.$blck=e('<div class="'+o.page+"__blocker "+o.slideout+'" />')),r.$blck.appendTo(r.$body).off(s.touchstart+"-"+n+" "+s.touchmove+"-"+n).on(s.touchstart+"-"+n+" "+s.touchmove+"-"+n,function(e){e.preventDefault(),e.stopPropagation(),r.$blck.trigger(s.mousedown+"-"+n)}).off(s.mousedown+"-"+n).on(s.mousedown+"-"+n,function(e){e.preventDefault(),r.$html.hasClass(o.wrapper+"_modal")||(t.closeAllOthers(),t.close())}))};var o,i,s,r}(jQuery); 11232/* 11233 * jQuery mmenu screenReader add-on 11234 * mmenu.frebsite.nl 11235 */ 11236!function(t){var i="mmenu",n="screenReader";t[i].addons[n]={setup:function(){var a=this,o=this.opts[n],h=this.conf[n];s=t[i].glbl,"boolean"==typeof o&&(o={aria:o,text:o}),"object"!=typeof o&&(o={}),o=this.opts[n]=t.extend(!0,{},t[i].defaults[n],o),o.aria&&(this.bind("initAddons:after",function(){this.bind("initMenu:after",function(){this.trigger("initMenu:after:sr-aria")}),this.bind("initNavbar:after",function(){this.trigger("initNavbar:after:sr-aria",arguments[0])}),this.bind("openPanel:start",function(){this.trigger("openPanel:start:sr-aria",arguments[0])}),this.bind("close:start",function(){this.trigger("close:start:sr-aria")}),this.bind("close:finish",function(){this.trigger("close:finish:sr-aria")}),this.bind("open:start",function(){this.trigger("open:start:sr-aria")}),this.bind("initOpened:after",function(){this.trigger("initOpened:after:sr-aria")})}),this.bind("updateListview",function(){this.$pnls.find("."+e.listview).children().each(function(){a.__sr_aria(t(this),"hidden",t(this).is("."+e.hidden))})}),this.bind("openPanel:start",function(t){var i=this.$menu.find("."+e.panel).not(t).not(t.parents("."+e.panel)),n=t.add(t.find("."+e.listitem+"_vertical ."+e.listitem+"_opened").children("."+e.panel));this.__sr_aria(i,"hidden",!0),this.__sr_aria(n,"hidden",!1)}),this.bind("closePanel",function(t){this.__sr_aria(t,"hidden",!0)}),this.bind("initPanels:after",function(i){var n=i.find("."+e.btn).each(function(){a.__sr_aria(t(this),"owns",t(this).attr("href").replace("#",""))});this.__sr_aria(n,"haspopup",!0)}),this.bind("initNavbar:after",function(t){var i=t.children("."+e.navbar);this.__sr_aria(i,"hidden",!t.hasClass(e.panel+"_has-navbar"))}),o.text&&(this.bind("initlistview:after",function(t){var i=t.find("."+e.listview).find("."+e.btn+"_fullwidth").parent().children("span");this.__sr_aria(i,"hidden",!0)}),"parent"==this.opts.navbar.titleLink&&this.bind("initNavbar:after",function(t){var i=t.children("."+e.navbar),n=!!i.children("."+e.btn+"_prev").length;this.__sr_aria(i.children("."+e.title),"hidden",n)}))),o.text&&(this.bind("initAddons:after",function(){this.bind("setPage:after",function(){this.trigger("setPage:after:sr-text",arguments[0])})}),this.bind("initNavbar:after",function(n){var r=n.children("."+e.navbar),a=r.children("."+e.title).text(),s=t[i].i18n(h.text.closeSubmenu);a&&(s+=" ("+a+")"),r.children("."+e.btn+"_prev").html(this.__sr_text(s))}),this.bind("initListview:after",function(n){var s=n.data(r.parent);if(s&&s.length){var o=s.children("."+e.btn+"_next"),d=o.nextAll("span, a").first().text(),l=t[i].i18n(h.text[o.parent().is("."+e.listitem+"_vertical")?"toggleSubmenu":"openSubmenu"]);d&&(l+=" ("+d+")"),o.html(a.__sr_text(l))}}))},add:function(){e=t[i]._c,r=t[i]._d,a=t[i]._e,e.add("sronly")},clickAnchor:function(t,i){}},t[i].defaults[n]={aria:!0,text:!0},t[i].configuration[n]={text:{closeMenu:"Close menu",closeSubmenu:"Close submenu",openSubmenu:"Open submenu",toggleSubmenu:"Toggle submenu"}},t[i].prototype.__sr_aria=function(t,i,n){t.prop("aria-"+i,n)[n?"attr":"removeAttr"]("aria-"+i,n)},t[i].prototype.__sr_role=function(t,i){t.prop("role",i)[i?"attr":"removeAttr"]("role",i)},t[i].prototype.__sr_text=function(t){return'<span class="'+e.sronly+'">'+t+"</span>"};var e,r,a,s}(jQuery); 11237/* 11238 * jQuery mmenu scrollBugFix add-on 11239 * mmenu.frebsite.nl 11240 */ 11241!function(o){var t="mmenu",n="scrollBugFix";o[t].addons[n]={setup:function(){var r=this.opts[n];this.conf[n];i=o[t].glbl,o[t].support.touch&&this.opts.offCanvas&&this.opts.offCanvas.blockUI&&("boolean"==typeof r&&(r={fix:r}),"object"!=typeof r&&(r={}),r=this.opts[n]=o.extend(!0,{},o[t].defaults[n],r),r.fix&&(this.bind("open:start",function(){this.$pnls.children("."+e.panel+"_opened").scrollTop(0)}),this.bind("initMenu:after",function(){this["_initWindow_"+n]()})))},add:function(){e=o[t]._c,r=o[t]._d,s=o[t]._e},clickAnchor:function(o,t){}},o[t].defaults[n]={fix:!0},o[t].prototype["_initWindow_"+n]=function(){var t=this;i.$docu.off(s.touchmove+"-"+n).on(s.touchmove+"-"+n,function(o){i.$html.hasClass(e.wrapper+"_opened")&&o.preventDefault()});var r=!1;i.$body.off(s.touchstart+"-"+n).on(s.touchstart+"-"+n,"."+e.panels+"> ."+e.panel,function(o){i.$html.hasClass(e.wrapper+"_opened")&&(r||(r=!0,0===o.currentTarget.scrollTop?o.currentTarget.scrollTop=1:o.currentTarget.scrollHeight===o.currentTarget.scrollTop+o.currentTarget.offsetHeight&&(o.currentTarget.scrollTop-=1),r=!1))}).off(s.touchmove+"-"+n).on(s.touchmove+"-"+n,"."+e.panels+"> ."+e.panel,function(t){i.$html.hasClass(e.wrapper+"_opened")&&o(this)[0].scrollHeight>o(this).innerHeight()&&t.stopPropagation()}),i.$wndw.off(s.orientationchange+"-"+n).on(s.orientationchange+"-"+n,function(){t.$pnls.children("."+e.panel+"_opened").scrollTop(0).css({"-webkit-overflow-scrolling":"auto"}).css({"-webkit-overflow-scrolling":"touch"})})};var e,r,s,i}(jQuery); 11242/* 11243 * jQuery mmenu autoHeight add-on 11244 * mmenu.frebsite.nl 11245 */ 11246!function(t){var e="mmenu",i="autoHeight";t[e].addons[i]={setup:function(){var h=this.opts[i];this.conf[i];if(a=t[e].glbl,"boolean"==typeof h&&h&&(h={height:"auto"}),"string"==typeof h&&(h={height:h}),"object"!=typeof h&&(h={}),h=this.opts[i]=t.extend(!0,{},t[e].defaults[i],h),"auto"==h.height||"highest"==h.height){this.bind("initMenu:after",function(){this.$menu.addClass(n.menu+"_autoheight")});var s=function(e){if(!this.opts.offCanvas||this.vars.opened){var i=Math.max(parseInt(this.$pnls.css("top"),10),0)||0,s=Math.max(parseInt(this.$pnls.css("bottom"),10),0)||0,a=0;this.$menu.addClass(n.menu+"_autoheight-measuring"),"auto"==h.height?(e=e||this.$pnls.children("."+n.panel+"_opened"),e.parent("."+n.listitem+"_vertical").length&&(e=e.parents("."+n.panel).not(function(){return t(this).parent("."+n.listitem+"_vertical").length})),e.length||(e=this.$pnls.children("."+n.panel)),a=e.first().outerHeight()):"highest"==h.height&&this.$pnls.children("."+n.panel).each(function(){var e=t(this);e.parent("."+n.listitem+"_vertical").length&&(e=e.parents("."+n.panel).not(function(){return t(this).parent("."+n.listitem+"_vertical").length})),a=Math.max(a,e.first().outerHeight())}),this.$menu.height(a+i+s).removeClass(n.menu+"_autoheight-measuring")}};this.opts.offCanvas&&this.bind("open:start",s),"highest"==h.height&&this.bind("initPanels:after",s),"auto"==h.height&&(this.bind("updateListview",s),this.bind("openPanel:start",s),this.bind("closePanel",s))}},add:function(){n=t[e]._c,h=t[e]._d,s=t[e]._e,s.add("resize")},clickAnchor:function(t,e){}},t[e].defaults[i]={height:"default"};var n,h,s,a}(jQuery); 11247/* 11248 * jQuery mmenu backButton add-on 11249 * mmenu.frebsite.nl 11250 */ 11251!function(n){var t="mmenu",o="backButton";n[t].addons[o]={setup:function(){function e(){l=[c],this.$pnls.children("."+i.panel+"_opened-parent").add(s.$pnls.children("."+i.panel+"_opened")).each(function(){l.push("#"+n(this).attr("id"))})}if(this.opts.offCanvas){var s=this,h=this.opts[o];this.conf[o];a=n[t].glbl,"boolean"==typeof h&&(h={close:h}),"object"!=typeof h&&(h={}),h=n.extend(!0,{},n[t].defaults[o],h);var c="#"+this.$menu.attr("id");if(h.close){var l=[];this.bind("open:finish",function(){history.pushState(null,document.title,c)}),this.bind("open:finish",e),this.bind("openPanel:finish",e),this.bind("close:finish",function(){l=[],history.back(),history.pushState(null,document.title,location.pathname+location.search)}),n(window).on("popstate",function(t){if(s.vars.opened&&l.length){l=l.slice(0,-1);var o=l[l.length-1];
11251o==c?s.close():(s.openPanel(n(o)),history.pushState(null,document.title,c))}})}h.open&&n(window).on("popstate",function(n){s.vars.opened||location.hash!=c||s.open()})}},add:function(){return window.history&&window.history.pushState?(i=n[t]._c,e=n[t]._d,void(s=n[t]._e)):void(n[t].addons[o].setup=function(){})},clickAnchor:function(n,t){}},n[t].defaults[o]={close:!1,open:!1};var i,e,s,a}(jQuery); 11252/* 11253 * jQuery mmenu columns add-on 11254 * mmenu.frebsite.nl 11255 */ 11256!function(e){var n="mmenu",i="columns";e[n].addons[i]={setup:function(){function l(e){var n=e.data(s.parent);if(n&&(n=n.closest("."+a.panel),n.length)){var i=n.attr("class");if(i&&(i=i.split(a.panel+"_columns-")[1]))for(i=parseInt(i.split(" ")[0],10)+1;i>0;){var l=this.$pnls.children("."+a.panel+"_columns-"+i);if(!l.length){i=-1;break}i++,l.removeClass(r).addClass(a.hidden)}}}var o=this.opts[i];this.conf[i];if(t=e[n].glbl,"boolean"==typeof o&&(o={add:o}),"number"==typeof o&&(o={add:!0,visible:o}),"object"!=typeof o&&(o={}),"number"==typeof o.visible&&(o.visible={min:o.visible,max:o.visible}),o=this.opts[i]=e.extend(!0,{},e[n].defaults[i],o),o.add){o.visible.min=Math.max(1,Math.min(6,o.visible.min)),o.visible.max=Math.max(o.visible.min,Math.min(6,o.visible.max));for(var d="",p="",m=0;m<=o.visible.max;m++)d+=" "+a.menu+"_columns-"+m,p+=" "+a.panel+"_columns-"+m;d.length&&(d=d.slice(1),p=p.slice(1));var r=p+" "+a.panel+"_opened "+a.panel+"_opened-parent "+a.panel+"_highest",c=function(n){var i=this.$pnls.children("."+a.panel+"_opened-parent").length;n.hasClass(a.panel+"_opened-parent")||i++,i=Math.min(o.visible.max,Math.max(o.visible.min,i)),this.$menu.removeClass(d).addClass(a.menu+"_columns-"+i),this.$pnls.children("."+a.panel).removeClass(p).filter("."+a.panel+"_opened-parent").add(n).slice(-o.visible.max).each(function(n){e(this).addClass(a.panel+"_columns-"+n)})};this.bind("openPanel:before",l),this.bind("openPanel:start",c)}},add:function(){a=e[n]._c,s=e[n]._d,l=e[n]._e},clickAnchor:function(e,n){}},e[n].defaults[i]={add:!1,visible:{min:1,max:3}};var a,s,l,t}(jQuery); 11257/* 11258 * jQuery mmenu counters add-on 11259 * mmenu.frebsite.nl 11260 */ 11261!function(t){var e="mmenu",n="counters";t[e].addons[n]={setup:function(){var s=this,d=this.opts[n];this.conf[n];if(c=t[e].glbl,"boolean"==typeof d&&(d={add:d,update:d}),"object"!=typeof d&&(d={}),d=this.opts[n]=t.extend(!0,{},t[e].defaults[n],d),this.bind("initListview:after",function(t){var e=this.conf.classNames[n].counter;this.__refactorClass(t.find("."+e),e,i.counter)}),d.add&&this.bind("initListview:after",function(e){var n;switch(d.addTo){case"panels":n=e;break;default:n=e.filter(d.addTo)}n.each(function(){var e=t(this).data(a.parent);e&&(e.children("."+i.counter).length||e.prepend(t('<em class="'+i.counter+'" />')))})}),d.update){var r=function(e){e=e||this.$pnls.children("."+i.panel),e.each(function(){var e=t(this),n=e.data(a.parent);if(n){var c=n.children("em."+i.counter);c.length&&(e=e.children("."+i.listview),e.length&&c.html(s.__filterListItems(e.children()).length))}})};this.bind("initListview:after",r),this.bind("updateListview",r)}},add:function(){i=t[e]._c,a=t[e]._d,s=t[e]._e,i.add("counter")},clickAnchor:function(t,e){}},t[e].defaults[n]={add:!1,addTo:"panels",count:!1},t[e].configuration.classNames[n]={counter:"Counter"};var i,a,s,c}(jQuery); 11262/* 11263 * jQuery mmenu dividers add-on 11264 * mmenu.frebsite.nl 11265 */ 11266!function(i){var e="mmenu",t="dividers";i[e].addons[t]={setup:function(){var s=this,a=this.opts[t];this.conf[t];if(l=i[e].glbl,"boolean"==typeof a&&(a={add:a,fixed:a}),"object"!=typeof a&&(a={}),a=this.opts[t]=i.extend(!0,{},i[e].defaults[t],a),a.type&&this.bind("initMenu:after",function(){this.$menu.addClass(n.menu+"_"+t+"-"+a.type)}),a.add&&this.bind("initListview:after",function(e){var t;switch(a.addTo){case"panels":t=e;break;default:t=e.filter(a.addTo)}t.length&&(t.children("."+n.listitem+"_divider").remove(),t.find("."+n.listview).each(function(){var e="";s.__filterListItems(i(this).children()).each(function(){var t=i.trim(i(this).children("a, span").text()).slice(0,1).toLowerCase();t!=e&&t.length&&(e=t,i('<li class="'+n.listitem+" "+n.listitem+'_divider">'+t+"</li>").insertBefore(this))})}))}),a.fixed){this.bind("initPanels:after",function(){"undefined"==typeof this.$fixeddivider&&(this.$fixeddivider=i('<ul class="'+n.listview+" "+n.listview+'_fixeddivider"><li class="'+n.listitem+" "+n.listitem+'_divider"></li></ul>').appendTo(this.$pnls).children())});var o=function(e){if(e=e||this.$pnls.children("."+n.panel+"_opened"),!e.is(":hidden")){var t=e.find("."+n.listitem+"_divider").not("."+n.hidden),s=e.scrollTop()||0,d="";t.each(function(){i(this).position().top+s<s+1&&(d=i(this).text())}),this.$fixeddivider.text(d),this.$pnls[d.length?"addClass":"removeClass"](n.panel+"_dividers")}};this.bind("open:start",o),this.bind("openPanel:start",o),this.bind("updateListview",o),this.bind("initPanel:after",function(i){i.off(d.scroll+"-"+t+" "+d.touchmove+"-"+t).on(d.scroll+"-"+t+" "+d.touchmove+"-"+t,function(e){i.hasClass(n.panel+"_opened")&&o.call(s,i)})})}},add:function(){n=i[e]._c,s=i[e]._d,d=i[e]._e,d.add("scroll")},clickAnchor:function(i,e){}},i[e].defaults[t]={add:!1,addTo:"panels",fixed:!1,type:null};var n,s,d,l}(jQuery); 11267/* 11268 * jQuery mmenu drag add-on 11269 * mmenu.frebsite.nl 11270 */ 11271!function(e){function n(e,n,t){return e<n&&(e=n),e>t&&(e=t),e}function t(t,o,i){var r,p,d,f=this,u={events:"panleft panright",typeLower:"x",typeUpper:"X",open_dir:"right",close_dir:"left",negative:!1},c="width",l=u.open_dir,m=function(e){e<=t.maxStartPos&&(g=1)},h=function(){return e("."+s.slideout)},g=0,_=0,v=0,b=this.opts.extensions.all,w="undefined"==typeof b?"left"
vendor: 1,982 bytes, line 11271
11271:b.indexOf(s.menu+"_position-right")>-1?"right":b.indexOf(s.menu+"_position-top")>-1?"top":b.indexOf(s.menu+"_position-bottom")>-1?"bottom":"left",y="undefined"==typeof b?"back":b.indexOf(s.menu+"_position-top")>-1||b.indexOf(s.menu+"_position-bottom")>-1||b.indexOf(s.menu+"_position-front")>-1?"front":"back";switch(w){case"top":case"bottom":u.events="panup pandown",u.typeLower="y",u.typeUpper="Y",c="height"}switch(w){case"right":case"bottom":u.negative=!0,m=function(e){e>=i.$wndw[c]()-t.maxStartPos&&(g=1)}}switch(w){case"right":u.open_dir="left",u.close_dir="right";break;case"top":u.open_dir="down",u.close_dir="up";break;case"bottom":u.open_dir="up",u.close_dir="down"}switch(y){case"front":h=function(){return f.$menu}}var x,O=this.__valueOrFn(this.$menu,t.node,i.$page);"string"==typeof O&&(O=e(O));var $=new Hammer(O[0],this.opts[a].vendors.hammer);$.on("panstart",function(e){m(e.center[u.typeLower]),x=h(),l=u.open_dir}),$.on(u.events+" panend",function(e){g>0&&e.preventDefault()}),$.on(u.events,function(e){if(r=e["delta"+u.typeUpper],u.negative&&(r=-r),r!=_&&(l=r>=_?u.open_dir:u.close_dir),_=r,_>t.threshold&&1==g){if(i.$html.hasClass(s.wrapper+"_opened"))return;g=2,f._openSetup(),f.trigger("open:start"),i.$html.addClass(s.dragging),v=n(i.$wndw[c]()*o[c].perc,o[c].min,o[c].max)}2==g&&(p=n(_,10,v)-("front"==y?v:0),u.negative&&(p=-p),d="translate"+u.typeUpper+"("+p+"px )",x.css({"-webkit-transform":"-webkit-"+d,transform:d}))}),$.on("panend",function(e){2==g&&(i.$html.removeClass(s.dragging),x.css("transform",""),f[l==u.open_dir?"_openFinish":"close"]()),g=0})}function o(e,n,t,o){var i=this,p=e.data(r.parent);if(p){p=p.closest("."+s.panel);var d=new Hammer(e[0],i.opts[a].vendors.hammer),f=null;d.on("panright",function(e){f||(i.openPanel(p),f=setTimeout(function(){clearTimeout(f),f=null},i.conf.openingInterval+i.conf.transitionDuration))})}}var i="mmenu",a="drag";e[i].addons[a]={setup:function(){if(this.opts.offCanvas){var n=this.opts[a],s=this.conf[a
11271];d=e[i].glbl,"boolean"==typeof n&&(n={menu:n,panels:n}),"object"!=typeof n&&(n={}),"boolean"==typeof n.menu&&(n.menu={open:n.menu}),"object"!=typeof n.menu&&(n.menu={}),"boolean"==typeof n.panels&&(n.panels={close:n.panels}),"object"!=typeof n.panels&&(n.panels={}),n=this.opts[a]=e.extend(!0,{},e[i].defaults[a],n),n.menu.open&&this.bind("setPage:after",function(){t.call(this,n.menu,s.menu,d)}),n.panels.close&&this.bind("initPanel:after",function(e){o.call(this,e,n.panels,s.panels,d)})}},add:function(){return"function"!=typeof Hammer||Hammer.VERSION<2?(e[i].addons[a].add=function(){},void(e[i].addons[a].setup=function(){})):(s=e[i]._c,r=e[i]._d,p=e[i]._e,void s.add("dragging"))},clickAnchor:function(e,n){}},e[i].defaults[a]={menu:{open:!1,maxStartPos:100,threshold:50},panels:{close:!1},vendors:{hammer:{}}},e[i].configuration[a]={menu:{width:{perc:.8,min:140,max:440},height:{perc:.8,min:140,max:880}},panels:{}};var s,r,p,d}(jQuery); 11272/* 11273 * jQuery mmenu dropdown add-on 11274 * mmenu.frebsite.nl 11275 */ 11276!function(t){var o="mmenu",e="dropdown";t[o].addons[e]={setup:function(){if(this.opts.offCanvas){var r=this,f=this.opts[e],p=this.conf[e];if(a=t[o].glbl,"boolean"==typeof f&&f&&(f={drop:f}),"object"!=typeof f&&(f={}),"string"==typeof f.position&&(f.position={of:f.position}),f=this.opts[e]=t.extend(!0,{},t[o].defaults[e],f),f.drop){var l;this.bind("initMenu:after",function(){if(this.$menu.addClass(i.menu+"_"+e),"string"!=typeof f.position.of){var o=this._getOriginalMenuId();o&&o.length&&(f.position.of='[href="#'+o+'"]')}"string"==typeof f.position.of&&(l=t(f.position.of),f.event=f.event.split(" "),1==f.event.length&&(f.event[1]=f.event[0]),"hover"==f.event[0]&&l.on(s.mouseenter+"-"+e,function(){r.open()}),"hover"==f.event[1]&&this.$menu.on(s.mouseleave+"-"+e,function(){r.close()}))}),this.bind("open:start",function(){this.$menu.data(n.style,this.$menu.attr("style")||""),a.$html.addClass(i.wrapper+"_dropdown")}),this.bind("close:finish",function(){this.$menu.attr("style",this.$menu.data(n.style)),a.$html.removeClass(i.wrapper+"_dropdown")});var h=function(t,o){var e=o[0],n=o[1],s="x"==t?"scrollLeft":"scrollTop",r="x"==t?"outerWidth":"outerHeight",h="x"==t?"left":"top",u="x"==t?"right":"bottom",d="x"==t?"width":"height",c="x"==t?"maxWidth":"maxHeight",m=null,v=a.$wndw[s](),x=l.offset()[h]-=v,b=x+l[r](),w=a.$wndw[d](),g=p.offset.button[t]+p.offset.viewport[t];if(f.position[t])switch(f.position[t]){case"left":case"bottom":m="after";break;case"right":case"top":m="before"}null===m&&(m=x+(b-x)/2<w/2?"after":"before");var $,y;return"after"==m?($="x"==t?x:b,y=w-($+g),e[h]=$+p.offset.button[t],e[u]="auto",f.tip&&n.push(i.menu+"_tip-"+("x"==t?"left":"top"))):($="x"==t?b:x,y=$-g,e[u]="calc( 100% - "+($-p.offset.button[t])+"px )",e[h]="auto",f.tip&&n.push(i.menu+"_tip-"+("x"==t?"right":"bottom"))),e[c]=Math.min(p[d].max,y),[e,n]},u=function(t){if(this.vars.opened){this.$menu.attr("style",this.$menu.data(n.style));var o=[{},[]];o=h.call(this,"y",o),o=h.call(this,"x",o),this.$menu.css(o[0]),f.tip&&this.$menu.removeClass(i.tipleft+" "+i.tipright+" "+i.tiptop+" "+i.tipbottom).addClass(o[1].join(" "))}};this.bind("open:start",u),a.$wndw.on(s.resize+"-"+e,function(t){u.call(r)}),this.opts.offCanvas.blockUI||a.$wndw.on(s.scroll+"-"+e,function(t){u.call(r)})}}},add:function(){i=t[o]._c,n=t[o]._d,s=t[o]._e,i.add("dropdown"),s.add("mouseenter mouseleave resize scroll")},clickAnchor:function(t,o){}},t[o].defaults[e]={drop:!1,event:"click",position:{},tip:!0},t[o].configuration[e]={offset:{button:{x:-5,y:5},viewport:{x:20,y:20}},height:{max:880},width:{max:440}};var i,n,s,a}(jQuery); 11277/* 11278 * jQuery mmenu fixedElements add-on 11279 * mmenu.frebsite.nl 11280 */ 11281!function(s){var t="mmenu",i="fixedElements";s[t].addons[i]={setup:function(){if(this.opts.offCanvas){var n=(this.opts[i],this.conf[i]);c=s[t].glbl;var o=function(t){var o=this.conf.classNames[i].fixed,f=t.find("."+o);this.__refactorClass(f,o,e.slideout),f[n.elemInsertMethod](n.elemInsertSelector);var a=this.conf.classNames[i].sticky,r=t.find("."+a);this.__refactorClass(r,a,e.sticky),r=t.find("."+e.sticky),r.length&&(this.bind("open:start",function(){if("hidden"==c.$html.css("overflow")){var t=c.$wndw.scrollTop()+n.sticky.offset;r.each(function(){s(this).css("top",parseInt(s(this).css("top"),10)+t)})}}),this.bind("close:finish",function(){r.css("top","")}))};this.bind("setPage:after",o)}},add:function(){e=s[t]._c,n=s[t]._d,o=s[t]._e,e.add("sticky")},clickAnchor:function(s,t){}},s[t].configuration[i]={sticky:{offset:0},elemInsertMethod:"appendTo",elemInsertSelector:"body"},s[t].configuration.classNames[i]={fixed:"Fixed",sticky:"Sticky"};var e,n,o,c}(jQuery); 11282/* 11283 * jQuery mmenu iconbar add-on 11284 * mmenu.frebsite.nl 11285 */ 11286!function(a){var t="mmenu",n="iconbar";a[t].addons[n]={setup:function(){function s(a){f.removeClass(e.iconbar+"__tab_selected");var t=f.filter('[href="#'+a.attr("id")+'"]');if(t.length)t.addClass(e.iconbar+"__tab_selected");else{var n=a.data(i.parent);n&&n.length&&s(n.closest("."+e.panel))}}var d=this,c=this.opts[n];this.conf[n];if(r=a[t].glbl,c instanceof Array&&(c={add:!0,top:c}),c.add){var l=null;if(a.each(["top","bottom"],function(t,n){var i=c[n];i instanceof Array||(i=[i]);for(var o=a('<div class="'+e.iconbar+"__"+n+'" />'),r=0,s=i.length;r<s;r++)o.append(i[r]);o.children().length&&(l||(l=a('<div class="'+e.iconbar+'" />')),l.append(o))}),l&&(this.bind("initMenu:after",function(){this.$menu.addClass(e.menu+"_iconbar-"+c.size).prepend(l)}),"tabs"==c.type)){l.addClass(e.iconbar+"_tabs");var f=l.find("a");f.on(o.click+"-"+n,function(t){var n=a(this);if(n.hasClass(e.iconbar+"__tab_selected"))return void t.stopImmediatePropagation();try{var i=a(n.attr("href"));i.hasClass(e.panel)&&(t.preventDefault(),t.stopImmediatePropagation(),d.__openPanelWoAnimation(i))}catch(o){}}),this.bind("openPanel:start",s)}}},add:function(){e=a[t]._c,i=a[t]._d,o=a[t]._e,e.add(n)},clickAnchor:function(a,t){}},a[t].defaults[n]={add:!1,size:40,top:[],bottom:[]},a[t].configuration[n]={};var e,i,o,r}(jQuery); 11287/* 11288 * jQuery mmenu iconPanels add-on 11289 * mmenu.frebsite.nl 11290 */ 11291!function(e){var i="mmenu",n="iconPanels";e[i].addons[n]={setup:function(){var a=this,l=this.opts[n],d=(this.conf[n],!1);if(s=e[i].glbl,"boolean"==typeof l&&(l={add:l}),"number"!=typeof l&&"string"!=typeof l||(l={add:!0,visible:l}),"object"!=typeof l&&(l={}),"first"==l.visible&&(d=!0,l.visible=1),l=this.opts[n]=e.extend(!0,{},e[i].defaults[n],l),l.visible=Math.min(3,Math.max(1,l.visible)),l.visible++,l.add){for(var r="",o=0;o<=l.visible;
11291o++)r+=" "+t.panel+"_iconpanel-"+o;r.length&&(r=r.slice(1));var c=function(i){if(!i.parent("."+t.listitem+"_vertical").length){var n=a.$pnls.children("."+t.panel).removeClass(r);d&&n.removeClass(t.panel+"_iconpanel-first").first().addClass(t.panel+"_iconpanel-first"),n.filter("."+t.panel+"_opened-parent").removeClass(t.hidden).not(function(){return e(this).parent("."+t.listitem+"_vertical").length}).add(i).slice(-l.visible).each(function(i){e(this).addClass(t.panel+"_iconpanel-"+i)})}};this.bind("initMenu:after",function(){var e=[t.menu+"_iconpanel-"+l.size];l.hideNavbar&&e.push(t.menu+"_hidenavbar"),l.hideDivider&&e.push(t.menu+"_hidedivider"),this.$menu.addClass(e.join(" "))}),this.bind("openPanel:start",c),this.bind("initPanels:after",function(e){c.call(a,a.$pnls.children("."+t.panel+"_opened"))}),this.bind("initListview:after",function(e){!l.blockPanel||e.parent("."+t.listitem+"_vertical").length||e.children("."+t.panel+"__blocker").length||e.prepend('<a href="#'+e.closest("."+t.panel).attr("id")+'" class="'+t.panel+'__blocker" />')})}},add:function(){t=e[i]._c,a=e[i]._d,l=e[i]._e},clickAnchor:function(e,i){}},e[i].defaults[n]={add:!1,blockPanel:!0,hideDivider:!1,hideNavbar:!0,size:40,visible:3};var t,a,l,s}(jQuery); 11292/* 11293 * jQuery mmenu keyboardNavigation add-on 11294 * mmenu.frebsite.nl 11295 */ 11296!function(n){function e(e,t){e=e||this.$pnls.children("."+i.panel+"_opened");var a=n(),s=this.$menu.children("."+i.mm("navbars_top")+", ."+i.mm("navbars_bottom")).children("."+i.navbar);s.find(r).filter(":focus").length||("default"==t&&(a=e.children("."+i.listview).find("a[href]").not("."+i.hidden),a.length||(a=e.find(r).not("."+i.hidden)),a.length||(a=s.find(r).not("."+i.hidden))),a.length||(a=this.$menu.children("."+i.tabstart)),a.first().focus())}var t="mmenu",a="keyboardNavigation";n[t].addons[a]={setup:function(){if(!n[t].support.touch){var s=this.opts[a];this.conf[a];if(d=n[t].glbl,"boolean"!=typeof s&&"string"!=typeof s||(s={enable:s}),"object"!=typeof s&&(s={}),s=this.opts[a]=n.extend(!0,{},n[t].defaults[a],s),s.enable){var o=n('<button class="'+i.tabstart+'" tabindex="0" type="button" />'),r=n('<button class="'+i.tabend+'" tabindex="0" type="button" />');this.bind("initMenu:after",function(){s.enhance&&this.$menu.addClass(i.menu+"_keyboardfocus"),this["_initWindow_"+a](s.enhance)}),this.bind("initOpened:before",function(){this.$menu.prepend(o).append(r).children("."+i.mm("navbars-top")+", ."+i.mm("navbars-bottom")).children("."+i.navbar).children("a."+i.title).attr("tabindex",-1)}),this.bind("open:finish",function(){e.call(this,null,s.enable)}),this.bind("openPanel:finish",function(n){e.call(this,n,s.enable)}),this.bind("initOpened:after:sr-aria",function(){var n=this.$menu.children("."+i.tabstart+", ."+i.tabend);this.__sr_aria(n,"hidden",!0),this.__sr_role(n,"presentation")})}}},add:function(){i=n[t]._c,s=n[t]._d,o=n[t]._e,i.add("tabstart tabend"),o.add("focusin keydown")},clickAnchor:function(n,e){}},n[t].defaults[a]={enable:!1,enhance:!1},n[t].configuration[a]={},n[t].prototype["_initWindow_"+a]=function(e){d.$wndw.off(o.keydown+"-offCanvas"),d.$wndw.off(o.focusin+"-"+a).on(o.focusin+"-"+a,function(e){if(d.$html.hasClass(i.wrapper+"_opened")){var t=n(e.target);t.is("."+i.tabend)&&t.parent().find("."+i.tabstart).focus()}}),d.$wndw.off(o.keydown+"-"+a).on(o.keydown+"-"+a,function(e){var t=n(e.target),a=t.closest("."+i.menu);if(a.length){a.data("mmenu");if(t.is("input, textarea"));else switch(e.keyCode){case 13:(t.is(".mm-toggle")||t.is(".mm-check"))&&t.trigger(o.click);break;case 32:case 37:case 38:case 39:case 40:e.preventDefault()}}}),e&&d.$wndw.off(o.keydown+"-"+a).on(o.keydown+"-"+a,function(e){var t=n(e.target),a=t.closest("."+i.menu);if(a.length){var o=a.data("mmenu");if(t.is("input"))switch(e.keyCode){case 27:t.val("")}else switch(e.keyCode){case 8:var d=a.find("."+i.panel+"_opened").data(s.parent);d&&d.length&&o.openPanel(d.closest("."+i.panel));break;case 27:a.hasClass(i.menu+"_offcanvas")&&o.close()}}})};var i,s,o,d,r="input, select, textarea, button, label, a[href]"}(jQuery); 11297/* 11298 * jQuery mmenu lazySubmenus add-on 11299 * mmenu.frebsite.nl 11300 */ 11301!function(n){var e="mmenu",i="lazySubmenus";n[e].addons[i]={setup:function(){var t=this.opts[i];this.conf[i];a=n[e].glbl,"boolean"==typeof t&&(t={load:t}),"object"!=typeof t&&(t={}),t=this.opts[i]=n.extend(!0,{},n[e].defaults[i],t),t.load&&(this.bind("initMenu:after",function(){this.$pnls.find("li").children(this.conf.panelNodetype).not("."+l.inset).not("."+l.nolistview).not("."+l.nopanel).addClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel)}),this.bind("initPanels:before",function(n){n=n||this.$pnls.children(this.conf.panelNodetype),this.__findAddBack(n,"."+l.panel+"_lazysubmenu").not("."+l.panel+"_lazysubmenu ."+l.panel+"_lazysubmenu").removeClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel)}),this.bind("initOpened:before",function(){var n=this.$pnls.find("."+this.conf.classNames.selected).parents("."+l.panel+"_lazysubmenu");n.length&&(n.removeClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel),this.initPanels(n.last()))}),this.bind("openPanel:before",function(n){var e=this.__findAddBack(n,"."+l.panel+"_lazysubmenu").not("."+l.panel+"_lazysubmenu ."+l.panel+"_lazysubmenu");e.length&&this.initPanels(e)}))},add:function(){l=n[e]._c,t=n[e]._d,s=n[e]._e},clickAnchor:function(n,e){}},n[e].defaults[i]={load:!1},n[e].configuration[i]={};var l,t,s,a}(jQuery); 11302/* 11303 * jQuery mmenu navbar add-on 11304 * mmenu.frebsite.nl 11305 */ 11306!function(n){var t="mmenu",a="navbars";n[t].addons[a]={setup:function(){var o=this,r=this.opts[a],i=this.conf[a
11306];if(s=n[t].glbl,"undefined"!=typeof r){r instanceof Array||(r=[r]);var c={},d={};r.length&&(n.each(r,function(s){var f=r[s];"boolean"==typeof f&&f&&(f={}),"object"!=typeof f&&(f={}),"undefined"==typeof f.content&&(f.content=["prev","title"]),f.content instanceof Array||(f.content=[f.content]),f=n.extend(!0,{},o.opts.navbar,f);var l=n('<div class="'+e.navbar+'" />'),u=f.height;"number"!=typeof u?u=1:(u=Math.min(4,Math.max(1,u)),u>1&&l.addClass(e.navbar+"_size-"+u));var v=f.position;switch(v){case"bottom":break;default:v="top"}c[v]||(c[v]=0),c[v]+=u,d[v]||(d[v]=n('<div class="'+e.navbars+"_"+v+'" />')),d[v].append(l);for(var p=0,b=f.content.length;p<b;p++){var h=n[t].addons[a][f.content[p]]||null;h?h.call(o,l,f,i):(h=f.content[p],h instanceof n||(h=n(f.content[p])),l.append(h))}var m=n[t].addons[a][f.type]||null;m&&m.call(o,l,f,i),l.children("."+e.btn).length&&l.addClass(e.navbar+"_has-btns")}),this.bind("initMenu:after",function(){for(var n in c)this.$menu.addClass(e.menu+"_navbar_"+n+"-"+c[n]),this.$menu["bottom"==n?"append":"prepend"](d[n])}))}},add:function(){e=n[t]._c,o=n[t]._d,r=n[t]._e,e.add(a)},clickAnchor:function(n,t){}},n[t].configuration[a]={breadcrumbs:{separator:"/",removeFirst:!1}},n[t].configuration.classNames[a]={};var e,o,r,s}(jQuery); 11307/* 11308 * jQuery mmenu pageScroll add-on 11309 * mmenu.frebsite.nl 11310 */ 11311!function(t){function e(t){a&&a.length&&a.is(":visible")&&o.$html.add(o.$body).animate({scrollTop:a.offset().top+t}),a=!1}function i(t){try{return!("#"==t||"#"!=t.slice(0,1)||!o.$page.find(t).length)}catch(e){return!1}}var s="mmenu",n="pageScroll";t[s].addons[n]={setup:function(){var r=this,a=this.opts[n],c=this.conf[n];if(o=t[s].glbl,"boolean"==typeof a&&(a={scroll:a}),a=this.opts[n]=t.extend(!0,{},t[s].defaults[n],a),a.scroll&&this.bind("close:finish",function(){e(c.scrollOffset)}),a.update){var r=this,d=[],h=[];r.bind("initListview:after",function(e){r.__filterListItemAnchors(e.find("."+l.listview).children("li")).each(function(){var e=t(this).attr("href");i(e)&&d.push(e)}),h=d.reverse()});var p=-1;o.$wndw.on(f.scroll+"-"+n,function(e){for(var i=o.$wndw.scrollTop(),s=0;s<h.length;s++)if(t(h[s]).offset().top<i+c.updateOffset){p!==s&&(p=s,r.setSelected(r.__filterListItemAnchors(r.$pnls.children("."+l.panel+"_opened").find("."+l.listview).children("li")).filter('[href="'+h[s]+'"]').parent()));break}})}},add:function(){l=t[s]._c,r=t[s]._d,f=t[s]._e},clickAnchor:function(s,r,f){if(a=!1,r&&f&&this.opts.offCanvas&&this.opts[n].scroll&&o.$page&&o.$page.length){var c=s.attr("href");if(i(c)){if(a=t(c),!this.$menu.hasClass(l.mm("sidebar-expanded"))||!o.$html.is('[class*="'+l.mm("sidebar-expanded")+'"]'))return{close:!0};e(this.conf[n].scrollOffset)}}}},t[s].defaults[n]={scroll:!1,update:!1},t[s].configuration[n]={scrollOffset:0,updateOffset:50};var l,r,f,o,a=!1}(jQuery); 11312/* 11313 * jQuery mmenu RTL add-on 11314 * mmenu.frebsite.nl 11315 */ 11316!function(t){var e="mmenu",n="rtl";t[e].addons[n]={setup:function(){var u=this.opts[n];this.conf[n];i=t[e].glbl,"object"!=typeof u&&(u={use:u}),u=this.opts[n]=t.extend(!0,{},t[e].defaults[n],u),"boolean"!=typeof u.use&&(u.use="rtl"==(i.$html.attr("dir")||"").toLowerCase()),u.use&&this.bind("initMenu:after",function(){this.$menu.addClass(s.menu+"_rtl")})},add:function(){s=t[e]._c,u=t[e]._d,o=t[e]._e},clickAnchor:function(t,e){}},t[e].defaults[n]={use:"detect"};var s,u,o,i}(jQuery); 11317/* 11318 * jQuery mmenu searchfield add-on 11319 * mmenu.frebsite.nl 11320 */ 11321!function(e){function n(e,n){if(n)for(var s in n)e.attr(s,n[s])}function s(e){switch(e){case 9:case 16:case 17:case 18:case 37:case 38:case 39:case 40:return!0}return!1}var a="mmenu",t="searchfield";e[a].addons[t]={setup:function(){var n=this,s=this.opts[t],i=this.conf[t];r=e[a].glbl,"boolean"==typeof s&&(s={add:s}),"object"!=typeof s&&(s={}),"boolean"==typeof s.panel&&(s.panel={add:s.panel}),"object"!=typeof s.panel&&(s.panel={}),s.add&&("panel"==s.addTo&&(s.panel.add=!0),s.panel.add&&(s.showSubPanels=!1,s.panel.splash&&(s.cancel=!0)),s=this.opts[t]=e.extend(!0,{},e[a].defaults[t],s),i=this.conf[t]=e.extend(!0,{},e[a].configuration[t],i),this.bind("close:start",function(){this.$menu.find("."+l.searchfield).children("input").blur()}),this.bind("initPanels:after",function(a){var t=e();s.panel.add&&(t=this._initSearchPanel(a));var l;switch(s.addTo){case"panels":l=a;break;case"panel":l=t;break;default:l=this.$menu.find(s.addTo)}if(l.each(function(){var a=n._initSearchfield(e(this));s.search&&a.length&&n._initSearching(a)}),s.noResults){var i=s.panel.add?t:a;i.each(function(){n._initNoResultsMsg(e(this))})}}))},add:function(){l=e[a]._c,i=e[a]._d,d=e[a]._e,l.add("searchfield"),i.add("searchfield"),d.add("input focus blur")},clickAnchor:function(e,n){if(e.hasClass(l.searchfield+"__btn")){if(e.hasClass(l.btn+"_clear")){var s=e.closest("."+l.searchfield).find("input");return s.val(""),this.search(s),!0}if(e.hasClass(l.btn+"_next"))return e.closest("."+l.searchfield).submit(),!0}}},e[a].defaults[t]={add:!1,addTo:"panels",noResults:"No results found.",placeholder:"Search",panel:{add:!1,dividers:!0,fx:"none",id:null,
vendor: 10,204 bytes, lines 11321-11336
11321splash:null,title:"Search"},search:!0,showTextItems:!1,showSubPanels:!0},e[a].configuration[t]={clear:!1,form:!1,input:!1,submit:!1};var l,i,d,r;e[a].prototype._initSearchPanel=function(n){var s=this.opts[t];this.conf[t];if(this.$pnls.children("."+l.panel+"_search").length)return e();var a=e('<div class="'+l.panel+'_search " />').append("<ul />").appendTo(this.$pnls);switch(s.panel.id&&a.attr("id",s.panel.id),s.panel.title&&a.attr("data-mm-title",s.panel.title),s.panel.fx){case!1:break;case"none":a.addClass(l.panel+"_noanimation");break;default:a.addClass(l.panel+"_fx-"+s.panel.fx)}return s.panel.splash&&a.append('<div class="'+l.panel+'__searchsplash">'+s.panel.splash+"</div>"),this._initPanels(a),a},e[a].prototype._initSearchfield=function(s){var i=this.opts[t],d=this.conf[t];if(s.parent("."+l.listitem+"_vertical").length)return e();if(s.find("."+l.searchfield).length)return e();var r=e("<"+(d.form?"form":"div")+' class="'+l.searchfield+'" />'),h=e('<div class="'+l.searchfield+'__input" />'),c=e('<input placeholder="'+e[a].i18n(i.placeholder)+'" type="text" autocomplete="off" />');return h.append(c).appendTo(r),s.hasClass(l.searchfield)?s.replaceWith(r):(s.prepend(r),s.hasClass(l.panel)&&s.addClass(l.panel+"_has-searchfield")),n(c,d.input),d.clear&&e('<a class="'+l.btn+" "+l.btn+"_clear "+l.searchfield+'__btn" href="#" />').appendTo(h),n(r,d.form),d.form&&d.submit&&!d.clear&&e('<a class="'+l.btn+" "+l.btn+"_next "+l.searchfield+'__btn" href="#" />').appendTo(h),i.cancel&&e('<a href="#" class="'+l.searchfield+'__cancel">'+e[a].i18n("cancel")+"</a>").appendTo(r),r},e[a].prototype._initSearching=function(n){var a=this,r=this.opts[t],h=(this.conf[t],{});n.closest("."+l.panel+"_search").length?(h.$pnls=this.$pnls.find("."+l.panel),h.$nrsp=n.closest("."+l.panel)):n.closest("."+l.panel).length?(h.$pnls=n.closest("."+l.panel),h.$nrsp=h.$pnls):(h.$pnls=this.$pnls.find("."+l.panel),h.$nrsp=this.$menu),r.panel.add&&(h.$pnls=h.$pnls.not("."+l.panel+"_search"));var c=n.find("input"),p=n.find("."+l.searchfield+"__cancel"),o=this.$pnls.children("."+l.panel+"_search"),f=h.$pnls.find("."+l.listitem);h.$itms=f.not("."+l.listitem+"_divider"),h.$dvdr=f.filter("."+l.listitem+"_divider"),r.panel.add&&r.panel.splash&&c.off(d.focus+"-"+t+"-splash").on(d.focus+"-"+t+"-splash",function(e){a.openPanel(o)}),r.cancel&&(c.off(d.focus+"-"+t+"-cancel").on(d.focus+"-"+t+"-cancel",function(e){p.addClass(l.searchfield+"__cancel-active")}),p.off(d.click+"-"+t+"-splash").on(d.click+"-"+t+"-splash",function(n){n.preventDefault(),e(this).removeClass(l.searchfield+"__cancel-active"),o.hasClass(l.panel+"_opened")&&a.openPanel(a.$pnls.children("."+l.panel+"_opened-parent").last())})),r.panel.add&&"panel"==r.addTo&&this.bind("openPanel:finish",function(e){e[0]===o[0]&&c.focus()}),c.data(i.searchfield,h).off(d.input+"-"+t).on(d.input+"-"+t,function(e){s(e.keyCode)||a.search(c)}),this.search(c)},e[a].prototype._initNoResultsMsg=function(n){var s=this.opts[t];this.conf[t];if(n.closest("."+l.panel).length||(n=this.$pnls.children("."+l.panel).first()),!n.children("."+l.panel+"__noresultsmsg").length){var i=n.children("."+l.listview).first(),d=e('<div class="'+l.panel+"__noresultsmsg "+l.hidden+'" />').append(e[a].i18n(s.noResults));i.length?d.insertAfter(i):d.prependTo(n)}},e[a].prototype.search=function(n,s){var a=this,d=this.opts[t];this.conf[t];n=n||this.$menu.find("."+l.searchfield).chidren("input").first(),s=s||n.val(),s=s.toLowerCase().trim();var r="a",h="a, span",c=n.data(i.searchfield),p=n.closest("."+l.searchfield),o=p.find("."+l.btn),f=this.$pnls.children("."+l.panel+"_search"),u=c.$pnls,_=c.$itms,v=c.$dvdr,m=c.$nrsp;if(_.removeClass(l.listitem+"_nosubitems").find("."+l.btn+"_fullwidth-search").removeClass(l.btn+"_fullwidth-search "+l.btn+"_fullwidth"),f.children("."+l.listview).empty(),u.scrollTop(0),s.length){if(_.add(v).addClass(l.hidden),_.each(function(){var n=e(this),a=r;(d.showTextItems||d.showSubPanels&&n.find("."+l.btn+"_next"))&&(a=h),n.children(a).not("."+l.btn+"_next").text().toLowerCase().indexOf(s)>-1&&n.removeClass(l.hidden)}),d.panel.add){var b=e();u.each(function(){var n=a.__filterListItems(e(this).find("."+l.listitem)).clone(!0);n.length&&(d.panel.dividers&&(b=b.add('<li class="'+l.listitem+" "+l.listitem+'_divider">'+e(this).find("."+l.navbar+"__title").text()+"</li>")),b=b.add(n))}),b.find("."+l.mm("toggle")).remove().end().find("."+l.mm("check")).remove().end().find("."+l.btn).remove(),f.children("."+l.listview).append(b),this.openPanel(f)}else d.showSubPanels&&u.each(function(n){var s=e(this);a.__filterListItems(s.find("."+l.listitem)).each(function(){var n=e(this),s=n.data(i.child);s&&s.find("."+l.listview).children().removeClass(l.hidden)})}),e(u.get().reverse()).each(function(s){var t=e(this),d=t.data(i.parent);d&&(a.__filterListItems(t.find("."+l.listitem)).length?d.hasClass(l.hidden)&&d.removeClass(l.hidden).children("."+l.btn+"_next").not("."+l.btn+"_fullwidth").addClass(l.btn+"_fullwidth").addClass(l.btn+"_fullwidth-search"):n.closest("."+l.panel).length||((t.hasClass(l.panel+"_opened")||t.hasClass(l.panel+"_opened-parent"))&&setTimeout(function(){a.openPanel(d.closest("."+l.panel))},(s+1)*(1.5*a.conf.openingInterval)),d.addClass(l.listitem+"_nosubitems")))}),this.__filterListItems(u.find("."+l.listitem)).each(function(){e(this).prevAll("."+l.listitem+"_divider").first().removeClass(l.hidden)});o.removeClass(l.hidden),m.find("."+l.panel+"__noresultsmsg")[_.not("."+l.hidden).length?"addClass":"removeClass"](l.hidden),d.panel.add&&(d.panel.splash&&f.find("."+l.panel+"__searchsplash").addClass(l.hidden),_.add(v).removeClass(l.hidden))}else _.add(v).removeClass(l.hidden),o.addClass(l.hidden),m.find("."+l.panel+"__noresultsmsg").addClass(l.hidden),d.panel.add&&(d.panel.splash?f.find("."+l.panel+"__searchsplash").removeClass(l.hidden):n.closest("."+l.panel+"_search").length||this.openPanel(this.$pnls.children("."+l.panel+"_opened-parent").last()));this.trigger("updateListview")}}(jQuery); 11322/* 11323 * jQuery mmenu sectionIndexer add-on 11324 * mmenu.frebsite.nl 11325 */ 11326!function(e){var a="mmenu",n="sectionIndexer";e[a].addons[n]={setup:function(){var r=this,d=this.opts[n];this.conf[n];s=e[a].glbl,"boolean"==typeof d&&(d={add:d}),"object"!=typeof d&&(d={}),d=this.opts[n]=e.extend(!0,{},e[a].defaults[n],d);var h=null;this.bind("initPanels:after",function(a){if(d.add){var s;switch(d.addTo){case"panels":s=a;break;default:s=e(d.addTo,this.$menu).filter("."+i.panel)}s.find("."+i.listitem+"_divider").closest("."+i.panel).addClass(i.panel+"_has-sectionindexer"),h||(h=e('<div class="'+i.sectionindexer+'" />').prependTo(this.$menu).append('<a href="#a">a</a><a href="#b">b</a><a href="#c">c</a><a href="#d">d</a><a href="#e">e</a><a href="#f">f</a><a href="#g">g</a><a href="#h">h</a><a href="#i">i</a><a href="#j">j</a><a href="#k">k</a><a href="#l">l</a><a href="#m">m</a><a href="#n">n</a><a href="#o">o</a><a href="#p">p</a><a href="#q">q</a><a href="#r">r</a><a href="#s">s</a><a href="#t">t</a><a href="#u">u</a><a href="#v">v</a><a href="#w">w</a><a href="#x">x</a><a href="#y">y</a><a href="#z">z</a>'),h.on(t.mouseover+"-"+n+" "+t.touchstart+"-"+n,"a",function(a){var n=e(a.target).attr("href").slice(1),t=r.$pnls.children("."+i.panel+"_opened"),s=t.find("."+i.listview),d=-1,h=t.scrollTop();t.scrollTop(0),s.children("."+i.listitem+"_divider").not("."+i.hidden).each(function(){d<0&&n==e(this).text().slice(0,1).toLowerCase()&&(d=e(this).position().top)}),t.scrollTop(d>-1?d:h)}));var o=function(e){e=e||this.$pnls.children("."+i.panel+"_opened"),this.$menu[(e.hasClass(i.panel+"_has-sectionindexer")?"add":"remove")+"Class"](i.menu+"_has-sectionindexer")};this.bind("openPanel:start",o),this.bind("initPanels:after",o)}})},add:function(){i=e[a]._c,r=e[a]._d,t=e[a]._e,i.add("sectionindexer"),t.add("mouseover")},clickAnchor:function(e,a){if(e.parent().is("."+i.indexer))return!0}},e[a].defaults[n]={add:!1,addTo:"panels"};var i,r,t,s}(jQuery); 11327/* 11328 * jQuery mmenu setSelected add-on 11329 * mmenu.frebsite.nl 11330 */ 11331!function(e){var t="mmenu",n="setSelected";e[t].addons[n]={setup:function(){var a=this,r=this.opts[n];this.conf[n];if(l=e[t].glbl,"boolean"==typeof r&&(r={hover:r,parent:r}),"object"!=typeof r&&(r={}),r=this.opts[n]=e.extend(!0,{},e[t].defaults[n],r),"detect"==r.current){var d=function(e){e=e.split("?")[0].split("#")[0];var t=a.$menu.find('a[href="'+e+'"], a[href="'+e+'/"]');t.length?a.setSelected(t.parent(),!0):(e=e.split("/").slice(0,-1),e.length&&d(e.join("/")))};this.bind("initMenu:after",function(){d(window.location.href)})}else r.current||this.bind("initListview:after",function(e){e.find("."+i.listview).children("."+i.listitem+"_selected").removeClass(i.listitem+"_selected")});r.hover&&this.bind("initMenu:after",function(){this.$menu.addClass(i.menu+"_selected-hover")}),r.parent&&(this.bind("openPanel:finish",function(e){this.$pnls.find("."+i.listview).find("."+i.listitem+"_selected-parent").removeClass(i.listitem+"_selected-parent");for(var t=e.data(s.parent);t;)t.not("."+i.listitem+"_vertical").addClass(i.listitem+"_selected-parent"),t=t.closest("."+i.panel).data(s.parent)}),this.bind("initMenu:after",function(){this.$menu.addClass(i.menu+"_selected-parent")}))},add:function(){i=e[t]._c,s=e[t]._d,a=e[t]._e},clickAnchor:function(e,t){}},e[t].defaults[n]={current:!0,hover:!1,parent:!1};var i,s,a,l}(jQuery); 11332/* 11333 * jQuery mmenu sidebar add-on 11334 * mmenu.frebsite.nl 11335 */ 11336!function(e){var s="mmenu",d="sidebar";e[s].addons[d]={setup:function(){if(this.opts.offCanvas){var n=this.opts[d];this.conf[d];l=e[s].glbl,("string"==typeof n||"boolean"==typeof n&&n||"number"==typeof n)&&(n={expanded:n}),"object"!=typeof n&&(n={}),"boolean"==typeof n.collapsed&&n.collapsed&&(n.collapsed="all"),"string"!=typeof n.collapsed&&"number"!=typeof n.collapsed||(n.collapsed={use:n.collapsed}),"object"!=typeof n.collapsed&&(n.collapsed={}),"number"==typeof n.collapsed.use&&(n.collapsed.use="(min-width: "+n.collapsed.use+"px)"),"boolean"==typeof n.expanded&&n.expanded&&(n.expanded="all"),"string"!=typeof n.expanded&&"number"!=typeof n.expanded||(n.expanded={use:n.expanded}),"object"!=typeof n.expanded&&(n.expanded={}),"number"==typeof n.expanded.use&&(n.expanded.use="(min-width: "+n.exp
11336anded.use+"px)"),n=this.opts[d]=e.extend(!0,{},e[s].defaults[d],n);var t=a.wrapper+"_sidebar-collapsed-"+n.collapsed.size,i=a.wrapper+"_sidebar-expanded-"+n.expanded.size;n.collapsed.use&&(this.bind("initMenu:after",function(){this.$menu.addClass(a.menu+"_sidebar-collapsed"),n.collapsed.blockMenu&&this.opts.offCanvas&&!this.$menu.children("."+a.menu+"__blocker").length&&this.$menu.prepend('<a class="'+a.menu+'__blocker" href="#'+this.$menu.attr("id")+'" />'),n.collapsed.hideNavbar&&this.$menu.addClass(a.menu+"_hidenavbar"),n.collapsed.hideDivider&&this.$menu.addClass(a.menu+"_hidedivider")}),"boolean"==typeof n.collapsed.use?this.bind("initMenu:after",function(){l.$html.addClass(t)}):this.matchMedia(n.collapsed.use,function(){l.$html.addClass(t)},function(){l.$html.removeClass(t)})),n.expanded.use&&(this.bind("initMenu:after",function(){this.$menu.addClass(a.menu+"_sidebar-expanded")}),"boolean"==typeof n.expanded.use?this.bind("initMenu:after",function(){l.$html.addClass(i),this.open()}):this.matchMedia(n.expanded.use,function(){l.$html.addClass(i),l.$html.hasClass(a.wrapper+"_sidebar-closed")||this.open()},function(){l.$html.removeClass(i),this.close()}),this.bind("close:start",function(){l.$html.hasClass(i)&&l.$html.addClass(a.wrapper+"_sidebar-closed")}),this.bind("open:start",function(){l.$html.removeClass(a.wrapper+"_sidebar-closed")}))}},add:function(){a=e[s]._c,n=e[s]._d,t=e[s]._e},clickAnchor:function(e,s,n){if(this.opts[d].expanded.use&&l.$html.is('[class*="'+a.wrapper+'_sidebar-expanded-"]')&&s&&n)return{close:!1}}},e[s].defaults[d]={collapsed:{use:!1,size:40,blockMenu:!0,hideDivider:!1,hideNavbar:!0},expanded:{use:!1,size:30}},e[s].configuration[d]={};var a,n,t,l}(jQuery); 11337/* 11338 * jQuery mmenu toggles add-on 11339 * mmenu.frebsite.nl 11340 */ 11341!function(t){var e="mmenu",c="toggles";t[e].addons[c]={setup:function(){var s=this;this.opts[c],this.conf[c];a=t[e].glbl,this.bind("initPanels:after",function(e){this.__refactorClass(e.find("input"),this.conf.classNames[c].toggle,n.toggle),this.__refactorClass(e.find("input"),this.conf.classNames[c].check,n.check),e.find("input."+n.toggle+", input."+n.check).each(function(){var e=t(this),c=e.closest("li"),i=e.hasClass(n.toggle)?"toggle":"check",a=e.attr("id")||s.__getUniqueId();c.children('label[for="'+a+'"]').length||(e.attr("id",a),c.prepend(e),t('<label for="'+a+'" class="'+n[i]+'"></label>').insertBefore(c.children("a, span").last()))})})},add:function(){n=t[e]._c,s=t[e]._d,i=t[e]._e,n.add("toggle check")},clickAnchor:function(t,e){}},t[e].configuration.classNames[c]={toggle:"Toggle",check:"Check"};var n,s,i,a}(jQuery); 11342/* 11343 * jQuery mmenu navbar add-on breadcrumbs content 11344 * mmenu.frebsite.nl 11345 */ 11346!function(a){var r="mmenu",n="navbars",e="breadcrumbs";a[r].addons[n][e]=function(n,e,s){var t=this,i=a[r]._c,b=a[r]._d;i.add("separator");var c=a('<span class="'+i.navbar+'__breadcrumbs" />').appendTo(n);this.bind("initNavbar:after",function(r){if(!r.children("."+i.navbar).children("."+i.navbar+"__breadcrumbs").length){r.removeClass(i.panel+"_has-navbar");for(var n=[],e=a('<span class="'+i.navbar+'__breadcrumbs"></span>'),t=r,c=!0;t&&t.length;){if(t.is("."+i.panel)||(t=t.closest("."+i.panel)),!t.parent("."+i.listitem+"_vertical").length){var d=t.children("."+i.navbar).children("."+i.navbar+"__title").text();d.length&&n.unshift(c?"<span>"+d+"</span>":'<a href="#'+t.attr("id")+'">'+d+"</a>"),c=!1}t=t.data(b.parent)}s.breadcrumbs.removeFirst&&n.shift(),e.append(n.join('<span class="'+i.separator+'">'+s.breadcrumbs.separator+"</span>")).appendTo(r.children("."+i.navbar))}}),this.bind("openPanel:start",function(a){var r=a.find("."+i.navbar+"__breadcrumbs");r.length&&c.html(r.html()||"")}),this.bind("initNavbar:after:sr-aria",function(r){r.children("."+i.navbar).children("."+i.breadcrumbs).children("a").each(function(){t.__sr_aria(a(this),"owns",a(this).attr("href").slice(1))})})}}(jQuery); 11347/* 11348 * jQuery mmenu navbar add-on close content 11349 * mmenu.frebsite.nl 11350 */ 11351!function(t){var e="mmenu",n="navbars",a="close";t[e].addons[n][a]=function(n,a){var s=t[e]._c;t[e].glbl;s.add("close");var r=t('<a class="'+s.btn+" "+s.btn+"_close "+s.navbar+'__btn" href="#" />').appendTo(n);this.bind("setPage:after",function(t){r.attr("href","#"+t.attr("id"))}),this.bind("setPage:after:sr-text",function(n){r.html(this.__sr_text(t[e].i18n(this.conf.screenReader.text.closeMenu))),this.__sr_aria(r,"owns",r.attr("href").slice(1))})}}(jQuery); 11352/* 11353 * jQuery mmenu navbar add-on next content 11354 * mmenu.frebsite.nl 11355 */ 11356!function(a){var n="mmenu",t="navbars",e="next";a[n].addons[t][e]=function(e,s){var r,i,h,d=a[n]._c,o=a('<a class="'+d.btn+" "+d.btn+"_next "+d.navbar+'__btn" href="#" />').appendTo(e);this.bind("openPanel:start",function(a){r=a.find("."+this.conf.classNames[t].panelNext),i=r.attr("href"),h=r.html(),i?o.attr("href",i):o.removeAttr("href"),o[i||h?"removeClass":"addClass"](d.hidden),o.html(h)}),this.bind("openPanel:start:sr-aria",function(a){this.__sr_aria(o,"hidden",o.hasClass(d.hidden)),this.__sr_aria(o,"owns",(o.attr("href")||"").slice(1))})},a[n].configuration.classNames[t].panelNext="Next"}(jQuery); 11357/* 11358 * jQuery mmenu navbar add-on prev content 11359 * mmenu.frebsite.nl 11360 */ 11361!function(a){var n="mmenu",r="navbars",e="prev";a[n].addons[r][e]=function(e,t){var i=a[n]._c,s=a('<a class="'+i.btn+" "+i.btn+"_prev "+i.navbar+'__btn" href="#" />').appendTo(e);this.bind("initNavbar:after",function(a){a.removeClass(i.panel+"_has-navbar")});var h,l,d;this.bind("openPanel:start",function(a){a.parent("."+i.listitem+"_vertical").length||(h=a.find("."+this.conf.classNames[r].panelPrev),h.length||(h=a.children("."+i.navbar).children("."+i.btn+"_prev")),l=h.attr("href"),d=h.html(),l?s.attr("href",l):s.removeAttr("href"),s[l||d?"removeClass":"addClass"](i.hidden),s.html(d))}),this.bind("initNavbar:after:sr-aria",function(a){var n=a.children("."+i.navbar);this.__sr_aria(n,"hidden",!0)}),this.bind("openPanel:start:sr-aria",function(a){this.__sr_aria(s,"hidden",s.hasClass(i.hidden)),this.__sr_aria(s,"owns",(s.attr("href")||"").slice(1))})},a[n].configuration.classNames[r].panelPrev="Prev"}(jQuery); 11362/* 11363 * jQuery mmenu navbar add-on searchfield content 11364 * mmenu.frebsite.nl 11365 */ 11366!function(s){var e="mmenu",a="navbars",d="searchfield";s[e].addons[a][d]=function(a,d){var i=s[e]._c,t=s('<div class="'+i.searchfield+'" />').appendTo(a);"object"!=typeof this.opts.searchfield&&(this.opts.searchfield={}),this.opts.searchfield.add=!0,this.opts.searchfield.addTo=t}}(jQuery); 11367/* 11368 * jQuery mmenu navbar add-on tabs content 11369 * mmenu.frebsite.nl 11370 */ 11371!function(a){var t="mmenu",e="navbars",n="tabs";a[t].addons[e][n]=function(n,s,r){function i(a){c.removeClass(d.navbar+"__tab_selected");var t=c.filter('[href="#'+a.attr("id")+'"]');if(t.length)t.addClass(d.navbar+"__tab_selected");else{var e=a.data(l.parent);e&&e.length&&i(e.closest("."+d.panel))}}var d=a[t]._c,l=a[t]._d,o=a[t]._e,_=this,c=n.children("a");n.addClass(d.navbar+"_tabs").parent().addClass(d.navbars+"_has-tabs"),c.on(o.click+"-"+e,function(t){t.preventDefault();var e=a(this);if(e.hasClass(d.navbar+"__tab_selected"))return void t.stopImmediatePropagation();try{_.__openPanelWoAnimation(a(e.attr("href"))),t.stopImmediatePropagation()}catch(n){}}),this.bind("openPanel:start",i)}}(jQuery); 11372/* 11373 * jQuery mmenu navbar add-on title content 11374 * mmenu.frebsite.nl 11375 */ 11376!function(t){var a="mmenu",e="navbars",n="title";t[a].addons[e][n]=function(n,i){var r,s,l,h=t[a]._c,d=t('<a class="'+h.navbar+'__title" />').appendTo(n);this.bind("openPanel:start",function(t){t.parent("."+h.listitem+"_vertical").length||(l=t.find("."+this.conf.classNames[e].panelTitle),l.length||(l=t.children("."+h.navbar).children("."+h.navbar+"__title")),r=l.attr("href"),s=l.html()||i.title,r?d.attr("href",r):d.removeAttr("href"),d[r||s?"removeClass":"addClass"](h.hidden),d.html(s))});var o;this.bind("openPanel:start:sr-aria",function(t){if(this.opts.screenReader.text&&(o||(o=this.$menu.children("."+h.navbars+"_top, ."+h.navbars+"_bottom").children("."+h.navbar).children("."+h.btn+"_prev")),o.length)){var a=!0;"parent"==this.opts.navbar.titleLink&&(a=!o.hasClass(h.hidden)),this.__sr_aria(d,"hidden",a)}})},t[a].configuration.classNames[e].panelTitle="Title"}(jQuery); 11377/* 11378 * jQuery mmenu Angular wrapper 11379 * mmenu.frebsite.nl 11380 */ 11381!function(e){var n="mmenu",t="angular";e[n].wrappers[t]=function(){this.opts.onClick={close:!0,preventDefault:!1,setSelected:!0}}}(jQuery); 11382/* 11383 * jQuery mmenu Bootstrap 3 wrapper 11384 * mmenu.frebsite.nl 11385 */ 11386!function(n){var a="mmenu",e="bootstrap3";n[a].wrappers[e]=function(){if(this.$menu.hasClass("navbar-collapse")){this.conf.classNames.selected="active",this.conf.classNames.divider="divider",this.conf.clone=!0,this.opts.hooks=this.opts.hooks||{};for(var n="",a=["nav-tabs","nav-pills","navbar-nav"],e=0;e<a.length;e++)if(this.$menu.find("."+a[e]).length){n=a[e];break}n.length&&(this.opts.hooks["initMenu:before"]=function(){"navbar-nav"==n&&this.$menu.wrapInner("<div />")},this.opts.hooks["initMenu:after"]=function(){t.menu.call(this),t.dropdown.call(this),t[n.split("nav
11386-").join("").split("-nav").join("")].call(this)})}};var t={menu:function(){this.$menu.find(".nav").removeClass("nav").end().find(".sr-only").remove().end().find(".divider:empty").remove();for(var n=["role","aria-haspopup","aria-expanded"],a=0;a<n.length;a++)this.$menu.find("["+n[a]+"]").removeAttr(n[a])},dropdown:function(){var a=this.$menu.find(".dropdown");a.removeClass("dropdown"),a.children(".dropdown-toggle").find(".caret").remove().end().each(function(){n(this).replaceWith("<span>"+n(this).html()+"</span>")}),a.children(".dropdown-menu").removeClass("dropdown-menu")},tabs:function(){this.$menu.find(".nav-tabs").removeClass("nav-tabs")},pills:function(){this.$menu.find(".nav-pills").removeClass("nav-pills")},navbar:function(){var n=this;this.$menu.removeClass("collapse navbar-collapse").find('[class*="navbar-"]').removeClass("navbar-left navbar-right navbar-nav navbar-text navbar-btn");var a=this.$menu.find(".navbar-form");this.conf.searchform={form:{action:a.attr("action"),method:a.attr("method")},input:{name:a.find("input").attr("name")},submit:!0},a.remove(),(this.$orig||this.$menu).closest(".navbar").find(".navbar-header").find(".navbar-toggle").off("click").on("click",function(a){n.open(),a.stopImmediatePropagation(),a.preventDefault()})}}}(jQuery); 11387/* 11388 * jQuery mmenu Bootstrap 4 wrapper 11389 * mmenu.frebsite.nl 11390 */ 11391!function(n){function e(e){for(var a=n("<a />"),t=["href","title","target"],r=0;r<t.length;r++)"undefined"!=typeof e.attr(t[r])&&a.attr(t[r],e.attr(t[r]));return a.html(e.html()),a.find(".sr-only").remove(),a}function a(a){var t=n("<ul />");return a.find(".dropdown-item, .dropdown-divider").each(function(){var a=n(this),r=n("<li />");a.hasClass("dropdown-divider")?r.addClass("Divider"):r.append(e(a)),t.append(r)}),t}function t(t){var r=n("<ul />");return t.find(".nav-item").each(function(){var t=n(this),i=n("<li />");if(t.hasClass("active")&&i.addClass("Selected"),!t.hasClass("nav-link")){var o=t.children(".dropdown-menu");o.length&&i.append(a(o)),t=t.children(".nav-link")}i.prepend(e(t)),r.append(i)}),r}var r="mmenu",i="bootstrap4";n[r].wrappers[i]=function(){var e=this;if(this.$menu.hasClass("navbar-collapse")){this.conf.clone=!1;var r=n("<nav />"),i=n("<div />");r.append(i),this.$menu.children().each(function(){var r=n(this);switch(!0){case r.hasClass("navbar-nav"):i.append(t(r));break;case r.hasClass("dropdown-menu"):i.append(a(r));break;case r.hasClass("form-inline"):e.conf.searchfield.form={action:r.attr("action")||null,method:r.attr("method")||null},e.conf.searchfield.input={name:r.find("input").attr("name")||null},e.conf.searchfield.clear=!1,e.conf.searchfield.submit=!0;break;default:i.append(r.clone(!0))}}),this.bind("initMenu:before",function(){r.prependTo("body"),this.$menu=r}),this.$menu.parent().find(".navbar-toggler").removeAttr("data-target").removeAttr("aria-controls").off("click").on("click",function(n){n.preventDefault(),n.stopImmediatePropagation(),e[e.vars.opened?"close":"open"]()})}}}(jQuery); 11392/* 11393 * jQuery mmenu jQuery Mobile wrapper 11394 * mmenu.frebsite.nl 11395 */ 11396!function(e){var n="mmenu",t="jqueryMobile";e[n].wrappers[t]=function(){var n=this;this.opts.onClick.close=!1,this.conf.offCanvas.pageSelector="div.ui-page-active",e("body").on("pagecontainerchange",function(e,t){"function"==typeof n.close&&(n.close(),n.setPage(t.toPage))}),this.bind("initAnchors:after",function(){e("body").on("click",".mm-listview a",function(n){n.isDefaultPrevented()||(n.preventDefault(),e("body").pagecontainer("change",this.href))})})}}(jQuery); 11397/* 11398 * jQuery mmenu Magento wrapper 11399 * mmenu.frebsite.nl 11400 */ 11401!function(e){var n="mmenu",a="magento";e[n].wrappers[a]=function(){this.conf.classNames.selected="active"}}(jQuery); 11402/* 11403 * jQuery mmenu Olark wrapper 11404 * mmenu.frebsite.nl 11405 */ 11406!function(n){var o="mmenu",a="olark";n[o].wrappers[a]=function(){this.conf.offCanvas.noPageSelector.push("#olark")}}(jQuery); 11407/* 11408 * jQuery mmenu Turbolinks wrapper 11409 * mmenu.frebsite.nl 11410 */ 11411!function(n){var t="mmenu",o="turbolinks";n[t].wrappers[o]=function(){var o,r;n(document).on("turbolinks:before-visit",function(){r=n("html"),o=r.attr("class"),o=n.grep(o.split(/\s+/),function(n){return!/mm-/.test(n)}).join(" ")}).on("turbolinks:load",function(){"undefined"!=typeof r&&(r.attr("class",o),n[t].glbl=!1)})}}(jQuery); 11412/* 11413 * jQuery mmenu WordPress wrapper 11414 * mmenu.frebsite.nl 11415 */ 11416!function(s){var e="mmenu",n="wordpress";s[e].wrappers[n]=function(){this.conf.classNames.selected="current-menu-item",s("#wpadminbar").css("position","fixed").addClass("mm-slideout")}}(jQuery); 11417return true; 11418})); 11419/*! 11420 * Bootstrap-select v1.14.0-beta3 (https://github.com/snapappointments/bootstrap-select/blob/main/js/bootstrap-select.js) 11421 * 11422 * Copyright 2012-2022 SnapAppointments, LLC 11423 * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) 11424 */ 11425(function ($) { 11426 'use strict'; 11427 11428 var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; 11429 11430 var uriAttrs = [ 11431 'background', 11432 'cite', 11433 'href', 11434 'itemtype', 11435 'longdesc', 11436 'poster', 11437 'src', 11438 'xlink:href' 11439 ]; 11440 11441 var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 11442 11443 var DefaultWhitelist = { 11444 // Global attributes allowed on any supplied element below. 11445 '*': ['class', 'dir', 'id', 'lang', 'role', 'tabindex', 'style', ARIA_ATTRIBUTE_PATTERN], 11446 a: ['target', 'href', 'title', 'rel'], 11447 area: [], 11448 b: [], 11449 br: [], 11450 col: [], 11451 code: [], 11452 div: [], 11453 em: [], 11454 hr: [], 11455 h1: [], 11456 h2: [], 11457 h3: [], 11458 h4: [], 11459 h5: [], 11460 h6: [], 11461 i: [], 11462 img: ['src', 'alt', 'title', 'width', 'height'], 11463 li: [], 11464 ol: [], 11465 p: [], 11466 pre: [], 11467 s: [], 11468 small: [], 11469 span: [], 11470 sub: [], 11471 sup: [], 11472 strong: [], 11473 u: [], 11474 ul: [] 11475 }; 11476 11477 /** 11478 * A pattern that recognizes a commonly useful subset of URLs that are safe. 11479 * 11480 * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts 11481 */ 11482 var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; 11483 11484 /** 11485 * A pattern that matches safe data URLs. Only matches image, video and audio types. 11486 * 11487 * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts 11488 */ 11489 var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; 11490 11491 var ParseableAttributes = ['title', 'placeholder'];
11491 // attributes to use as settings, can add others in the future 11492 11493 function allowedAttribute (attr, allowedAttributeList) { 11494 var attrName = attr.nodeName.toLowerCase(); 11495 11496 if ($.inArray(attrName, allowedAttributeList) !== -1) { 11497 if ($.inArray(attrName, uriAttrs) !== -1) { 11498 return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); 11499 } 11500 11501 return true; 11502 } 11503 11504 var regExp = $(allowedAttributeList).filter(function (index, value) { 11505 return value instanceof RegExp; 11506 }); 11507 11508 // Check if a regular expression validates the attribute. 11509 for (var i = 0, l = regExp.length; i < l; i++) { 11510 if (attrName.match(regExp[i])) { 11511 return true; 11512 } 11513 } 11514 11515 return false; 11516 } 11517 11518 function sanitizeHtml (unsafeElements, whiteList, sanitizeFn) { 11519 if (sanitizeFn && typeof sanitizeFn === 'function') { 11520 return sanitizeFn(unsafeElements); 11521 } 11522 11523 var whitelistKeys = Object.keys(whiteList); 11524 11525 for (var i = 0, len = unsafeElements.length; i < len; i++) { 11526 var elements = unsafeElements[i].querySelectorAll('*'); 11527 11528 for (var j = 0, len2 = elements.length; j < len2; j++) { 11529 var el = elements[j]; 11530 var elName = el.nodeName.toLowerCase(); 11531 11532 if (whitelistKeys.indexOf(elName) === -1) { 11533 el.parentNode.removeChild(el); 11534 11535 continue; 11536 } 11537 11538 var attributeList = [].slice.call(el.attributes); 11539 var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); 11540 11541 for (var k = 0, len3 = attributeList.length; k < len3; k++) { 11542 var attr = attributeList[k]; 11543 11544 if (!allowedAttribute(attr, whitelistedAttributes)) { 11545 el.removeAttribute(attr.nodeName); 11546 } 11547 } 11548 } 11549 } 11550 } 11551 11552 function getAttributesObject ($select) { 11553 var attributesObject = {}, 11554 attrVal; 11555 11556 ParseableAttributes.forEach(function (item) { 11557 attrVal = $select.attr(item); 11558 if (attrVal) attributesObject[item] = attrVal; 11559 }); 11560 11561 // for backwards compatibility 11562 // (using title as placeholder is deprecated - remove in v2.0.0) 11563 if (!attributesObject.placeholder && attributesObject.title) { 11564 attributesObject.placeholder = attributesObject.title; 11565 } 11566 11567 return attributesObject; 11568 } 11569 11570 // Polyfill for browsers with no classList support 11571 // Remove in v2 11572 if (!('classList' in document.createElement('_'))) { 11573 (function (view) { 11574 if (!('Element' in view)) return; 11575 11576 var classListProp = 'classList', 11577 protoProp = 'prototype', 11578 elemCtrProto = view.Element[protoProp], 11579 objCtr = Object, 11580 classListGetter = function () { 11581 var $elem = $(this); 11582 11583 return { 11584 add: function (classes) { 11585 classes = Array.prototype.slice.call(arguments).join(' ');
11586 return $elem.addClass(classes); 11587 }, 11588 remove: function (classes) { 11589 classes = Array.prototype.slice.call(arguments).join(' '); 11590 return $elem.removeClass(classes); 11591 }, 11592 toggle: function (classes, force) { 11593 return $elem.toggleClass(classes, force); 11594 }, 11595 contains: function (classes) { 11596 return $elem.hasClass(classes); 11597 } 11598 }; 11599 }; 11600 11601 if (objCtr.defineProperty) { 11602 var classListPropDesc = { 11603 get: classListGetter, 11604 enumerable: true, 11605 configurable: true 11606 }; 11607 try { 11608 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); 11609 } catch (ex) { // IE 8 doesn't support enumerable:true 11610 // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36 11611 // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected 11612 if (ex.number === undefined || ex.number === -0x7FF5EC54) { 11613 classListPropDesc.enumerable = false; 11614 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); 11615 } 11616 } 11617 } else if (objCtr[protoProp].__defineGetter__) { 11618 elemCtrProto.__defineGetter__(classListProp, classListGetter); 11619 } 11620 }(window)); 11621 } 11622 11623 var testElement = document.createElement('_'); 11624 11625 testElement.classList.add('c1', 'c2'); 11626 11627 if (!testElement.classList.contains('c2')) { 11628 var _add = DOMTokenList.prototype.add, 11629 _remove = DOMTokenList.prototype.remove; 11630 11631 DOMTokenList.prototype.add = function () { 11632 Array.prototype.forEach.call(arguments, _add.bind(this)); 11633 }; 11634 11635 DOMTokenList.prototype.remove = function () { 11636 Array.prototype.forEach.call(arguments, _remove.bind(this)); 11637 }; 11638 } 11639 11640 testElement.classList.toggle('c3', false); 11641 11642 // Polyfill for IE 10 and Firefox <24, where classList.toggle does not 11643 // support the second argument. 11644 if (testElement.classList.contains('c3')) { 11645 var _toggle = DOMTokenList.prototype.toggle; 11646 11647 DOMTokenList.prototype.toggle = function (token, force) { 11648 if (1 in arguments && !this.contains(token) === !force) { 11649 return force; 11650 } else { 11651 return _toggle.call(this, token); 11652 } 11653 }; 11654 } 11655 11656 testElement = null; 11657 11658 // Polyfill for IE (remove in v2) 11659 Object.values = typeof Object.values === 'function' ? Object.values : function (obj) { 11660 return Object.keys(obj).map(function (key) { 11661 return obj[key]; 11662 }); 11663 }; 11664 11665 // shallow array comparison 11666 function isEqual (array1, array2) { 11667 return array1.length === array2.length && array1.every(function (element, index) { 11668 return element === array2[index]; 11669 }); 11670 }; 11671 11672 // <editor-fold desc="Shims"> 11673 if (!String.prototype.startsWith) { 11674 (function () { 11675 'use strict'; // needed to support `apply`/`call` with `undefined`/`null` 11676 var toString = {}.toString; 11677 var startsWith = function (search) { 11678 if (this == null) { 11679 throw new TypeError(); 11680 } 11681 var string = String(this); 11682 if (search && toString.call(search) == '[object RegExp]') { 11683 throw new TypeError(); 11684 } 11685 var stringLength = string.length; 11686 var searchString = String(search); 11687 var searchLength = searchString.length; 11688 var position = arguments.length > 1 ? arguments[1] : undefined; 11689 // `ToInteger` 11690 var pos = position ? Number(position) : 0; 11691 if (pos != pos) { // better `isNaN` 11692 pos = 0; 11693 } 11694 var start = Math.min(Math.max(pos, 0), stringLength); 11695 // Avoid the `indexOf` call if no match is possible 11696 if (searchLength + start > stringLength) { 11697 return false; 11698 } 11699 var index = -1; 11700 while (++index < searchLength) { 11701 if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) { 11702 return false; 11703 } 11704 } 11705 return true; 11706 }; 11707 if (Object.defineProperty) { 11708 Object.defineProperty(String.prototype, 'startsWith', { 11709 'value': startsWith, 11710 'configurable': true, 11711 'writable': true 11712 }); 11713 } else { 11714 String.prototype.startsWith = startsWith; 11715 } 11716 }()); 11717 } 11718 11719 function toKebabCase (str) { 11720 return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, function ($, ofs) { 11721 return (ofs ? '-' : '') + $.toLowerCase(); 11722 }); 11723 } 11724 11725 function getSelectedOptions () { 11726 var options = this.selectpicker.main.data; 11727 11728 if (this.options.source.data || this.options.source.search) { 11729 options = Object.values(this.selectpicker.optionValuesDataMap); 11730 } 11731 11732 var selectedOptions = options.filter(function (item) { 11733 if (item.selected) { 11734 if (this.options.hideDisabled && item.disabled) return false; 11735 return true; 11736 } 11737 11738 return false; 11739 }, this); 11740 11741 // ensure only 1 option is selected if multiple are set in the data source 11742 if (this.options.source.data && !this.multiple && selectedOptions.length > 1) { 11743 for (var i = 0; i < selectedOptions.length - 1; i++) { 11744 selectedOptions[i].selected = false; 11745 } 11746 11747 selectedOptions = [ selectedOptions[selectedOptions.length - 1] ]; 11748 } 11749 11750 return selectedOptions; 11751 } 11752 11753 // much faster than $.val() 11754 function getSelectValues (selectedOptions) { 11755 var value = [], 11756 options = selectedOptions || getSelectedOptions.call(this), 11757 opt; 11758 11759 for (var i = 0, len = options.length; i < len; i++) { 11760 opt = options[i]; 11761 11762 if (!opt.disabled) { 11763 value.push(opt.value === undefined ? opt.text : opt.value); 11764 } 11765 } 11766 11767 if (!this.multiple) { 11768 return !value.length ? null : value[0]; 11769 } 11770 11771 return value; 11772 } 11773 11774 // set data-selected on select element if the value has been programmatically selected 11775 // prior to initialization of bootstrap-select 11776 // * consider removing or replacing an alternative method * 11777 var valHooks = { 11778 useDefault: false, 11779 _set: $.valHooks.select.set 11780 }; 11781 11782 $.valHooks.select.set = function (elem, value) { 11783 if (value && !valHooks.useDefault) $(elem).data('selected', true); 11784 11785 return valHooks._set.apply(this, arguments); 11786 }; 11787 11788 var changedArguments = null; 11789 11790 var EventIsSupported = (function () { 11791 try { 11792 new Event('change'); 11793 return true; 11794 } catch (e) { 11795 return false; 11796 } 11797 })(); 11798 11799 $.fn.triggerNative = function (eventName) { 11800 var el = this[0], 11801 event; 11802 11803 if (el.dispatchEvent) { // for modern browsers & IE9+ 11804 if (EventIsSupported) { 11805 // For modern browsers 11806 event = new Event(eventName, { 11807 bubbles: true 11808 }); 11809 } else { 11810 // For IE since it doesn't support Event constructor 11811 event = document.createEvent('Event'); 11812 event.initEvent(eventName, true, false); 11813 } 11814 11815 el.dispatchEvent(event); 11816 } 11817 }; 11818 // </editor-fold> 11819 11820 function stringSearch (li, searchString, method, normalize) { 11821 var stringTypes = [ 11822 'display', 11823 'subtext', 11824 'tokens' 11825 ], 11826 searchSuccess = false; 11827 11828 for (var i = 0; i < stringTypes.length; i++) { 11829 var stringType = stringTypes[i],
11830 string = li[stringType]; 11831 11832 if (string) { 11833 string = string.toString(); 11834 11835 // Strip HTML tags. This isn't perfect, but it's much faster than any other method 11836 if (stringType === 'display') { 11837 string = string.replace(/<[^>]+>/g, ''); 11838 } 11839 11840 if (normalize) string = normalizeToBase(string); 11841 string = string.toUpperCase(); 11842 11843 if (typeof method === 'function') { 11844 searchSuccess = method(string, searchString); 11845 } else if (method === 'contains') { 11846 searchSuccess = string.indexOf(searchString) >= 0; 11847 } else { 11848 searchSuccess = string.startsWith(searchString); 11849 } 11850 11851 if (searchSuccess) break; 11852 } 11853 } 11854 11855 return searchSuccess; 11856 } 11857 11858 function toInteger (value) { 11859 return parseInt(value, 10) || 0; 11860 } 11861 11862 // Borrowed from Lodash (_.deburr) 11863 /** Used to map Latin Unicode letters to basic Latin letters. */ 11864 var deburredLetters = { 11865 // Latin-1 Supplement block. 11866 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', 11867 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', 11868 '\xc7': 'C', '\xe7': 'c', 11869 '\xd0': 'D', '\xf0': 'd', 11870 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', 11871 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', 11872 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', 11873 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', 11874 '\xd1': 'N', '\xf1': 'n', 11875 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', 11876 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', 11877 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', 11878 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', 11879 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', 11880 '\xc6': 'Ae', '\xe6': 'ae', 11881 '\xde': 'Th', '\xfe': 'th', 11882 '\xdf': 'ss', 11883 // Latin Extended-A block. 11884 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', 11885 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', 11886 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', 11887 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', 11888 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', 11889 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', 11890 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', 11891 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', 11892 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', 11893 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', 11894 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', 11895 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', 11896 '\u0134': 'J', '\u0135': 'j', 11897 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', 11898 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', 11899 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', 11900 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', 11901 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', 11902 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', 11903 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', 11904 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', 11905 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', 11906 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', 11907 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', 11908 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', 11909 '\u0163': 't', '\u0165': 't', '\u0167': 't', 11910 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', 11911 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', 11912 '\u0174': 'W', '\u0175': 'w', 11913 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', 11914 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', 11915 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', 11916 '\u0132': 'IJ', '\u0133': 'ij', 11917 '\u0152': 'Oe', '\u0153': 'oe', 11918 '\u0149': "'n", '\u017f': 's' 11919 }; 11920 11921 /** Used to match Latin Unicode letters (excluding mathematical operators). */
vendor: 10,276 bytes, lines 11922-12234
11922 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; 11923 11924 /** Used to compose unicode character classes. */ 11925 var rsComboMarksRange = '\\u0300-\\u036f', 11926 reComboHalfMarksRange = '\\ufe20-\\ufe2f', 11927 rsComboSymbolsRange = '\\u20d0-\\u20ff', 11928 rsComboMarksExtendedRange = '\\u1ab0-\\u1aff', 11929 rsComboMarksSupplementRange = '\\u1dc0-\\u1dff', 11930 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange; 11931 11932 /** Used to compose unicode capture groups. */ 11933 var rsCombo = '[' + rsComboRange + ']'; 11934 11935 /** 11936 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and 11937 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). 11938 */ 11939 var reComboMark = RegExp(rsCombo, 'g'); 11940 11941 function deburrLetter (key) { 11942 return deburredLetters[key]; 11943 }; 11944 11945 function normalizeToBase (string) { 11946 string = string.toString(); 11947 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); 11948 } 11949 11950 // List of HTML entities for escaping. 11951 var escapeMap = { 11952 '&': '&', 11953 '<': '<', 11954 '>': '>', 11955 '"': '"', 11956 "'": ''', 11957 '`': '`' 11958 }; 11959 11960 // Functions for escaping and unescaping strings to/from HTML interpolation. 11961 var createEscaper = function (map) { 11962 var escaper = function (match) { 11963 return map[match]; 11964 }; 11965 // Regexes for identifying a key that needs to be escaped. 11966 var source = '(?:' + Object.keys(map).join('|') + ')'; 11967 var testRegexp = RegExp(source); 11968 var replaceRegexp = RegExp(source, 'g'); 11969 return function (string) { 11970 string = string == null ? '' : '' + string; 11971 return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; 11972 }; 11973 }; 11974 11975 var htmlEscape = createEscaper(escapeMap); 11976 11977 /** 11978 * ------------------------------------------------------------------------ 11979 * Constants 11980 * ------------------------------------------------------------------------ 11981 */ 11982 11983 var keyCodeMap = { 11984 32: ' ', 11985 48: '0', 11986 49: '1', 11987 50: '2', 11988 51: '3', 11989 52: '4', 11990 53: '5', 11991 54: '6', 11992 55: '7', 11993 56: '8', 11994 57: '9', 11995 59: ';', 11996 65: 'A', 11997 66: 'B', 11998 67: 'C', 11999 68: 'D', 12000 69: 'E', 12001 70: 'F', 12002 71: 'G', 12003 72: 'H', 12004 73: 'I', 12005 74: 'J', 12006 75: 'K', 12007 76: 'L', 12008 77: 'M', 12009 78: 'N', 12010 79: 'O', 12011 80: 'P', 12012 81: 'Q', 12013 82: 'R', 12014 83: 'S', 12015 84: 'T', 12016 85: 'U', 12017 86: 'V', 12018 87: 'W', 12019 88: 'X', 12020 89: 'Y', 12021 90: 'Z', 12022 96: '0', 12023 97: '1', 12024 98: '2', 12025 99: '3', 12026 100: '4', 12027 101: '5', 12028 102: '6', 12029 103: '7', 12030 104: '8', 12031 105: '9' 12032 }; 12033 12034 var keyCodes = { 12035 ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key 12036 ENTER: 13, // KeyboardEvent.which value for Enter key 12037 SPACE: 32, // KeyboardEvent.which value for space key 12038 TAB: 9, // KeyboardEvent.which value for tab key 12039 ARROW_UP: 38, // KeyboardEvent.which value for up arrow key 12040 ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key 12041 }; 12042 12043 // eslint-disable-next-line no-undef 12044 var Dropdown = window.Dropdown || bootstrap.Dropdown; 12045 12046 function getVersion () { 12047 var version; 12048 12049 try { 12050 version = $.fn.dropdown.Constructor.VERSION; 12051 } catch (err) { 12052 version = Dropdown.VERSION; 12053 } 12054 12055 return version; 12056 } 12057 12058 var version = { 12059 success: false, 12060 major: '3' 12061 }; 12062 12063 try { 12064 version.full = (getVersion() || '').split(' ')[0].split('.'); 12065 version.major = version.full[0]; 12066 version.success = true; 12067 } catch (err) { 12068 // do nothing 12069 } 12070 12071 var selectId = 0; 12072 12073 var EVENT_KEY = '.bs.select'; 12074 12075 var classNames = { 12076 DISABLED: 'disabled', 12077 DIVIDER: 'divider', 12078 SHOW: 'open', 12079 DROPUP: 'dropup', 12080 MENU: 'dropdown-menu', 12081 MENURIGHT: 'dropdown-menu-right', 12082 MENULEFT: 'dropdown-menu-left', 12083 // to-do: replace with more advanced template/customization options 12084 BUTTONCLASS: 'btn-default', 12085 POPOVERHEADER: 'popover-title', 12086 ICONBASE: 'glyphicon', 12087 TICKICON: 'glyphicon-ok' 12088 }; 12089 12090 var Selector = { 12091 MENU: '.' + classNames.MENU, 12092 DATA_TOGGLE: 'data-toggle="dropdown"' 12093 }; 12094 12095 var elementTemplates = { 12096 div: document.createElement('div'), 12097 span: document.createElement('span'), 12098 i: document.createElement('i'), 12099 subtext: document.createElement('small'), 12100 a: document.createElement('a'), 12101 li: document.createElement('li'), 12102 whitespace: document.createTextNode('\u00A0'), 12103 fragment: document.createDocumentFragment(), 12104 option: document.createElement('option') 12105 }; 12106 12107 elementTemplates.selectedOption = elementTemplates.option.cloneNode(false); 12108 elementTemplates.selectedOption.setAttribute('selected', true); 12109 12110 elementTemplates.noResults = elementTemplates.li.cloneNode(false); 12111 elementTemplates.noResults.className = 'no-results'; 12112 12113 elementTemplates.a.setAttribute('role', 'option'); 12114 elementTemplates.a.className = 'dropdown-item'; 12115 12116 elementTemplates.subtext.className = 'text-muted'; 12117 12118 elementTemplates.text = elementTemplates.span.cloneNode(false); 12119 elementTemplates.text.className = 'text'; 12120 12121 elementTemplates.checkMark = elementTemplates.span.cloneNode(false); 12122 12123 var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN); 12124 var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE); 12125 12126 var generateOption = { 12127 li: function (content, classes, optgroup) { 12128 var li = elementTemplates.li.cloneNode(false); 12129 12130 if (content) { 12131 if (content.nodeType === 1 || content.nodeType === 11) { 12132 li.appendChild(content); 12133 } else { 12134 li.innerHTML = content; 12135 } 12136 } 12137 12138 if (typeof classes !== 'undefined' && classes !== '') li.className = classes; 12139 if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup); 12140 12141 return li; 12142 }, 12143 12144 a: function (text, classes, inline) { 12145 var a = elementTemplates.a.cloneNode(true); 12146 12147 if (text) { 12148 if (text.nodeType === 11) { 12149 a.appendChild(text); 12150 } else { 12151 a.insertAdjacentHTML('beforeend', text); 12152 } 12153 } 12154 12155 if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\s+/)); 12156 if (inline) a.setAttribute('style', inline); 12157 12158 return a; 12159 }, 12160 12161 text: function (options, useFragment) { 12162 var textElement = elementTemplates.text.cloneNode(false), 12163 subtextElement, 12164 iconElement; 12165 12166 if (options.content) { 12167 textElement.innerHTML = options.content; 12168 } else { 12169 textElement.textContent = options.text; 12170 12171 if (options.icon) { 12172 var whitespace = elementTemplates.whitespace.cloneNode(false); 12173 12174 // need to use <i> for icons in the button to prevent a breaking change 12175 // note: switch to span in next major release 12176 iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false); 12177 iconElement.className = this.options.iconBase + ' ' + options.icon; 12178 12179 elementTemplates.fragment.appendChild(iconElement); 12180 elementTemplates.fragment.appendChild(whitespace); 12181 } 12182 12183 if (options.subtext) { 12184 subtextElement = elementTemplates.subtext.cloneNode(false); 12185 subtextElement.textContent = options.subtext; 12186 textElement.appendChild(subtextElement); 12187 } 12188 } 12189 12190 if (useFragment === true) { 12191 while (textElement.childNodes.length > 0) { 12192 elementTemplates.fragment.appendChild(textElement.childNodes[0]); 12193 } 12194 } else { 12195 elementTemplates.fragment.appendChild(textElement); 12196 } 12197 12198 return elementTemplates.fragment; 12199 }, 12200 12201 label: function (options) { 12202 var textElement = elementTemplates.text.cloneNode(false), 12203 subtextElement, 12204 iconElement; 12205 12206 textElement.innerHTML = options.display; 12207 12208 if (options.icon) { 12209 var whitespace = elementTemplates.whitespace.cloneNode(false); 12210 12211 iconElement = elementTemplates.span.cloneNode(false); 12212 iconElement.className = this.options.iconBase + ' ' + options.icon; 12213 12214 elementTemplates.fragment.appendChild(iconElement); 12215 elementTemplates.fragment.appendChild(whitespace); 12216 } 12217 12218 if (options.subtext) { 12219 subtextElement = elementTemplates.subtext.cloneNode(false); 12220 subtextElement.textContent = options.subtext; 12221 textElement.appendChild(subtextElement); 12222 } 12223 12224 elementTemplates.fragment.appendChild(textElement); 12225 12226 return elementTemplates.fragment; 12227 } 12228 }; 12229 12230 var getOptionData = { 12231 fromOption: function (option, type) { 12232 var value; 12233 12234 switch (type) {
12235 case 'divider': 12236 value = option.getAttribute('data-divider') === 'true'; 12237 break; 12238 12239 case 'text': 12240 value = option.textContent; 12241 break; 12242 12243 case 'label': 12244 value = option.label; 12245 break; 12246 12247 case 'style': 12248 value = option.style.cssText; 12249 break; 12250 12251 case 'title': 12252 value = option.title; 12253 break; 12254 12255 default: 12256 value = option.getAttribute('data-' + toKebabCase(type)); 12257 break; 12258 } 12259 12260 return value; 12261 }, 12262 fromDataSource: function (option, type) { 12263 var value; 12264 12265 switch (type) { 12266 case 'text': 12267 case 'label': 12268 value = option.text || option.value || ''; 12269 break; 12270 12271 default: 12272 value = option[type]; 12273 break; 12274 } 12275 12276 return value; 12277 } 12278 }; 12279 12280 function showNoResults (searchMatch, searchValue) { 12281 if (!searchMatch.length) { 12282 elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '"' + htmlEscape(searchValue) + '"'); 12283 this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults); 12284 } 12285 } 12286 12287 function filterHidden (item) { 12288 return !(item.hidden || this.options.hideDisabled && item.disabled); 12289 } 12290 12291 var Selectpicker = function (element, options) { 12292 var that = this; 12293 12294 // bootstrap-select has been initialized - revert valHooks.select.set back to its original function 12295 if (!valHooks.useDefault) { 12296 $.valHooks.select.set = valHooks._set; 12297 valHooks.useDefault = true; 12298 } 12299 12300 this.$element = $(element); 12301 this.$newElement = null; 12302 this.$button = null; 12303 this.$menu = null; 12304 this.options = options; 12305 this.selectpicker = { 12306 main: { 12307 data: [], 12308 optionQueue: elementTemplates.fragment.cloneNode(false), 12309 hasMore: false 12310 }, 12311 search: { 12312 data: [], 12313 hasMore: false 12314 }, 12315 current: {}, // current is either equal to main or search depending on if a search is in progress 12316 view: {}, 12317 // map of option values and their respective data (only used in conjunction with options.source) 12318 optionValuesDataMap: {}, 12319 isSearching: false, 12320 keydown: { 12321 keyHistory: '', 12322 resetKeyHistory: { 12323 start: function () { 12324 return setTimeout(function () { 12325 that.selectpicker.keydown.keyHistory = ''; 12326 }, 800); 12327 } 12328 } 12329 } 12330 }; 12331 12332 this.sizeInfo = {}; 12333 12334 // Format window padding 12335 var winPad = this.options.windowPadding; 12336 if (typeof winPad === 'number') { 12337 this.options.windowPadding = [winPad, winPad, winPad, winPad]; 12338 } 12339 12340 // Expose public methods 12341 this.val = Selectpicker.prototype.val; 12342 this.render = Selectpicker.prototype.render; 12343 this.refresh = Selectpicker.prototype.refresh; 12344 this.setStyle = Selectpicker.prototype.setStyle; 12345 this.selectAll = Selectpicker.prototype.selectAll; 12346 this.deselectAll = Selectpicker.prototype.deselectAll; 12347 this.destroy = Selectpicker.prototype.destroy; 12348 this.remove = Selectpicker.prototype.remove; 12349 this.show = Selectpicker.prototype.show; 12350 this.hide = Selectpicker.prototype.hide; 12351 12352 this.init(); 12353 }; 12354 12355 Selectpicker.VERSION = '1.14.0-beta3'; 12356 12357 // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both. 12358 Selectpicker.DEFAULTS = { 12359 noneSelectedText: 'Nothing selected', 12360 noneResultsText: 'No results matched {0}', 12361 countSelectedText: function (numSelected, numTotal) { 12362 return (numSelected == 1) ? '{0} item selected' : '{0} items selected'; 12363 }, 12364 maxOptionsText: function (numAll, numGroup) { 12365 return [ 12366 (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', 12367 (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)' 12368 ]; 12369 }, 12370 selectAllText: 'Select All', 12371 deselectAllText: 'Deselect All', 12372 source: { 12373 pageSize: 40 12374 }, 12375 chunkSize: 40,
12376 doneButton: false, 12377 doneButtonText: 'Close', 12378 multipleSeparator: ', ', 12379 styleBase: 'btn', 12380 style: classNames.BUTTONCLASS, 12381 size: 'auto', 12382 title: null, 12383 placeholder: null, 12384 allowClear: false, 12385 selectedTextFormat: 'values', 12386 width: false, 12387 container: false, 12388 hideDisabled: false, 12389 showSubtext: false, 12390 showIcon: true, 12391 showContent: true, 12392 dropupAuto: true, 12393 header: false, 12394 liveSearch: false, 12395 liveSearchPlaceholder: null, 12396 liveSearchNormalize: false, 12397 liveSearchStyle: 'contains', 12398 actionsBox: false, 12399 iconBase: classNames.ICONBASE, 12400 tickIcon: classNames.TICKICON, 12401 showTick: false, 12402 template: { 12403 caret: '<span class="caret"></span>' 12404 }, 12405 maxOptions: false, 12406 mobile: false, 12407 selectOnTab: true, 12408 dropdownAlignRight: false, 12409 windowPadding: 0, 12410 virtualScroll: 600, 12411 display: false, 12412 sanitize: true, 12413 sanitizeFn: null, 12414 whiteList: DefaultWhitelist 12415 }; 12416 12417 Selectpicker.prototype = { 12418 12419 constructor: Selectpicker, 12420 12421 init: function () { 12422 var that = this, 12423 id = this.$element.attr('id'), 12424 element = this.$element[0], 12425 form = element.form; 12426 12427 selectId++; 12428 this.selectId = 'bs-select-' + selectId; 12429 12430 element.classList.add('bs-select-hidden'); 12431 12432 this.multiple = this.$element.prop('multiple'); 12433 this.autofocus = this.$element.prop('autofocus'); 12434 12435 if (element.classList.contains('show-tick')) { 12436 this.options.showTick = true; 12437 } 12438 12439 this.$newElement = this.createDropdown(); 12440 12441 this.$element 12442 .after(this.$newElement) 12443 .prependTo(this.$newElement); 12444 12445 // ensure select is associated with form element if it got unlinked after moving it inside newElement 12446 if (form && element.form === null) { 12447 if (!form.id) form.id = 'form-' + this.selectId; 12448 element.setAttribute('form', form.id); 12449 } 12450 12451 this.$button = this.$newElement.children('button'); 12452 if (this.options.allowClear) this.$clearButton = this.$button.children('.bs-select-clear-selected'); 12453 this.$menu = this.$newElement.children(Selector.MENU); 12454 this.$menuInner = this.$menu.children('.inner'); 12455 this.$searchbox = this.$menu.find('input'); 12456 12457 element.classList.remove('bs-select-hidden'); 12458 12459 this.fetchData(function () { 12460 that.render(true); 12461 that.buildList(); 12462 12463 requestAnimationFrame(function () { 12464 that.$element.trigger('loaded' + EVENT_KEY); 12465 }); 12466 }); 12467 12468 if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT); 12469 12470 if (typeof id !== 'undefined') { 12471 this.$button.attr('data-id', id); 12472 } 12473 12474 this.checkDisabled(); 12475 this.clickListener(); 12476 12477 if (version.major > 4) this.dropdown = new Dropdown(this.$button[0]); 12478 12479 if (this.options.liveSearch) { 12480 this.liveSearchListener(); 12481 this.focusedParent = this.$searchbox[0]; 12482 } else { 12483 this.focusedParent = this.$menuInner[0]; 12484 } 12485 12486 this.setStyle(); 12487 this.setWidth(); 12488 if (this.options.container) { 12489 this.selectPosition(); 12490 } else { 12491 this.$element.on('hide' + EVENT_KEY, function () { 12492 if (that.isVirtual()) { 12493 // empty menu on close 12494 var menuInner = that.$menuInner[0], 12495 emptyMenu = menuInner.firstChild.cloneNode(false); 12496 12497 // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = '' 12498 menuInner.replaceChild(emptyMenu, menuInner.firstChild); 12499 menuInner.scrollTop = 0; 12500 } 12501 }); 12502 } 12503 this.$menu.data('this', this); 12504 this.$newElement.data('this', this); 12505 if (this.options.mobile) this.mobile(); 12506 12507 this.$newElement.on({ 12508 'hide.bs.dropdown': function (e) { 12509 that.$element.trigger('hide' + EVENT_KEY, e); 12510 }, 12511 'hidden.bs.dropdown': function (e) { 12512 that.$element.trigger('hidden' + EVENT_KEY, e); 12513 }, 12514 'show.bs.dropdown': function (e) {
vendor: 23,062 bytes, lines 12515-12990
12515 that.$element.trigger('show' + EVENT_KEY, e); 12516 }, 12517 'shown.bs.dropdown': function (e) { 12518 that.$element.trigger('shown' + EVENT_KEY, e); 12519 } 12520 }); 12521 12522 if (element.hasAttribute('required')) { 12523 this.$element.on('invalid' + EVENT_KEY, function () { 12524 that.$button[0].classList.add('bs-invalid'); 12525 12526 that.$element 12527 .on('shown' + EVENT_KEY + '.invalid', function () { 12528 that.$element 12529 .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened 12530 .off('shown' + EVENT_KEY + '.invalid'); 12531 }) 12532 .on('rendered' + EVENT_KEY, function () { 12533 // if select is no longer invalid, remove the bs-invalid class 12534 if (this.validity.valid) that.$button[0].classList.remove('bs-invalid'); 12535 that.$element.off('rendered' + EVENT_KEY); 12536 }); 12537 12538 that.$button.on('blur' + EVENT_KEY, function () { 12539 that.$element.trigger('focus').trigger('blur'); 12540 that.$button.off('blur' + EVENT_KEY); 12541 }); 12542 }); 12543 } 12544 12545 if (form) { 12546 $(form).on('reset' + EVENT_KEY, function () { 12547 requestAnimationFrame(function () { 12548 that.render(); 12549 }); 12550 }); 12551 } 12552 }, 12553 12554 createDropdown: function () { 12555 // Options 12556 // If we are multiple or showTick option is set, then add the show-tick class 12557 var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '', 12558 multiselectable = this.multiple ? ' aria-multiselectable="true"' : '', 12559 inputGroup = '', 12560 autofocus = this.autofocus ? ' autofocus' : ''; 12561 12562 if (version.major < 4 && this.$element.parent().hasClass('input-group')) { 12563 inputGroup = ' input-group-btn'; 12564 } 12565 12566 // Elements 12567 var drop, 12568 header = '', 12569 searchbox = '', 12570 actionsbox = '', 12571 donebutton = '', 12572 clearButton = ''; 12573 12574 if (this.options.header) { 12575 header = 12576 '<div class="' + classNames.POPOVERHEADER + '">' + 12577 '<button type="button" class="close" aria-hidden="true">×</button>' + 12578 this.options.header + 12579 '</div>'; 12580 } 12581 12582 if (this.options.liveSearch) { 12583 searchbox = 12584 '<div class="bs-searchbox">' + 12585 '<input type="search" class="form-control" autocomplete="off"' + 12586 ( 12587 this.options.liveSearchPlaceholder === null ? '' 12588 : 12589 ' placeholder="' + htmlEscape(this.options.liveSearchPlaceholder) + '"' 12590 ) + 12591 ' role="combobox" aria-label="Search" aria-controls="' + this.selectId + '" aria-autocomplete="list">' + 12592 '</div>'; 12593 } 12594 12595 if (this.multiple && this.options.actionsBox) { 12596 actionsbox = 12597 '<div class="bs-actionsbox">' + 12598 '<div class="btn-group btn-group-sm">' + 12599 '<button type="button" class="actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '">' + 12600 this.options.selectAllText + 12601 '</button>' + 12602 '<button type="button" class="actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '">' + 12603 this.options.deselectAllText + 12604 '</button>' + 12605 '</div>' + 12606 '</div>'; 12607 } 12608 12609 if (this.multiple && this.options.doneButton) { 12610 donebutton = 12611 '<div class="bs-donebutton">' + 12612 '<div class="btn-group">' + 12613 '<button type="button" class="btn btn-sm ' + classNames.BUTTONCLASS + '">' + 12614 this.options.doneButtonText + 12615 '</button>' + 12616 '</div>' + 12617 '</div>'; 12618 } 12619 12620 if (this.options.allowClear) { 12621 clearButton = '<span class="close bs-select-clear-selected" title="' + this.options.deselectAllText + '"><span>×</span>'; 12622 } 12623 12624 drop = 12625 '<div class="dropdown bootstrap-select' + showTick + inputGroup + '">' + 12626 '<button type="button" tabindex="-1" class="' + 12627 this.options.styleBase + 12628 ' dropdown-toggle" ' + 12629 (this.options.display === 'static' ? 'data-display="static"' : '') + 12630 Selector.DATA_TOGGLE + 12631 autofocus + 12632 ' role="combobox" aria-owns="' + 12633 this.selectId + 12634 '" aria-haspopup="listbox" aria-expanded="false">' + 12635 '<div class="filter-option">' + 12636 '<div class="filter-option-inner">' + 12637 '<div class="filter-option-inner-inner"> </div>' + 12638 '</div> ' + 12639 '</div>' + 12640 clearButton + 12641 '</span>' + 12642 ( 12643 version.major >= '4' ? '' 12644 : 12645 '<span class="bs-caret">' + 12646 this.options.template.caret + 12647 '</span>' 12648 ) + 12649 '</button>' + 12650 '<div class="' + classNames.MENU + ' ' + (version.major >= '4' ? '' : classNames.SHOW) + '">' + 12651 header + 12652 searchbox + 12653 actionsbox + 12654 '<div class="inner ' + classNames.SHOW + '" role="listbox" id="' + this.selectId + '" tabindex="-1" ' + multiselectable + '>' + 12655 '<ul class="' + classNames.MENU + ' inner ' + (version.major >= '4' ? classNames.SHOW : '') + '" role="presentation">' + 12656 '</ul>' + 12657 '</div>' + 12658 donebutton + 12659 '</div>' + 12660 '</div>'; 12661 12662 return $(drop); 12663 }, 12664 12665 setPositionData: function () { 12666 this.selectpicker.view.canHighlight = []; 12667 this.selectpicker.view.size = 0; 12668 this.selectpicker.view.firstHighlightIndex = false; 12669 12670 for (var i = 0; i < this.selectpicker.current.data.length; i++) { 12671 var li = this.selectpicker.current.data[i], 12672 canHighlight = true; 12673 12674 if (li.type === 'divider') { 12675 canHighlight = false; 12676 li.height = this.sizeInfo.dividerHeight; 12677 } else if (li.type === 'optgroup-label') { 12678 canHighlight = false; 12679 li.height = this.sizeInfo.dropdownHeaderHeight; 12680 } else { 12681 li.height = this.sizeInfo.liHeight; 12682 } 12683 12684 if (li.disabled) canHighlight = false; 12685 12686 this.selectpicker.view.canHighlight.push(canHighlight); 12687 12688 if (canHighlight) { 12689 this.selectpicker.view.size++; 12690 li.posinset = this.selectpicker.view.size; 12691 if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i; 12692 } 12693 12694 li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height; 12695 } 12696 }, 12697 12698 isVirtual: function () { 12699 return (this.options.virtualScroll !== false) && (this.selectpicker.main.data.length >= this.options.virtualScroll) || this.options.virtualScroll === true; 12700 }, 12701 12702 createView: function (isSearching, setSize, refresh) { 12703 var that = this, 12704 scrollTop = 0; 12705 12706 this.selectpicker.isSearching = isSearching; 12707 this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main; 12708 12709 this.setPositionData(); 12710 12711 if (setSize) { 12712 if (refresh) { 12713 scrollTop = this.$menuInner[0].scrollTop; 12714 } else if (!that.multiple) { 12715 var element = that.$element[0], 12716 selectedIndex = (element.options[element.selectedIndex] || {}).liIndex; 12717 12718 if (typeof selectedIndex === 'number' && that.options.size !== false) { 12719 var selectedData = that.selectpicker.main.data[selectedIndex], 12720 position = selectedData && selectedData.position; 12721 12722 if (position) { 12723 scrollTop = position - ((that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2); 12724 } 12725 } 12726 } 12727 } 12728 12729 scroll(scrollTop, true); 12730 12731 this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) { 12732 if (!that.noScroll) scroll(this.scrollTop, updateValue); 12733 that.noScroll = false; 12734 }); 12735 12736 function scroll (scrollTop, init) { 12737 var size = that.selectpicker.current.data.length, 12738 chunks = [], 12739 chunkSize, 12740 chunkCount, 12741 firstChunk, 12742 lastChunk, 12743 currentChunk, 12744 prevPositions, 12745 positionIsDifferent, 12746 previousElements, 12747 menuIsDifferent = true, 12748 isVirtual = that.isVirtual(); 12749 12750 that.selectpicker.view.scrollTop = scrollTop; 12751 12752 chunkSize = that.options.chunkSize; // number of options in a chunk 12753 chunkCount = Math.ceil(size / chunkSize) || 1; // number of chunks 12754 12755 for (var i = 0; i < chunkCount; i++) { 12756 var endOfChunk = (i + 1) * chunkSize; 12757 12758 if (i === chunkCount - 1) { 12759 endOfChunk = size; 12760 } 12761 12762 chunks[i] = [ 12763 (i) * chunkSize + (!i ? 0 : 1), 12764 endOfChunk 12765 ]; 12766 12767 if (!size) break; 12768 12769 if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) { 12770 currentChunk = i; 12771 } 12772 } 12773 12774 if (currentChunk === undefined) currentChunk = 0; 12775 12776 prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; 12777 12778 // always display previous, current, and next chunks 12779 firstChunk = Math.max(0, currentChunk - 1); 12780 lastChunk = Math.min(chunkCount - 1, currentChunk + 1); 12781 12782 that.selectpicker.view.position0 = isVirtual === false ? 0 : (Math.max(0, chunks[firstChunk][0]) || 0); 12783 that.selectpicker.view.position1 = isVirtual === false ? size : (Math.min(size, chunks[lastChunk][1]) || 0); 12784 12785 positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1; 12786 12787 if (that.activeElement !== undefined) { 12788 if (init) { 12789 if (that.activeElement !== that.selectedElement) { 12790 that.defocusItem(that.activeElement); 12791 } 12792 that.activeElement = undefined; 12793 } 12794 12795 if (that.activeElement !== that.selectedElement) { 12796 that.defocusItem(that.selectedElement); 12797 } 12798 } 12799 12800 if (that.prevActiveElement !== undefined && that.prevActiveElement !== that.activeElement && that.prevActiveElement !== that.selectedElement) { 12801 that.defocusItem(that.prevActiveElement); 12802 } 12803 12804 if (init || positionIsDifferent || that.selectpicker.current.hasMore) { 12805 previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : []; 12806 12807 if (isVirtual === false) { 12808 that.selectpicker.view.visibleElements = that.selectpicker.current.elements; 12809 } else { 12810 that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1); 12811 } 12812 12813 that.setOptionStatus(); 12814 12815 // if searching, check to make sure the list has actually been updated before updating DOM 12816 // this prevents unnecessary repaints 12817 if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); 12818 12819 // if virtual scroll is disabled and not searching, 12820 // menu should never need to be updated more than once 12821 if ((init || isVirtual === true) && menuIsDifferent) { 12822 var menuInner = that.$menuInner[0], 12823 menuFragment = document.createDocumentFragment(), 12824 emptyMenu = menuInner.firstChild.cloneNode(false), 12825 marginTop, 12826 marginBottom, 12827 elements = that.selectpicker.view.visibleElements, 12828 toSanitize = []; 12829 12830 // replace the existing UL with an empty one - this is faster than $.empty() 12831 menuInner.replaceChild(emptyMenu, menuInner.firstChild); 12832 12833 for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) { 12834 var element = elements[i], 12835 elText, 12836 elementData; 12837 12838 if (that.options.sanitize) { 12839 elText = element.lastChild; 12840 12841 if (elText) { 12842 elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0]; 12843 12844 if (elementData && elementData.content && !elementData.sanitized) { 12845 toSanitize.push(elText); 12846 elementData.sanitized = true; 12847 } 12848 } 12849 } 12850 12851 menuFragment.appendChild(element); 12852 } 12853 12854 if (that.options.sanitize && toSanitize.length) { 12855 sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn); 12856 } 12857 12858 if (isVirtual === true) { 12859 marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position); 12860 marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position); 12861 12862 menuInner.firstChild.style.marginTop = marginTop + 'px'; 12863 menuInner.firstChild.style.marginBottom = marginBottom + 'px'; 12864 } else { 12865 menuInner.firstChild.style.marginTop = 0; 12866 menuInner.firstChild.style.marginBottom = 0; 12867 } 12868 12869 menuInner.firstChild.appendChild(menuFragment); 12870 12871 // if an option is encountered that is wider than the current menu width, update the menu width accordingly 12872 // switch to ResizeObserver with increased browser support 12873 if (isVirtual === true && that.sizeInfo.hasScrollBar) { 12874 var menuInnerInnerWidth = menuInner.firstChild.offsetWidth; 12875 12876 if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) { 12877 menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px'; 12878 } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) { 12879 // set to 0 to get actual width of menu 12880 that.$menu[0].style.minWidth = 0; 12881 12882 var actualMenuWidth = menuInner.firstChild.offsetWidth; 12883 12884 if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) { 12885 that.sizeInfo.menuInnerInnerWidth = actualMenuWidth; 12886 menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px'; 12887 } 12888 12889 // reset to default CSS styling 12890 that.$menu[0].style.minWidth = ''; 12891 } 12892 } 12893 } 12894 12895 if ((!isSearching && that.options.source.data || isSearching && that.options.source.search) && that.selectpicker.current.hasMore && currentChunk === chunkCount - 1) { 12896 // Don't load the next chunk until scrolling has started 12897 // This prevents unnecessary requests while the user is typing if pageSize is <= chunkSize 12898 if (scrollTop > 0) { 12899 // Chunks use 0-based indexing, but pages use 1-based. Add 1 to convert and add 1 again to get next page 12900 var page = Math.floor((currentChunk * that.options.chunkSize) / that.options.source.pageSize) + 2; 12901 12902 that.fetchData(function () { 12903 that.render(); 12904 that.buildList(size, isSearching); 12905 that.setPositionData(); 12906 scroll(scrollTop); 12907 }, isSearching ? 'search' : 'data', page, isSearching ? that.selectpicker.search.previousValue : undefined); 12908 } 12909 } 12910 } 12911 12912 that.prevActiveElement = that.activeElement; 12913 12914 if (!that.options.liveSearch) { 12915 that.$menuInner.trigger('focus'); 12916 } else if (isSearching && init) { 12917 var index = 0, 12918 newActive; 12919 12920 if (!that.selectpicker.view.canHighlight[index]) { 12921 index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true); 12922 } 12923 12924 newActive = that.selectpicker.view.visibleElements[index]; 12925 12926 that.defocusItem(that.selectpicker.view.currentActive); 12927 12928 that.activeElement = (that.selectpicker.current.data[index] || {}).element; 12929 12930 that.focusItem(newActive); 12931 } 12932 } 12933 12934 $(window) 12935 .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView') 12936 .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () { 12937 var isActive = that.$newElement.hasClass(classNames.SHOW); 12938 12939 if (isActive) scroll(that.$menuInner[0].scrollTop); 12940 }); 12941 }, 12942 12943 focusItem: function (li, liData, noStyle) { 12944 if (li) { 12945 liData = liData || this.selectpicker.current.data[this.selectpicker.current.elements.indexOf(this.activeElement)]; 12946 var a = li.firstChild; 12947 12948 if (a) { 12949 a.setAttribute('aria-setsize', this.selectpicker.view.size); 12950 a.setAttribute('aria-posinset', liData.posinset); 12951 12952 if (noStyle !== true) { 12953 this.focusedParent.setAttribute('aria-activedescendant', a.id); 12954 li.classList.add('active'); 12955 a.classList.add('active'); 12956 } 12957 } 12958 } 12959 }, 12960 12961 defocusItem: function (li) { 12962 if (li) { 12963 li.classList.remove('active'); 12964 if (li.firstChild) li.firstChild.classList.remove('active'); 12965 } 12966 }, 12967 12968 setPlaceholder: function () { 12969 var that = this, 12970 updateIndex = false; 12971 12972 if ((this.options.placeholder || this.options.allowClear) && !this.multiple) { 12973 if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); 12974 12975 // this option doesn't create a new <li> element, but does add a new option at the start, 12976 // so startIndex should increase to prevent having to check every option for the bs-title-option class 12977 updateIndex = true; 12978 12979 var element = this.$element[0], 12980 selectTitleOption = false, 12981 titleNotAppended = !this.selectpicker.view.titleOption.parentNode, 12982 selectedIndex = element.selectedIndex, 12983 selectedOption = element.options[selectedIndex], 12984 firstSelectable = element.querySelector('select > *:not(:disabled)'), 12985 firstSelectableIndex = firstSelectable ? firstSelectable.index : 0, 12986 navigation = window.performance && window.performance.getEntriesByType('navigation'), 12987 // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation 12988 isNotBackForward = (navigation && navigation.length) ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2; 12989 12990 if (titleNotAppended) {
12991 // Use native JS to prepend option (faster) 12992 this.selectpicker.view.titleOption.className = 'bs-title-option'; 12993 this.selectpicker.view.titleOption.value = ''; 12994 12995 // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option. 12996 // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs, 12997 // if so, the select will have the data-selected attribute 12998 selectTitleOption = !selectedOption || (selectedIndex === firstSelectableIndex && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined); 12999 } 13000 13001 if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) { 13002 element.insertBefore(this.selectpicker.view.titleOption, element.firstChild); 13003 } 13004 13005 // Set selected *after* appending to select, 13006 // otherwise the option doesn't get selected in IE 13007 // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11 13008 if (selectTitleOption && isNotBackForward) { 13009 element.selectedIndex = 0; 13010 } else if (document.readyState !== 'complete') { 13011 // if navigation type is back_forward, there's a chance the select will have its value set by BFCache 13012 // wait for that value to be set, then run render again 13013 window.addEventListener('pageshow', function () { 13014 if (that.selectpicker.view.displayedValue !== element.value) that.render(); 13015 }); 13016 } 13017 } 13018 13019 return updateIndex; 13020 }, 13021 13022 fetchData: function (callback, type, page, searchValue) { 13023 page = page || 1; 13024 type = type || 'data'; 13025 13026 var that = this, 13027 data = this.options.source[type], 13028 builtData; 13029 13030 if (data) { 13031 this.options.virtualScroll = true; 13032 13033 if (typeof data === 'function') { 13034 data.call( 13035 this, 13036 function (data, more, totalItems) { 13037 var current = that.selectpicker[type === 'search' ? 'search' : 'main']; 13038 current.hasMore = more; 13039 current.totalItems = totalItems; 13040 builtData = that.buildData(data, type); 13041 callback.call(that, builtData); 13042 that.$element.trigger('fetched' + EVENT_KEY); 13043 }, 13044 page, 13045 searchValue 13046 ); 13047 } else if (Array.isArray(data)) { 13048 builtData = that.buildData(data, type); 13049 callback.call(that, builtData); 13050 } 13051 } else { 13052 builtData = this.buildData(false, type); 13053 callback.call(that, builtData); 13054 } 13055 }, 13056 13057 buildData: function (data, type) { 13058 var that = this; 13059 var dataGetter = data === false ? getOptionData.fromOption : getOptionData.fromDataSource; 13060 13061 var optionSelector = ':not([hidden]):not([data-hidden="true"]):not([style*="display: none"])', 13062 mainData = [], 13063 startLen = this.selectpicker.main.data ? this.selectpicker.main.data.length : 0, 13064 optID = 0, 13065 startIndex = this.setPlaceholder() && !data ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop 13066 13067 if (type === 'search') { 13068 startLen = this.selectpicker.search.data.length; 13069 } 13070 13071 if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; 13072 13073 var selectOptions = data ? data.filter(filterHidden, this) : this.$element[0].querySelectorAll('select > *' + optionSelector); 13074 13075 function addDivider (config) { 13076 var previousData = mainData[mainData.length - 1]; 13077 13078 // ensure optgroup doesn't create back-to-back dividers 13079 if ( 13080 previousData && 13081 previousData.type === 'divider' && 13082 (previousData.optID || config.optID) 13083 ) { 13084 return; 13085 } 13086 13087 config = config || {}; 13088 config.type = 'divider'; 13089 13090 mainData.push(config); 13091 } 13092 13093 function addOption (item, config) { 13094 config = config || {}; 13095
13096 config.divider = dataGetter(item, 'divider'); 13097 13098 if (config.divider === true) { 13099 addDivider({ 13100 optID: config.optID 13101 }); 13102 } else { 13103 var liIndex = mainData.length + startLen, 13104 cssText = dataGetter(item, 'style'), 13105 inlineStyle = cssText ? htmlEscape(cssText) : '', 13106 optionClass = (item.className || '') + (config.optgroupClass || ''); 13107 13108 if (config.optID) optionClass = 'opt ' + optionClass; 13109 13110 config.optionClass = optionClass.trim(); 13111 config.inlineStyle = inlineStyle; 13112 13113 config.text = dataGetter(item, 'text'); 13114 config.title = dataGetter(item, 'title'); 13115 config.content = dataGetter(item, 'content'); 13116 config.tokens = dataGetter(item, 'tokens'); 13117 config.subtext = dataGetter(item, 'subtext'); 13118 config.icon = dataGetter(item, 'icon'); 13119 13120 config.display = config.content || config.text; 13121 config.value = item.value === undefined ? item.text : item.value; 13122 config.type = 'option'; 13123 config.index = liIndex; 13124 13125 config.option = !item.option ? item : item.option; // reference option element if it exists 13126 config.option.liIndex = liIndex; 13127 config.selected = !!item.selected; 13128 config.disabled = config.disabled || !!item.disabled; 13129 13130 if (data !== false) { 13131 if (that.selectpicker.optionValuesDataMap[config.value]) { 13132 config = $.extend(that.selectpicker.optionValuesDataMap[config.value], config); 13133 } else { 13134 that.selectpicker.optionValuesDataMap[config.value] = config; 13135 } 13136 } 13137 13138 mainData.push(config); 13139 } 13140 } 13141 13142 function addOptgroup (index, selectOptions) { 13143 var optgroup = selectOptions[index], 13144 // skip placeholder option 13145 previous = index - 1 < startIndex ? false : selectOptions[index - 1], 13146 next = selectOptions[index + 1], 13147 options = data ? optgroup.children.filter(filterHidden, this) : optgroup.querySelectorAll('option' + optionSelector); 13148 13149 if (!options.length) return; 13150 13151 var config = { 13152 display: htmlEscape(dataGetter(item, 'label')), 13153 subtext: dataGetter(optgroup, 'subtext'), 13154 icon: dataGetter(optgroup, 'icon'), 13155 type: 'optgroup-label', 13156 optgroupClass: ' ' + (optgroup.className || ''), 13157 optgroup: optgroup 13158 }, 13159 headerIndex, 13160 lastIndex; 13161 13162 optID++; 13163 13164 if (previous) { 13165 addDivider({ optID: optID }); 13166 } 13167 13168 config.optID = optID; 13169 13170 mainData.push(config); 13171 13172 for (var j = 0, len = options.length; j < len; j++) { 13173 var option = options[j]; 13174 13175 if (j === 0) { 13176 headerIndex = mainData.length - 1; 13177 lastIndex = headerIndex + len; 13178 } 13179 13180 addOption(option, { 13181 headerIndex: headerIndex, 13182 lastIndex: lastIndex, 13183 optID: config.optID, 13184 optgroupClass: config.optgroupClass, 13185 disabled: optgroup.disabled 13186 }); 13187 } 13188 13189 if (next) { 13190 addDivider({ optID: optID }); 13191 } 13192 } 13193 13194 for (var len = selectOptions.length, i = startIndex; i < len; i++) { 13195 var item = selectOptions[i], 13196 children = item.children; 13197 13198 if (children && children.length) { 13199 addOptgroup.call(this, i, selectOptions); 13200 } else { 13201 addOption.call(this, item, {}); 13202 } 13203 } 13204 13205 switch (type) { 13206 case 'data': { 13207 if (!this.selectpicker.main.data) { 13208 this.selectpicker.main.data = []; 13209 } 13210 Array.prototype.push.apply(this.selectpicker.main.data, mainData); 13211 this.selectpicker.current.data = this.selectpicker.main.data; 13212 break; 13213 } 13214 case 'search': { 13215 Array.prototype.push.apply(this.selectpicker.search.data, mainData); 13216 break; 13217 } 13218 } 13219 13220 return mainData; 13221 }, 13222 13223 buildList: function (size, searching) { 13224 var that = this, 13225 selectData = searching ? this.selectpicker.search.data : this.selectpicker.main.data, 13226 mainElements = [], 13227 widestOptionLength = 0; 13228 13229 if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) { 13230 elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark'; 13231 elementTemplates.a.appendChild(elementTemplates.checkMark); 13232 } 13233 13234 function buildElement (mainElements, item) { 13235 var liElement, 13236 combinedLength = 0; 13237 13238 switch (item.type) {
vendor: 14,788 bytes, lines 13239-13533
13239 case 'divider': 13240 liElement = generateOption.li( 13241 false, 13242 classNames.DIVIDER, 13243 (item.optID ? item.optID + 'div' : undefined) 13244 ); 13245 13246 break; 13247 13248 case 'option': 13249 liElement = generateOption.li( 13250 generateOption.a( 13251 generateOption.text.call(that, item), 13252 item.optionClass, 13253 item.inlineStyle 13254 ), 13255 '', 13256 item.optID 13257 ); 13258 13259 if (liElement.firstChild) { 13260 liElement.firstChild.id = that.selectId + '-' + item.index; 13261 } 13262 13263 break; 13264 13265 case 'optgroup-label': 13266 liElement = generateOption.li( 13267 generateOption.label.call(that, item), 13268 'dropdown-header' + item.optgroupClass, 13269 item.optID 13270 ); 13271 13272 break; 13273 } 13274 13275 if (!item.element) { 13276 item.element = liElement; 13277 } else { 13278 item.element.innerHTML = liElement.innerHTML; 13279 } 13280 mainElements.push(item.element); 13281 13282 // count the number of characters in the option - not perfect, but should work in most cases 13283 if (item.display) combinedLength += item.display.length; 13284 if (item.subtext) combinedLength += item.subtext.length; 13285 // if there is an icon, ensure this option's width is checked 13286 if (item.icon) combinedLength += 1; 13287 13288 if (combinedLength > widestOptionLength) { 13289 widestOptionLength = combinedLength; 13290 13291 // guess which option is the widest 13292 // use this when calculating menu width 13293 // not perfect, but it's fast, and the width will be updating accordingly when scrolling 13294 that.selectpicker.view.widestOption = mainElements[mainElements.length - 1]; 13295 } 13296 } 13297 13298 var startIndex = size || 0; 13299 13300 for (var len = selectData.length, i = startIndex; i < len; i++) { 13301 var item = selectData[i]; 13302 13303 buildElement(mainElements, item); 13304 } 13305 13306 if (size) { 13307 if (searching) { 13308 Array.prototype.push.apply(this.selectpicker.search.elements, mainElements); 13309 } else { 13310 Array.prototype.push.apply(this.selectpicker.main.elements, mainElements); 13311 this.selectpicker.current.elements = this.selectpicker.main.elements; 13312 } 13313 } else { 13314 if (searching) { 13315 this.selectpicker.search.elements = mainElements; 13316 } else { 13317 this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements; 13318 } 13319 } 13320 }, 13321 13322 findLis: function () { 13323 return this.$menuInner.find('.inner > li'); 13324 }, 13325 13326 render: function (init) { 13327 var that = this, 13328 element = this.$element[0], 13329 // ensure titleOption is appended and selected (if necessary) before getting selectedOptions 13330 placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0, 13331 selectedOptions = getSelectedOptions.call(this), 13332 selectedCount = selectedOptions.length, 13333 selectedValues = getSelectValues.call(this, selectedOptions), 13334 button = this.$button[0], 13335 buttonInner = button.querySelector('.filter-option-inner-inner'), 13336 multipleSeparator = document.createTextNode(this.options.multipleSeparator), 13337 titleFragment = elementTemplates.fragment.cloneNode(false), 13338 showCount, 13339 countMax, 13340 hasContent = false; 13341 13342 function createSelected (item) { 13343 if (item.selected) { 13344 that.createOption(item, true); 13345 } else if (item.children && item.children.length) { 13346 item.children.map(createSelected); 13347 } 13348 } 13349 13350 // create selected option elements to ensure select value is correct 13351 if (this.options.source.data && init) { 13352 selectedOptions.map(createSelected); 13353 element.appendChild(this.selectpicker.main.optionQueue); 13354 13355 if (placeholderSelected) placeholderSelected = element.selectedIndex === 0; 13356 } 13357 13358 button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !selectedValues && selectedValues !== 0); 13359 13360 if (!that.multiple && selectedOptions.length === 1) { 13361 that.selectpicker.view.displayedValue = selectedValues; 13362 } 13363 13364 if (this.options.selectedTextFormat === 'static') { 13365 titleFragment = generateOption.text.call(this, { text: this.options.placeholder }, true); 13366 } else { 13367 showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 0; 13368 13369 // determine if the number of selected options will be shown (showCount === true) 13370 if (showCount) { 13371 countMax = this.options.selectedTextFormat.split('>'); 13372 showCount = (countMax.length > 1 && selectedCount > countMax[1]) || (countMax.length === 1 && selectedCount >= 2); 13373 } 13374 13375 // only loop through all selected options if the count won't be shown 13376 if (showCount === false) { 13377 if (!placeholderSelected) { 13378 for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) { 13379 if (selectedIndex < 50) { 13380 var option = selectedOptions[selectedIndex], 13381 titleOptions = {}; 13382 13383 if (option) { 13384 if (this.multiple && selectedIndex > 0) { 13385 titleFragment.appendChild(multipleSeparator.cloneNode(false)); 13386 } 13387 13388 if (option.title) { 13389 titleOptions.text = option.title; 13390 } else if (option.content && that.options.showContent) { 13391 titleOptions.content = option.content.toString(); 13392 hasContent = true; 13393 } else { 13394 if (that.options.showIcon) { 13395 titleOptions.icon = option.icon; 13396 } 13397 if (that.options.showSubtext && !that.multiple && option.subtext) titleOptions.subtext = ' ' + option.subtext; 13398 titleOptions.text = option.text.trim(); 13399 } 13400 13401 titleFragment.appendChild(generateOption.text.call(this, titleOptions, true)); 13402 } 13403 } else { 13404 break; 13405 } 13406 } 13407 13408 // add ellipsis 13409 if (selectedCount > 49) { 13410 titleFragment.appendChild(document.createTextNode('...')); 13411 } 13412 } 13413 } else { 13414 var optionSelector = ':not([hidden]):not([data-hidden="true"]):not([data-divider="true"]):not([style*="display: none"])'; 13415 if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; 13416 13417 // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc. 13418 var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length, 13419 tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText; 13420 13421 titleFragment = generateOption.text.call(this, { 13422 text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString()) 13423 }, true); 13424 } 13425 } 13426 13427 // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText 13428 if (!titleFragment.childNodes.length) { 13429 titleFragment = generateOption.text.call(this, { 13430 text: this.options.placeholder ? this.options.placeholder : this.options.noneSelectedText 13431 }, true); 13432 } 13433 13434 // if the select has a title, apply it to the button, and if not, apply titleFragment text 13435 // strip all HTML tags and trim the result, then unescape any escaped tags 13436 button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim(); 13437 13438 if (this.options.sanitize && hasContent) { 13439 sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn); 13440 } 13441 13442 buttonInner.innerHTML = ''; 13443 buttonInner.appendChild(titleFragment); 13444 13445 if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) { 13446 var filterExpand = button.querySelector('.filter-expand'), 13447 clone = buttonInner.cloneNode(true); 13448 13449 clone.className = 'filter-expand'; 13450 13451 if (filterExpand) { 13452 button.replaceChild(clone, filterExpand); 13453 } else { 13454 button.appendChild(clone); 13455 } 13456 } 13457 13458 this.$element.trigger('rendered' + EVENT_KEY); 13459 }, 13460 13461 /** 13462 * @param [style] 13463 * @param [status] 13464 */ 13465 setStyle: function (newStyle, status) { 13466 var button = this.$button[0], 13467 newElement = this.$newElement[0], 13468 style = this.options.style.trim(), 13469 buttonClass; 13470 13471 if (this.$element.attr('class')) { 13472 this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, '')); 13473 } 13474 13475 if (version.major < 4) { 13476 newElement.classList.add('bs3'); 13477 13478 if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') && 13479 (newElement.previousElementSibling || newElement.nextElementSibling) && 13480 (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon') 13481 ) { 13482 newElement.classList.add('bs3-has-addon'); 13483 } 13484 } 13485 13486 if (newStyle) { 13487 buttonClass = newStyle.trim(); 13488 } else { 13489 buttonClass = style; 13490 } 13491 13492 if (status == 'add') { 13493 if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' ')); 13494 } else if (status == 'remove') { 13495 if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' ')); 13496 } else { 13497 if (style) button.classList.remove.apply(button.classList, style.split(' ')); 13498 if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' ')); 13499 } 13500 }, 13501 13502 liHeight: function (refresh) { 13503 if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return; 13504 13505 var newElement = elementTemplates.div.cloneNode(false), 13506 menu = elementTemplates.div.cloneNode(false), 13507 menuInner = elementTemplates.div.cloneNode(false), 13508 menuInnerInner = document.createElement('ul'), 13509 divider = elementTemplates.li.cloneNode(false), 13510 dropdownHeader = elementTemplates.li.cloneNode(false), 13511 li, 13512 a = elementTemplates.a.cloneNode(false), 13513 text = elementTemplates.span.cloneNode(false), 13514 header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null, 13515 search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null, 13516 actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null, 13517 doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null, 13518 firstOption = this.$element[0].options[0]; 13519 13520 this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth; 13521 13522 text.className = 'text'; 13523 a.className = 'dropdown-item ' + (firstOption ? firstOption.className : ''); 13524 newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW; 13525 newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating 13526 if (this.options.width === 'auto') menu.style.minWidth = 0; 13527 menu.className = classNames.MENU + ' ' + classNames.SHOW; 13528 menuInner.className = 'inner ' + classNames.SHOW; 13529 menuInnerInner.className = classNames.MENU + ' inner ' + (version.major >= '4' ? classNames.SHOW : ''); 13530 divider.className = classNames.DIVIDER; 13531 dropdownHeader.className = 'dropdown-header'; 13532 13533 text.appendChild(document.createTextNode('\u200b'));
13534 13535 if (this.selectpicker.current.data.length) { 13536 for (var i = 0; i < this.selectpicker.current.data.length; i++) { 13537 var data = this.selectpicker.current.data[i]; 13538 if (data.type === 'option' && $(data.element.firstChild).css('display') !== 'none') { 13539 li = data.element; 13540 break; 13541 } 13542 } 13543 } else { 13544 li = elementTemplates.li.cloneNode(false); 13545 a.appendChild(text); 13546 li.appendChild(a); 13547 } 13548 13549 dropdownHeader.appendChild(text.cloneNode(true)); 13550 13551 if (this.selectpicker.view.widestOption) { 13552 menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true)); 13553 } 13554 13555 menuInnerInner.appendChild(li); 13556 menuInnerInner.appendChild(divider); 13557 menuInnerInner.appendChild(dropdownHeader); 13558 if (header) menu.appendChild(header); 13559 if (search) { 13560 var input = document.createElement('input'); 13561 search.className = 'bs-searchbox'; 13562 input.className = 'form-control'; 13563 search.appendChild(input); 13564 menu.appendChild(search); 13565 } 13566 if (actions) menu.appendChild(actions); 13567 menuInner.appendChild(menuInnerInner); 13568 menu.appendChild(menuInner); 13569 if (doneButton) menu.appendChild(doneButton); 13570 newElement.appendChild(menu); 13571 13572 document.body.appendChild(newElement); 13573 13574 var liHeight = li.offsetHeight, 13575 dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0, 13576 headerHeight = header ? header.offsetHeight : 0, 13577 searchHeight = search ? search.offsetHeight : 0, 13578 actionsHeight = actions ? actions.offsetHeight : 0, 13579 doneButtonHeight = doneButton ? doneButton.offsetHeight : 0, 13580 dividerHeight = $(divider).outerHeight(true), 13581 menuStyle = window.getComputedStyle(menu), 13582 menuWidth = menu.offsetWidth, 13583 menuPadding = { 13584 vert: toInteger(menuStyle.paddingTop) + 13585 toInteger(menuStyle.paddingBottom) + 13586 toInteger(menuStyle.borderTopWidth) + 13587 toInteger(menuStyle.borderBottomWidth), 13588 horiz: toInteger(menuStyle.paddingLeft) + 13589 toInteger(menuStyle.paddingRight) + 13590 toInteger(menuStyle.borderLeftWidth) + 13591 toInteger(menuStyle.borderRightWidth) 13592 }, 13593 menuExtras = { 13594 vert: menuPadding.vert + 13595 toInteger(menuStyle.marginTop) + 13596 toInteger(menuStyle.marginBottom) + 2, 13597 horiz: menuPadding.horiz + 13598 toInteger(menuStyle.marginLeft) + 13599 toInteger(menuStyle.marginRight) + 2 13600 }, 13601 scrollBarWidth; 13602 13603 menuInner.style.overflowY = 'scroll'; 13604 13605 scrollBarWidth = menu.offsetWidth - menuWidth; 13606 13607 document.body.removeChild(newElement); 13608 13609 this.sizeInfo.liHeight = liHeight; 13610 this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight; 13611 this.sizeInfo.headerHeight = headerHeight; 13612 this.sizeInfo.searchHeight = searchHeight; 13613 this.sizeInfo.actionsHeight = actionsHeight; 13614 this.sizeInfo.doneButtonHeight = doneButtonHeight;
vendor: 10,248 bytes, lines 13615-13815
13615 this.sizeInfo.dividerHeight = dividerHeight; 13616 this.sizeInfo.menuPadding = menuPadding; 13617 this.sizeInfo.menuExtras = menuExtras; 13618 this.sizeInfo.menuWidth = menuWidth; 13619 this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz; 13620 this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth; 13621 this.sizeInfo.scrollBarWidth = scrollBarWidth; 13622 this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight; 13623 13624 this.setPositionData(); 13625 }, 13626 13627 getSelectPosition: function () { 13628 var that = this, 13629 $window = $(window), 13630 pos = that.$newElement.offset(), 13631 $container = $(that.options.container), 13632 containerPos; 13633 13634 if (that.options.container && $container.length && !$container.is('body')) { 13635 containerPos = $container.offset(); 13636 containerPos.top += parseInt($container.css('borderTopWidth')); 13637 containerPos.left += parseInt($container.css('borderLeftWidth')); 13638 } else { 13639 containerPos = { top: 0, left: 0 }; 13640 } 13641 13642 var winPad = that.options.windowPadding; 13643 13644 this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop(); 13645 this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2]; 13646 this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft(); 13647 this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1]; 13648 this.sizeInfo.selectOffsetTop -= winPad[0]; 13649 this.sizeInfo.selectOffsetLeft -= winPad[3]; 13650 }, 13651 13652 setMenuSize: function (isAuto) { 13653 this.getSelectPosition(); 13654 13655 var selectWidth = this.sizeInfo.selectWidth, 13656 liHeight = this.sizeInfo.liHeight, 13657 headerHeight = this.sizeInfo.headerHeight, 13658 searchHeight = this.sizeInfo.searchHeight, 13659 actionsHeight = this.sizeInfo.actionsHeight, 13660 doneButtonHeight = this.sizeInfo.doneButtonHeight, 13661 divHeight = this.sizeInfo.dividerHeight, 13662 menuPadding = this.sizeInfo.menuPadding, 13663 menuInnerHeight, 13664 menuHeight, 13665 divLength = 0, 13666 minHeight, 13667 _minHeight, 13668 maxHeight, 13669 menuInnerMinHeight, 13670 estimate, 13671 isDropup; 13672 13673 if (this.options.dropupAuto) { 13674 // Get the estimated height of the menu without scrollbars. 13675 // This is useful for smaller menus, where there might be plenty of room 13676 // below the button without setting dropup, but we can't know 13677 // the exact height of the menu until createView is called later 13678 estimate = liHeight * this.selectpicker.current.data.length + menuPadding.vert; 13679 13680 isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot; 13681 13682 // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth) 13683 if (this.selectpicker.isSearching === true) { 13684 isDropup = this.selectpicker.dropup; 13685 } 13686 13687 this.$newElement.toggleClass(classNames.DROPUP, isDropup); 13688 this.selectpicker.dropup = isDropup; 13689 } 13690 13691 if (this.options.size === 'auto') { 13692 _minHeight = this.selectpicker.current.data.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0; 13693 menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert; 13694 minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; 13695 menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0); 13696 13697 if (this.$newElement.hasClass(classNames.DROPUP)) { 13698 menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert; 13699 } 13700 13701 maxHeight = menuHeight; 13702 menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert; 13703 } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { 13704 for (var i = 0; i < this.options.size; i++) { 13705 if (this.selectpicker.current.data[i].type === 'divider') divLength++; 13706 } 13707 13708 menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert; 13709 menuInnerHeight = menuHeight - menuPadding.vert; 13710 maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight; 13711 minHeight = menuInnerMinHeight = ''; 13712 } 13713 13714 this.$menu.css({ 13715 'max-height': maxHeight + 'px', 13716 'overflow': 'hidden', 13717 'min-height': minHeight + 'px' 13718 }); 13719 13720 this.$menuInner.css({ 13721 'max-height': menuInnerHeight + 'px', 13722 'overflow': 'hidden auto', 13723 'min-height': menuInnerMinHeight + 'px' 13724 }); 13725 13726 // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView 13727 this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1); 13728 13729 if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) { 13730 this.sizeInfo.hasScrollBar = true; 13731 this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth; 13732 } 13733 13734 if (this.options.dropdownAlignRight === 'auto') { 13735 this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < (this.sizeInfo.totalMenuWidth - selectWidth)); 13736 } 13737 13738 if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update(); 13739 }, 13740 13741 setSize: function (refresh) { 13742 this.liHeight(refresh); 13743 13744 if (this.options.header) this.$menu.css('padding-top', 0); 13745 13746 if (this.options.size !== false) { 13747 var that = this, 13748 $window = $(window); 13749 13750 this.setMenuSize(); 13751 13752 if (this.options.liveSearch) { 13753 this.$searchbox 13754 .off('input.setMenuSize propertychange.setMenuSize') 13755 .on('input.setMenuSize propertychange.setMenuSize', function () { 13756 return that.setMenuSize(); 13757 }); 13758 } 13759 13760 if (this.options.size === 'auto') { 13761 $window 13762 .off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize') 13763 .on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () { 13764 return that.setMenuSize(); 13765 }); 13766 } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) { 13767 $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize'); 13768 } 13769 } 13770 13771 this.createView(false, true, refresh); 13772 }, 13773 13774 setWidth: function () { 13775 var that = this; 13776 13777 if (this.options.width === 'auto') { 13778 requestAnimationFrame(function () { 13779 that.$menu.css('min-width', '0'); 13780 13781 that.$element.on('loaded' + EVENT_KEY, function () { 13782 that.liHeight(); 13783 that.setMenuSize(); 13784 13785 // Get correct width if element is hidden 13786 var $selectClone = that.$newElement.clone().appendTo('body'), 13787 btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth(); 13788 13789 $selectClone.remove(); 13790 13791 // Set width to whatever's larger, button title or longest option 13792 that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth); 13793 that.$newElement.css('width', that.sizeInfo.selectWidth + 'px'); 13794 }); 13795 }); 13796 } else if (this.options.width === 'fit') { 13797 // Remove inline min-width so width can be changed from 'auto' 13798 this.$menu.css('min-width', ''); 13799 this.$newElement.css('width', '').addClass('fit-width'); 13800 } else if (this.options.width) { 13801 // Remove inline min-width so width can be changed from 'auto' 13802 this.$menu.css('min-width', ''); 13803 this.$newElement.css('width', this.options.width); 13804 } else { 13805 // Remove inline min-width/width so width can be changed 13806 this.$menu.css('min-width', ''); 13807 this.$newElement.css('width', ''); 13808 } 13809 // Remove fit-width class if width is changed programmatically 13810 if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') { 13811 this.$newElement[0].classList.remove('fit-width'); 13812 } 13813 }, 13814 13815 selectPosition: function () {
13816 this.$bsContainer = $('<div class="bs-container" />'); 13817 13818 var that = this, 13819 $container = $(this.options.container), 13820 pos, 13821 containerPos, 13822 actualHeight, 13823 getPlacement = function ($element) { 13824 var containerPosition = {}, 13825 // fall back to dropdown's default display setting if display is not manually set 13826 display = that.options.display || ( 13827 // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default 13828 $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display 13829 : false 13830 ); 13831 13832 that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP)); 13833 pos = $element.offset(); 13834 13835 if (!$container.is('body')) { 13836 containerPos = $container.offset(); 13837 containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop(); 13838 containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft(); 13839 } else { 13840 containerPos = { top: 0, left: 0 }; 13841 } 13842 13843 actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; 13844 13845 // Bootstrap 4+ uses Popper for menu positioning 13846 if (version.major < 4 || display === 'static') { 13847 containerPosition.top = pos.top - containerPos.top + actualHeight; 13848 containerPosition.left = pos.left - containerPos.left; 13849 } 13850 13851 containerPosition.width = $element[0].offsetWidth; 13852 13853 that.$bsContainer.css(containerPosition); 13854 }; 13855 13856 this.$button.on('click.bs.dropdown.data-api', function () { 13857 if (that.isDisabled()) { 13858 return; 13859 } 13860 13861 getPlacement(that.$newElement); 13862 13863 that.$bsContainer 13864 .appendTo(that.options.container) 13865 .toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)) 13866 .append(that.$menu); 13867 }); 13868 13869 $(window) 13870 .off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId) 13871 .on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () { 13872 var isActive = that.$newElement.hasClass(classNames.SHOW); 13873 13874 if (isActive) getPlacement(that.$newElement); 13875 }); 13876 13877 this.$element.on('hide' + EVENT_KEY, function () { 13878 that.$menu.data('height', that.$menu.height()); 13879 that.$bsContainer.detach(); 13880 }); 13881 }, 13882 13883 createOption: function (data, init) { 13884 var optionData = !data.option ? data : data.option; 13885 13886 if (optionData && optionData.nodeType !== 1) { 13887 var option = (init ? elementTemplates.selectedOption : elementTemplates.option).cloneNode(true); 13888 if (optionData.value !== undefined) option.value = optionData.value; 13889 option.textContent = optionData.text; 13890 13891 option.selected = true; 13892 13893 if (optionData.liIndex !== undefined) { 13894 option.liIndex = optionData.liIndex; 13895 } else if (!init) { 13896 option.liIndex = data.index; 13897 } 13898 13899 data.option = option; 13900 13901 this.selectpicker.main.optionQueue.appendChild(option); 13902 } 13903 }, 13904 13905 setOptionStatus: function (selectedOnly) { 13906 var that = this; 13907 13908 that.noScroll = false; 13909 13910 if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) { 13911 for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) { 13912 var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0], 13913 option = liData.option; 13914 13915 if (option) { 13916 if (selectedOnly !== true) { 13917 that.setDisabled(liData); 13918 } 13919 13920 that.setSelected(liData); 13921 } 13922 } 13923 13924 // append optionQueue (documentFragment with option elements for select options) 13925 if (this.options.source.data) this.$element[0].appendChild(this.selectpicker.main.optionQueue); 13926 } 13927 }, 13928 13929 /** 13930 * @param {Object} liData - the option object that is being changed 13931 * @param {boolean} selected - true if the option is being selected, false if being deselected 13932 */ 13933 setSelected: function (liData, selected) { 13934 selected = selected === undefined ? liData.selected : selected; 13935 13936 var li = liData.element, 13937 activeElementIsSet = this.activeElement !== undefined, 13938 thisIsActive = this.activeElement === li, 13939 prevActive, 13940 a, 13941 // if current option is already active 13942 // OR 13943 // if the current option is being selected, it's
13943NOT multiple, and 13944 // activeElement is undefined: 13945 // - when the menu is first being opened, OR 13946 // - after a search has been performed, OR 13947 // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeElement) 13948 keepActive = thisIsActive || (selected && !this.multiple && !activeElementIsSet); 13949 13950 if (!li) return; 13951 13952 if (selected !== undefined) { 13953 liData.selected = selected; 13954 if (liData.option) liData.option.selected = selected; 13955 } 13956 13957 if (selected && this.options.source.data) { 13958 this.createOption(liData, false); 13959 } 13960 13961 a = li.firstChild; 13962 13963 if (selected) { 13964 this.selectedElement = li; 13965 } 13966 13967 li.classList.toggle('selected', selected); 13968 13969 if (keepActive) { 13970 this.focusItem(li, liData); 13971 this.selectpicker.view.currentActive = li; 13972 this.activeElement = li; 13973 } else { 13974 this.defocusItem(li); 13975 } 13976 13977 if (a) { 13978 a.classList.toggle('selected', selected); 13979 13980 if (selected) { 13981 a.setAttribute('aria-selected', true); 13982 } else { 13983 if (this.multiple) { 13984 a.setAttribute('aria-selected', false); 13985 } else { 13986 a.removeAttribute('aria-selected'); 13987 } 13988 } 13989 } 13990 13991 if (!keepActive && !activeElementIsSet && selected && this.prevActiveElement !== undefined) { 13992 prevActive = this.prevActiveElement; 13993 13994 this.defocusItem(prevActive); 13995 } 13996 }, 13997 13998 /** 13999 * @param {number} index - the index of the option that is being disabled 14000 * @param {boolean} disabled - true if the option is being disabled, false if being enabled 14001 */ 14002 setDisabled: function (liData) { 14003 var disabled = liData.disabled, 14004 li = liData.element, 14005 a; 14006 14007 if (!li) return; 14008 14009 a = li.firstChild; 14010 14011 li.classList.toggle(classNames.DISABLED, disabled); 14012 14013 if (a) { 14014 if (version.major >= '4') a.classList.toggle(classNames.DISABLED, disabled); 14015 14016 if (disabled) { 14017 a.setAttribute('aria-disabled', disabled); 14018 a.setAttribute('tabindex', -1); 14019 } else { 14020 a.removeAttribute('aria-disabled'); 14021 a.setAttribute('tabindex', 0); 14022 } 14023 } 14024 }, 14025 14026 isDisabled: function () { 14027 return this.$element[0].disabled; 14028 }, 14029 14030 checkDisabled: function () { 14031 if (this.isDisabled()) { 14032 this.$newElement[0].classList.add(classNames.DISABLED); 14033 this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true); 14034 } else { 14035 if (this.$button[0].classList.contains(classNames.DISABLED)) { 14036 this.$newElement[0].classList.remove(classNames.DISABLED); 14037 this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false); 14038 } 14039 } 14040 }, 14041 14042 clickListener: function () { 14043 var that = this, 14044 $document = $(document); 14045 14046 $document.data('spaceSelect', false); 14047 14048 this.$button.on('keyup', function (e) { 14049 if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) { 14050 e.preventDefault(); 14051 $document.data('spaceSelect', false); 14052 } 14053 }); 14054 14055 this.$newElement.on('show.bs.dropdown', function () { 14056 if (!that.dropdown && version.major === '4') { 14057 that.dropdown = that.$button.data('bs.dropdown'); 14058 that.dropdown._menu = that.$menu[0]; 14059 } 14060 }); 14061 14062 function clearSelection (e) { 14063 if (that.multiple) { 14064 that.deselectAll(); 14065 } else { 14066 var element = that.$element[0], 14067 prevValue = element.value, 14068 prevIndex = element.selectedIndex, 14069 prevOption = element.options[prevIndex], 14070 prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false; 14071 14072 if (prevData) { 14073 that.setSelected(prevData, false); 14074 } 14075 14076 element.selectedIndex = 0; 14077 14078 changedArguments = [prevIndex, false, prevValue]; 14079 that.$element.triggerNative('change'); 14080 } 14081 14082 // remove selected styling if menu is open 14083 if (that.$newElement.hasClass(classNames.SHOW)) { 14084 if (that.options.liveSearch) { 14085 that.$searchbox.trigger('focus'); 14086 } 14087 14088 that.createView(false); 14089 } 14090 } 14091 14092 this.$button.on('click.bs.dropdown.data-api', function (e) { 14093 if (that.options.allowClear) { 14094 var target = e.target, 14095 clearButton = that.$clearButton[0]; 14096 14097 // IE doesn't support event listeners on child elements of buttons 14098 if (/MSIE|Trident/.test(window.navigator.userAgent)) { 14099 target = document.elementFromPoint(e.clientX, e.clientY); 14100 } 14101 14102 if (target === clearButton || target.parentElement === clearButton) { 14103 e.stopImmediatePropagation(); 14104 clearSelection(e); 14105 } 14106 } 14107 14108 if (!that.$newElement.hasClass(classNames.SHOW)) { 14109 that.setSize(); 14110 } 14111 }); 14112 14113 function setFocus () { 14114 if (that.options.liveSearch) { 14115 that.$searchbox.trigger('focus'); 14116 } else { 14117 that.$menuInner.trigger('focus'); 14118 } 14119 } 14120 14121 function checkPopperExists () { 14122 if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state) { 14123 setFocus(); 14124 } else { 14125 requestAnimationFrame(checkPopperExists); 14126 } 14127 } 14128 14129 this.$element.on('shown' + EVENT_KEY, function () {
vendor: 15,179 bytes, lines 14130-14427
14130 if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) { 14131 that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop; 14132 } 14133 14134 if (version.major > 3) { 14135 requestAnimationFrame(checkPopperExists); 14136 } else { 14137 setFocus(); 14138 } 14139 }); 14140 14141 // ensure posinset and setsize are correct before selecting an option via a click 14142 this.$menuInner.on('mouseenter', 'li a', function (e) { 14143 var hoverLi = this.parentElement, 14144 position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0, 14145 index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi), 14146 hoverData = that.selectpicker.current.data[index + position0]; 14147 14148 that.focusItem(hoverLi, hoverData, true); 14149 }); 14150 14151 this.$menuInner.on('click', 'li a', function (e, retainActive) { 14152 var $this = $(this), 14153 element = that.$element[0], 14154 position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0, 14155 clickedData = that.selectpicker.current.data[$this.parent().index() + position0], 14156 clickedElement = clickedData.element, 14157 prevValue = getSelectValues.call(that), 14158 prevIndex = element.selectedIndex, 14159 prevOption = element.options[prevIndex], 14160 prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false, 14161 triggerChange = true; 14162 14163 // Don't close on multi choice menu 14164 if (that.multiple && that.options.maxOptions !== 1) { 14165 e.stopPropagation(); 14166 } 14167 14168 e.preventDefault(); 14169 14170 // Don't run if the select is disabled 14171 if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) { 14172 var option = clickedData.option, 14173 $option = $(option), 14174 state = option.selected, 14175 optgroupData = that.selectpicker.current.data.find(function (datum) { 14176 return datum.optID === clickedData.optID && datum.type === 'optgroup-label'; 14177 }), 14178 optgroup = optgroupData ? optgroupData.optgroup : undefined, 14179 dataGetter = optgroup instanceof Element ? getOptionData.fromOption : getOptionData.fromDataSource, 14180 optgroupOptions = optgroup && optgroup.children, 14181 maxOptions = parseInt(that.options.maxOptions), 14182 maxOptionsGrp = optgroup && parseInt(dataGetter(optgroup, 'maxOptions')) || false; 14183 14184 if (clickedElement === that.activeElement) retainActive = true; 14185 14186 if (!retainActive) { 14187 that.prevActiveElement = that.activeElement; 14188 that.activeElement = undefined; 14189 } 14190 14191 if (!that.multiple || maxOptions === 1) { // Deselect previous option if not multi select 14192 if (prevData) that.setSelected(prevData, false); 14193 that.setSelected(clickedData, true); 14194 } else { // Toggle the clicked option if multi select. 14195 that.setSelected(clickedData, !state); 14196 that.focusedParent.focus(); 14197 14198 if (maxOptions !== false || maxOptionsGrp !== false) { 14199 var maxReached = maxOptions < getSelectedOptions.call(that).length, 14200 selectedGroupOptions = 0; 14201 14202 if (optgroup && optgroup.children) { 14203 for (var i = 0; i < optgroup.children.length; i++) { 14204 if (optgroup.children[i].selected) selectedGroupOptions++; 14205 } 14206 } 14207 14208 var maxReachedGrp = maxOptionsGrp < selectedGroupOptions; 14209 14210 if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) { 14211 if (maxOptions && maxOptions === 1) { 14212 element.selectedIndex = -1; 14213 that.setOptionStatus(true); 14214 } else if (maxOptionsGrp && maxOptionsGrp === 1) { 14215 for (var i = 0; i < optgroupOptions.length; i++) { 14216 var _option = optgroupOptions[i]; 14217 that.setSelected(that.selectpicker.current.data[_option.liIndex], false); 14218 } 14219 14220 that.setSelected(clickedData, true); 14221 } else { 14222 var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText, 14223 maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText, 14224 maxTxt = maxOptionsArr[0].replace('{n}', maxOptions), 14225 maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp), 14226 $notify = $('<div class="notify"></div>'); 14227 // If {var} is set in array, replace it 14228 /** @deprecated */ 14229 if (maxOptionsArr[2]) { 14230 maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]); 14231 maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]); 14232 } 14233 14234 that.$menu.append($notify); 14235 14236 if (maxOptions && maxReached) { 14237 $notify.append($('<div>' + maxTxt + '</div>')); 14238 triggerChange = false; 14239 that.$element.trigger('maxReached' + EVENT_KEY); 14240 } 14241 14242 if (maxOptionsGrp && maxReachedGrp) { 14243 $notify.append($('<div>' + maxTxtGrp + '</div>')); 14244 triggerChange = false; 14245 that.$element.trigger('maxReachedGrp' + EVENT_KEY); 14246 } 14247 14248 setTimeout(function () { 14249 that.setSelected(clickedData, false); 14250 }, 10); 14251 14252 $notify[0].classList.add('fadeOut'); 14253 14254 setTimeout(function () { 14255 $notify.remove(); 14256 }, 1050); 14257 } 14258 } 14259 } 14260 } 14261 14262 if (that.options.source.data) that.$element[0].appendChild(that.selectpicker.main.optionQueue); 14263 14264 if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) { 14265 that.$button.trigger('focus'); 14266 } else if (that.options.liveSearch) { 14267 that.$searchbox.trigger('focus'); 14268 } 14269 14270 // Trigger select 'change' 14271 if (triggerChange) { 14272 if (that.multiple || prevIndex !== element.selectedIndex) { 14273 // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed. 14274 changedArguments = [option.index, $option.prop('selected'), prevValue]; 14275 that.$element 14276 .triggerNative('change'); 14277 } 14278 } 14279 } 14280 }); 14281 14282 this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) { 14283 if (e.currentTarget == this) { 14284 e.preventDefault(); 14285 e.stopPropagation(); 14286 if (that.options.liveSearch && !$(e.target).hasClass('close')) { 14287 that.$searchbox.trigger('focus'); 14288 } else { 14289 that.$button.trigger('focus'); 14290 } 14291 } 14292 }); 14293 14294 this.$menuInner.on('click', '.divider, .dropdown-header', function (e) { 14295 e.preventDefault(); 14296 e.stopPropagation(); 14297 if (that.options.liveSearch) { 14298 that.$searchbox.trigger('focus'); 14299 } else { 14300 that.$button.trigger('focus'); 14301 } 14302 }); 14303 14304 this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () { 14305 that.$button.trigger('click'); 14306 }); 14307 14308 this.$searchbox.on('click', function (e) { 14309 e.stopPropagation(); 14310 }); 14311 14312 this.$menu.on('click', '.actions-btn', function (e) { 14313 if (that.options.liveSearch) { 14314 that.$searchbox.trigger('focus'); 14315 } else { 14316 that.$button.trigger('focus'); 14317 } 14318 14319 e.preventDefault(); 14320 e.stopPropagation(); 14321 14322 if ($(this).hasClass('bs-select-all')) { 14323 that.selectAll(); 14324 } else { 14325 that.deselectAll(); 14326 } 14327 }); 14328 14329 this.$button 14330 .on('focus' + EVENT_KEY, function (e) { 14331 var tabindex = that.$element[0].getAttribute('tabindex'); 14332 14333 // only change when button is actually focused 14334 if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) { 14335 // apply select element's tabindex to ensure correct order is followed when tabbing to the next element 14336 this.setAttribute('tabindex', tabindex); 14337 // set element's tabindex to -1 to allow for reverse tabbing 14338 that.$element[0].setAttribute('tabindex', -1); 14339 that.selectpicker.view.tabindex = tabindex; 14340 } 14341 }) 14342 .on('blur' + EVENT_KEY, function (e) { 14343 // revert everything to original tabindex 14344 if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) { 14345 that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex); 14346 this.setAttribute('tabindex', -1); 14347 that.selectpicker.view.tabindex = undefined; 14348 } 14349 }); 14350 14351 this.$element 14352 .on('change' + EVENT_KEY, function () { 14353 that.render(); 14354 that.$element.trigger('changed' + EVENT_KEY, changedArguments); 14355 changedArguments = null; 14356 }) 14357 .on('focus' + EVENT_KEY, function () { 14358 if (!that.options.mobile) that.$button[0].focus(); 14359 }); 14360 }, 14361 14362 liveSearchListener: function () { 14363 var that = this; 14364 14365 this.$button.on('click.bs.dropdown.data-api', function () { 14366 if (!!that.$searchbox.val()) { 14367 that.$searchbox.val(''); 14368 that.selectpicker.search.previousValue = undefined; 14369 } 14370 }); 14371 14372 this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) { 14373 e.stopPropagation(); 14374 }); 14375 14376 this.$searchbox.on('input propertychange', function () { 14377 var searchValue = that.$searchbox[0].value; 14378 14379 that.selectpicker.search.elements = []; 14380 that.selectpicker.search.data = []; 14381 14382 if (searchValue) { 14383 that.selectpicker.search.previousValue = searchValue; 14384 14385 if (that.options.source.search) { 14386 that.fetchData(function (builtData) { 14387 that.render(); 14388 that.buildList(undefined, true); 14389 that.noScroll = true; 14390 that.$menuInner.scrollTop(0); 14391 that.createView(true); 14392 showNoResults.call(that, builtData, searchValue); 14393 }, 'search', 0, searchValue); 14394 } else { 14395 var i, 14396 searchMatch = [], 14397 q = searchValue.toUpperCase(), 14398 cache = {}, 14399 cacheArr = [], 14400 searchStyle = that._searchStyle(), 14401 normalizeSearch = that.options.liveSearchNormalize; 14402 14403 if (normalizeSearch) q = normalizeToBase(q); 14404 14405 for (var i = 0; i < that.selectpicker.main.data.length; i++) { 14406 var li = that.selectpicker.main.data[i]; 14407 14408 if (!cache[i]) { 14409 cache[i] = stringSearch(li, q, searchStyle, normalizeSearch); 14410 } 14411 14412 if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) { 14413 if (li.headerIndex > 0) { 14414 cache[li.headerIndex - 1] = true; 14415 cacheArr.push(li.headerIndex - 1); 14416 } 14417 14418 cache[li.headerIndex] = true; 14419 cacheArr.push(li.headerIndex); 14420 14421 cache[li.lastIndex + 1] = true; 14422 } 14423 14424 if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i); 14425 } 14426 14427 for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {
14428 var index = cacheArr[i], 14429 prevIndex = cacheArr[i - 1], 14430 li = that.selectpicker.main.data[index], 14431 liPrev = that.selectpicker.main.data[prevIndex]; 14432 14433 if (li.type !== 'divider' || (li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i)) { 14434 that.selectpicker.search.data.push(li); 14435 searchMatch.push(that.selectpicker.main.elements[index]); 14436 } 14437 } 14438 14439 that.activeElement = undefined; 14440 that.noScroll = true; 14441 that.$menuInner.scrollTop(0); 14442 that.selectpicker.search.elements = searchMatch; 14443 that.createView(true); 14444 showNoResults.call(that, searchMatch, searchValue); 14445 } 14446 } else if (that.selectpicker.search.previousValue) { // for IE11 (#2402) 14447 that.$menuInner.scrollTop(0); 14448 that.createView(false); 14449 } 14450 }); 14451 }, 14452 14453 _searchStyle: function () { 14454 return this.options.liveSearchStyle || 'contains'; 14455 }, 14456 14457 val: function (value) { 14458 var element = this.$element[0]; 14459 14460 if (typeof value !== 'undefined') { 14461 var selectedOptions = getSelectedOptions.call(this), 14462 prevValue = getSelectValues.call(this, selectedOptions); 14463 14464 changedArguments = [null, null, prevValue]; 14465 14466 if (!Array.isArray(value)) value = [ value ]; 14467 14468 value.map(String); 14469 14470 for (var i = 0; i < selectedOptions.length; i++) { 14471 var item = selectedOptions[i]; 14472 14473 if (item && value.indexOf(String(item.value)) === -1) { 14474 this.setSelected(item, false); 14475 } 14476 } 14477 14478 // only update selected value if it matches an existing option 14479 this.selectpicker.main.data.filter(function (item) { 14480 if (value.indexOf(String(item.value)) !== -1) { 14481 this.setSelected(item, true); 14482 return true; 14483 } 14484 14485 return false; 14486 }, this); 14487 14488 if (this.options.source.data) element.appendChild(this.selectpicker.main.optionQueue); 14489 14490 this.$element.trigger('changed' + EVENT_KEY, changedArguments); 14491 14492 if (this.$newElement.hasClass(classNames.SHOW)) { 14493 if (this.multiple) { 14494 this.setOptionStatus(true); 14495 } else { 14496 var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex; 14497 14498 if (typeof liSelectedIndex === 'number') { 14499 this.setSelected(this.selectpicker.current.data[liSelectedIndex], true); 14500 } 14501 } 14502 } 14503 14504 this.render(); 14505 14506 changedArguments = null; 14507 14508 return this.$element; 14509 } else { 14510 return this.$element.val(); 14511 } 14512 }, 14513 14514 changeAll: function (status) { 14515 if (!this.multiple) return; 14516 if (typeof status === 'undefined') status = true; 14517 14518 var element = this.$element[0], 14519 previousSelected = 0, 14520 currentSelected = 0, 14521 prevValue = getSelectValues.call(this); 14522 14523 element.classList.add('bs-select-hidden'); 14524 14525 for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) { 14526 var liData = data[i], 14527 option = liData.option; 14528 14529 if (option && !liData.disabled && liData.type !== 'divider') { 14530 if (liData.selected) previousSelected++; 14531 option.selected = status; 14532 liData.selected = status; 14533 if (status === true) currentSelected++; 14534 } 14535 } 14536 14537 element.classList.remove('bs-select-hidden'); 14538 14539 if (previousSelected === currentSelected) return; 14540 14541 this.setOptionStatus();
14542 14543 changedArguments = [null, null, prevValue]; 14544 14545 this.$element 14546 .triggerNative('change'); 14547 }, 14548 14549 selectAll: function () { 14550 return this.changeAll(true); 14551 }, 14552 14553 deselectAll: function () { 14554 return this.changeAll(false); 14555 }, 14556 14557 toggle: function (e, state) { 14558 var isActive, 14559 triggerClick = state === undefined; 14560 14561 e = e || window.event; 14562 14563 if (e) e.stopPropagation(); 14564 14565 if (triggerClick === false) { 14566 isActive = this.$newElement[0].classList.contains(classNames.SHOW); 14567 triggerClick = state === true && isActive === false || state === false && isActive === true; 14568 } 14569 14570 if (triggerClick) this.$button.trigger('click.bs.dropdown.data-api'); 14571 }, 14572 14573 open: function (e) { 14574 this.toggle(e, true); 14575 }, 14576 14577 close: function (e) { 14578 this.toggle(e, false); 14579 }, 14580 14581 keydown: function (e) { 14582 var $this = $(this), 14583 isToggle = $this.hasClass('dropdown-toggle'), 14584 $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU), 14585 that = $parent.data('this'), 14586 $items = that.findLis(), 14587 index, 14588 isActive, 14589 liActive, 14590 activeLi, 14591 offset, 14592 updateScroll = false, 14593 downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab, 14594 isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab, 14595 scrollTop = that.$menuInner[0].scrollTop, 14596 isVirtual = that.isVirtual(), 14597 position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; 14598 14599 // do nothing if a function key is pressed 14600 if (e.which >= 112 && e.which <= 123) return; 14601 14602 isActive = that.$menu.hasClass(classNames.SHOW); 14603 14604 if ( 14605 !isActive && 14606 ( 14607 isArrowKey || 14608 (e.which >= 48 && e.which <= 57) || 14609 (e.which >= 96 && e.which <= 105) || 14610 (e.which >= 65 && e.which <= 90) 14611 ) 14612 ) { 14613 that.$button.trigger('click.bs.dropdown.data-api'); 14614 14615 if (that.options.liveSearch) { 14616 that.$searchbox.trigger('focus'); 14617 return; 14618 } 14619 } 14620 14621 if (e.which === keyCodes.ESCAPE && isActive) { 14622 e.preventDefault(); 14623 that.$button.trigger('click.bs.dropdown.data-api').trigger('focus'); 14624 } 14625 14626 if (isArrowKey) { // if up or down 14627 if (!$items.length) return; 14628 14629 liActive = that.activeElement; 14630 index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1; 14631 14632 if (index !== -1) { 14633 that.defocusItem(liActive); 14634 } 14635 14636 if (e.which === keyCodes.ARROW_UP) { // up 14637 if (index !== -1) index--; 14638 if (index + position0 < 0) index += $items.length; 14639 14640 if (!that.selectpicker.view.canHighlight[index + position0]) { 14641 index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0; 14642 if (index === -1) index = $items.length - 1; 14643 } 14644 } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down 14645 index++; 14646 if (index + position0 >= that.selectpicker.view.canHighlight.length) index = that.selectpicker.view.firstHighlightIndex; 14647 14648 if (!that.selectpicker.view.canHighlight[index + position0]) { 14649 index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true); 14650 } 14651 } 14652 14653 e.preventDefault(); 14654 14655 var liActiveIndex = position0 + index; 14656 14657 if (e.which === keyCodes.ARROW_UP) { // up 14658 // scroll to bottom and highlight last option 14659 if (position0 === 0 && index === $items.length - 1) { 14660 that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight; 14661 14662 liActiveIndex = that.selectpicker.current.elements.length - 1; 14663 } else { 14664 activeLi = that.selectpicker.current.data[liActiveIndex]; 14665 14666 // could be undefined if no results exist 14667 if (activeLi) { 14668 offset = activeLi.position - activeLi.height; 14669 14670 updateScroll = offset < scrollTop; 14671 } 14672 } 14673 } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down 14674 // scroll to top and highlight first option
vendor: 4,725 bytes, lines 14675-14787
14675 if (index === that.selectpicker.view.firstHighlightIndex) { 14676 that.$menuInner[0].scrollTop = 0; 14677 14678 liActiveIndex = that.selectpicker.view.firstHighlightIndex; 14679 } else { 14680 activeLi = that.selectpicker.current.data[liActiveIndex]; 14681 14682 // could be undefined if no results exist 14683 if (activeLi) { 14684 offset = activeLi.position - that.sizeInfo.menuInnerHeight; 14685 14686 updateScroll = offset > scrollTop; 14687 } 14688 } 14689 } 14690 14691 liActive = that.selectpicker.current.elements[liActiveIndex]; 14692 14693 that.activeElement = (that.selectpicker.current.data[liActiveIndex] || {}).element; 14694 14695 that.focusItem(liActive); 14696 14697 that.selectpicker.view.currentActive = liActive; 14698 14699 if (updateScroll) that.$menuInner[0].scrollTop = offset; 14700 14701 if (that.options.liveSearch) { 14702 that.$searchbox.trigger('focus'); 14703 } else { 14704 $this.trigger('focus'); 14705 } 14706 } else if ( 14707 (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which)) || 14708 (e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) 14709 ) { 14710 var searchMatch, 14711 matches = [], 14712 keyHistory; 14713 14714 e.preventDefault(); 14715 14716 that.selectpicker.keydown.keyHistory += keyCodeMap[e.which]; 14717 14718 if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel); 14719 that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start(); 14720 14721 keyHistory = that.selectpicker.keydown.keyHistory; 14722 14723 // if all letters are the same, set keyHistory to just the first character when searching 14724 if (/^(.)\1+$/.test(keyHistory)) { 14725 keyHistory = keyHistory.charAt(0); 14726 } 14727 14728 // find matches 14729 for (var i = 0; i < that.selectpicker.current.data.length; i++) { 14730 var li = that.selectpicker.current.data[i], 14731 hasMatch; 14732 14733 hasMatch = stringSearch(li, keyHistory, 'startsWith', true); 14734 14735 if (hasMatch && that.selectpicker.view.canHighlight[i]) { 14736 matches.push(li.element); 14737 } 14738 } 14739 14740 if (matches.length) { 14741 var matchIndex = 0; 14742 14743 $items.removeClass('active').find('a').removeClass('active'); 14744 14745 // either only one key has been pressed or they are all the same key 14746 if (keyHistory.length === 1) { 14747 matchIndex = matches.indexOf(that.activeElement); 14748 14749 if (matchIndex === -1 || matchIndex === matches.length - 1) { 14750 matchIndex = 0; 14751 } else { 14752 matchIndex++; 14753 } 14754 } 14755 14756 searchMatch = matches[matchIndex]; 14757 14758 activeLi = that.selectpicker.main.data[searchMatch]; 14759 14760 if (scrollTop - activeLi.position > 0) { 14761 offset = activeLi.position - activeLi.height; 14762 updateScroll = true; 14763 } else { 14764 offset = activeLi.position - that.sizeInfo.menuInnerHeight; 14765 // if the option is already visible at the current scroll position, just keep it the same 14766 updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight; 14767 } 14768 14769 liActive = that.selectpicker.main.elements[searchMatch]; 14770 14771 that.activeElement = liActive; 14772 14773 that.focusItem(liActive); 14774 14775 if (liActive) liActive.firstChild.focus(); 14776 14777 if (updateScroll) that.$menuInner[0].scrollTop = offset; 14778 14779 $this.trigger('focus'); 14780 } 14781 } 14782 14783 // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu. 14784 if ( 14785 isActive && 14786 ( 14787 (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory) ||
14788 e.which === keyCodes.ENTER || 14789 (e.which === keyCodes.TAB && that.options.selectOnTab) 14790 ) 14791 ) { 14792 if (e.which !== keyCodes.SPACE) e.preventDefault(); 14793 14794 if (!that.options.liveSearch || e.which !== keyCodes.SPACE) { 14795 that.$menuInner.find('.active a').trigger('click', true); // retain active class 14796 $this.trigger('focus'); 14797 14798 if (!that.options.liveSearch) { 14799 // Prevent screen from scrolling if the user hits the spacebar 14800 e.preventDefault(); 14801 // Fixes spacebar selection of dropdown items in FF & IE 14802 $(document).data('spaceSelect', true); 14803 } 14804 } 14805 } 14806 }, 14807 14808 mobile: function () { 14809 // ensure mobile is set to true if mobile function is called after init 14810 this.options.mobile = true; 14811 this.$element[0].classList.add('mobile-device'); 14812 }, 14813 14814 refresh: function () { 14815 var that = this; 14816 // update options if data attributes have been changed 14817 var config = $.extend({}, this.options, getAttributesObject(this.$element), this.$element.data()); // in this order on refresh, as user may change attributes on select, and options object is not passed on refresh 14818 this.options = config; 14819 14820 if (this.options.source.data) { 14821 this.render(); 14822 this.buildList(); 14823 } else { 14824 this.fetchData(function () { 14825 that.render(); 14826 that.buildList(); 14827 }); 14828 } 14829 14830 this.checkDisabled(); 14831 this.setStyle(); 14832 this.setWidth(); 14833 14834 this.setSize(true); 14835 14836 this.$element.trigger('refreshed' + EVENT_KEY); 14837 }, 14838 14839 hide: function () { 14840 this.$newElement.hide(); 14841 }, 14842 14843 show: function () { 14844 this.$newElement.show(); 14845 }, 14846 14847 remove: function () { 14848 this.$newElement.remove(); 14849 this.$element.remove(); 14850 }, 14851 14852 destroy: function () { 14853 this.$newElement.before(this.$element).remove(); 14854 14855 if (this.$bsContainer) { 14856 this.$bsContainer.remove(); 14857 } else { 14858 this.$menu.remove(); 14859 } 14860 14861 if (this.selectpicker.view.titleOption && this.selectpicker.view.titleOption.parentNode) { 14862 this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption); 14863 } 14864 14865 this.$element 14866 .off(EVENT_KEY) 14867 .removeData('selectpicker') 14868 .removeClass('bs-select-hidden selectpicker mobile-device'); 14869 14870 $(window).off(EVENT_KEY + '.' + this.selectId); 14871 } 14872 }; 14873 14874 // SELECTPICKER PLUGIN DEFINITION 14875 // ============================== 14876 function Plugin (option) { 14877 // get the args of the outer function.. 14878 var args = arguments; 14879 // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them 14880 // to get lost/corrupted in android 2.3 and IE9 #715 #775 14881 var _option = option; 14882 14883 [].shift.apply(args); 14884 14885 // if the version was not set successfully 14886 if (!version.success) { 14887 // try to retreive it again 14888 try { 14889 version.full = (getVersion() || '').split(' ')[0].split('.'); 14890 } catch (err) { 14891 // fall back to use BootstrapVersion if set 14892 if (Selectpicker.BootstrapVersion) { 14893 version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.'); 14894 } else { 14895 version.full = [version.major, '0', '0']; 14896 14897 console.warn( 14898 'There was an issue retrieving Bootstrap\'s version. ' + 14899 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + 14900 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', 14901 err 14902 ); 14903 } 14904 } 14905 14906 version.major = version.full[0]; 14907 version.success = true; 14908 } 14909 14910 if (version.major >= '4') { 14911 // some defaults need to be changed if using Bootstrap 4 14912 // check to see if they have already been manually changed before forcing them to update
14913 var toUpdate = []; 14914 14915 if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({ name: 'style', className: 'BUTTONCLASS' }); 14916 if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({ name: 'iconBase', className: 'ICONBASE' }); 14917 if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({ name: 'tickIcon', className: 'TICKICON' }); 14918 14919 classNames.DIVIDER = 'dropdown-divider'; 14920 classNames.SHOW = 'show'; 14921 classNames.BUTTONCLASS = 'btn-light'; 14922 classNames.POPOVERHEADER = 'popover-header'; 14923 classNames.ICONBASE = ''; 14924 classNames.TICKICON = 'bs-ok-default'; 14925 14926 for (var i = 0; i < toUpdate.length; i++) { 14927 var option = toUpdate[i]; 14928 Selectpicker.DEFAULTS[option.name] = classNames[option.className]; 14929 } 14930 } 14931 14932 if (version.major > '4') { 14933 Selector.DATA_TOGGLE = 'data-bs-toggle="dropdown"'; 14934 } 14935 14936 var value; 14937 var chain = this.each(function () { 14938 var $this = $(this); 14939 if ($this.is('select')) { 14940 var data = $this.data('selectpicker'), 14941 options = typeof _option == 'object' && _option; 14942 14943 // for backwards compatibility 14944 // (using title as placeholder is deprecated - remove in v2.0.0) 14945 if (options.title) options.placeholder = options.title; 14946 14947 if (!data) { 14948 var dataAttributes = $this.data(); 14949 14950 for (var dataAttr in dataAttributes) { 14951 if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) { 14952 delete dataAttributes[dataAttr]; 14953 } 14954 } 14955 14956 var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, getAttributesObject($this), dataAttributes, options); // this is correct order on initial render 14957 config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), dataAttributes.template, options.template); 14958 config.source = $.extend({}, Selectpicker.DEFAULTS.source, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.source : {}), options.source); 14959 $this.data('selectpicker', (data = new Selectpicker(this, config))); 14960 } else if (options) { 14961 for (var i in options) { 14962 if (Object.prototype.hasOwnProperty.call(options, i)) { 14963 data.options[i] = options[i]; 14964 } 14965 } 14966 } 14967 14968 if (typeof _option == 'string') { 14969 if (data[_option] instanceof Function) { 14970 value = data[_option].apply(data, args); 14971 } else { 14972 value = data.options[_option]; 14973 } 14974 } 14975 } 14976 }); 14977 14978 if (typeof value !== 'undefined') { 14979 // noinspection JSUnusedAssignment 14980 return value; 14981 } else { 14982 return chain; 14983 } 14984 } 14985 14986 var old = $.fn.selectpicker; 14987 $.fn.selectpicker = Plugin; 14988 $.fn.selectpicker.Constructor = Selectpicker; 14989 14990 // SELECTPICKER NO CONFLICT 14991 // ======================== 14992 $.fn.selectpicker.noConflict = function () { 14993 $.fn.selectpicker = old; 14994 return this; 14995 }; 14996 14997 // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3 14998 function keydownHandler () { 14999 if (version.major < 5) { 15000 if ($.fn.dropdown) { 15001 // wait to define until function is called in case Bootstrap isn't loaded yet 15002 var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown; 15003 return bootstrapKeydown.apply(this, arguments); 15004 } 15005 } else { 15006 return Dropdown.dataApiKeydownHandler; 15007 } 15008 } 15009 15010 $(document) 15011 .off('keydown.bs.dropdown.data-api') 15012 .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [' + Selector.DATA_TOGGLE + ']', keydownHandler) 15013 .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler) 15014 .on('keydown' + EVENT_KEY, '.bootstrap-select [' + Selector.DATA_TOGGLE + '], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown) 15015 .on('focusin.modal', '.bootstrap-select [' + Selector.DATA_TOGGLE + '], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', function (e) { 15016 e.stopPropagation(); 15017 }); 15018 15019 // SELECTPICKER DATA-API 15020 // ===================== 15021 document.addEventListener('DOMContentLoaded', function () { 15022 $('.selectpicker').each(function () { 15023 var $selectpicker = $(this); 15024 Plugin.call($selectpicker, $selectpicker.data()); 15025 }); 15026 });
15027})(jQuery); 15028//Using an object literal for a jQuery feature 15029var website = { 15030 init: function( settings ) { 15031 website.config = { 15032 bxslider: '.bxslider', 15033 bxslider_banners: '.bxslider_banners', 15034 bxSliders: {}, 15035 lazyload: 'img.lazy', 15036 imagefit: '.image-fit', 15037 sectionfit: '.section-fit', 15038 videofit: '.video-fit', 15039 fancy: '[rel="lightbox"]', 15040 fancyContact: '[rel="form"]', 15041 orphans: 'article p', 15042 animate: '.animated', 15043 dotted:'.dotdotdot', 15044 nano:'.nano', 15045 selectpicker:'.selectpicker', 15046 smoothscroll: '.navbar a, .tour-subnav a, .smoothscroll', 15047 data: '', 15048 swiperSelector: '.swiper', 15049 swipers: [], 15050 inputHasValue: 'input, textarea', 15051 bottomBarSelector: '.bottom-bar', 15052 mobile: 1024, 15053 }; 15054 //allow overriding the default config 15055 $.extend( website.config, settings ); 15056 15057 website.initNav(); 15058 website.initFbTab(); 15059 website.tryInitECommerce(); 15060 website.setup(); 15061 website.initDisplayingCheckedInputs(); 15062 website.initBottomBar( $( website.config.bottomBarSelector ) ); 15063 15064 website.registerLang(); 15065 website.checkDomain(); 15066 15067 setInterval( function() { 15068 /*website.initFitSection( website.config.sectionfit ); 15069 website.initFitImage( website.config.imagefit );*/ 15070 } , 1000 ); 15071 }, 15072 setup: function( obj ) { 15073 if( typeof obj == "undefined" ) obj = $('body'); 15074 else obj = $(obj); 15075 15076 website.initFitSection( obj.find( website.config.sectionfit ) ); 15077 website.initFitImage( obj.find( website.config.imagefit ) ); 15078 website.initBxSlider( obj.find( website.config.bxslider ) ); 15079 website.initBxSlider2( obj.find( website.config.bxslider_banners ) ); 15080 website.initFitVideo( website.config.videofit ); 15081 15082 website.initLazyLoad( obj.find( website.config.lazyload ) ); 15083 website.initFancybox( obj.find( website.config.fancy ) ); 15084 website.initFancyboxContact( obj.find( website.config.fancyContact ) ); 15085 website.initOrphans( obj.find( website.config.orphans ) ); 15086 website.initSmoothScroll( obj.find( website.config.smoothscroll ) ); 15087 website.initAnimate( obj.find( website.config.animate ) ); 15088 // website.initDotted( obj.find( website.config.dotted ) ); 15089 // website.initStellar( ); 15090 // website.initNano( obj.find( website.config.nano ) ); 15091 website.initSelectpicker( obj.find( website.config.selectpicker ) ); 15092 website.initSwiper( obj.find( website.config.swiperSelector ) ); 15093 website.initInputHasValue( obj.find( website.config.inputHasValue ) ); 15094 website.initMobile( website.config.mobile ); 15095 website.initBasket(); 15096 15097 obj.tooltip({'selector':'[rel=tooltip]'/*, container: 'body'*/}); 15098 obj.popover({'selector':'[rel=popover]', container: 'body'}); 15099 }, 15100 resize: function() { 15101 //website.initFitSection( website.config.sectionfit ); 15102 website.initFitImage( website.config.imagefit ); 15103 website.initMobile( website.config.mobile ); 15104 15105 for(var i = 0, keys = Object.keys(website.config.swipers), swiper; swiper = website.config.swipers[keys[i]]; i++) 15106 { 15107 swiper.updateSize(); 15108 } 15109 15110 setTimeout( function(){ 15111 website.initFitImage( website.config.imagefit ); 15112 }, 500 ); 15113 }, 15114 15115 initMobile: function( size ) { 15116 15117 if( $('body').data('detect').indexOf('mobile')>=0 || window.self !== window.top ) return; 15118 15119 var tablet = 1024; 15120 var phone = 768; 15121 15122 urlstring = document.location.href; 15123 15124 if( window.innerWidth < phone && $('body').data('mobile').indexOf('phone')<0 ){ 15125 urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=phone'; 15126 document.location.href = urlstring; 15127 } 15128 if( window.innerWidth <= tablet && $(window).width() >= phone && $('body').data('mobile').indexOf('tablet')<0 ){ 15129 urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=tablet'; 15130 document.location.href = urlstring; 15131 } 15132 if( window.innerWidth > tablet && $('body').data('mobile').indexOf('desktop')<0 ){ 15133 urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=0'; 15134 document.location.href = urlstring; 15135 } 15136 }, 15137 15138 initFitVideo: function( obj ) { 15139 $(obj).each(function( id, el ) { 15140 website.fitImage( $(el), $(el).find('video'), 1 ); 15141 }); 15142 }, 15143 15144 fitImage: function( imgFrame, imgObj, nofade ){ 15145 15146 if( !$(imgObj).hasClass('loaded') && !nofade ) 15147 $(imgObj).fadeOut(); 15148 15149 $(imgFrame).css('position', 'relative' ); 15150 $(imgFrame).css('overflow', 'hidden' ); 15151 $(imgObj).css('position', 'absolute' ); 15152 $(imgObj).css('max-width', 'none' ); 15153 15154 var frameW = $(imgFrame).actual( 'width' ); 15155 var frameH = $(imgFrame).actual( 'height' ); 15156 var imgW = $(imgObj).actual( 'width' ); 15157 var imgH = $(imgObj).actual( 'height' ); 15158 15159 ratioW = frameW / imgW; 15160 ratioH = frameH / imgH; 15161 15162 if ( ratioW > ratioH ) { 15163 $(imgObj).css("width", parseInt(frameW)); 15164 $(imgObj).css("height", 'auto' ); 15165 } 15166 else { 15167 $(imgObj).css("height", parseInt(frameH)); 15168 $(imgObj).css("width", 'auto' ); 15169 }; 15170 15171 imgW = $(imgObj).actual( 'width' ); 15172 imgH = $(imgObj).actual( 'height' ); 15173 15174 $(imgObj).css("top", (frameH-imgH)/2); 15175 $(imgObj).css("left", (frameW-imgW)/2); 15176 15177 $( imgObj ).load(function() { 15178 $(imgObj).addClass('loaded'); 15179 $(imgObj).fadeIn(); 15180 website.fitImage( imgFrame, imgObj ); 15181 }); 15182 15183 setTimeout(function() { 15184 $(imgObj).fadeIn(); 15185 }, 1000 15186 ); 15187 15188 if( nofade ){ 15189 $( imgObj ).bind("loadedmetadata", function() { 15190 $(imgObj).addClass('loaded'); 15191 website.fitImage( imgFrame, imgObj ); 15192 }); 15193 } 15194 }, 15195 15196 //Init all lazy images based on .lazy class 15197 initNav: function( obj ) { 15198 $('.btn-navbar span').css('display', 'none' ); 15199 $('.btn-navbar').append( "<strong>MENU</strong>" ); 15200 $( '.navbar .nav > .active' ).append( "<div class='line'></div>" ); 15201 }, 15202 15203 initDotted: function( obj ) { 15204 $(obj).dotdotdot({ 15205 watch : true, 15206 } ); 15207 }, 15208 15209 tryInitECommerce: function(obj) { 15210 console.log( "tryInitECommerce" ); 15211 15212 let time = true; 15213 15214 // event for product remove by clicking "X" on the basketWidget 15215 $('body').on('click', '.cart-more a[data-ecommerce]', function (e) { 15216 var elem = $(this); 15217 website.sendRemoveFromCart(elem); 15218 }); 15219 15220 setTimeout(function(){ 15221 time = false;
15222 }, 10e3); 15223 15224 function tryInit() { 15225 var result = website.initECommerce(obj); 15226 if (result === false || time) { 15227 setTimeout(tryInit, 1000, obj); 15228 } 15229 } 15230 tryInit(); 15231 }, 15232 15233 initECommerce: function(obj = document.body) { 15234 //console.log( "tryInitECommerce" ); 15235 //console.log( obj ); 15236 var elements = website.findEcommerce(obj); 15237 15238 if (elements === false) { 15239 return false; 15240 } 15241 15242 website.sendImpressions(elements); 15243 15244 elements.attr('data-ecommerce-inited', true); 15245 15246 return elements; 15247 }, 15248 15249 findEcommerce: function(obj = document.body) { 15250 var elements = $(obj).find('[data-ecommerce]:not([data-ecommerce-inited])'); 15251 if (!elements.length) { 15252 return false; 15253 } 15254 return elements; 15255 }, 15256 15257 sendImpressions: function(elements) { 15258 website.sendProductsImpressions(elements); 15259 website.sendPromotionsImpressions(elements); 15260 }, 15261 15262 sendProductsImpressions: function(elements) { 15263 console.log( "sendProductsImpressions" ); 15264 15265 let products = []; 15266 for (let index = 0; index < elements.length; ++index) { 15267 const element = elements[index]; 15268 15269 let json_string = element.getAttribute('data-json'); 15270 let json = JSON.parse(json_string); 15271 if (json && json.type == 'product') { 15272 15273 // add listener for clicks 15274 if (element.hasAttribute('data-click')) { 15275 element.addEventListener('click', website.sendProductClick); 15276 // console.log('dodaÅem eventListener do produktu!'); 15277 } 15278 15279 // impression should be counted only once, so we use this tag 'data-impression' on only one of the product links. 15280 if (element.hasAttribute('data-impression')) { 15281 products.push(json); 15282 // console.log('wysÅaÅem impression produktu!'); 15283 // console.log(json); 15284 } 15285 } 15286 15287 }; 15288 15289 window.dataLayer = window.dataLayer || []; 15290 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15291 dataLayer.push({ 15292 'ecommerce': { 15293 'currencyCode': 'PLN', // Local currency is optional. 15294 'impressions': products 15295 } 15296 }); 15297 }, 15298 15299 sendPromotionsImpressions: function(elements) { 15300 let promotions = []; 15301 for (let index = 0; index < elements.length; ++index) { 15302 const element = elements[index]; 15303 let json_string = element.getAttribute('data-json'); 15304 let json = JSON.parse(json_string); 15305 if (json && json.type == 'promotion') { 15306 promotions.push(json); 15307 // add listener for clicks 15308 element.addEventListener('click', website.sendPromotionClick); 15309 // console.log('dodaÅem eventListener do promocji!'); 15310 } 15311 }; 15312 15313 // send impressions 15314 window.dataLayer = window.dataLayer || []; 15315 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15316 dataLayer.push({ 15317 'ecommerce': { 15318 'promoView': { 15319 'promotions': promotions 15320 } 15321 } 15322 }); 15323 }, 15324 15325 sendPromotionClick: function(event) { 15326 console.log('promo click!'); 15327 var json = JSON.parse( this.getAttribute('data-json') ); 15328 15329 window.dataLayer = window.dataLayer || []; 15330 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15331 dataLayer.push({ 15332 'event': 'promotionClick', 15333 'ecommerce': { 15334 'promoClick': { 15335 'promotions': [json] 15336 } 15337 }, 15338 }); 15339 }, 15340 15341 sendProductClick: function(event) { 15342 //console.log('product click!'); 15343 15344 var json = JSON.parse( this.getAttribute('data-json') ); 15345 15346 window.dataLayer = window.dataLayer || []; 15347 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15348 dataLayer.push({ 15349 'event': 'productClick', 15350 'ecommerce': { 15351 'click': { 15352 'actionField': {'list': 'Search Results'}, // Optional list property. 15353 'products': [json] 15354 } 15355 }, 15356 }); 15357 }, 15358 15359 sendAddToCart: function(element, quantity) { 15360 var json = element.data('json'); 15361 if( typeof json === "undefined" ) return; 15362 // if the argument is null, then take the quantity from the data-field 15363 json.quantity = quantity ? quantity : json.quantity; 15364 15365 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15366 dataLayer.push({ 15367 'event': 'addToCart', 15368 'ecommerce': { 15369 'currencyCode': 'PLN', 15370 'add': { // 'add' actionFieldObject measures. 15371 'products': [json] // adding a product to a shopping cart. 15372 } 15373 } 15374 }); 15375 console.log('Add sent: '+json.quantity); 15376 }, 15377 15378 sendRemoveFromCart: function(element, quantity) { 15379 var json = element.data('json'); 15380 if( typeof json === "undefined" ) return; 15381 15382 json.quantity = quantity ? quantity : json.quantity; 15383 15384 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 15385 dataLayer.push({ 15386 'event': 'removeFromCart', 15387 'ecommerce': { 15388 'currencyCode': 'PLN', 15389 'remove': { // 'remove' actionFieldObject measures. 15390 'products': [json] // removing a product from a shopping cart. 15391 } 15392 } 15393 }); 15394 console.log('Remove sent: '+json.quantity); 15395 }, 15396 15397 initNano: function( obj ) { 15398 $(obj).nanoScroller({
15399 alwaysVisible: true, 15400 preventPageScrolling: true, 15401 }); 15402 }, 15403 15404 initStellar: function( ) { 15405 $.stellar({ 15406 horizontalScrolling: false, 15407 verticalOffset: 0, 15408 positionProperty: 'transform', 15409 responsive: true, 15410 hideDistantElements: false, 15411 }); 15412 }, 15413 15414 15415 initSelectpicker: function( obj ) { 15416 15417 if( !$.isFunction( $.fn.selectpicker ) ) return; 15418 15419 var defaultWhiteList = $.fn.selectpicker.Constructor.DEFAULTS.whiteList; 15420 var dataRegex = /^data-[\w-]+/; 15421 defaultWhiteList['*'].push(dataRegex); 15422 15423 $(obj).each(function( id, el ) { 15424 $(el).selectpicker( $(el).data() ); 15425 }); 15426 }, 15427 15428 //Init all bxsliders based on .bxslider class 15429 initBxSlider: function( obj ) { 15430 if( !$.isFunction( $.fn.bxSlider ) ) return; 15431 15432 $(obj).each(function( id, el ) { 15433 if( !$(el).parent().hasClass('bx-viewport') ){ 15434 15435 var elId = $(el).attr('id') ? $(el).attr('id') : 'bx'+ Object.keys(website.config.bxSliders).length; 15436 15437 website.config.bxSliders[elId] = $(el).bxSlider( $.extend({ 15438 onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15439 onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15440 pagerCustom: '#bx-pager', 15441 speed: 1000, 15442 easing: 'easeInOutExpo', 15443 useCSS: false 15444 }, $(el).data() ) ); 15445 } 15446 }); 15447 }, 15448 initBxSlider2: function( obj ) { 15449 if( !$.isFunction( $.fn.bxSlider ) ) return; 15450 15451 $(obj).each(function( id, el ) { 15452 15453 if( !$(el).parent().hasClass('bx-viewport') ){ 15454 15455 if( $(el).hasClass("noslider") ){ 15456 $(el).bxSlider( $.extend({ 15457 onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15458 onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15459 auto: false, 15460 pager: false, 15461 controls: false, 15462 easing: 'easeInOutExpo', 15463 useCSS: false 15464 }, $(el).data() ) ); 15465 } 15466 else{ 15467 $(el).bxSlider( $.extend({ 15468 onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15469 onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); }, 15470 auto: true, 15471 //mode: 'fade', 15472 tickerHover: true, 15473 pager: true, 15474 controls: false, 15475 pause: 5000, 15476 speed: 1000, 15477 easing: 'easeInOutExpo', 15478 useCSS: false 15479 }, $(el).data() ) ); 15480 } 15481 15482 } 15483 }); 15484 }, 15485 15486 initSwiper: function (obj) { 15487 if(!Swiper) return; 15488 var swipersSync = []; 15489 $(obj).each(function (id, el) { 15490 var $el = $(el); 15491 if(!$el.find('.swiper-slide').length) return; 15492 var data = $el.data(); 15493 if(data.pagination) 15494 { 15495 for(var ind1= 0, funName1, keys1 = Object.keys(data.pagination); funName1 = data.pagination[keys1[ind1]]; ind1++ ) 15496 { 15497 if(keys1[ind1].indexOf('render') > -1) 15498 { 15499 data.pagination[keys1[ind1]] = eval('window["'+funName1.replace('.','"]["')+'"]') || funName1; 15500 } 15501 } 15502 } 15503 var pushSwiper = data.autoplay && data.swiperSyncId; 15504 if(pushSwiper) 15505 { 15506 if(!swipersSync[data.swiperSyncId]) 15507 { 15508 swipersSync[data.swiperSyncId] = { 15509 autoplay: data.autoplay, 15510 sliders: [] 15511 }; 15512 } 15513 delete data.autoplay; 15514 } 15515 var elId = $el.attr('id') ? $el.attr('id') : 'bx'+ Object.keys(website.config.swipers).length; 15516 if(data.on){ 15517 for(var ind = 0, funName, keys = Object.keys(data.on); funName = data.on[keys[ind]]; ind++ ) 15518 { 15519 data.on[keys[ind]] = $.isFunction( funName ) ? funName : eval('window["'+funName.replace('.','"]["')+'"]'); 15520 } 15521 if(data.on.init) 15522 { 15523 data.init = false; 15524 } 15525 } 15526 try{ 15527 website.config.swipers[elId] = new Swiper(this,$.extend({ 15528 loop: true 15529 },data)); 15530 15531 website.initLazyLoad( $(this).find( website.config.lazyload ) ); 15532 15533 website.config.swipers[elId].on("slideChangeTransitionEnd", function ( ) { 15534 15535 $(this.$el).find("img.lazy-waiting").filter(":in-viewport").trigger('scroll'); 15536 15537 //var $slide = $(this.slides[this.activeIndex]); 15538 var $slide = $(this.slides[this.activeIndex]); 15539 if( $slide.hasClass('swiper-slide-duplicate') ){ 15540 //console.log( "duplicate" ); 15541 website.initLazyLoad( $slide.find( ".lazy-waiting" ) ); 15542 $slide.find( ".lazy-waiting" ).trigger("scroll"); 15543 } 15544 15545 var $slide = $(this.slides[this.activeIndex+1]); 15546 if( $slide.hasClass('swiper-slide-duplicate') ){ 15547 website.initLazyLoad( $slide.find( ".lazy-waiting" ) ); 15548 } 15549 $slide.find( ".lazy-waiting" ).trigger("scroll"); 15550 15551 var $slide = $(this.slides[this.activeIndex+2]); 15552 if( $slide.hasClass('swiper-slide-duplicate') ){ 15553 website.initLazyLoad( $slide.find( ".lazy-waiting" ) ); 15554 } 15555 $slide.find( ".lazy-waiting" ).trigger("scroll"); 15556 15557 // console.log( "swipeChange:"+elId+" / "+this.realIndex+" / "+this.activeIndex ); 15558 // console.log( $slide ); 15559 }); 15560 } 15561 catch (ex) { 15562 console.log([{'elId':apielId,'context':this,'data':data,'element':el},ex]); 15563 } 15564 if(data.on && data.on.init) 15565 { 15566 website.config.swipers[elId].init(); 15567 } 15568 if(pushSwiper) swipersSync[data.swiperSyncId].sliders.push(this.swiper); 15569 }); 15570 15571 for(var fu = 0, el, keys = Object.keys(swipersSync); el = swipersSync[keys[fu]]; fu++ ){ 15572 setInterval(function () { 15573 for(var i = 0, item; item = this[i]; i++) item.slideNext(); 15574 }
15574.bind(el.sliders), (el.sliders[0].speed || 300) + (el.autoplay.delay || 5000)); 15575 } 15576 }, 15577 15578 //Init all lazy images based on .lazy class 15579 initLazyLoad: function( obj ) { 15580 if( !$.isFunction( $.fn.lazyload ) ) return; 15581 15582 $(obj).addClass('lazy-waiting').show().lazyload({ 15583 threshold : 200, 15584 failure_limit : 100, 15585 effect : "fadeIn", 15586 //bind: "appear", 15587 skip_invisible : true, 15588 appear: function() { 15589 $(this).removeClass('lazy-waiting').addClass('lazy-loading'); 15590 }, 15591 load: function() { 15592 $(this).removeClass('lazy-loading').addClass('lazy-loaded'); 15593 } 15594 }); 15595 setTimeout(function(){ 15596 $(obj).filter(":in-viewport").trigger('scroll'); 15597 }, 100); 15598 // $(obj).filter(":in-viewport").trigger('scroll'); 15599 }, 15600 15601 //Init all fancy box galleries based on rel=lightbox-gallery 15602 initFancybox: function( obj ) { 15603 if( !$.isFunction( $.fn.fancybox ) ) return; 15604 15605 $(obj).each(function( id, el ) { 15606 15607 $( el ).fancybox( $.extend( { 15608 'transitionIn' : 'elastic', 15609 'transitionOut' : 'elastic', 15610 'titlePosition' : 'inside', 15611 'overlayColor' : '#fff', 15612 'overlayOpacity' : '0.9', 15613 'padding' : '2', 15614 'iframe' : { 15615 scrolling : 'auto', 15616 preload : false 15617 } 15618 }, $(el).data() ) ); 15619 15620 }); 15621 15622 website.initFancyboxGallery(); 15623 }, 15624 15625 initFancyboxContact: function( obj ) { 15626 if( !$.isFunction( $.fn.fancybox ) ) return; 15627 15628 $(obj).each(function( id, el ) { 15629 var options = $.extend( { 15630 'transitionIn' : 'elastic', 15631 'transitionOut' : 'elastic', 15632 'titlePosition' : 'inside', 15633 'overlayColor' : '#fff', 15634 'overlayOpacity' : '0.9', 15635 'padding' : '2', 15636 'iframe' : { 15637 scrolling : 'auto', 15638 preload : false 15639 } 15640 }, $(el).data() ); 15641 15642 if (window.innerWidth <= 768) { 15643 options.width = '95%'; 15644 } else { 15645 options.width = '70%'; 15646 } 15647 15648 $( el ).fancybox( options ); 15649 }); 15650 15651 }, 15652 //Init all fancy box galleries based on rel=lightbox-gallery 15653 initFancyboxGallery: function() { 15654 if( !$.isFunction( $.fn.fancybox ) ) return; 15655 15656 var obj = '.fancybox'; 15657 var galleries = {}; 15658 $(obj).each(function( id, el ) { 15659 15660 var rel = $(el).attr('rel'); 15661 galleries[rel] = rel; 15662 }); 15663 15664 $.each( galleries, function( id, el ) { 15665 15666 el = $( '[rel='+el+']' ); 15667 $( el ).fancybox( $.extend( { 15668 'transitionIn' : 'elastic', 15669 'transitionOut' : 'elastic', 15670 'titlePosition' : 'inside', 15671 'overlayColor' : '#fff', 15672 'overlayOpacity' : '0.9', 15673 'padding' : '2', 15674 'iframe' : { 15675 scrolling : 'auto', 15676 preload : false 15677 } 15678 }, $(el).data() ) ); 15679 15680 }); 15681 }, 15682 15683 //Init all fancy box galleries based on rel=lightbox-gallery 15684 initFitImage: function( obj ) { 15685 $(obj).each(function( id, el ) { 15686 website.fitImage( $(el), $(el).find('img') ); 15687 }); 15688 }, 15689 15690 //Init all section-fit 15691 initFitSection: function( obj ) { 15692 15693 $(obj).each(function( id, el ) { 15694 15695 var wHeight = $(window).height(); 15696 var toHeight = wHeight; 15697 var headerHeight = $('header').height(); 15698 var percentHeight = $(el).data('percent-height'); 15699 var percentHeightSm = $(el).data('percent-height-sm'); 15700 var percentHeightXs = $(el).data('percent-height-xs'); 15701 15702 var pixelHeight = $(el).data('px-height'); 15703 var pixelHeightSm = $(el).data('px-height-sm'); 15704 var pixelHeightXs = $(el).data('px-height-xs'); 15705 15706 var minHeight = $(el).data('px-min-height'); 15707 var minHeightSm = $(el).data('px-min-height-sm'); 15708 var minHeightXs = $(el).data('px-min-height-xs'); 15709 15710 var offsetHeight = $(el).data('offset-height'); 15711 15712 if( percentHeight ) { 15713 toHeight = parseInt( wHeight * (percentHeight/100) ); 15714 headerHeight = parseInt( headerHeight * (percentHeight/100) ); 15715 }; 15716 if( $(window).width() < 979 && percentHeightSm ) { 15717 toHeight = parseInt( wHeight * (percentHeightSm/100) ); 15718 headerHeight = parseInt( headerHeight * (percentHeightSm/100) ); 15719 }; 15720 if( $(window).width() < 768 && percentHeightXs ) { 15721 toHeight = parseInt( wHeight * (percentHeightXs/100) ); 15722 headerHeight = parseInt( headerHeight * (percentHeightXs/100) ); 15723 } 15724 15725 if( pixelHeight ) { 15726 toHeight = pixelHeight; 15727 headerHeight = 0; 15728 }; 15729 if( $(window).width() < 979 && pixelHeightSm ) { 15730 toHeight = pixelHeightSm;
15731 headerHeight = 0; 15732 }; 15733 if( $(window).width() < 768 && pixelHeightXs ) { 15734 toHeight = pixelHeightXs; 15735 headerHeight = 0; 15736 } 15737 15738 if( $(window).width() < 979 && minHeightSm ) { 15739 minHeight = minHeightSm; 15740 }; 15741 if( $(window).width() < 768 && minHeightXs ) { 15742 minHeight = minHeightXs; 15743 } 15744 15745 //offset height if needed 15746 if( offsetHeight ) { 15747 toHeight = toHeight - offsetHeight 15748 }; 15749 15750 15751 if( !$(el).hasClass('no-header') ) toHeight = toHeight-headerHeight; 15752 if( $(window).width() < 979 && $(el).hasClass('no-mobilefit') ) toHeight = 'auto'; 15753 15754 //SET HEIGHT 15755 if( minHeight && toHeight < minHeight ) { 15756 $(el).css("height", minHeight ); 15757 } else { 15758 $(el).css("height", toHeight ); 15759 } 15760 15761 }); 15762 }, 15763 15764 fitImage: function( imgFrame, imgObj ){ 15765 15766 $(imgFrame).css('position', 'relative' ); 15767 $(imgFrame).css('overflow', 'hidden' ); 15768 $(imgObj).css('position', 'absolute' ); 15769 $(imgObj).css('max-width', 'none' ); 15770 15771 var frameW = $(imgFrame).actual( 'width' ); 15772 var frameH = $(imgFrame).actual( 'height' ); 15773 var imgW = $(imgObj).actual( 'width' ); 15774 var imgH = $(imgObj).actual( 'height' ); 15775 15776 ratioW = frameW / imgW; 15777 ratioH = frameH / imgH; 15778 15779 if ( ratioW > ratioH ) { 15780 $(imgObj).css("width", parseInt(frameW)); 15781 $(imgObj).css("height", 'auto' ); 15782 } 15783 else { 15784 $(imgObj).css("height", parseInt(frameH)); 15785 $(imgObj).css("width", 'auto' ); 15786 }; 15787 15788 imgW = $(imgObj).actual( 'width' ); 15789 imgH = $(imgObj).actual( 'height' ); 15790 15791 $(imgObj).css("top", (frameH-imgH)/2); 15792 $(imgObj).css("left", (frameW-imgW)/2); 15793 15794 $( imgObj ).load(function() { website.fitImage( imgFrame, imgObj ); }); 15795 }, 15796 15797 initOrphans: function( obj ){ 15798 $( obj ).each(function( id, el ) { 15799 content = $(el).html(); 15800 if( content && content.length > 0) { 15801 replaced = content.replace(/(\s)([\S])[\s]+/g, "$1$2 "); 15802 $(el).html(replaced); 15803 } 15804 }); 15805 }, 15806 15807 //Init smooth scroll plugin 15808 initSmoothScroll: function( obj ) { 15809 if( !$.isFunction( $.fn.smoothScroll ) ) return; 15810 15811 $(obj).smoothScroll( { easing: 'easeInOutExpo', speed: 1000 } ); 15812 }, 15813 15814 //Init contact 15815 initEmails: function() { 15816 15817 $('a[href^="mailto:"]').each(function( id, el ) { 15818 15819 var email_encoded = $( el ).attr('href').replace('mailto:', ''); 15820 var email = $.rot13( email_encoded ); 15821// console.log( email_encoded + " -> " + email ); 15822 15823 $( el ).attr('href', $( el ).attr('href').replace( email_encoded , email) ); 15824 $( el ).html( $( el ).html().replace( email_encoded , email) ); 15825 15826 if( $( el ).attr('data-original-title') ) 15827 $( el ).attr('data-original-title', $( el ).attr('data-original-title').replace( email_encoded , email) ); 15828 }); 15829 }, 15830 15831 initAnimate: function( obj ) { 15832 15833 $(obj).each(function( id, el ) { 15834 15835 var type = $(el).data('animate-class'); 15836 if( typeof type === "undefined" ) type = 'fadeIn'; 15837 var delay = $(el).data('animate-delay'); 15838 15839 var event = $(el).data('animate-event'); 15840 var eventType = $(el).data('animate-event-class'); 15841 var event2 = $(el).data('animate-event2'); 15842 var eventType2 = $(el).data('animate-event-class2'); 15843 15844 if( event ){ 15845 $(el).bind( event, function() { 15846 $(el).removeClass( type ).removeClass( eventType ).removeClass( eventType2 ).addClass( eventType ); 15847 }); 15848 } 15849 if( event2 ){ 15850 $(el).bind( event2, function() { 15851 $(el).removeClass( type ).removeClass( eventType ).removeClass( eventType2 ).addClass( eventType2 ); 15852 }); 15853 } 15854 15855 if( delay ){ 15856 $(el).css('opacity', 0); 15857 setTimeout( function(){ 15858 $(el).css('opacity', 1); 15859 $(el).removeClass( type ).addClass( type); 15860 }, delay ); 15861 } 15862 else{ 15863 $(el).removeClass( type ).addClass( type); 15864 } 15865 }); 15866 }, 15867 15868 initFbTab: function() { 15869 var el = '.fb-tab'; 15870 if ($(el).length) { 15871 var baseWidth = $(el).find('.content').outerWidth(); 15872 $('.tab').bind('mouseenter', function() { 15873 //$(el).css('z-index', 110); 15874 $(el).stop(true,false).animate( { right : 0 }, 400, 'easeInOutExpo'); 15875 }); 15876 15877 $(el).bind('mouseleave', function() { 15878 $(el).stop(true,false).animate( { right : -(baseWidth) }, 400, 'easeInOutExpo', function() { 15879 //$(el).css('z-index', 20); 15880 }); 15881 }) 15882 } 15883 }, 15884 15885 initDisplayingCheckedInputs: function() { 15886 //$( "input[type=checkbox]:checked:enabled" ).each(function(index, el) { 15887 // $(el).parent().addClass("checked"); 15888 //}); 15889 //$( "input[type=radio]:checked:enabled" ).each(function(index, el) { 15890 // $(el).parent().addClass("checked"); 15891 //}); 15892 15893 $( "input[type=checkbox], input[type=radio]" ).each(function(index, el) { 15894 $(this).prop("checked") ? $(this).parent().addClass("checked") : $(this).parent().removeClass("checked"); 15895 }); 15896 15897 $("input[type=checkbox]").change(function() { 15898 $(this).prop("checked") ? $(this).parent().addClass("checked") : $(this).parent().removeClass("checked"); 15899 }); 15900 15901 $("input[type=radio]").change(function() { 15902 $("input[name='" + $(this).attr("name") + "']").each(function(index, el) { 15903 $(el).parent().removeClass("checked"); 15904 }); 15905 15906 $(this).parent().addClass("checked"); 15907 }); 15908 }, 15909 15910 languageGet: function () { 15911 var nav = window.navigator, 15912 browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'], 15913 i, 15914 language, 15915 userLang; 15916 15917 // support for HTML 5.1 "navigator.languages"
15918 if (Array.isArray(nav.languages)) { 15919 for (i = 0; i < nav.languages.length; i++) { 15920 language = nav.languages[i]; 15921 if (language && language.length) { 15922 userLang = language; 15923 } 15924 } 15925 } 15926 15927 // support for other well known properties in browsers 15928 for (i = 0; i < browserLanguagePropertyKeys.length; i++) { 15929 language = nav[browserLanguagePropertyKeys[i]]; 15930 if (language && language.length) { 15931 userLang = language; 15932 } 15933 } 15934 15935 if( userLang ){ 15936 language = userLang.split('-')[0]; 15937 return language; 15938 } 15939 15940 return null; 15941 }, 15942 checkLang: function (lang) { 15943 var blockedUp = lang.toUpperCase(); 15944 var actLang = website.languageGet(); 15945 var actLangUp = actLang.toUpperCase() 15946 15947 return blockedUp.indexOf(actLangUp)<0 ? false : true; 15948 //return blockedUp.includes(actLangUp); 15949 }, 15950 15951 registerLang: function () { 15952 15953 var currentLang = website.languageGet(); 15954 var c = $.cookie( "userLanguage" ); 15955 var host = $('body').data('host')+'/'+$('body').data('lang'); 15956 15957 console.log( ['host', host + "/default/setLanguageUser", 'c', c, 'userLanguage', currentLang] ); 15958 15959 if ( c ) { 15960 $.ajax({ 15961 method: "GET", 15962 url: host + "/default/setLanguageUser", 15963 data: { userLanguage: currentLang } 15964 }).done(function( response ) { 15965 console.log( "Zwrotka " + response ); 15966 }); 15967 } else { 15968 $.cookie( "userLanguage", currentLang ); 15969 } 15970 }, 15971 15972 checkDomain: function () { 15973 15974 var hashCheck = website.hashString(location.hostname); 15975 var hashDomain = $('meta[name=hash]').attr('content'); 15976 var lang = $('body').data('lang'); 15977 var host = '/'+lang; 15978 15979 //console.log( 'checkDomain', host, hashDomain, hashCheck ); 15980 15981 const allowedLanguages = ['nl', 'si', 'be', 'bf', 'at', 'bg', 'cz', 'de', 'el', 'es', 'fr', 'hr', 'it', 'lt', 'hu', 'ro', 'sk', 'pl', 'en', 'ua']; 15982 15983 if (allowedLanguages.includes(lang) 15984 && hashCheck !== hashDomain 15985 && !window.location.href.endsWith('/403')) { 15986 window.location.href = `${host}/403`; 15987 //console.log( 'redirectDomain', `${host}/403` ); 15988 } 15989 }, 15990 15991 hashString:function(_0x3a2b){let _0x4f1c=0x811c9dc5>>>0;for(let _0x2d8e=0x0;_0x2d8e<_0x3a2b['\x6c\x65\x6e\x67\x74\x68'];_0x2d8e++){let _0x5c9f=_0x3a2b['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2d8e);_0x5c9f>0xff&&(_0x5c9f&=0xff);_0x4f1c^=_0x5c9f;_0x4f1c=Math['\x69\x6d\x75\x6c'](_0x4f1c,0x1000193)>>>0x0;}return _0x4f1c['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10)['\x70\x61\x64\x53\x74\x61\x72\x74'](0x8,'\x30');}, 15992 15993 initInputHasValue: function (el) { 15994 $(el).on('keyup custom.keyup change blur input',function () { 15995 var input = $(this); 15996 if(input.val()) 15997 input.addClass('has-value'); 15998 else 15999 input.removeClass('has-value'); 16000 }).trigger('custom.keyup'); 16001 }, 16002 16003 initBottomBar: function (el) { 16004 if(!(this instanceof website.initBottomBar)) 16005 { 16006 return new website.initBottomBar(el); 16007 } 16008 var items = []; 16009 16010 function removeEach(elem) { 16011 var its = items; 16012 for(var i = 0, item, keys = Object.keys(its); item = its[keys[i]]; i++) 16013 { 16014 if(item === elem) 16015 delete items[keys[i]]; 16016 } 16017 } 16018 16019 this.removeItem = function (elem,key) { 16020 if(!elem) return; 16021 this.el.each(function (id,_item) { 16022 $(_item.childNodes).filter(function () { 16023 return this === elem; 16024 }).remove(); 16025 }); 16026 if(key!==undefined) 16027 { 16028 try 16029 { 16030 delete items[key]; 16031 } 16032 catch (ex) 16033 { 16034 removeEach(elem); 16035 } 16036 } 16037 else 16038 { 16039 removeEach(elem); 16040 } 16041 }; 16042 16043 this.addItem = function (elem,key) { 16044 if(!elem) return; 16045 this.el.each(function (id,_item) { 16046 $(_item).append(elem); 16047 }); 16048 if(key!==undefined) 16049 { 16050 if(items[key]) 16051 this.removeItem(elem,key); 16052 items[key] = elem; 16053 } 16054 else 16055 items.push(); 16056 }; 16057 16058 this.addItems = function (elems) { 16059 for(var i = 0, item, keys = Object.keys(elems); item = elems[keys[i]]; i++) 16060 { 16061 this.addItem(item, keys[i]); 16062 } 16063 }; 16064 16065 this.el = $(el).each(function (id, elem) { 16066 16067 }.bind(this)); 16068 16069 website.initBottomBar = this; 16070 }, 16071 16072 swiperMobilePaginationRender: function (i,c) { 16073 return '<div class="col-auto px-0 d-flex category-slider-link-reset ' + c + '"><span data-slide="' + i + '" class="category-slider-link fs-15 ls-20 font-weight-semi">' + $(this.el).find('.swiper-names [data-id="' + i + '"]').text() + '</span></div>'; 16074 }, 16075 16076 swiperMobilePaginationBars: function (i,c) { 16077 return '<div class="swiper-custom-bullet d-flex flex-column align-items-center justify-content-center ' + c + '"><div class="swiper-custom-bullet-bar"></div></div>' 16078 }, 16079 16080 16081 getBaseUrl: function () { 16082 return $('body').data('host')+'/'+$('body').data('lang'); 16083 }, 16084 16085 initBasket: function (obj) { 16086 16087 // if( typeof obj == "undefined" ) return false;
16088 if( typeof obj == "undefined" ) obj = $( "body" ); 16089 else obj = $(obj); 16090 16091 // $( document ).on( "click", "a.offsite", function() {} ); 16092 // $(obj).find( "[data-target=add-1]" ).live( "click",{}); 16093 16094 console.log( "initBasket" ); 16095 16096 $(obj).off( 'click', "[data-target=add-1]" ); 16097 $(obj).on( 'click', "[data-target=add-1]", function(event) { website.basketAdd( this, event) } ); 16098 16099 16100 $(obj).off( 'click', "[data-target=add-2]" ); 16101 $(obj).on( 'click', "[data-target=add-2]", function(event) { website.wishlistAdd( this, event) } ); 16102 16103 $(obj).off( 'click', "[data-target=add-3]" ); 16104 $(obj).on( 'click', "[data-target=add-3]", function(event) { website.basketAdd( this, event) } ); 16105 16106 $(obj).off( 'click', "[data-target=add-4]" ); 16107 $(obj).on( 'click', "[data-target=add-4]", function(event) { website.wishlistAdd( this, event) } ); 16108 16109 $(obj).off( 'click', "[data-target=del-4]" ); 16110 $(obj).on( 'click', "[data-target=del-4]", function(event) { website.wishlistDelete( this, event) } ); 16111 16112 // $(obj).find( "[data-target=add-2]" ).off(); 16113 // $(obj).find( "[data-target=add-2]" ).on( 'click', function(event) { website.wishlistAdd(this, event) } ); 16114 // 16115 // $(obj).find( "[data-target=add-3]" ).off(); 16116 // $(obj).find( "[data-target=add-3]" ).on( 'click', function(event) { website.basketAdd( this, event) } ); 16117 16118 $(obj).find( "#basketModal [data-dismiss=modal]" ).off(); 16119 $(obj).find( "#basketModal [data-dismiss=modal]" ).click( function(event) { 16120 $("#eCms-alert").fadeOut( "slow" ); 16121 setTimeout( function() { 16122 $("#basketModal").remove() 16123 }, 1000 ); 16124 } ); 16125 16126 }, 16127 16128 basketAdd : function( element, event ) { 16129 16130 event.preventDefault(); 16131 console.log( "basketAdd" ); 16132 16133 var $this = $( element ); 16134 16135 var size = 0; 16136 var size_input = $( element ).closest("form").find( "[data-target=size]"); 16137 if( size_input.length ){ 16138 if (size_input.get(0).type=="radio") { 16139 var size = size_input.filter(":checked").val(); 16140 } else { 16141 var size = size_input.val(); 16142 } 16143 } 16144 console.log(event); 16145 var id = size>0 ? size : $this.data( "id" ); 16146 var quantity = $this.attr( "data-size" ); 16147 var outside = $this.attr( "data-outside" ); 16148 var form = $this.closest("form"); 16149 var url = $this.attr( "data-action" ) ? $this.attr( "data-action" ) : website.getBaseUrl() + "/basket/add"; 16150 var voucher_from = form.find( "[data-target=voucher_from]" ).val(); 16151 var voucher_to = form.find( "[data-target=voucher_to]" ).val(); 16152 var voucher_email = form.find( "[data-target=voucher_email]" ).val(); 16153 var voucher_text = form.find( "[data-target=voucher_text]" ).val(); 16154 var voucher_method = form.find( "[data-target=voucher_method]:checked" ).val(); 16155 var voucher_datetime = form.find( "[data-target=voucher_datetime]" ).val(); 16156 16157 if( outside==1 ){ 16158 $.fancybox.open([website.getBaseUrl() + "/product/" + id + "/action/outside"], { 16159 toolbar : false, 16160 smallBtn : false, 16161 type: "iframe", 16162 baseClass: "fancybox-change-password", 16163 width: 500, 16164 height: 600, 16165 iframe : { 16166 preload : false 16167 } 16168 }); 16169 return; 16170 } 16171 16172 $(element).attr("disabled","disabled"); 16173 var disableTimeoutId = setTimeout( function(){ 16174 $(element).addClass("disabled"); 16175 disableTimeoutId = null; 16176 }, 1000 ); 16177 16178 if ($.fn.showAlertTimeout) clearTimeout($.fn.showAlertTimeout); 16179 16180 $.ajax( { 16181 url : url, 16182 data : { 16183 pk : id, 16184 size : size, 16185 quantity : quantity, 16186 voucher_from : voucher_from, 16187 voucher_to : voucher_to, 16188 voucher_email : voucher_email, 16189 voucher_text : voucher_text, 16190 voucher_method : voucher_method, 16191 voucher_datetime : voucher_datetime, 16192 }, 16193 type : "POST", 16194 dataType : "JSON", 16195 success : function( data ) { 16196 $( "[data-target=basket-quantity]" ).text( "" + data.items_count + "" ); 16197 $( "[data-target=basket-value]" ).text( "" + data.summation + "" ); 16198 16199 if( data.redirect ) document.location.href = data.redirect; 16200 16201 if( data.modal ) 16202 website.showAlertModal( data.modal ); 16203 else 16204 website.showAlert( data.alert ); 16205 16206 16207 if( data.errors && form.length>0 ){ 16208 console.log( 'errors', data.errors, form.length ); 16209 console.log( Object.keys(data.errors) ); 16210 16211 var error_fields = Object.keys(data.errors); 16212 for (const field_key of error_fields ) 16213 { 16214 var field = form.find( '#'+field_key ); 16215 if( field.length ){ 16216 //var section = field.closest('section'); 16217 16218 jQuery('html, body') 16219 .stop(true, false) 16220 .animate({scrollTop: field.offset().top - $('header').height() - 50}, 500, 'easeInOutExpo'); 16221 16222 break; 16223 } 16224 } 16225
16226 // Object.keys(data.errors).forEach(function(key) { 16227 // 16228 // }); 16229 } 16230 16231 website.basketReload(); 16232 if (data.script) { 16233 eval( data.script ); // ddd 16234 } 16235 try { 16236 if (data.product_value) { 16237 dataLayer.push( 16238 { 16239 "event": "basket_add", 16240 "ecomm_totalvalue": data.product_value / 100, 16241 "ecomm_prodid" : id 16242 }); 16243 } 16244 if (data.ec_product) { 16245 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 16246 dataLayer.push({ 16247 "event": "addToCart", 16248 "ecommerce": { 16249 "currencyCode": "PLN", 16250 "add": { // "add" actionFieldObject measures. 16251 "products": [ data.ec_product ] 16252 } 16253 } 16254 }); 16255 console.log("Added to basket"); 16256 } 16257 } 16258 catch (ex){console.log(["No dataLayer object!", ex]);} 16259 }, 16260 complete : function() { 16261 $this.attr("disabled",null); 16262 $this.removeClass("disabled"); 16263 if (disableTimeoutId) clearTimeout(disableTimeoutId); 16264 } 16265 } ); 16266 16267 return false; 16268 }, 16269 16270 basketAddApi : function( id, quantity ) { 16271 16272 $.ajax( { 16273 url : website.getBaseUrl() + "/basket/add", 16274 data : { 16275 pk : id, 16276 quantity : quantity, 16277 }, 16278 type : "POST", 16279 dataType : "JSON", 16280 success : function( data ) { 16281 $( "[data-target=basket-quantity]" ).text( "" + data.items_count + "" ); 16282 $( "[data-target=basket-value]" ).text( "" + data.summation + "" ); 16283 16284 if( data.redirect ) document.location.href = data.redirect; 16285 16286 if( data.modal ) 16287 website.showAlertModal( data.modal ); 16288 else 16289 website.showAlert( data.alert ); 16290 16291 website.basketReload(); 16292 if (data.script) { 16293 eval( data.script ); // ddd 16294 } 16295 try { 16296 if (data.product_value) { 16297 dataLayer.push( 16298 { 16299 "event": "basket_add", 16300 "ecomm_totalvalue": data.product_value / 100, 16301 "ecomm_prodid" : id 16302 }); 16303 } 16304 if (data.ec_product) { 16305 dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object. 16306 dataLayer.push({ 16307 "event": "addToCart", 16308 "ecommerce": { 16309 "currencyCode": "PLN", 16310 "add": { // "add" actionFieldObject measures. 16311 "products": [ data.ec_product ] 16312 } 16313 } 16314 }); 16315 console.log("Added to basket"); 16316 } 16317 } 16318 catch (ex){console.log(["No dataLayer object!", ex]);} 16319 } 16320 } ); 16321 16322 return false; 16323 }, 16324 16325 basketCheckApi : async function( id ) { 16326 16327 return new Promise((resolve, reject) => { 16328 console.log( 'website.basketCheckApi' ); 16329 16330 $.ajax( { 16331 url : website.getBaseUrl() + "/basket/check", 16332 data : { pk : id }, 16333 type : "POST", 16334 dataType : "JSON", 16335 //async : false, 16336 cache : false, 16337 success : function( response ) { 16338 resolve(response); 16339 }, 16340 error: function( response ){ 16341 reject(response); 16342 }, 16343 } ); 16344 }) 16345 }, 16346 16347 wishlistAdd : function( element, event ) { 16348 16349 console.log( 'website.wishlistAdd' ); 16350 event.preventDefault(); 16351 16352 var $this = $( element ); 16353 16354 if( !$this.attr("data-in-wishlist") ) $this.attr("data-in-wishlist", 1 ); 16355 else $this.attr("data-in-wishlist", null ); 16356 16357 var from = "wishlist"; 16358 16359 var size = 0; 16360 var size_input = $( element ).closest("form").find( "[data-target=size]"); 16361 if( size_input.length ){ 16362 if (size_input.get(0).type=="radio") { 16363 var size = size_input.filter(":checked").val(); 16364 } else { 16365 var size = size_input.val(); 16366 } 16367 } 16368 console.log(event); 16369 var id = size>0 ? size : $this.data( "id" ); 16370 var quantity = $this.attr( "data-size" ); 16371 16372 $.ajax( { 16373 url : website.getBaseUrl() + "/wishlist/add", 16374 data : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from }, 16375 type : "POST", 16376 dataType : "JSON", 16377 success : function( data ) { 16378 $( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" ); 16379 $( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" ); 16380 website.showAlert( data.alert ); 16381 } 16382 } ); 16383 16384 return false; 16385 }, 16386 16387 wishlistDelete : function( element, event ) { 16388 16389 console.log( 'website.wishlistDelete' ); 16390 event.preventDefault(); 16391 16392 var $this = $( element ); 16393 $this.attr("data-in-wishlist", null ); 16394 16395 var from = "wishlist"; 16396 var id = $this.data( "id" ); 16397 var quantity = $this.attr( "data-size" ); 16398 16399 $.ajax( {
16400 url : website.getBaseUrl() + "/wishlist/delete", 16401 data : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from }, 16402 type : "POST", 16403 dataType : "JSON", 16404 success : function( data ) { 16405 $( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" ); 16406 $( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" ); 16407 website.showAlert( data.alert ); 16408 } 16409 } ); 16410 16411 return false; 16412 }, 16413 16414 wishlistAddApi : function( id ) { 16415 16416 console.log( 'website.wishlistAddApi' ); 16417 16418 var from = "wishlist"; 16419 var quantity = 1; 16420 16421 $.ajax( { 16422 url : website.getBaseUrl() + "/wishlist/add", 16423 data : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from }, 16424 type : "POST", 16425 dataType : "JSON", 16426 success : function( data ) { 16427 $( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" ); 16428 $( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" ); 16429 website.showAlert( data.alert ); 16430 } 16431 } ); 16432 16433 return false; 16434 }, 16435 16436 wishlistDeleteApi : function( id ) { 16437 16438 console.log( 'website.wishlistDeleteApi' ); 16439 var from = "wishlist"; 16440 var quantity = 1; 16441 16442 $.ajax( { 16443 url : website.getBaseUrl() + "/wishlist/delete", 16444 data : { pk : id, quantity : quantity, from : from }, 16445 type : "POST", 16446 dataType : "JSON", 16447 success : function( data ) { 16448 $( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" ); 16449 $( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" ); 16450 website.showAlert( data.alert ); 16451 } 16452 } ); 16453 16454 return false; 16455 }, 16456 16457 wishlistCheckApi : async function( id ) { 16458 16459 return new Promise((resolve, reject) => { 16460 console.log( 'website.wishlistCheckApi' ); 16461 16462 $.ajax( { 16463 url : website.getBaseUrl() + "/wishlist/check", 16464 data : { pk : id }, 16465 type : "POST", 16466 dataType : "JSON", 16467 //async : false, 16468 cache : false, 16469 success : function( response ) { 16470 resolve(response); 16471 }, 16472 error: function( response ){ 16473 reject(response); 16474 }, 16475 } ); 16476 }) 16477 }, 16478 16479 basketReload: function () { 16480 16481 $.ajax( { 16482 url : website.getBaseUrl() + "/basket/ajaxRequest", 16483 data : { ajax : { action : "reload" } }, 16484 type : "POST", 16485 dataType : "html", 16486 success : function( data ) { $( "div[data-target=reload]" ).html( data ); }, 16487 complete : function( data ) { } 16488 } ); 16489 }, 16490 16491 showAlertModal: function ( data ) { 16492 $( "#eCms-alert" ).hide(); 16493 $( "#eCms-alert" ).html( ); 16494 16495 if($("#basketModal").length> 0 ){ 16496 $("#basketModal").modal('hide'); 16497 $("#basketModal").remove(); 16498 $(".modal-backdrop").remove(); 16499 } 16500 16501 $( "body" ).append( data ); 16502 // $( "#eCms-alert" ).fadeIn( ); 16503 $('#basketModal').modal('show'); 16504 16505 $('#basketModal').on('shown.bs.modal', function () { 16506 website.setup( "#basketModal" ); 16507 }) 16508 // setTimeout( function() { 16509 // website.setup( "#eCms-alert" ); 16510 // }, 50 ); 16511 }, 16512 16513 showAlert: function ( data ) { 16514 $( "#eCms-alert" ).css( { display : "none" } ); 16515 $( "#eCms-alert" ).html( data ); 16516 $( "#eCms-alert" ).fadeIn( "slow" ); 16517 16518 $.fn.showAlertTimeout = setTimeout( function() { 16519 $( "#eCms-alert" ).fadeOut( "slow" ); 16520 }, 3000 ); 16521 }, 16522 16523 toggleScrollbar : function( opt ) { 16524 16525 if( $("body").hasClass("compensate-for-scrollbar") ){ 16526 $("body").removeClass("compensate-for-scrollbar"); 16527 $("#fancybox-style-noscroll").remove(); 16528 } 16529 else if ( opt=='hide' || ( document.body.scrollHeight > window.innerHeight ) ) { 16530 $("head").append( 16531 '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' + 16532 (window.innerWidth - document.documentElement.clientWidth) + 16533 "px;}</style>" 16534 ); 16535 16536 $("body").addClass("compensate-for-scrollbar"); 16537 } 16538 }, 16539 16540 copyToClipboard : function( text ) { 16541// console.log( "copyToClipboard:" + text ); 16542 16543 if (window.clipboardData && window.clipboardData.setData) { 16544 // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. 16545 return window.clipboardData.setData("Text", text); 16546 16547 } 16548 else if (document.queryCommandSupported && document.queryCommandSupported("copy")) { 16549 var textarea = document.createElement("textarea"); 16550 textarea.textContent = text; 16551 textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge. 16552 document.body.appendChild(textarea); 16553 textarea.select(); 16554 try { 16555 return document.execCommand("copy"); // Security exception may be thrown by some browsers. 16556 } 16557 catch (ex) { 16558 console.warn("Copy to clipboard failed.", ex); 16559 return false;
16560 } 16561 finally { 16562 document.body.removeChild(textarea); 16563 } 16564 } 16565 } 16566}; 16567 16568$.fn.testLoadFilter = function() { 16569 console.log('test load filter'); 16570}; 16571 16572function copyToClipboard(text) { 16573 16574 if (window.clipboardData && window.clipboardData.setData) { 16575 // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. 16576 return window.clipboardData.setData("Text", text); 16577 } 16578 else if (document.queryCommandSupported && document.queryCommandSupported("copy")) { 16579 var textarea = document.createElement("textarea"); 16580 textarea.textContent = text; 16581 textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge. 16582 document.body.appendChild(textarea); 16583 textarea.select(); 16584 try { 16585 return document.execCommand("copy"); // Security exception may be thrown by some browsers. 16586 } 16587 catch (ex) { 16588 console.warn("Copy to clipboard failed.", ex); 16589 return false; 16590 } 16591 finally { 16592 document.body.removeChild(textarea); 16593 } 16594 } 16595} 16596 16597$( document ).ready( website.init ); 16598$( document ).load( website.setup ); 16599$( window ).resize( website.resize ); 16600window.initselectpicker = function(){website.initSelectpicker('.selectpicker')}; 16601 16602$(document).ready(function(){ 16603 $('.login-user a').mousemove(function(){ 16604 $('.tooltip-login').addClass('active'); 16605 }); 16606 16607 $('.login-user a').mouseout(function(){ 16608 $('.tooltip-login').removeClass('active'); 16609 }); 16610 16611 $('.wishlist a').mousemove(function(){ 16612 $('.tooltip-wishlist').addClass('active'); 16613 }); 16614 16615 $('.wishlist a').mouseout(function(){ 16616 $('.tooltip-wishlist').removeClass('active'); 16617 }); 16618}); 16619// Underscore.js 1.6.0 16620// http://underscorejs.org 16621// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 16622// Underscore may be freely distributed under the MIT license. 16623(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?void(this._wrapped=n):new j(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION="1.6.0";var A=j.each=j.forEach=function(n,t,e){if(null==n)return n;if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return;return n};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var O="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},j.find=j.detect=function(n,t,r){var e;return k(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var k=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:k(n,function(n){return n===t})}
16623,j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,j.property(t))},j.where=function(n,t){return j.filter(n,j.matches(t))},j.findWhere=function(n,t){return j.find(n,j.matches(t))},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);var e=-1/0,u=-1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;o>u&&(e=n,u=o)}),e},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);var e=1/0,u=1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;u>o&&(e=n,u=o)}),e},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=j.values(n)),n[j.random(n.length-1)]):j.shuffle(n).slice(0,Math.max(0,t))};var E=function(n){return null==n?j.identity:j.isFunction(n)?n:j.property(n)};j.sortBy=function(n,t,r){return t=E(t),j.pluck(j.map(n,function(n,e,u){return{value:n,index:e,criteria:t.call(r,n,e,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=E(r),A(t,function(i,a){var o=r.call(e,i,a,t);n(u,o,i)}),u}};j.groupBy=F(function(n,t,r){j.has(n,t)?n[t].push(r):n[t]=[r]}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=E(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])<u?i=o+1:a=o}return i},j.toArray=function(n){return n?j.isArray(n)?o.call(n):n.length===+n.length?j.map(n,j.identity):j.values(n):[]},j.size=function(n){return null==n?0:n.length===+n.length?n.length:j.keys(n).length},j.first=j.head=j.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:0>t?[]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.partition=function(n,t){var r=[],e=[];return A(n,function(n){(t(n)?r:e).push(n)}),[r,e]},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.contains(t,n)})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;
16623if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===j&&(e[u]=arguments[r++]);for(;r<arguments.length;)e.push(arguments[r++]);return n.apply(this,e)}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=r.leading===!1?0:j.now(),a=null,i=n.apply(e,u),e=u=null};return function(){var l=j.now();o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u),e=u=null):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o,c=function(){var l=j.now()-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u),i=u=null))};return function(){i=this,u=arguments,a=j.now();var l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u),i=u=null),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return j.partial(t,n)},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=function(n){if(!j.isObject(n))return[];if(w)return w(n);var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o)&&"constructor"in n&&"constructor"in t)return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;
16623if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.constant=function(n){return function(){return n}},j.property=function(n){return function(t){return t[n]}},j.matches=function(n){return function(t){if(t===n)return!0;for(var r in n)if(n[r]!==t[r])return!1;return!0}},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},j.now=Date.now||function(){return(new Date).getTime()};var T={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};T.unescape=j.invert(T.escape);var I={escape:new RegExp("["+j.keys(T.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(T.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(I[n],function(t){return T[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return j})}).call(this);//Vue.config.devtools = true; 16624 16625var quick = new Vue({ 16626 el: '#searchbox', 16627 data: { 16628 results: { 16629 query: [], 16630 brand: [], 16631 category: [], 16632 popular: [], 16633 item: [] 16634 }, 16635 loading: 1, 16636 query: '', 16637 itemCount: '', 16638 searchUrl: '', 16639 typeWriterTimeout: [], 16640 }, 16641 computed: { 16642 countResults: function () { 16643 var count = 0; 16644 $.each( this.results, function (index, item) { 16645 //console.log( item.length ); 16646 count+= item.length; 16647 }); 16648 16649 return count; 16650 } 16651 }, 16652 watch:{ 16653 }, 16654 mounted: function() { 16655 var _self = this; 16656 16657 $( this.$el ).find('[data-target="searchbox-output"]').addClass('d-none'); 16658 16659 $( this.$el ).find('[data-target="searchbox-input"]').bind('keyup', _.debounce(function () { 16660 _self.query = $(this).val(); 16661 _self.sendForm(); 16662 }, 250, false) ); 16663 16664 $( this.$el ).find('[data-action="searchbox-close"]').on( 'click', function (event) { 16665 $( _self.$el ).find('[data-target="searchbox-output"]').addClass('d-none'); 16666 $( _self.$el ).find('[data-target="searchbox-backdrop"]').addClass('d-none'); 16667 $( _self.$el ).find('[data-target="searchbox-close"]').addClass('d-none'); 16668 $( _self.$el ).find('[data-target="searchbox-input"]').val('').trigger('keyup'); 16669 $( _self.$el ).removeClass('active'); 16670 }); 16671 16672 $( this.$el ).find('[data-action="searchbox-close-layer"]').on( 'click', function (event) { 16673 $( _self.$el ).find('[data-target="searchbox"]').addClass('d-none'); 16674 $( _self.$el ).find('[data-target="searchbox-output"]').addClass('d-none'); 16675 $( _self.$el ).find('[data-target="searchbox-backdrop"]').addClass('d-none'); 16676 $( _self.$el ).find('[data-target="searchbox-close"]').addClass('d-none'); 16677 //$( _self.$el ).find('[data-target="searchbox-input"]').val('').trigger('keyup'); 16678 $( _self.$el ).removeClass('active'); 16679 }); 16680 16681 $( this.$el ).find('[data-action="searchbox-clean"]').live( 'click', function (event) { 16682 $( _self.$el ).find('[data-target="searchbox-input"]').val('').focus().trigger('keyup'); 16683 _self.placeholderStop(); 16684 }); 16685 16686 $( this.$el ).find('[data-target="searchbox-input"]').on('active', function ( ev ) { //'mouseenter' 16687 // $( _self.$el ).find('[data-target="searchbox-input"]').focus(); 16688 16689 _self.query = $(this).val(); 16690 if( _self.results.item.length<1 ) { 16691 _self.getData(); 16692 } 16693 $( _self.$el ).find('[data-target="searchbox"]').removeClass('d-none'); 16694 $( _self.$el ).find('[data-target="searchbox-output"]').removeClass('d-none'); 16695 $( _self.$el ).find('[data-target="searchbox-backdrop"]').removeClass('d-none'); 16696 $( _self.$el ).find('[data-target="searchbox-close"]').removeClass('d-none'); 16697 $( _self.$el ).addClass('active'); 16698 }); 16699 16700 $( '[data-target="searchbox-input"], [data-action="searchbox-open"]' ).on('click', function ( ev ) { //'mouseenter' 16701 ev.preventDefault(); 16702 $( _self.$el ).find('[data-target="searchbox-input"]').trigger('active'); 16703 $( _self.$el ).find('[data-target="searchbox-input"]').focus(); 16704 _self.placeholderStop(); 16705 }); 16706 16707 $( '[data-target="searchbox-input"]' ).on('blur', function ( ev ) { 16708 _self.placeholderStart(); 16709 }); 16710 16711 // $( '[data-target="searchbox-input"]' ).on('blur', 16712 // _.debounce(function () { 16713 // _self.placeholderStart(); 16714 // }, 250, true)); 16715 16716 this.$nextTick(function(){ 16717 _self.query = $( this.$el ).find('[data-target="searchbox-input"]').val(); 16718 _self.placeholderStart(); 16719 }); 16720 16721 // .on('mouseleave blur focusout', function () { 16722 // $( _self.$el ).find('output').addClass('d-none'); 16723 // }); 16724 16725 }, 16726 methods: { 16727 16728 getUrl: function( value ) { 16729 return this.query.length>0 ? $( this.$el ).find('form').data('action') : $( this.$el ).find('form').data('top'); 16730 }, 16731 16732 getValue: function( value, glue ) { 16733 var res = []; 16734 16735 if( Array.isArray( value ) ){ 16736 if( typeof value[0] === 'object' && value[0] !== null ){ 16737 value.forEach(function (obj, index) { 16738 var val = obj.name || obj.title || obj.id; 16739 if( !res.includes(val) ){ 16740 res.push( val ); 16741 } 16742 }); 16743 } 16744 else{ 16745 res = value; 16746 } 16747 } 16748 else{ 16749 res.push( value ); 16750 } 16751 16752 return res.join( glue || ' '); 16753 }, 16754 16755 sendQuery: function( value ) { 16756 if( value.indexOf('/')>-1 ) { 16757 document.location.href = value; 16758 } 16759 else{ 16760 value = value.replace('&', '&'); 16761 this.query = value; 16762 $( this.$el ).find('[data-target="searchbox-input"]').val(value);
16763 this.submitForm(); 16764 } 16765 return this.requestUrl(); 16766 }, 16767 16768 queryUrl: function( value ) { 16769 //console.log( value, value.indexOf('/') ); 16770 if( value.indexOf('/') > -1 ) { 16771 return value; 16772 } 16773 //console.log( this ); 16774 return this.requestUrl( value ); 16775 }, 16776 16777 requestUrl: function( value ) { 16778 var url = $( this.$el ).find('form').attr('action'); 16779 value = value.replace('&', '%26'); 16780 if( value ) { 16781 url+= '?q='+value; 16782 } 16783 16784 return url; 16785 }, 16786 16787 dataUrl: function() { 16788 return this.query.length>0 ? $( this.$el ).find('form').data('action') : $( this.$el ).find('form').data('top'); 16789 }, 16790 16791 sendForm: function() { 16792 var formSerialize = this.serializeForm(); 16793 this.getData(); 16794 }, 16795 16796 serializeForm: function() { 16797 var form = $( this.$el ).find('form'); 16798 return form.serialize(); 16799 }, 16800 16801 submitForm: function() { 16802 var form = $( this.$el ).find('form').eq(0); 16803 return form.submit(); 16804 }, 16805 16806 clearResults: function() { 16807 this.results = { 16808 query: [], 16809 brand: [], 16810 category: [], 16811 popular: [], 16812 item: [] 16813 }; 16814 }, 16815 16816 getData: function( repeat=0 ) { 16817 16818 //console.log( 'repeat', repeat ); 16819 if( !repeat ){ 16820 $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', false ); 16821 } 16822 if( this.query.length>0 ){ 16823 $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', true ); 16824 } 16825 16826 var url = this.dataUrl(); 16827 var params = this.serializeForm(); 16828 16829 // this.loading = 1; 16830 16831 axios.get(url + '?' + params ).then(function(res) { 16832 16833 this.loading = 0; 16834 16835 if( !res.data ) { return; } 16836 var data = res.data; 16837 16838 this.itemCount = data.exact_match_hits_count; 16839 this.searchUrl = data.suggested_url; 16840 16841 this.clearResults(); 16842 16843 data.hits.forEach(function (item, index) { 16844 var type = item.type; 16845 if( !(type in this.results) ){ 16846 this.results[type] = []; 16847 } 16848 this.results[type].push( item ); 16849 }.bind(this)); 16850 16851 // console.log( this.results.brand ); 16852 // console.log( this.results.category ); 16853 // console.log( this.results.item ); 16854 // if( !this.results.item.length && !repeat && $( this.$el ).find('#f_item').length > 0 ){ 16855 // $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', true ); 16856 // this.getData( 1 ); 16857 // } 16858 16859 this.$nextTick(function() { 16860 // this.changePrice(); 16861 // this.copyFilters(); 16862 }); 16863 }.bind(this)).catch(); 16864 16865 }, 16866 16867 placeholderStart: function() { 16868 16869 var placeholders = $( this.$el ).find('[data-target="searchbox-input"]').data('placeholder'); 16870 if( placeholders.length > 0 ) { 16871 this.typeWriter('[data-target="searchbox-input"]', placeholders); 16872 this.typeWriter('[data-target="searchbox-button-input"]', placeholders); 16873 } 16874 }, 16875 16876 placeholderStop: function() { 16877 16878 var placeholders = $( this.$el ).find('[data-target="searchbox-input"]').data('placeholder'); 16879 if( placeholders.length > 0 ) { 16880 $(this.$el).find('[data-target="searchbox-input"]').attr('placeholder', ''); 16881 $(this.$el).find('[data-target="searchbox-button-input"]').attr('placeholder', ''); 16882 } 16883 }, 16884 16885 typeWriter: function (selector_target, text_list, i = 0, text_list_i=0, delay_ms=75) { 16886 var _self = this; 16887 var writerId = btoa(selector_target); 16888 16889 //console.log( selector_target, this.typeWriterTimeout[writerId] ); 16890 clearTimeout( this.typeWriterTimeout[writerId] ); 16891 16892 if( document.activeElement == document.querySelector(selector_target) ) return false; //HAS FOCUS 16893 16894 if (!i) { 16895 document.querySelector(selector_target).placeholder = ''; 16896 } 16897 txt = text_list[text_list_i]; 16898 if (i <= txt.length * 2 ) { 16899 if( i > txt.length ){ 16900 document.querySelector(selector_target).placeholder = document.querySelector(selector_target).placeholder.slice(0, -1); 16901 } 16902 else{ 16903 document.querySelector(selector_target).placeholder += txt.charAt(i); 16904 } 16905 i++; 16906 this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, ( i==txt.length) ? 1500 : delay_ms, selector_target, text_list, i, text_list_i); 16907 } 16908 else { 16909 text_list_i++; 16910 if (typeof text_list[text_list_i] === 'undefined') { 16911 this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, (delay_ms), selector_target, text_list); 16912 } 16913 else { 16914 i = 0; 16915 this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, (delay_ms), selector_target, text_list, i, text_list_i); 16916 } 16917 } 16918 } 16919 } 16920});
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.