1jQuery(document).ready( function($){ 2 3 // backcompat changes 6.x to 5.x 4 if( $('#recurrence-frequency').length > 0 ){ 5 $('#recurrence-frequency').addClass('em-recurrence-frequency'); 6 $('.event-form-when .interval-desc').each( function(){ 7 this.classList.add(this.id); 8 }); 9 $('.event-form-when .alternate-selector').each( function(){ 10 this.classList.add('em-' + this.id); 11 }); 12 $('#recurrence-interval').addClass('em-recurrence-interval'); 13 } 14 $('#em-wrapper').addClass('em'); 15 16 // Add keyboard accessibility for em-icon button spans 17 $(document).on('keydown', 'span.em-icon[role="button"]', function(e){ 18 if( e.key === 'Enter' || e.keyCode === 13 ){ 19 e.preventDefault(); 20 $(this).trigger('click'); 21 } 22 }); 23 24 /* Time Entry - legacy @deprecated */ 25 $('#start-time').each(function(i, el){ 26 $(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range'); 27 }); 28 29 /* 30 * ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly) 31 */ 32 //Events List 33 //Approve/Reject Links 34 $('.events-table').on('click', '.em-event-delete', function(){ 35 if( !confirm("Are you sure you want to delete?") ){ return false; } 36 window.location.href = this.href; 37 }); 38 //Forms 39 $('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){ 40 var el = $(this); 41 if( el.is(':checked') ){ 42 el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide(); 43 }else{ 44 el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show(); 45 } 46 }); 47 48 //Manual Booking 49 $(document).on('click', 'a.em-booking-button', function(e){ 50 e.preventDefault(); 51 var button = $(this); 52 if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){ 53 button.text(EM.bb_booking); 54 var button_data = button.attr('id').split('_'); 55 $.ajax({ 56 url: EM.ajaxurl, 57 dataType: 'jsonp', 58 data: { 59 event_id : button_data[1], 60 _wpnonce : button_data[2], 61 action : 'booking_add_one' 62 }, 63 success : function(response, statusText, xhr, $form) { 64 if(response.result){ 65 button.text(EM.bb_booked); 66 button.addClass('disabled'); 67 }else{ 68 button.text(EM.bb_error); 69 } 70 if(response.message != '') alert(response.message); 71 $(document).triggerHandler('em_booking_button_response', [response, button]); 72 }, 73 error : function(){ button.text(EM.bb_error); } 74 }); 75 } 76 return false; 77 }); 78 $(document).on('click', 'a.em-cancel-button', function(e){ 79 e.preventDefault(); 80 var button = $(this); 81 if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){ 82 button.text(EM.bb_canceling); 83 // old method is splitting id with _ and second/third items are id and nonce, otherwise supply it all via data attributes 84 var button_data = button.attr('id').split('_'); 85 let button_ajax = {}; 86 if( button_data.length < 3 || !('booking_id' in button[0].dataset) ){ 87 // legacy support 88 button_ajax = { 89 booking_id : button_data[1], 90 _wpnonce : button_data[2], 91 action : 'booking_cancel', 92 }; 93 } 94 let ajax_data = Object.assign( button_ajax, button[0].dataset); 95 $.ajax({ 96 url: EM.ajaxurl, 97 dataType: 'jsonp', 98 data: ajax_data, 99 success : function(response, statusText, xhr, $form) { 100 if(response.result){ 101 button.text(EM.bb_cancelled); 102 button.addClass('disabled'); 103 }else{ 104 button.text(EM.bb_cancel_error); 105 } 106 }, 107 error : function(){ button.text(EM.bb_cancel_error); } 108 }); 109 } 110 return false; 111 }); 112 $(document).on('click', 'a.em-booking-button-action', function(e){ 113 e.preventDefault(); 114 var button = $(this); 115 var button_data = { 116 _wpnonce : button.attr('data-nonce'), 117 action : button.attr('data-action'), 118 } 119 if( button.attr('data-event-id') ) button_data.event_id = button.attr('data-event-id'); 120 if( button.attr('data-booking-id') ) button_data.booking_id = button.attr('data-booking-id'); 121 if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){ 122 if( button.attr('data-loading') ){ 123 button.text(button.attr('data-loading')); 124 }else{ 125 button.text(EM.bb_booking); 126 } 127 $.ajax({ 128 url: EM.ajaxurl, 129 dataType: 'jsonp', 130 data: button_data, 131 success : function(response, statusText, xhr, $form) { 132 if(response.result){ 133 if( button.attr('data-success') ){ 134 button.text(button.attr('data-success')); 135 }else{ 136 button.text(EM.bb_booked); 137 } 138 button.addClass('disabled'); 139 }else{ 140 if( button.attr('data-error') ){ 141 button.text(button.attr('data-error')); 142 }else{ 143 button.text(EM.bb_error); 144 } 145 } 146 if(response.message != '') alert(response.message); 147 $(document).triggerHandler('em_booking_button_action_response', [response, button]); 148 }, 149 error : function(){ 150 if( button.attr('data-error') ){ 151 button.text(button.attr('data-error')); 152 }else{ 153 button.text(EM.bb_error); 154 } 155 } 156 }); 157 } 158 return false;
159 }); 160 161 //Datepicker - legacy 162 var load_ui_css; //load jquery ui css? 163 if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){ 164 load_ui_css = true; 165 } 166 if( load_ui_css ) em_load_jquery_css(); 167 168 //previously in em-admin.php 169 $('#em-wrapper input.select-all').on('change', function(){ 170 if($(this).is(':checked')){ 171 $('input.row-selector').prop('checked', true); 172 $('input.select-all').prop('checked', true); 173 }else{ 174 $('input.row-selector').prop('checked', false); 175 $('input.select-all').prop('checked', false); 176 } 177 }); 178 179 /* Load any maps */ 180 if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){ 181 em_maps_load(); 182 } 183 184 /* Location Type Selection */ 185 $('.em-location-types .em-location-types-select').on('change', function(){ 186 let el = $(this); 187 if( el.val() == 0 ){ 188 $('.em-location-type').hide(); 189 }else{ 190 let location_type = el.find('option:selected').data('display-class'); 191 $('.em-location-type').hide(); 192 $('.em-location-type.'+location_type).show(); 193 if( location_type != 'em-location-type-place' ){ 194 jQuery('#em-location-reset a').trigger('click'); 195 } 196 } 197 if( el.data('active') !== '' && el.val() !== el.data('active') ){ 198 $('.em-location-type-delete-active-alert').hide(); 199 $('.em-location-type-delete-active-alert').show(); 200 }else{ 201 $('.em-location-type-delete-active-alert').hide(); 202 } 203 }).trigger('change'); 204 205 //Finally, add autocomplete here 206 if( jQuery( 'div.em-location-data [name="location_name"]' ).length > 0 ){ 207 $('div.em-location-data [name="location_name"]').em_selectize({ 208 plugins: ["restore_on_backspace"], 209 valueField: "id", 210 labelField: "label", 211 searchField: "label", 212 create:true, 213 createOnBlur: true, 214 maxItems:1, 215 persist: false, 216 addPrecedence : true, 217 selectOnTab : true, 218 diacritics : true, 219 render: { 220 item: function (item, escape) { 221 return "<div>" + escape(item.label) + "</div>"; 222 }, 223 option: function (item, escape) { 224 let meta = ''; 225 if( typeof(item.address) !== 'undefined' ) { 226 if (item.address !== '' && item.town !== '') { 227 meta = escape(item.address) + ', ' + escape(item.town); 228 } else if (item.address !== '') { 229 meta = escape(item.address); 230 } else if (item.town !== '') { 231 meta = escape(item.town); 232 } 233 } 234 return '<div class="em-locations-autocomplete-item">' + 235 '<div class="em-locations-autocomplete-label">' + escape(item.label) + '</div>' + 236 '<div style="font-size:11px; text-decoration:italic;">' + meta + '</div>' + 237 '</div>'; 238 239 }, 240 }, 241 load: function (query, callback) { 242 if (!query.length) return callback(); 243 $.ajax({ 244 url: EM.locationajaxurl, 245 data: { 246 q : query, 247 method : 'selectize' 248 }, 249 dataType : 'json', 250 type: "POST", 251 error: function () { 252 callback(); 253 }, 254 success: function ( data ) { 255 callback( data ); 256 }, 257 }); 258 }, 259 onItemAdd : function (value, data) { 260 this.clearCache(); 261 var option = this.options[value]; 262 if( value === option.label ){ 263 jQuery('input#location-address').focus(); 264 return; 265 } 266 jQuery("input#location-name" ).val(option.value); 267 jQuery('input#location-address').val(option.address); 268 jQuery('input#location-town').val(option.town); 269 jQuery('input#location-state').val(option.state); 270 jQuery('input#location-region').val(option.region); 271 jQuery('input#location-postcode').val(option.postcode); 272 jQuery('input#location-latitude').val(option.latitude); 273 jQuery('input#location-longitude').val(option.longitude); 274 if( typeof(option.country) === 'undefined' || option.country === '' ){ 275 jQuery('select#location-country option:selected').removeAttr('selected'); 276 }else{ 277 jQuery('select#location-country option[value="'+option.country+'"]').attr('selected', 'selected'); 278 } 279 jQuery("input#location-id" ).val(option.id).trigger('change'); 280 jQuery('div.em-location-data input, div.em-location-data select').prop('readonly', true).css('opacity', '0.5'); 281 jQuery('#em-location-reset').show(); 282 jQuery('#em-location-search-tip').hide(); 283 // selectize stuff 284 this.disable(); 285 this.$control.blur(); 286 jQuery('div.em-location-data [class^="em-selectize"]').each( function(){ 287 if( 'selectize' in this ) { 288 this.selectize.disable(); 289 } 290 }) 291 // trigger hook 292 jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, option]); 293 } 294 }); 295 jQuery('#em-location-reset a').on('click', function(){ 296 jQuery('div.em-location-data input, div.em-location-data select').each( function(){ 297 this.style.removeProperty('opacity') 298 this.readOnly = false;
299 if( this.type == 'text' ) this.value = ''; 300 }); 301 jQuery('div.em-location-data option:selected').removeAttr('selected'); 302 jQuery('input#location-id').val(''); 303 jQuery('#em-location-reset').hide(); 304 jQuery('#em-location-search-tip').show(); 305 jQuery('#em-map').hide(); 306 jQuery('#em-map-404').show(); 307 if(typeof(marker) !== 'undefined'){ 308 marker.setPosition(new google.maps.LatLng(0, 0)); 309 infoWindow.close(); 310 marker.setDraggable(true); 311 } 312 // clear selectize autocompleter values, re-enable any selectize ddms 313 let $selectize = $("div.em-location-data input#location-name")[0].selectize; 314 $selectize.enable(); 315 $selectize.clear(true); 316 $selectize.clearOptions(); 317 jQuery('div.em-location-data select.em-selectize').each( function(){ 318 if( 'selectize' in this ){ 319 this.selectize.enable(); 320 this.selectize.clear(true); 321 } 322 }); 323 // return true 324 return false; 325 }); 326 if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){ 327 jQuery('div.em-location-data input, div.em-location-data select').each( function(){ 328 this.style.setProperty('opacity','0.5', 'important') 329 this.readOnly = true; 330 }); 331 jQuery('#em-location-reset').show(); 332 jQuery('#em-location-search-tip').hide(); 333 jQuery('div.em-location-data select.em-selectize, div.em-location-data input.em-selectize-autocomplete').each( function(){ 334 if( 'selectize' in this ) this.selectize.disable(); 335 }); 336 } 337 } 338 339 // trigger selectize loader 340 em_setup_ui_elements(document); 341 342 /* Done! */ 343 $(document).triggerHandler('em_javascript_loaded'); 344}); 345 346/** 347 * Sets up external UI libraries and adds them to elements within the supplied container. This can be a jQuery or DOM element, subfunctions will either handle accordingly or this function will ensure it's the right one to pass on.. 348 * @param jQuery|DOMElement container 349 */ 350function em_setup_ui_elements ( $container ) { 351 let container = ( $container instanceof jQuery ) ? $container[0] : $container; 352 // Selectize 353 em_setup_selectize( $container ); 354 // Tippy 355 em_setup_tippy( $container ); 356 // Moment JS 357 em_setup_moment_times( $container ); 358 // Date & Time Pickers 359 if( container.querySelector('.em-datepicker') ){ 360 em_setup_datepicker( container ); 361 } 362 if( container.querySelector(".em-time-input") ){ 363 em_setup_timepicker( container ); 364 } 365 // Phone numbers 366 em_setup_phone_inputs( container ); 367 // let other things hook in 368 document.dispatchEvent( new CustomEvent( 'em_setup_ui_elements', { detail: { container : container } } ) ); 369} 370 371/** 372 * Unsetup containers with UI elements, primarily useful if intending on duplicating an element which would require re-setup. 373 * @param $container 374 */ 375function em_unsetup_ui_elements( $container ) { 376 let container = $container instanceof jQuery ? $container[0] : $container; 377 em_unsetup_selectize( container ); 378 em_unsetup_tippy( container ); 379 em_unsetup_datepicker( container ); 380 em_unsetup_timepicker( container ); 381 em_unsetup_phone_inputs( container ); 382 // let other things hook in 383 document.dispatchEvent( new CustomEvent( 'em_unsetup_ui_elements', { detail: { container : container } } ) ); 384} 385 386/* Local JS Timezone related placeholders */ 387/* Moment JS Timzeone PH */ 388function em_setup_moment_times( container_element ) { 389 container = jQuery(container_element); 390 if( window.moment ){ 391 var replace_specials = function( day, string ){ 392 // replace things not supported by moment 393 string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone); 394 string = string.replace(/#T/g, "GMT"+day.format('Z')); 395 string = string.replace(/###t/g, day.utcOffset()*-60); 396 string = string.replace(/##t/g, day.isDST()); 397 string = string.replace(/#t/g, day.daysInMonth()); 398 return string; 399 }; 400 container.find('.em-date-momentjs').each( function(){ 401 // Start Date 402 var el = jQuery(this); 403 var day_start = moment.unix(el.data('date-start')); 404 var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format'))); 405 if( el.data('date-start') !== el.data('date-end') ){ 406 // End Date 407 var day_end = moment.unix(el.data('date-end')); 408 var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format'))); 409 // Output 410 var date_string = date_start_string + el.data('date-separator') + day_end_string; 411 }else{ 412 var date_string = date_start_string; 413 } 414 el.text(date_string); 415 }); 416 var get_date_string = function(ts, format){ 417 let date = new Date(ts * 1000); 418 let minutes = date.getMinutes(); 419 if( format == 24 ){ 420 let hours = date.getHours(); 421 hours = hours < 10 ? '0' + hours : hours; 422 minutes = minutes < 10 ? '0' + minutes : minutes; 423 return hours + ':' + minutes; 424 }else{ 425 let hours = date.getHours() % 12; 426 let ampm = hours >= 12 ? 'PM' : 'AM'; 427 if( hours === 0 ) hours = 12; // the hour '0' should be '12' 428 minutes = minutes < 10 ? '0'+minutes : minutes; 429 return hours + ':' + minutes + ' ' + ampm; 430 } 431 } 432 container.find('.em-time-localjs').each( function(){ 433 var el = jQuery(this); 434 var strTime = get_date_string( el.data('time'), el.data('time-format') ); 435 if( el.data('time-end') ){ 436 var separator = el.data('time-separator') ? el.data('time-separator') : ' - '; 437 strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') ); 438 } 439 el.text(strTime); 440 }); 441 } 442}; 443 444function em_load_jquery_css( wrapper = false ){ 445 if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){ 446 var script = document.createElement("link"); 447 script.id = 'jquery-ui-em-css'; 448 script.rel = "stylesheet"; 449 script.href = EM.ui_css; 450 document.body.appendChild(script); 451 if( wrapper ){ 452 em_setup_jquery_ui_wrapper(); 453 } 454 } 455} 456 457function em_setup_jquery_ui_wrapper(){ 458 if( jQuery('#em-jquery-ui').length === 0 ){ 459 jQuery('body').append('<div id="em-jquery-ui" class="em">'); 460 } 461} 462 463/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */ 464var em_ajaxify = function(url){ 465 if ( url.search('em_ajax=0') != -1){ 466 url = url.replace('em_ajax=0','em_ajax=1'); 467 }else if( url.search(/\?/) != -1 ){ 468 url = url + "&em_ajax=1"; 469 }else{ 470 url = url + "?em_ajax=1"; 471 } 472 return url; 473}; 474 475// load externals after DOM load, supplied by EM.assets, only if selector matches 476var em_setup_scripts = function( $container = false ) { 477 let container = $container || document; 478 if( EM && 'assets' in EM ) { 479 let baseURL = EM.url + '/includes/external/'; 480 for ( const [selector, assets] of Object.entries(EM.assets) ) { 481 // load scripts if one element exists for selector 482 if ( container.querySelector(selector) ) {
483 if ('css' in assets) { 484 // Iterate through assets.css object and add stylesheet to head 485 for (const [id, value] of Object.entries(assets.css)) { 486 // Check if the stylesheet with the given ID already exists 487 if (!document.getElementById( id + '-css' )) { 488 // Create a new link element for the stylesheet 489 const link = document.createElement('link'); 490 link.id = id + '-css'; 491 link.rel = 'stylesheet'; 492 link.href = value.match(/^http/) ? value : baseURL + value; 493 494 // Append the stylesheet to the document head 495 document.head.appendChild(link); 496 } 497 } 498 } 499 if ('js' in assets) { 500 // add a tracking of all assets to load, and execute loaded hooks after all assets are loaded and in order of dependence 501 let loaded = {}; 502 let loadedListener = function( id ) { 503 loaded[id] = false; 504 if ( Object.entries( loaded ).length === Object.entries( assets.js ).length ) { 505 // all items for this asset loaded, so we go through all the entries and fire their events 506 for ( id of Object.keys( loaded ) ) { 507 loadAsset( id ) 508 } 509 } 510 }; 511 let loadAsset = function( id ) { 512 if ( !loaded[id] ) { 513 let asset = assets.js[id]; 514 if ( typeof asset === 'object' && 'event' in asset ) { 515 if ( asset?.requires) { 516 loadAsset( asset.requires ); 517 } 518 document.dispatchEvent( new CustomEvent( asset.event, { 519 detail: { 520 container: container, 521 } 522 } ) ); 523 } 524 loaded[id] = true; 525 } 526 }; 527 // Iterate through assets.js object and add script to head 528 for ( const [ id, value ] of Object.entries(assets.js)) { 529 // Check if the script with the given ID already exists 530 if ( !document.getElementById( id + '-js' ) ) { 531 // Create a new script element for the JavaScript file 532 const script = document.createElement('script'); 533 script.id = id + '-js'; 534 script.async = true; 535 if ( typeof value === 'object' ) { 536 // add locale data 537 if ( 'locale' in value && value.locale ) { 538 script.dataset.locale = value.locale; 539 } 540 script.src = value.url.match(/^http/g) ? value.url : baseURL + value.url; 541 } else { 542 script.src = value.match(/^http/g) ? value : baseURL + value; 543 } 544 // listen for loads so we execute the real onload hooks once all files are loaded (or errorred out) 545 script.onload = () => loadedListener(id); 546 script.onerror = () => loadedListener(id); 547 // Append the script to the document head 548 document.head.appendChild(script); 549 } 550 } 551 } 552 } 553 } 554 } 555} 556document.addEventListener('DOMContentLoaded', () => em_setup_scripts( document )); 557 558// WP List Tables front-end stuff 559const setupListTable = function( listTable ) { 560 // handle checks of multiple items using shift 561 const checkboxes = listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]' ); 562 const listTableForm = listTable.querySelector('form.em-list-table-form'); 563 let lastChecked; 564 565 //Pagination link clicks 566 listTable.querySelectorAll('.tablenav-pages a').forEach( el => { 567 el.addEventListener('click', function ( e ) { 568 e.preventDefault(); 569 //get page no from url, change page, submit form 570 let match = el.href.match(/#[0-9]+/); 571 if ( match != null && match.length > 0 ) { 572 let pno = match[0].replace('#', ''); 573 listTableForm.querySelector('input[name=pno]').val(pno); 574 } else { 575 // new way 576 let url = new URL(el.href); 577 if ( url.searchParams.has('paged') ) { 578 listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = url.searchParams.get('paged') ); 579 } else { 580 listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = 1 ); 581 } 582 } 583 listTableForm.requestSubmit(); 584 return false; 585 }); 586 }); 587 // Pagination - Input page number 588 listTable.querySelectorAll('.tablenav-pages input[name=paged]').forEach( function ( input ){ 589 input.addEventListener('change', function (e) { 590 e.preventDefault(); 591 let last = listTableForm.querySelector('.tablenav-pages a.last-page'); 592 if ( last ) { 593 // check val isn't more than last page 594 let url = new URL(last.href); 595 if ( url.searchParams.has('paged') ) { 596 let lastPage = parseInt(url.searchParams.get('paged')); 597 if ( parseInt(input.value) > lastPage ) { 598 input.value = lastPage; 599 } 600 } 601 } else { 602 // make sure it's less than current page, we're on last page already 603 let lastPage = listTableForm.querySelector('input[name=pno]'); 604 if (lastPage && lastPage.value && parseInt(input.value) > parseInt(lastPage.value)) { 605 input.value = lastPage.value; 606 e.preventDefault(); 607 return false;
608 } 609 } 610 listTableForm.querySelectorAll('input[name=pno]').forEach( el => el.value = input.value ); 611 listTableForm.requestSubmit(); 612 return false; 613 }); 614 }); 615 616 // handle checkboxes 617 listTable.addEventListener('click', function(e){ 618 // handle selecting all checkboxes 619 if( e.target.matches('.manage-column.column-cb input') ){ 620 listTable.querySelectorAll('.check-column input').forEach( function( checkbox ){ 621 checkbox.checked = e.target.checked; 622 checkbox.closest('tr').classList.toggle('selected', e.target.checked); 623 // enable/disable bulk actions filter 624 listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){ 625 e.target.checked ? el.removeAttribute('disabled') : el.setAttribute('disabled', true); 626 e.target.checked ? el.classList.remove('disabled') : el.classList.add('disabled', true); 627 }); 628 }); 629 } else if ( e.target.matches('tbody .check-column input[type="checkbox"]') ) { 630 // handle multiple checks 631 let inBetween = false; 632 if ( e.shiftKey ) { 633 checkboxes.forEach(checkbox => { 634 if ( checkbox === e.target || checkbox === lastChecked ) { 635 inBetween = !inBetween; 636 } 637 if ( inBetween || checkbox === lastChecked ) { 638 checkbox.checked = lastChecked.checked; 639 } 640 checkbox.closest('tr').classList.toggle('selected', checkbox.checked); 641 }); 642 } else { 643 e.target.closest('tr').classList.toggle('selected', e.target.checked); 644 } 645 // enable/disable bulk actions filter 646 let somethingSelected = e.target.checked || listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]:checked' ).length > 0; 647 listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){ 648 somethingSelected ? el.removeAttribute('disabled') : el.setAttribute('disabled', true); 649 somethingSelected ? el.classList.remove('disabled') : el.classList.add('disabled', true); 650 }); 651 lastChecked = e.target; 652 } else if ( e.target.closest('tbody td.column-primary') ) { 653 // handle row expand/collapse 654 if ( e.target.matches('a[href],button:not(.toggle-row)') ) return true; // allow links to pass 655 e.preventDefault(); 656 let rowExpandTrigger = e.target.closest('td.column-primary'); 657 let row = rowExpandTrigger.closest('tr'); 658 if( row.classList.contains('expanded') ) { 659 row.classList.remove('expanded'); 660 row.classList.add('collapsed'); 661 rowExpandTrigger.querySelector('button.toggle-row').classList.remove('expanded'); 662 } else { 663 row.classList.add('expanded'); 664 row.classList.remove('collapsed'); 665 rowExpandTrigger.querySelector('button.toggle-row').classList.add('expanded'); 666 } 667 } 668 }); 669 // disable filter since no checkboxes initially selected 670 listTable.querySelectorAll('.tablenav .bulkactions-input').forEach( (el) => { 671 el.querySelectorAll('input,select,button').forEach(function (el) { 672 el.setAttribute('disabled', true); 673 el.classList.add('disabled', true); 674 }) 675 }); 676 677 // Sorting by headers 678 listTable.querySelector('thead').addEventListener('click', function( e ) { 679 // get th element 680 let th = e.target.tagName.toLowerCase() === 'th' ? e.target : e.target.closest('th'); 681 if( th && (th.classList.contains('sorted') || th.classList.contains('sortable')) ) { 682 e.preventDefault(); 683 // add args to form and submit it 684 let params = ( new URL( th.querySelector('a').href) ).searchParams; 685 if ( params.get('orderby') ) { 686 listTableForm.querySelector('input[name="orderby"]').value = params.get('orderby'); 687 let order = params.get('order') ? params.get('order') : 'asc'; 688 listTableForm.querySelector('input[name="order"]').value = order; 689 listTableForm.requestSubmit(); 690 } 691 } 692 }); 693 694 // show/hide filters trigger 695 let filterTrigger = listTable.querySelector('button.filters-trigger'); 696 if( filterTrigger ) { 697 filterTrigger.addEventListener('click', function(e){ 698 e.preventDefault(); 699 if( filterTrigger.classList.contains('hidden') ) { 700 listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.remove('hidden') ); 701 filterTrigger.classList.remove('hidden'); 702 filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelHide); 703 if( '_tippy' in filterTrigger ){ 704 filterTrigger._tippy.setContent( filterTrigger.dataset.labelHide ); 705 } 706 } else { 707 listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.add('hidden') ); 708 filterTrigger.classList.add('hidden'); 709 filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelShow); 710 if( '_tippy' in filterTrigger ){ 711 filterTrigger._tippy.setContent( filterTrigger.dataset.labelShow ); 712 } 713 } 714 }); 715 listTable.addEventListener('em_resize', function(){ 716 if( listTable.classList.contains('size-small') ) { 717 filterTrigger.classList.remove('hidden'); // force hide click 718 filterTrigger.click(); 719 } 720 }); 721 } 722 723 // EXPAND/COLLAPSE - RESPONSIVE 724 // handle expand/collapse in responsive mode when clicking the expand/collapse (all) 725 let expandTrigger = listTable.querySelector('button.small-expand-trigger'); 726 if( expandTrigger ) { 727 // detect click and add expand class to table, expanded class to trigger 728 expandTrigger.addEventListener('click', function(e){ 729 e.preventDefault(); 730 if( expandTrigger.classList.contains('expanded') ) { 731 listTable.querySelectorAll('tbody tr.expanded, tbody button.toggle-row.expanded').forEach( el => el.classList.remove('expanded') ); 732 listTable.classList.remove('expanded'); 733 expandTrigger.classList.remove('expanded'); 734 } else { 735 listTable.querySelectorAll('tbody tr, tbody button.toggle-row').forEach( el => { 736 el.classList.add('expanded'); 737 el.classList.remove('collapsed'); 738 }); 739 listTable.classList.add('expanded'); 740 expandTrigger.classList.add('expanded'); 741 } 742 }); 743 } 744 745 // handle filters when pressing enter, submitting a search 746 listTable.querySelectorAll('.tablenav .actions input[type="text"]').forEach( function (input) { 747 input.addEventListener('keypress', function (e) { 748 let keycode = (e.keyCode ? e.keyCode : e.which); 749 if (keycode === 13) { 750 e.preventDefault(); 751 listTableForm.requestSubmit(); 752 } 753 }); 754 }); 755 756 // handle size breakpoints 757 let breakpoints = { 758 'xsmall' : 465, 759 'small' : 640, 760 'medium' : 930, 761 'large' : false, 762 } 763 // submissions 764 EM_ResizeObserver( breakpoints, [ listTable ] ); 765 766 //Widgets and filter submissions 767 listTableForm.addEventListener('submit', function (e) { 768 e.preventDefault(); 769 //append loading spinner 770 listTable.classList.add('em-working'); 771 let loadingDiv = document.createElement('div'); 772 loadingDiv.id = 'em-loading'; 773 listTable.append(loadingDiv); 774 listTable.querySelectorAll('.em-list-table-error-notice').forEach( el => el.remove() ); 775 //ajax call 776 fetch( EM.ajaxurl, { method: 'POST', body: new FormData(listTableForm) } ).then( function( response ) { 777 if ( response.ok ) { 778 return response.text(); 779 } else { 780 throw new Error('Network Response ' + response.status); 781 } 782 }).then( function( data ) { 783 if ( !data ) { 784 throw new Error('Empty string received'); 785 } 786 if (!listTable.classList.contains('frontend')) { 787 // remove modals as they are supplied again on the backend 788 listTableForm.querySelectorAll('.em-list-table-trigger').forEach(function ( trigger ) { 789 let modal = document.querySelector(trigger.rel); 790 if( modal ) { 791 modal.remove(); 792 } 793 }); 794 } 795 // get new data as DOM object 796 let wrapper = document.createElement('div'); 797 wrapper.innerHTML = data; 798 let newListTable = wrapper.firstElementChild; 799 // replace old table with new table 800 listTable.replaceWith( newListTable ); 801 // fire hook - note that form and data should not be used! This is for backward compatibility with an old jQuery hook being fired. Expect future consequences if you use them, obtain everything from listTable or prevListTable! 802 document.dispatchEvent( new CustomEvent('em_list_table_filtered', { detail: { prevListTable: listTable, listTable: newListTable, form: newListTable.firstElementChild, data: data } }) ); 803 }).catch( function( error ) { 804 let div = document.createElement('div'); 805 div.innerHTML = '<p>There was an unexpected error retrieving table data with error <code>' + error.message + '</code>
805, please try again or contact an administrator.</p>'; 806 div.setAttribute('class', 'em-warning error em-list-table-error-notice'); 807 listTable.querySelector('.table-wrap').before(div); 808 loadingDiv.remove(); 809 listTable.classList.remove('em-working'); 810 }); 811 return false; 812 }); 813 814 //Settings & Export Modal 815 816 /** 817 * Handle trigger of settings and export modals. 818 */ 819 listTable.querySelectorAll('.em-list-table-trigger').forEach( trigger => { 820 trigger.addEventListener('click', function (e) { 821 e.preventDefault(); 822 let modal = document.querySelector( trigger.getAttribute('rel') ); 823 openModal(modal); 824 }); 825 }); 826 827 /** 828 * Handle submission of settings forms, by copying over hidden input values such as cols and limit to main form. 829 */ 830 listTable.querySelectorAll('.em-list-table-settings form').forEach( form => { 831 form.addEventListener('submit', function (e) { 832 e.preventDefault(); 833 //we know we'll deal with cols, so wipe hidden value from main 834 let modal = form.closest('.em-modal'); 835 let match = listTableForm.querySelector("[name=cols]"); 836 match.value = ''; 837 let tableCols = form.querySelectorAll('.em-list-table-cols-selected .item'); 838 tableCols.forEach( function (item_match) { 839 if (!item_match.classList.contains('hidden')) { 840 if (match.value !== '') { 841 match.value = match.value + ',' + item_match.getAttribute('data-value'); 842 } else { 843 match.value = item_match.getAttribute('data-value'); 844 } 845 } 846 }); 847 // sync row count 848 let limit = form.querySelector('select[name="limit"]'); 849 if( limit ) { 850 listTableForm.querySelector('[name="limit"]').value = limit.value; 851 } 852 // sync custom inputs 853 form.querySelectorAll('[data-setting]').forEach( function( input ) { 854 listTableForm.querySelectorAll('[name="'+input.name+'"]').forEach( el => el.remove() ); 855 let persisted = input.cloneNode(true); 856 persisted.classList.add('hidden') 857 listTableForm.appendChild( persisted ); 858 }); 859 closeModal(modal); 860 // send events out 861 modal.dispatchEvent( new CustomEvent('submitted') ); 862 listTable.dispatchEvent( new CustomEvent( 'em_list_table_settings_submitted', { 863 detail: { 864 listTableForm: listTableForm, 865 form: form, 866 modal: modal 867 }, 868 bubbles: true 869 }) ); 870 // submit main form 871 listTableForm.requestSubmit(); 872 }); 873 }); 874 875 /** 876 * Handle submission of export forms, by copying over filters and hidden inputs with the data-persist attribute from main list table form. 877 */ 878 listTable.querySelectorAll('.em-list-table-export > form').forEach( function( exportForm ) { 879 exportForm.addEventListener('submit', function(e) { 880 var formFilters = this.querySelector('.em-list-table-filters'); 881 if ( formFilters ) { 882 // get all filter inputs in main list table form and copy over so export inherits all filters to output right results 883 let filters = listTableForm.querySelectorAll('.em-list-table-filters [name]'); 884 formFilters.innerHTML = ''; // Empty the filters, none to copy over 885 if( filters ) { 886 filters.forEach( function( filter ) { 887 formFilters.appendChild( filter.cloneNode(true) ); 888 }); 889 } 890 let peristentData = listTableForm.querySelectorAll('[data-persist]'); 891 if( peristentData ) { 892 peristentData.forEach( function( filter ) { 893 formFilters.appendChild( filter.cloneNode(true) ); 894 }); 895 } 896 } 897 }); 898 }); 899 900 // sortables 901 listTable.querySelectorAll(".em-list-table-cols-sortable").forEach( function(sortable) { 902 Sortable.create( sortable ); 903 }); 904 905 // add trigger 906 document.dispatchEvent( new CustomEvent('em_list_table_setup', { detail: { listTable: listTable, listTableForm: listTableForm } }) ); 907 908 // add extra listeners that we might want to block such as in bulk actions and row actions 909 910 /* ----------------- Row/Bulk Action Handlers ----------------- */ 911 912 const actionMessages = JSON.parse( listTableForm.dataset.actionMessages ); 913 let isBulkAction = false; 914 915 listTable.addEventListener('click', function( e ) { 916 if( e.target.matches('a[data-row_action]') ) { 917 e.preventDefault(); 918 let el = e.target; 919 let tr = el.closest('tr'); 920 921 if( !isBulkAction ) { 922 let confirmation = [] 923 // check if we need to confirm something specific 924 if ( el.dataset.confirmation && el.dataset.confirmation in actionMessages ) { 925 confirmation.push( actionMessages[el.dataset.confirmation] ); 926 } 927 // check context of action and warn then propagate if upstream 928 if ( el.dataset.row_action in actionMessages ) { 929 confirmation.push( actionMessages[el.dataset.row_action] ); 930 } 931 932 if ( confirmation.length > 0 ) { 933 if ( !confirm( confirmation.join("\n\n") ) ) { 934 return false;
935 } 936 } 937 } 938 939 // close dropdown if applicable 940 let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content'); 941 if ( dropdown ) { 942 if ( '_tippy' in dropdown ) { 943 dropdown._tippy.hide(); 944 } 945 } 946 947 // handle upstream rows, add a loading class to them so they don't get double-tapped, no checks necessary here since we have clicked a single row item 948 if( el.dataset.upstream ) { 949 // block any same upstream_id row so it's loading already pending refresh 950 listTable.querySelectorAll('tr[data-id="' + tr.dataset.id + '"]').forEach( tr => tr.classList.add('loading') ); 951 } 952 953 // prep and fetch/refresh 954 let formData = new FormData( listTableForm ); 955 for( const [key, value] of Object.entries(el.dataset) ) { 956 formData.set(key, value); 957 } 958 formData.set('view', listTable.dataset.view); 959 formData.set('action', listTable.dataset.basename + '_row'); 960 listTableRowAction( tr, formData ); 961 962 return false; // stop propagation 963 } 964 }); 965 966 // Action links (approve/reject etc.) - circumvent if a warning is required 967 listTable.addEventListener( 'click', function( e ) { 968 if( e.target.matches('a[data-row_action]') ) { 969 e.preventDefault(); 970 } 971 }); 972 973 listTable.querySelectorAll('button.em-list-table-bulk-action').forEach( function( button ) { 974 button.addEventListener('click', function (e) { 975 e.preventDefault(); // override default 976 let actionSelector = listTableForm.querySelector('select.bulk-action-selector'); 977 let action = actionSelector.options[actionSelector.selectedIndex]; 978 979 // check if we need to confirm 980 if ( action.dataset.confirm ) { 981 if ( !confirm( action.dataset.confirm ) ) { 982 isBulkAction = false; // just in case 983 return false; 984 } 985 } 986 987 isBulkAction = true; 988 // find all checked items and perform action on them if the action actually exists for that row (e.g. you can't re-approve an approved booking) 989 let rows = listTableForm.querySelectorAll('tbody .check-column input:checked'); 990 rows.forEach( function ( checkbox ) { 991 let actionTrigger = checkbox.parentElement.querySelector('[data-row_action="' + action.value + '"]'); 992 // check if sibling has the relevant action 993 if( actionTrigger ) { 994 let tr = checkbox.closest('tr'); 995 if ( actionTrigger.dataset.upstream ) { 996 // check if not already in an upstream process, proceed if not 997 if ( !tr.classList.contains('loading') ) { // if loading, already in upstream from another row 998 // trigger the first booking id row in this table, it'll handle upstream stuff 999 actionTrigger.click(); 1000 } 1001 } else { 1002 // regular action, just click it 1003 actionTrigger.click(); 1004 } 1005 } 1006 }); 1007 isBulkAction = false; 1008 }); 1009 }); 1010 1011 1012 // add a listener to refresh related booking rows if upstream 1013 listTable.addEventListener('em_list_table_row_action_complete', function(e){ 1014 if ( e.detail.upstream ) { 1015 // find any rows other than the current one and trigger a refresh 1016 let currentRow = e.detail.currentRow; 1017 let formData = e.detail.formData; 1018 if( formData.get('row_action') === 'delete' ) { 1019 let feedback = currentRow.querySelector('.column-primary span.em-icon-trash.em-tooltip'); 1020 if ( feedback ) { 1021 listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) { 1022 // apply to all rows of same booking_id except the one we just updated 1023 if ( tr !== currentRow ) { 1024 let td = tr.querySelector('.column-primary'); 1025 td.prepend(feedback.cloneNode(true)); 1026 em_setup_tippy(td); 1027 } 1028 tr.classList.remove('faded-out'); 1029 tr.classList.remove('loading'); 1030 }); 1031 } 1032 } else if( formData.get('row_action') !== 'refresh' ) { 1033 let feedback = currentRow.querySelector('.column-primary span.em-icon.em-tooltip').getAttribute('aria-label'); 1034 formData.set('row_action', 'refresh'); // this is a special action that just refreshes the row 1035 formData.set('feedback', feedback); 1036 listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) { 1037 // apply to all rows of same booking_id except the one we just updated 1038 if( tr !== currentRow ) { 1039 listTableRowAction(tr, formData); 1040 // delete current booking_id and reset isUpstreamAction if we're done 1041 delete isUpstreamAction[e.detail.booking_id]; 1042 if (Object.keys(isUpstreamAction).length) { 1043 isUpstreamAction = false;
1044 } 1045 } 1046 }); 1047 } 1048 } 1049 }); 1050 1051 // setup rows with actions if there are any 1052 listTable.querySelectorAll('td.column-actions a').forEach( (action) => { 1053 action.classList.add('em-tooltip'); 1054 action.setAttribute('aria-label', action.innerText); 1055 }); 1056} 1057 1058let listTableRowAction = function( tr, formData, upstream = false ){ 1059 let listTable = tr.closest('.em-list-table'); 1060 tr.classList.add('loading'); 1061 formData.set('row_id', tr.dataset.id ); 1062 fetch( EM.ajaxurl, { method: 'post', body : formData } ).then( function( response ) { 1063 return response.text(); 1064 }).then( function( html ) { 1065 tr.classList.add('faded-out'); 1066 if ( formData.get('row_action') === 'delete' ) { 1067 // the text provided is the icon, nothing else 1068 tr.querySelectorAll('th.check-column input[type="checkbox"], .em-list-table-actions').forEach( el => el.remove() ); 1069 let td = tr.querySelector('.column-primary'); 1070 let wrapper = document.createElement('div'); 1071 wrapper.innerHTML = html; 1072 let icon = wrapper.firstElementChild; 1073 em_setup_tippy(wrapper); // no actions to set up 1074 td.prepend(icon); 1075 } else { 1076 tr.innerHTML = html 1077 setupListTableExtras(tr); 1078 } 1079 tr.classList.remove('faded-out'); 1080 tr.classList.remove('loading'); 1081 listTable.dispatchEvent( new CustomEvent('em_list_table_row_action_complete', { detail: { currentRow: tr, formData: formData, upstream: upstream } } ) ); 1082 }); 1083} 1084 1085const setupListTableExtras = function( listTable ) { 1086 // setup rows with actions if there are any 1087 listTable.querySelectorAll('td.column-actions a').forEach( (action) => { 1088 action.classList.add('em-tooltip'); 1089 action.setAttribute('aria-label', action.innerText); 1090 }); 1091 // remove tooltips within tooltips in cell tooltips 1092 listTable.querySelectorAll('td .em-list-table-col-tooltip .em-list-table-col-tooltip').forEach( (subtip) => { 1093 subtip.querySelectorAll('.em-tooltip').forEach( el => el.remove() ); 1094 subtip.querySelectorAll('.em-tooltip-content').forEach( el => el.classList.remove('hidden') ); 1095 }); 1096 // set up tippy, selectize etc. 1097 em_setup_tippy( listTable ); 1098 em_setup_selectize( listTable ); 1099} 1100 1101document.addEventListener('em_list_table_filtered', function(e){ 1102 setupListTable( e.detail.listTable ); 1103 // re-setup tippy, selectize etc. 1104 setupListTableExtras( e.detail.listTable ); 1105}); 1106 1107// init 1108document.addEventListener('DOMContentLoaded', function() { 1109 // add back-compat stuff 1110 document.querySelectorAll('.em_obj div.tablenav').forEach( function( tablenav ){ 1111 let em_obj = tablenav.closest('.em_obj'); 1112 em_obj.classList.add('em-list-table','legacy', 'frontend'); 1113 em_obj.querySelector('& > form').classList.add('em-list-table-form'); 1114 }); 1115 // find tables 1116 document.querySelectorAll('.em-list-table').forEach( listTable => setupListTable(listTable) ); 1117}); 1118 1119// add extra setup to bookings list table 1120document.addEventListener('em_list_table_setup' , function(e){ 1121 let listTable = e.detail.listTable; 1122 let listTableForm = e.detail.listTableForm; 1123 if( listTable.classList.contains('em-bookings-table') ) { 1124 1125 // handle submitting the settings modal form with booking-speficic extras 1126 listTable.addEventListener('em_list_table_settings_submitted', function(e){ 1127 let form = e.detail.form; 1128 let listTableForm = e.detail.listTableForm; 1129 // get the views ddm and sync it to the table filter 1130 let views_select = form.querySelector('select[name="view"]'); 1131 if ( views_select ) { 1132 let view_radio = listTableForm.querySelector('[name="view"][value="' + views_select.value + '"]'); 1133 if( view_radio ) { 1134 view_radio.checked = true; // this doesn't trigger an event as we don't want that 1135 } 1136 let view_option = listTableForm.querySelector('button.em-bookings-table-view-option[data-view]'); 1137 if ( view_option ) { 1138 view_option.setAttribute('data-view', views_select.value); 1139 view_option.innerText = views_select.options[views_select.selectedIndex].innerText; 1140 } 1141 } 1142 }); 1143 1144 // setup views dropdown to switch between different booking table views 1145 let views_ddm_options = { 1146 theme : 'light-border', 1147 allowHTML : true, 1148 interactive : true, 1149 trigger : 'manual', 1150 placement : 'bottom', 1151 zIndex : 1000000, 1152 touch: true, 1153 }; 1154 let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; 1155 1156 // TODO unify this with the search view dropdown JS to remove redundant code 1157 listTable.querySelectorAll('.em-bookings-table-views-trigger').forEach( function( trigger ){ 1158 tooltip_vars.content = trigger.parentElement.getAttribute('aria-label'); 1159 let views_tooltip = tippy(trigger.parentElement, tooltip_vars); 1160 let views_content = trigger.parentElement.querySelector('.em-bookings-table-views-options'); 1161 let views_content_parent = views_content.parentElement; 1162 let tippy_content = document.createElement('div'); 1163 views_ddm_options.content = tippy_content; 1164 let views_ddm = tippy(trigger, views_ddm_options); 1165 views_ddm.setProps({ 1166 onShow(instance){ 1167 views_tooltip.disable(); 1168 tippy_content.append(views_content); 1169 }, 1170 onShown(instance){ // keyboard support 1171 views_content.querySelector('input:checked').focus(); 1172 }, 1173 onHidden(instance){ 1174 views_tooltip.enable(); 1175 if( views_content.parentElement !== views_content_parent ) { 1176 views_content_parent.append(views_content); 1177 } 1178 } 1179 }); 1180 let tippy_listener = function(e){ 1181 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1182 e.preventDefault(); 1183 e.stopPropagation(); 1184 trigger._tippy.show(); 1185 views_tooltip.hide(); 1186 } 1187 trigger.addEventListener('click', tippy_listener); 1188 trigger.addEventListener('keydown', tippy_listener); 1189 trigger.firstElementChild.addEventListener('focus', function(e){ 1190 views_ddm.hide(); 1191 views_tooltip.enable(); 1192 views_tooltip.show(); 1193 }); 1194 trigger.firstElementChild.addEventListener('blur', function(){ 1195 views_tooltip.hide(); 1196 }); 1197 1198 // TODO Remove this dependence on jQuery. Copied it from the search.js file, but it seems that even a vanilla document.addEventListener('blur') isn't intercepting these blur/focus events. 1199 let $ = jQuery; 1200 $views = $(listTable).find('.em-bookings-table-views'); 1201 $views.on('focus blur', '.em-bookings-table-views-options input', function(){ 1202 if( document.activeElement === this ){ 1203 this.parentElement.classList.add('focused'); 1204 }else{ 1205 this.parentElement.classList.remove('focused'); 1206 } 1207 }); 1208 1209 $views.on('keydown click', '.em-bookings-table-views-options input', function( e ){ 1210 // get relevant vars 1211 if( e.type === 'keydown' && e.which !== 13 ){ 1212 if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { 1213 if (e.which === 38) { 1214 if (this.parentElement.previousElementSibling) { 1215 this.parentElement.previousElementSibling.focus(); 1216 } 1217 } else if (e.which === 40) { 1218 if (this.parentElement.nextElementSibling) { 1219 this.parentElement.nextElementSibling.focus(); 1220 } 1221 } 1222 return false; 1223 } else if ( e.which === 9 ) { 1224 // focus out 1225 views_ddm.hide(); 1226 } 1227 return true; 1228 } 1229 this.checked = true; 1230 let input = $(this); 1231 // mark label selected 1232 input.closest('fieldset').find('label').removeClass('checked'); 1233 input.parent().addClass('checked'); 1234 // get other reference elements we need 1235 let views_wrapper = $(this).closest('.em-bookings-table-views'); 1236 let view_type = this.value; 1237 let trigger = views_wrapper.children('.em-bookings-table-views-trigger'); 1238 let trigger_option = trigger.children('.em-search-view-option'); 1239 // change view, if different 1240 if( view_type !== trigger_option.attr('data-view') ){ 1241 trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); 1242 // remove cols value if it's just a switch in view, so we get default cols (if there is one) 1243 listTableForm.querySelector('input[name="cols"][type="hidden"]').value = ''; 1244 // set the view type and trigger a form submit 1245 listTableForm.requestSubmit(); 1246 } 1247 views_ddm.hide(); 1248 }); 1249 }); 1250 } 1251}); 1252 1253// backcompat for em_bookings_filtered jQuery trigger 1254document.addEventListener('em_list_table_filtered', function( e ){ 1255 if( e.detail.listTable.classList.contains('em-bookings-table') && window.jQuery ) { 1256 jQuery(document).triggerHandler('em_bookings_filtered', [jQuery(e.detail.data), e.detail.listTable, jQuery(e.detail.form)]); // backwards compatibility 1257 } 1258}) 1259 1260function em_setup_datepicker( container ){ 1261 wrap = jQuery(container); 1262 1263 //apply datepickers - jQuery UI (backcompat) 1264 let dateDivs = wrap.find('.em-date-single, .em-date-range'); 1265 if( dateDivs.length > 0 ){ 1266 //default picker vals 1267 var datepicker_vals = { 1268 dateFormat: "yy-mm-dd", 1269 changeMonth: true, 1270 changeYear: true, 1271 firstDay : EM.firstDay, 1272 yearRange:'c-100:c+15', 1273 beforeShow : function( el, inst ){ 1274 em_setup_jquery_ui_wrapper(); 1275 inst.dpDiv.appendTo('#em-jquery-ui'); 1276 } 1277 }; 1278 if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat; 1279 if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange; 1280 jQuery(document).triggerHandler('em_datepicker', datepicker_vals); 1281 //apply datepickers to elements 1282 dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){ 1283 //init the datepicker 1284 var dateInput = jQuery(dateInput); 1285 var dateValue = dateInput.nextAll('input.em-date-input').first(); 1286 var dateValue_value = dateValue.val(); 1287 dateInput.datepicker(datepicker_vals); 1288 dateInput.datepicker('option', 'altField', dateValue); 1289 //now set the value 1290 if( dateValue_value ){ 1291 var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) ); 1292 dateInput.val(this_date_formatted); 1293 dateValue.val(dateValue_value); 1294 } 1295 //add logic for texts 1296 dateInput.on('change', function(){ 1297 if( jQuery(this).val() == '' ){ 1298 jQuery(this).nextAll('.em-date-input').first().val(''); 1299 } 1300 }); 1301 }); 1302 //deal with date ranges 1303 dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){ 1304 //finally, apply start/end logic to this field 1305 dateInput = jQuery(dateInput); 1306 if( dateInput.hasClass('em-date-start') ){ 1307 dateInput.datepicker('option','onSelect', function( selectedDate ) { 1308 //get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element 1309 var startDate = jQuery(this); 1310 var endDate = startDate.parents('.em-date-range').find('.em-date-end').first(); 1311 var startValue = startDate.nextAll('input.em-date-input').first().val(); 1312 var endValue = endDate.nextAll('input.em-date-input').first().val(); 1313 startDate.trigger('em_datepicker_change'); 1314 if( startValue > endValue && endValue != '' ){ 1315 endDate.datepicker( "setDate" , selectedDate ); 1316 endDate.trigger('change').trigger('em_datepicker_change'); 1317 } 1318 endDate.datepicker( "option", 'minDate', selectedDate ); 1319 }); 1320 }else if( dateInput.hasClass('em-date-end') ){ 1321 var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first(); 1322 if( startInput.val() != '' ){ 1323 dateInput.datepicker('option', 'minDate', startInput.val()); 1324 } 1325 } 1326 }); 1327 } 1328 1329 // datpicker - new format 1330 let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range'); 1331 if( datePickerDivs.length > 0 ){ 1332 // wrappers and locale 1333 let datepicker_wrapper = jQuery('#em-flatpickr'); 1334 if( datepicker_wrapper.length === 0 ){ 1335 datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body'); 1336 } 1337 // locale 1338 if( 'locale' in EM.datepicker ){ 1339 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 1340 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 1341 } 1342 //default picker vals 1343 let datepicker_onChanging; 1344 let datepicker_options = { 1345 appendTo : datepicker_wrapper[0], 1346 dateFormat: "Y-m-d", 1347 disableMoble : "true", 1348 allowInput : true, 1349 onChange : [function( selectedDates, dateStr, instance ){ 1350 if ( datepicker_onChanging !== selectedDates) { 1351 let wrapper = jQuery(instance.input).closest('.em-datepicker'); 1352 let data_wrapper = wrapper.find('.em-datepicker-data'); 1353 let inputs = data_wrapper.find('input'); 1354 let dateFormat = function(d) { 1355 let month = '' + (d.getMonth() + 1), 1356 day = '' + d.getDate(), 1357 year = d.getFullYear(); 1358 if (month.length < 2) month = '0' + month; 1359 if (day.length < 2) day = '0' + day; 1360 return [year, month, day].join('-'); 1361 } 1362 if ( selectedDates.length === 0 ){ 1363 if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ) { 1364 let input = instance.input.classList.contains('em-date-input-start') ? inputs[0] : input
1364s[1]; 1365 input.setAttribute('value', ''); 1366 if ( inputs.filter(input => input.value !== '').length === 0 ) { 1367 wrapper.removeClass('has-value'); 1368 } 1369 } else { 1370 wrapper.removeClass('has-value'); 1371 inputs.attr('value', ''); 1372 if( instance.config.mode === 'multiple' ) { 1373 // empty pill selection 1374 let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates'); 1375 if (datesEl) { 1376 datesEl.querySelectorAll('.item:not(.clear-all)').forEach( el => el.remove() ); 1377 datesEl.classList.remove('has-value'); 1378 } 1379 } 1380 } 1381 } else { 1382 wrapper.addClass('has-value'); 1383 if ( instance.config.mode === 'range' && selectedDates[1] !== undefined ) { 1384 // deal with end date 1385 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1386 inputs[1].setAttribute('value', dateFormat(selectedDates[1])); 1387 } else if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){ 1388 if( instance.input.classList.contains('em-date-input-start') ){ 1389 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1390 // set min-date of other datepicker 1391 let fp; 1392 if( wrapper.attr('data-until-id') ){ 1393 let fp_inputData = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end'); 1394 fp = fp_inputData[0]._flatpickr; 1395 }else { 1396 fp = wrapper.find('.em-date-input-end')[0]._flatpickr; 1397 } 1398 if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){ 1399 fp.setDate(selectedDates[0], false); 1400 inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0])); 1401 } 1402 fp.set('minDate', selectedDates[0]); 1403 }else{ 1404 inputs[1].setAttribute('value', dateFormat(selectedDates[0])); 1405 } 1406 } else if ( instance.config.mode === 'multiple' ){ 1407 inputs[0].setAttribute('value', dateStr); 1408 // Sort the selected dates chronologically 1409 selectedDates.sort(function(a, b) { return a - b; }); 1410 // Build pill selection for multiple dates 1411 let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates'); 1412 datesEl.classList.add('has-value'); 1413 if ( datesEl ) { 1414 // Remove existing date pills but preserve the clear-all button 1415 datesEl.querySelectorAll('.item:not(.clear-all)').forEach(el => el.remove()); 1416 1417 // Sort dates chronologically 1418 selectedDates.sort((a, b) => a - b); 1419 1420 // Group sequential dates into ranges 1421 let groups = [], currentGroup = []; 1422 selectedDates.forEach((date, i) => { 1423 if (currentGroup.length === 0) { 1424 currentGroup.push(date); 1425 } else { 1426 let lastDate = currentGroup[currentGroup.length - 1]; 1427 let diffDays = (date - lastDate) / (1000 * 3600 * 24); 1428 if (diffDays === 1) { 1429 currentGroup.push(date); 1430 } else { 1431 groups.push(currentGroup); 1432 currentGroup = [date]; 1433 } 1434 } 1435 if (i === selectedDates.length - 1) groups.push(currentGroup); 1436 }); 1437 1438 // Insert pills and maintain date values 1439 groups.forEach(group => { 1440 let div = document.createElement('div'); 1441 div.className = 'item'; 1442 let formattedDates = group.map(date => instance.formatDate(date, 'Y-m-d')); 1443 div.dataset.date = formattedDates.join(','); 1444 let startText = instance.formatDate(group[0], instance.config.altFormat); 1445 let endText = instance.formatDate(group[group.length - 1], instance.config.altFormat); 1446 div.innerHTML = `<span>${group.length > 1 ? startText + ' - ' + endText : startText}</span><a href="#" class="remove" tabindex="-1" title="Remove">Ã</a>`; 1447 datesEl.insertBefore(div, datesEl.querySelector('.clear-all')); 1448 }); 1449 } 1450 } else { 1451 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1452 } 1453 } 1454 inputs.trigger('change');
1455 let current_date = data_wrapper.attr('date-value'); 1456 data_wrapper.attr('data-value', inputs.toArray().map(input => input.value).filter(value => value !== '').join(',')); 1457 if( current_date === dateStr ) data_wrapper.trigger('change'); 1458 wrapper[0].dispatchEvent( new CustomEvent('datepicker-onChange', { detail: { selectedDates : selectedDates, dateStr: dateStr, instance: instance } }) ); 1459 } 1460 datepicker_onChanging = null; // reset regardless, since it's to prevent onClose firing this twice 1461 }], 1462 onClose : function( selectedDates, dateStr, instance ){ 1463 // deal with single date choice and clicking out 1464 if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){ 1465 if(selectedDates.length === 1){ 1466 instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection 1467 } 1468 } else { 1469 // trigger an onChange 1470 datepicker_options.onChange[0](selectedDates, dateStr, instance); 1471 datepicker_onChanging = selectedDates; // set flag to prevent onChange firing twice 1472 } 1473 }, 1474 locale : {}, 1475 }; 1476 if( EM.datepicker.format !== datepicker_options.dateFormat ){ 1477 datepicker_options.altFormat = EM.datepicker.format; 1478 datepicker_options.altInput = true; 1479 } 1480 jQuery(document).triggerHandler('em_datepicker_options', datepicker_options); 1481 //apply datepickers to elements 1482 datePickerDivs.each( function(i,datePickerDiv) { 1483 // hide fallback fields, show range or single 1484 datePickerDiv = jQuery(datePickerDiv); 1485 datePickerDiv.find('.em-datepicker-data').addClass('hidden'); 1486 let isRange = datePickerDiv.hasClass('em-datepicker-range'); 1487 let altOptions = {}; 1488 if( datePickerDiv.attr('data-datepicker') ){ 1489 altOptions = JSON.parse(datePickerDiv.attr('data-datepicker')); 1490 if( typeof altOptions !== 'object' ){ 1491 altOptions = {}; 1492 } 1493 } 1494 let otherOptions = {}; 1495 if( datePickerDiv.find('script.datepicker-options').length > 0 ){ 1496 otherOptions = JSON.parse( datePickerDiv.find('script.datepicker-options').text() ); 1497 if( typeof altOptions !== 'object' ){ 1498 otherOptions = {}; 1499 } 1500 } 1501 let options = Object.assign({}, datepicker_options, altOptions, otherOptions); // clone, mainly shallow concern for 'mode' 1502 options.mode = isRange ? 'range' : 'single'; 1503 if ( datePickerDiv.hasClass('em-datepicker-multiple') ) { 1504 options.mode = 'multiple'; 1505 } 1506 if( isRange && 'onClose' in options ){ 1507 options.onClose = [function( selectedDates, dateStr, instance ){ 1508 if(selectedDates.length === 1){ // deal with single date choice and clicking out 1509 instance.setDate([selectedDates[0],selectedDates[0]], true); 1510 } 1511 }]; 1512 } 1513 if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator'); 1514 if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format'); 1515 let FPs = datePickerDiv.find('.em-date-input'); 1516 //if ( FPs.hasClass(flatpickr-input) ) return; // already initialized 1517 if ( FPs[0].tagName.toLowerCase() === 'input' ) { 1518 FPs.attr('type', 'text'); 1519 } else { 1520 options.wrap = true; 1521 FPs.find('input[type="hidden"]').attr('type', 'text'); 1522 } 1523 FPs.flatpickr(options); 1524 }); 1525 em_setup_datepicker_dates( datePickerDivs ); 1526 // fire trigger 1527 jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]); 1528 container.dispatchEvent( new CustomEvent('em_datepicker_loaded', { bubbles: true, detail: { container: wrap, datepickers: datePickerDivs } } ) ); 1529 } 1530} 1531 1532function em_setup_datepicker_dates( container ) { 1533 let datePickerContainer = jQuery(container); 1534 let datePickerDivs = datePickerContainer.first().hasClass('em-datepicker') ? datePickerContainer : datePickerContainer.find('.em-datepicker, .em-datepicker-range') ; 1535 // add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs 1536 datePickerDivs.each( function(i,datePickerDiv) { 1537 datePickerDiv = jQuery(datePickerDiv); 1538 let FPs = datePickerDiv.find('.em-date-input'); 1539 //if ( FPs.hasClass(flatpickr-input) ) return; 1540 let inputs = datePickerDiv.find('.em-datepicker-data input'); 1541 inputs.attr('type', 'hidden'); // hide so not tabbable 1542 if( datePickerDiv.hasClass('em-datepicker-until') ){ 1543 let start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr; 1544 let end_fp; 1545 if( datePickerDiv.attr('data-until-id') ){ 1546 end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr; 1547 }else{ 1548 end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1549 if( inputs[1] && inputs[1].value ) { 1550 end_fp.setDate(inputs[1].value, false, 'Y-m-d'); 1551 } 1552 } 1553 if( inputs[0] && inputs[0].value ){ 1554 start_fp.setDate(inputs[0].value, false, 'Y-m-d'); 1555 end_fp.set('minDate', inputs[0].value); 1556 } 1557 start_fp._inputData = inputs[0] ? [inputs[0]] : []; 1558 end_fp._inputData = inputs[1] ? [inputs[1]] : []; 1559 }else if( datePickerDiv.hasClass('em-datepicker-multiple') ){ 1560 // handle multiple pre-loaded dates 1561 if( inputs[0] && inputs[0].value ){ 1562 let datesArray = inputs[0].value.split(','); 1563 FPs[0]._flatpickr.setDate(datesArray, true, 'Y-m-d'); 1564 } 1565 FPs[0]._flatpickr._inputData = [ inputs[0] ]; 1566 }else{ 1567 let dates = []; 1568 FPs[0]._flatpickr._inputData = []; 1569 inputs.each( function( i, input ){ 1570 if( input.value ){ 1571 dates.push(input.value); 1572 FPs[0]._flatpickr._inputData.push(input); 1573 } 1574 }); 1575 FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d'); 1576 } 1577 }); 1578} 1579 1580/** 1581 * Deregister the datepicker 1582 * @param wrap 1583 */ 1584function em_unsetup_datepicker( wrap ) { 1585 wrap.querySelectorAll(".em-datepicker .em-date-input.flatpickr-input").forEach( function( el ){ 1586 if( '_flatpickr' in el ){ 1587 el._flatpickr.destroy(); 1588 } 1589 }); 1590} 1591 1592/** 1593 * Handle the remove button for each date selection pill 1594 */ 1595document.addEventListener('click', function(e) { 1596 if ( !e.target.closest('.em-datepicker-dates .item:not(.clear-all) .remove') ) return; 1597 1598 e.preventDefault(); 1599 const pill = e.target.closest('.item'); 1600 const datesContainer = pill.closest('.em-datepicker-dates'); 1601 const datepickerContainer = datesContainer.closest('.em-datepicker'); 1602 const dateInput = datepickerContainer.querySelector('.em-date-input'); 1603 1604 // Remove pill 1605 pill.remove(); 1606 1607 // Rebuild dates array from remaining pills 1608 const newDates = []; 1609 datesContainer.querySelectorAll('.item:not(.clear-all)').forEach(item => { 1610 const dates = item.dataset.date.split(','); 1611 dates.forEach(date => newDates.push(date)); 1612 }); 1613 1614 // Update Flatpickr instance 1615 const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr; 1616 if (fp) fp.setDate(newDates, true, 'Y-m-d'); 1617 1618 // Update hidden input 1619 const altInput = datepickerContainer.querySelector('.em-datepicker-data input'); 1620 if (altInput) { 1621 altInput.value = newDates.join(','); 1622 altInput.dispatchEvent(new Event('change')); 1623 } 1624}); 1625 1626/** 1627 * Handle the Clear All button 1628 */ 1629document.addEventListener('click', function(e) { 1630 if ( !e.target.closest('.em-datepicker-dates .clear-all') ) return; 1631 1632 e.preventDefault(); 1633 const datesContainer = e.target.closest('.em-datepicker-dates'); 1634 const datepickerContainer = datesContainer.closest('.em-datepicker'); 1635 const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr; 1636 1637 // Remove all pills 1638 datesContainer.querySelectorAll('.item:not(.clear-all)').forEach( item => item.remove() ); 1639 1640 // Clear Flatpickr instance 1641 if (fp) fp.clear(); 1642 1643 // Update hidden input 1644 const altInput = datepickerContainer.querySelector('.em-datepicker-data input'); 1645 if (altInput) { 1646 altInput.value = ''; 1647 altInput.dispatchEvent(new Event('change')); 1648 } 1649}); 1650 1651 1652 1653function em_setup_timepicker( container ){ 1654 wrap = jQuery(container); 1655 var timepicker_options = { 1656 step:15 1657 } 1658 timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A'; 1659 jQuery(document).triggerHandler('em_timepicker_options', timepicker_options); 1660 wrap.find(".em-time-input").em_timepicker(timepicker_options).each( function(i, el){ 1661 this.dataset.seconds = this.value ? jQuery(this).em_timepicker('getSecondsFromMidnight') : ''; 1662 }); 1663 1664 /** 1665 * A function that retargets an the change event to the .em-time-range enclosing div whilst maintinaing the originally triggered target. 1666 * This is done because the em_timepicker short-circuits the bubbling. 1667 * 1668 * @param {Event} e - The original event to be retargeted. 1669 */ 1670 let retargetEvent = function(e) { 1671 e.stopPropagation(); 1672 const customEvent = new CustomEvent('change', { 1673 bubbles: true, 1674 cancelable: true, 1675 detail: { target: e.target } 1676 }); 1677 1678 // Override the target getter to return the original element 1679 Object.defineProperty(customEvent, 'target', {
1680 configurable: true, 1681 get: () => e.target, 1682 }); 1683 e.target.closest('.em-time-range').dispatchEvent( customEvent ); 1684 }; 1685 1686 // Keep the duration between the two inputs. 1687 wrap.find(".em-time-range input.em-time-start").each( function(i, el){ 1688 var time = jQuery(el); 1689 time.data('oldTime', time.em_timepicker('getSecondsFromMidnight')); 1690 }).on('change', function( e ) { 1691 var start = jQuery(this); 1692 var wrapper = start.closest('.em-time-range'); 1693 var end = wrapper.find('.em-time-end').first(); 1694 if ( end.val() ) { // Only update when second input has a value. 1695 // Calculate duration. 1696 var oldTime = start.data('oldTime'); 1697 var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000; 1698 var time = start.em_timepicker('getSecondsFromMidnight'); 1699 if( this.value && end.em_timepicker('getSecondsFromMidnight') >= oldTime ){ 1700 // Calculate and update the time in the second input. 1701 end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration)); 1702 } 1703 start.data('oldTime', time); 1704 } 1705 if ( start.val() || end.val() ) { 1706 wrapper.find('.em-time-all-day').prop('checked', false).prop('indeterminate', false); 1707 } 1708 this.dataset.seconds = start.val() ? start.em_timepicker('getSecondsFromMidnight') : ''; 1709 retargetEvent(e); 1710 }); 1711 // Validate. 1712 container.querySelectorAll('.em-time-range').forEach( el => el.addEventListener('change', function (e) { 1713 if ( e.target.matches('input.em-time-end') ) { 1714 let end = jQuery(e.target); 1715 e.target.dataset.seconds = end.val() ? end.em_timepicker('getSecondsFromMidnight') : ''; 1716 let start = end.prevAll('.em-time-start'); 1717 let wrapper = e.target.closest('.event-form-when, .em-time-range'); 1718 let start_date_element = wrapper.querySelector('.em-date-end'); 1719 let end_date_element = wrapper.querySelector('.em-date-start'); 1720 let start_date = start_date_element ? start_date_element.value : ''; 1721 let end_date = end_date_element ? end_date_element.value : ''; 1722 if ( start.val() ) { 1723 let hasError = start.em_timepicker('getTime') > end.em_timepicker('getTime') && (!end_date || start_date === end_date); 1724 e.target.classList.toggle('error', hasError); 1725 } 1726 if (end_date_element) { 1727 wrapper.querySelectorAll('.em-time-all-day').forEach(function (checkbox) { 1728 checkbox.checked = false; 1729 checkbox.indeterminate = false; 1730 }); 1731 } 1732 } else if ( e.target.matches('.em-date-end') ) { 1733 jQuery(e.target.closest('.event-form-when')).find('.em-time-end').trigger('change'); 1734 } else if ( e.target.matches('input.em-time-all-day') ) { 1735 e.currentTarget.querySelectorAll('.em-time-input').forEach(function (input) { 1736 input.readOnly = e.target.checked; 1737 }); 1738 if ( e.target.checked ) { 1739 // set 12am and 11:59pm for start/end times 1740 e.currentTarget.querySelectorAll('.em-time-start').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 00:00:00') ) ); 1741 e.currentTarget.querySelectorAll('.em-time-end').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 23:59:59') ) ); 1742 } 1743 } 1744 }) ); 1745 // listen to and dispatch the event 1746 wrap.find(".em-time-range input.em-time-end").on('change', retargetEvent ); 1747} 1748 1749function em_unsetup_timepicker( container ) { 1750 jQuery(container).find('.em-time-range input.em-time-end, .em-time-range input.em-time-start').unbind(['click','focus','change']); //clear all timepickers - consequently, also other click/blur/change events, recreate the further down 1751} 1752 1753let em_close_other_selectized = function(){ 1754 // find all other selectized items and close them 1755 let control = this.classList.contains('selectize-control') ? this.closest('.em-selectize.selectize-control') : this; 1756 document.querySelectorAll('.em-selectize.dropdown-active').forEach( function( el ){ 1757 if( el !== control && 'selectize' in el.previousElementSibling) { 1758 el.previousElementSibling.selectize.close(); 1759 } 1760 }); 1761} 1762 1763document.addEventListener('events_manager_js_loaded', function(){ 1764 EM_Selectize.define('multidropdown', function( options ) { 1765 if( !this.$input.hasClass('multidropdown') ) return; 1766 let s = this; 1767 let s_setup = s.setup; 1768 let s_refreshOptions = s.refreshOptions; 1769 let s_open = s.open; 1770 let s_close = s.close; 1771 let placeholder; 1772 let placeholder_text 1773 let placeholder_default; 1774 let placeholder_label; 1775 let counter; 1776 let isClosing = false;
1777 this.changeFunction = function() { 1778 let items = s.getValue(); 1779 let selected_text = this.$input.attr('data-selected-text') ? this.$input.attr('data-selected-text') : '%d Selected'; 1780 counter.children('span.selected-text').text(selected_text.replace('%d', items.length)); 1781 if( items.length > 0 ) { 1782 counter.removeClass('hidden'); 1783 placeholder_text.text( placeholder_label ); 1784 s.$control_input.attr('placeholder', s.$input.attr('placeholder')); 1785 } else { 1786 counter.addClass('hidden'); 1787 placeholder_text.text( placeholder_default ); 1788 } 1789 } 1790 this.setup = function() { 1791 s_setup.apply(s); 1792 s.isDropdownClosingPlaceholder = false; 1793 // add section to top of selection to show the dropdown text 1794 placeholder = jQuery('<div class="em-selectize-placeholder"></div>').prependTo(s.$wrapper); 1795 let clear_text = this.$input.attr('data-clear-text') ? this.$input.attr('data-clear-text') : 'Clear Selection'; 1796 counter = jQuery('<span class="placeholder-count hidden"><a href="#" class="remove" tabindex="-1">X</a><span class="selected-text"></span><span class="clear-selection">' + clear_text + '</span></div>').prependTo(placeholder); 1797 placeholder_text = jQuery('<span class="placeholder-text"></span>').appendTo(placeholder); 1798 placeholder_default = s.$input.attr('data-default') ? s.$input.attr('data-default') : s.$input.attr('placeholder'); 1799 placeholder_label = s.$input.attr('data-label') ? s.$input.attr('data-label') : s.$input.attr('placeholder'); 1800 placeholder_text.text( placeholder_default ); 1801 s.$dropdown.prepend(s.$control_input.parent()); 1802 s.on('dropdown_close', function() { 1803 s.$wrapper.removeClass('dropdown-active'); 1804 }); 1805 s.on('dropdown_open', function() { 1806 s.$wrapper.addClass('dropdown-active'); 1807 s.$control_input.val(''); 1808 }); 1809 s.on('change', this.changeFunction); 1810 placeholder.on('focus blur click', function (e) { 1811 // only if we're clicking on the placeholder 1812 if( this.matches('.em-selectize-placeholder') ) { 1813 if ( !s.isOpen && e.type !== 'blur' ){ 1814 s.open(); 1815 } else if ( s.isOpen && e.type !== 'focus' ) { 1816 s.close(); 1817 } 1818 } 1819 }).on('focus blur click mousedown mouseup', function( e ){ 1820 if( this.matches('.em-selectize-placeholder') ) { 1821 // stope selectize doing anything to our own open/close actions 1822 e.stopPropagation(); 1823 e.preventDefault(); 1824 if( e.type === 'click' ) { 1825 em_close_other_selectized.call( this.closest('.selectize-control') ); 1826 if ( s.isOpen && s.$control_input.val() && !this.matches('.placeholder-count') && !this.closest('.placeholder-count') ) { 1827 isClosing = true; 1828 s.close(); 1829 } 1830 } else { 1831 isClosing = false; 1832 } 1833 return false; 1834 } 1835 }); 1836 counter.on( 'click' , function( e ){ 1837 e.preventDefault(); 1838 e.stopPropagation(); 1839 s.clear(); 1840 if( s.isOpen ) s.refreshOptions(); 1841 }); 1842 this.changeFunction(); 1843 } 1844 1845 // prevent dropdown from closing when no options are found, because the search input shows within the dropdown in multidropdown 1846 this.refreshOptions = function ( ...args ) { 1847 s_refreshOptions.apply(s, args); 1848 if ( !this.hasOptions && this.lastQuery ) { 1849 // intervene on closing only if not in a closing process caused by our own listeners 1850 if( isClosing === false ) { 1851 this.$wrapper.addClass("dropdown-active"); 1852 s.isOpen = true; 1853 } 1854 this.$wrapper.addClass("no-options"); 1855 isClosing = false; 1856 } else { 1857 this.$wrapper.removeClass("no-options"); 1858 } 1859 }; 1860 }); 1861}); 1862 1863function em_setup_selectize( container_element ){ 1864 container = jQuery(container_element); // in case we were given a dom object 1865 1866 container.find('.em-selectize.selectize-control').on( 'click', em_close_other_selectized ); 1867 1868 let optionRender = function (item, escape) { 1869 let html = '<div class="option"'; 1870 if( 'data' in item ){ 1871 // any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute 1872 Object.entries(item.data).forEach( function( item_data ){ 1873 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1874 }); 1875 } 1876 html += '>'; 1877 if( this.$input.hasClass('checkboxes') ){ 1878 html += item.text.replace(/^(\s+)?/i, '$1<span></span> '); 1879 }else{ 1880 html += item.text; 1881 } 1882 html += '</div>'; 1883 return html; 1884 }; 1885 1886 // Selectize General 1887 container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').em_selectize({ 1888 selectOnTab : false, 1889 render: { 1890 option: optionRender, 1891 }, 1892 }).on('change', ( e ) => { 1893 e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) ) 1894 }); 1895 container.find('select[multiple].em-selectize, .em-selectize select[multiple]').em_selectize({ 1896 selectOnTab : false, 1897 hideSelected : false, 1898 plugins: ["remove_button", 'click2deselect','multidropdown'], 1899 diacritics : true, 1900 render: { 1901 item: function (item, escape) { 1902 return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>'; 1903 }, 1904 option : optionRender, 1905 optgroup : function (item, escape) { 1906 let html = '<div class="optgroup" data-group="' + escape(item.label) + '"'; 1907 if( 'data' in item ){ 1908 // any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute
1909 Object.entries(item.data).forEach( function( item_data ){ 1910 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1911 }); 1912 } 1913 html += '>'; 1914 return html + item.html + '</div>'; 1915 } 1916 1917 }, 1918 }).on('change', ( e ) => { 1919 e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) ) 1920 }); 1921 container.find('.em-selectize:not(.always-open)').each( function(){ 1922 if( 'selectize' in this ){ 1923 let s = this.selectize; 1924 this.selectize.$wrapper.on('keydown', function(e) { 1925 if( e.keyCode === 9 ) { 1926 s.blur(); 1927 } 1928 }); 1929 } 1930 }); 1931 container.find('.em-selectize.always-open').each( function(){ 1932 //extra behaviour for selectize "always open mode" 1933 if( 'selectize' in this ){ 1934 let s = this.selectize; 1935 s.open(); 1936 s.advanceSelection = function(){}; // remove odd item shuffling 1937 s.setActiveItem = function(){}; // remove odd item shuffling 1938 // add event listener to fix remove button issues due to above hacks 1939 this.selectize.$control.on('click', '.remove', function(e) { 1940 if ( s.isLocked ) return; 1941 var $item = jQuery(e.currentTarget).parent(); 1942 s.removeItem($item.attr('data-value')); 1943 s.refreshOptions(); 1944 return false; 1945 }); 1946 } 1947 }); 1948 1949 // Sortables - selectize and sorting columns, usually in list tables 1950 container.find('.em-list-table-modal .em-list-table-cols').each( function(){ 1951 let parent = jQuery(this); 1952 let sortables = jQuery(this).find('.em-list-table-cols-sortable'); 1953 parent.find('.em-selectize.always-open').each( function() { 1954 //extra behaviour for selectize column picker 1955 if ('selectize' in this) { 1956 let selectize = this.selectize; 1957 // add event listener to fix remove button issues due to above hacks 1958 selectize.on('item_add', function (value, item) { 1959 let col = item.clone(); 1960 let option = selectize.getOption(value); 1961 let type = option.attr('data-type'); 1962 col.appendTo(sortables); 1963 col.attr('data-type', type); 1964 if( option.attr('data-header') ) { 1965 col.children('span:first-child').text( option.attr('data-header') ); 1966 } 1967 jQuery('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col); 1968 }); 1969 selectize.on('item_remove', function (value) { 1970 parent.find('.item[data-value="'+ value +'"]').remove(); 1971 }); 1972 parent.on('click', '.em-list-table-cols-selected .item .remove', function(){ 1973 let value = this.parentElement.getAttribute('data-value'); 1974 selectize.removeItem(value, true); 1975 }); 1976 } 1977 }); 1978 }); 1979} 1980 1981function em_unsetup_selectize( container ) { 1982 container.querySelectorAll('.em-selectize').forEach( function( el ) { 1983 //extra behaviour for selectize "always open mode" 1984 if ( 'selectize' in el ) { 1985 el.selectize.destroy(); 1986 } 1987 }); 1988} 1989 1990function em_setup_tippy( container_element ){ 1991 let container = jQuery(container_element); 1992 var tooltip_vars = { 1993 theme : 'light-border', 1994 appendTo : 'parent', 1995 content(reference) { 1996 if( reference.dataset.content ){ 1997 try { 1998 let content = container[0].querySelector(reference.dataset.content); 1999 if (content) { 2000 content.classList.remove('hidden'); 2001 return content; 2002 } 2003 } catch ( error ) { 2004 console.log('Invlid tooltip selector in %o : %o', reference, error); 2005 } 2006 }; 2007 return reference.getAttribute('aria-label') ?? reference.title ?? ''; 2008 }, 2009 'touch' : ['hold', 300], 2010 allowHTML : true, 2011 }; 2012 jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]); 2013 container.find('.em-tooltip').each( ( i, tooltip ) => tippy( tooltip, tooltip_vars ) ); 2014 // Set up Tippy DDMs 2015 let tippy_ddm_options = { 2016 theme : 'light-border', 2017 arrow : false, 2018 allowHTML : true, 2019 interactive : true, 2020 trigger : 'manual', 2021 placement : 'bottom', 2022 zIndex : 1000000, 2023 touch : true, 2024 }; 2025 jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]); 2026 container.find('.em-tooltip-ddm').each( function(){ 2027 let ddm_content, ddm_content_sibling; 2028 if( this.getAttribute('data-content') ){ 2029 ddm_content = document.getElementById(this.getAttribute('data-content')) 2030 ddm_content_sibling = ddm_content.previousElementSibling; 2031 }else{ 2032 ddm_content = this.nextElementSibling; 2033 ddm_content_sibling = ddm_content.previousElementSibling; 2034 } 2035 let tippy_content = document.createElement('div'); 2036 // allow for custom width 2037 let button_width = this.getAttribute('data-button-width'); 2038 if( button_width ){ 2039 if( button_width == 'match' ){ 2040 tippy_ddm_options.maxWidth = this.clientWidth; 2041 ddm_content.style.width = this.clientWidth + 'px'; 2042 }else{ 2043 tippy_ddm_options.maxWidth = this.getAttribute('data-button-width'); 2044 } 2045 } 2046 tippy_ddm_options.content = tippy_content; 2047 let tippy_ddm = tippy(this, tippy_ddm_options); 2048 tippy_ddm.props.distance = 50; 2049 tippy_ddm.setProps({ 2050 onShow(instance){ 2051 if( instance.reference.getAttribute('data-tooltip-class') ) { 2052 instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') ); 2053 } 2054 instance.popper.classList.add( 'em-tooltip-ddm-display' ); 2055 tippy_content.append(ddm_content); 2056 ddm_content.classList.remove('em-tooltip-ddm-content'); 2057 }, 2058 onShown(instance){ // keyboard support 2059 ddm_content.firstElementChild.focus(); 2060 }, 2061 onHidden(instance){
2062 if( ddm_content.previousElementSibling !== ddm_content_sibling ) { 2063 ddm_content_sibling.after(ddm_content); 2064 ddm_content.classList.add('em-tooltip-ddm-content'); 2065 } 2066 }, 2067 }); 2068 let tippy_listener = function(e){ 2069 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false; 2070 e.preventDefault(); 2071 e.stopPropagation(); 2072 this._tippy.show(); 2073 } 2074 this.addEventListener('click', tippy_listener); 2075 this.addEventListener('keydown', tippy_listener); 2076 tippy_content.addEventListener('blur', function(){ 2077 tippy_content.hide(); 2078 }); 2079 tippy_content.addEventListener('mouseover', function(){ 2080 ddm_content.firstElementChild.blur(); 2081 }); 2082 }); 2083} 2084 2085function em_unsetup_tippy( container ) { 2086 container.querySelectorAll('.em-tooltip-ddm').forEach( function( el ){ 2087 if ( '_tippy' in el ) { 2088 el._tippy.destroy(); 2089 } 2090 }); 2091} 2092 2093/* 2094 * MAP FUNCTIONS 2095 */ 2096var em_maps_loaded = false; 2097var maps = {}; 2098var maps_markers = {}; 2099var infoWindow; 2100//loads maps script if not already loaded and executes EM maps script 2101function em_maps_load(){ 2102 if( !em_maps_loaded ){ 2103 if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){ 2104 var script = document.createElement("script"); 2105 script.type = "text/javascript"; 2106 script.id = "google-maps"; 2107 var proto = (EM.is_ssl) ? 'https:' : 'http:'; 2108 if( typeof EM.google_maps_api !== 'undefined' ){ 2109 script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api; 2110 }else{ 2111 script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps'; 2112 } 2113 document.body.appendChild(script); 2114 }else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){ 2115 em_maps(); 2116 }else if( jQuery('script#google-maps').length > 0 ){ 2117 jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources 2118 } 2119 } 2120} 2121jQuery(document).on('em_view_loaded_map', function( e, view, form ){ 2122 if( !em_maps_loaded ){ 2123 em_maps_load(); 2124 }else{ 2125 let map = view.find('div.em-locations-map'); 2126 em_maps_load_locations( map[0] ); 2127 } 2128}); 2129//re-usable function to load global location maps 2130function em_maps_load_locations( element ){ 2131 let el = element; 2132 let map_id = el.getAttribute('id').replace('em-locations-map-',''); 2133 let em_data; 2134 if ( document.getElementById('em-locations-map-coords-'+map_id) ) { 2135 em_data = JSON.parse( document.getElementById('em-locations-map-coords-'+map_id).text ); 2136 } else { 2137 let coords_data = el.parentElement.querySelector('.em-locations-map-coords'); 2138 if ( coords_data ) { 2139 em_data = JSON.parse( coords_data.text ); 2140 } else { 2141 em_data = {}; 2142 } 2143 } 2144 jQuery.getJSON(document.URL, em_data , function( data ) { 2145 if( data.length > 0 ){ 2146 //define default options and allow option for extension via event triggers 2147 var map_options = { mapTypeId: google.maps.MapTypeId.ROADMAP }; 2148 if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; } 2149 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2150 jQuery(document).triggerHandler('em_maps_locations_map_options', map_options); 2151 var marker_options = {}; 2152 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 2153 2154 maps[map_id] = new google.maps.Map(el, map_options); 2155 maps_markers[map_id] = []; 2156 2157 var bounds = new google.maps.LatLngBounds(); 2158 2159 jQuery.map( data, function( location, i ){ 2160 if( !(location.location_latitude == 0 && location.location_longitude == 0) ){ 2161 var latitude = parseFloat( location.location_latitude ); 2162 var longitude = parseFloat( location.location_longitude ); 2163 var location_position = new google.maps.LatLng( latitude, longitude ); 2164 //extend the default marker options 2165 jQuery.extend(marker_options, { 2166 position: location_position, 2167 map: maps[map_id] 2168 }) 2169 var marker = new google.maps.Marker(marker_options); 2170 maps_markers[map_id].push(marker); 2171 marker.setTitle(location.location_name); 2172 var myContent = '<div class="em-map-balloon"><div id="em-map-balloon-'+map_id+'" class="em-map-balloon-content">'+ location.location_balloon +'</div></div>'; 2173 em_map_infobox(marker, myContent, maps[map_id]); 2174 //extend bounds 2175 bounds.extend(new google.maps.LatLng(latitude,longitude)) 2176 } 2177 }); 2178 // Zoom in to the bounds 2179 maps[map_id].fitBounds(bounds); 2180 2181 //Call a hook if exists 2182 if( jQuery ) { 2183 jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]); 2184 } 2185 document.dispatchEvent( new CustomEvent('em_maps_locations_hook', { 2186 detail: { 2187 map : maps[map_id], 2188 data : data, 2189 id : map_id, 2190 markers : maps_markers[map_id], 2191 el : el, 2192 }, 2193 cancellable : true, 2194 })); 2195 } else {
2196 el.firstElementChild.innerHTML = 'No locations found'; 2197 if( jQuery ) { 2198 jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [ jQuery(el) ]); 2199 } 2200 document.dispatchEvent( new CustomEvent('em_maps_locations_hook_not_found', { 2201 detail: { 2202 id : map_id, 2203 el : el 2204 }, 2205 cancellable : true, 2206 })); 2207 } 2208 }); 2209} 2210function em_maps_load_location(el){ 2211 el = jQuery(el); 2212 var map_id = el.attr('id').replace('em-location-map-',''); 2213 em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text()); 2214 //extend map and markers via event triggers 2215 var map_options = { 2216 zoom: 14, 2217 center: em_LatLng, 2218 mapTypeId: google.maps.MapTypeId.ROADMAP, 2219 mapTypeControl: false, 2220 gestureHandling: 'cooperative' 2221 }; 2222 if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; } 2223 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2224 jQuery(document).triggerHandler('em_maps_location_map_options', map_options); 2225 maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options); 2226 var marker_options = { 2227 position: em_LatLng, 2228 map: maps[map_id] 2229 }; 2230 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 2231 maps_markers[map_id] = new google.maps.Marker(marker_options); 2232 infoWindow = new google.maps.InfoWindow({ content: jQuery('#em-location-map-info-'+map_id+' .em-map-balloon').get(0) }); 2233 infoWindow.open(maps[map_id],maps_markers[map_id]); 2234 maps[map_id].panBy(40,-70); 2235 2236 //JS Hook for handling map after instantiation 2237 //Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} ); 2238 jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]); 2239 //map resize listener 2240 jQuery(window).on('resize', function(e) { 2241 google.maps.event.trigger(maps[map_id], "resize"); 2242 maps[map_id].setCenter(maps_markers[map_id].getPosition()); 2243 maps[map_id].panBy(40,-70); 2244 }); 2245} 2246jQuery(document).on('em_search_ajax', function(e, vars, wrapper){ 2247 if( em_maps_loaded ){ 2248 wrapper.find('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 2249 wrapper.find('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); }); 2250 } 2251}); 2252//Load single maps (each map is treated as a seperate map). 2253function em_maps() { 2254 //Find all the maps on this page and load them 2255 jQuery('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 2256 jQuery('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } ); 2257 2258 //Location stuff - only needed if inputs for location exist 2259 if( jQuery('select#location-select-id, input#location-address').length > 0 ){ 2260 var map, marker; 2261 //load map info 2262 var refresh_map_location = function(){ 2263 var location_latitude = jQuery('#location-latitude').val(); 2264 var location_longitude = jQuery('#location-longitude').val(); 2265 let hasCoords = location_latitude != 0 || location_longitude != 0; 2266 if( hasCoords ){ 2267 var position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords 2268 marker.setPosition(position); 2269 var mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val(); 2270 mapTitle = em_esc_attr(mapTitle); 2271 marker.setTitle( mapTitle ); 2272 jQuery('#em-map').show(); 2273 jQuery('#em-map-404').hide(); 2274 google.maps.event.trigger(map, 'resize'); 2275 map.setCenter(position); 2276 map.panBy(40,-55); 2277 infoWindow.setContent( 2278 '<div id="location-balloon-content"><strong>' + mapTitle + '</strong><br>' + 2279 em_esc_attr(jQuery('#location-address').val()) + 2280 '<br>' + em_esc_attr(jQuery('#location-town').val()) + 2281 '</div>' 2282 ); 2283 infoWindow.open(map, marker); 2284 jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]); 2285 } else { 2286 jQuery('#em-map').hide(); 2287 jQuery('#em-map-404').show(); 2288 } 2289 }; 2290 2291 //Add listeners for changes to address 2292 var get_map_by_id = function(id){ 2293 if(jQuery('#em-map').length > 0){ 2294 jQuery('#em-map-404 .em-loading-maps').show(); 2295 jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){ 2296 let hasCoords = data.location_latitude != 0 && data.location_longitude != 0; 2297 if( hasCoords ){ 2298 loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude); 2299 marker.setPosition(loc_latlng); 2300 marker.setTitle( data.location_name ); 2301 marker.setDraggable(false); 2302 jQuery('#em-map').show(); 2303 jQuery('#em-map-404').hide(); 2304 jQuery('#em-map-404 .em-loading-maps').hide(); 2305 map.setCenter(loc_latlng); 2306 map.panBy(40,-55); 2307 infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>'); 2308 infoWindow.open(map, marker); 2309 google.maps.event.trigger(map, 'resize'); 2310 jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]); 2311 }else{ 2312 jQuery('#em-map').hide(); 2313 jQuery('#em-map-404').show(); 2314 jQuery('#em-map-404 .em-loading-maps').hide(); 2315 } 2316 }); 2317 } 2318 }; 2319 jQuery('#location-select-id, input#location-id').on('change', function() { get_map_by_id(
2319jQuery(this).val() ); } ); 2320 jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){ 2321 //build address 2322 if( jQuery(this).prop('readonly') === true ) return; 2323 var addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ]; 2324 var address = ''; 2325 jQuery.each( addresses, function(i, val){ 2326 if( val != '' ){ 2327 address = ( address == '' ) ? address+val:address+', '+val; 2328 } 2329 }); 2330 if( address == '' ){ //in case only name is entered, no address 2331 jQuery('#em-map').hide(); 2332 jQuery('#em-map-404').show(); 2333 return false; 2334 } 2335 //do country last, as it's using the text version 2336 if( jQuery('#location-country option:selected').val() != 0 ){ 2337 address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text(); 2338 } 2339 //add working indcator whilst we search 2340 jQuery('#em-map-404 .em-loading-maps').show(); 2341 //search! 2342 if( address != '' && jQuery('#em-map').length > 0 ){ 2343 let geocoder = new google.maps.Geocoder(); 2344 geocoder.geocode( { 'address': address }, function(results, status) { 2345 if (status == google.maps.GeocoderStatus.OK) { 2346 jQuery('#location-latitude').val(results[0].geometry.location.lat()); 2347 jQuery('#location-longitude').val(results[0].geometry.location.lng()); 2348 } 2349 refresh_map_location(); 2350 }); 2351 } 2352 }); 2353 // Check if we are on a location editing page, and if address was previously entered, if so we check location coords 2354 let location_latitude = jQuery('#location-latitude').val(); 2355 let location_longitude = jQuery('#location-longitude').val(); 2356 let hasCoords = location_latitude != 0 || location_longitude != 0; 2357 if ( !hasCoords ) { 2358 // check if there's any address items that were added previously 2359 if ( document.getElementById('location-address')?.value != '' && (document.getElementById('location-address')?.value != '' || document.getElementById('location-town')?.value != '' || document.getElementById('location-state')?.value != '' || document.getElementById('location-postcode')?.value != '' ) ) { 2360 // trigger a change so we reload the address and coords 2361 jQuery('#location-address').trigger('change'); 2362 if ( 'google_maps_resave_location' in EM ) { 2363 alert(EM.google_maps_resave_location); 2364 } 2365 } 2366 } 2367 2368 //Load map 2369 if(jQuery('#em-map').length > 0){ 2370 var em_LatLng = new google.maps.LatLng(0, 0); 2371 var map_options = { 2372 zoom: 14, 2373 center: em_LatLng, 2374 mapTypeId: google.maps.MapTypeId.ROADMAP, 2375 mapTypeControl: false, 2376 gestureHandling: 'cooperative' 2377 }; 2378 if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2379 map = new google.maps.Map( document.getElementById('em-map'), map_options); 2380 var marker = new google.maps.Marker({ 2381 position: em_LatLng, 2382 map: map, 2383 draggable: true 2384 }); 2385 infoWindow = new google.maps.InfoWindow({ 2386 content: '' 2387 }); 2388 var geocoder = new google.maps.Geocoder(); 2389 google.maps.event.addListener(infoWindow, 'domready', function() { 2390 document.getElementById('location-balloon-content').parentNode.style.overflow=''; 2391 document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow=''; 2392 }); 2393 google.maps.event.addListener(marker, 'dragend', function() { 2394 var position = marker.getPosition(); 2395 jQuery('#location-latitude').val(position.lat()); 2396 jQuery('#location-longitude').val(position.lng()); 2397 map.setCenter(position); 2398 map.panBy(40,-55); 2399 }); 2400 if( jQuery('#location-select-id').length > 0 ){ 2401 jQuery('#location-select-id').trigger('change'); 2402 }else{ 2403 refresh_map_location(); 2404 } 2405 jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]); 2406 } 2407 //map resize listener 2408 jQuery(window).on('resize', function(e) { 2409 google.maps.event.trigger(map, "resize"); 2410 map.setCenter(marker.getPosition()); 2411 map.panBy(40,-55); 2412 }); 2413 } 2414 em_maps_loaded = true; //maps have been loaded 2415 jQuery(document).triggerHandler('em_maps_loaded'); 2416} 2417 2418function em_map_infobox(marker, message, map) { 2419 var iw = new google.maps.InfoWindow({ content: message }); 2420 google.maps.event.addListener(marker, 'click', function() { 2421 if( infoWindow ) infoWindow.close(); 2422 infoWindow = iw; 2423 iw.open(map,marker); 2424 }); 2425} 2426 2427function em_esc_attr( str ){ 2428 if( typeof str !== 'string' ) return ''; 2429 return str.replace(/</gi,'<').replace(/>/gi,'>'); 2430} 2431 2432// Modal Open/Close 2433let openModal = function( modal, onOpen = null ){ 2434 modal = jQuery(modal); 2435 modal.appendTo(document.body); 2436 setTimeout( function(){ 2437 modal.addClass('active').find('.em-modal-popup').addClass('active'); 2438 jQuery(document).triggerHandler('em_modal_open', [modal]); 2439 document.dispatchEvent( new CustomEvent('em_modal_open', { detail: { modal: modal } }) ); 2440 if( typeof onOpen === 'function' ){ 2441 setTimeout( onOpen, 200); // timeout allows css transition 2442 } 2443 }, 100); // timeout allows css transition 2444}; 2445let closeModal = function( modal, onClose = null ){ 2446 modal = jQuery(modal); 2447 modal.removeClass('active').find('.em-modal-popup').removeClass('active'); 2448 setTimeout( function(){ 2449 if( modal.attr('data-parent') ){ 2450 let wrapper = jQuery('#' + modal.attr('data-parent') ); 2451 if( wrapper.length ) { 2452 modal.appendTo(wrapper); 2453 } 2454 } 2455 modal[0].dispatchEvent( new CustomEvent('em_modal_close', { bubbles: true, detail: { modal: modal } } ) ); 2456 if( typeof onClose === 'function' ){ 2457 onClose(); 2458 } 2459 }, 500); // timeout allows css transition 2460} 2461jQuery(document).on('click', '.em-modal .em-close-modal', function(e){ 2462 let modal = jQuery(this).closest('.em-modal'); 2463 if( !modal.attr('data-prevent-close') ) { 2464 closeModal(modal); 2465 } 2466}); 2467jQuery(document).on('click', '.em-modal', function(e){ 2468 var target = jQuery(e.target); 2469 if( target.hasClass('em-modal') ) { 2470 let modal = jQuery(this); 2471 if( !modal.attr('data-prevent-close') ){ 2472 closeModal(modal); 2473 } 2474 } 2475}); 2476 2477function EM_Alert( content ){ 2478 // find the alert modal, create if not 2479 let modal = document.getElementById('em-alert-modal'); 2480 if( modal === null ){ 2481 modal = document.createElement('div'); 2482 modal.setAttribute('class', "em pixelbones em-modal"); 2483 modal.id = 'em-alert-modal'; 2484 modal.innerHTML = '<div class="em-modal-popup"><header><a class="em-close-modal"></a><div class="em-modal-title"> </div></header><div class="em-modal-content" id="em-alert-modal-content"></div></div>'; 2485 document.body.append(modal); 2486 } 2487 document.getElementById('em-alert-modal-content').innerHTML = content; 2488 openModal(modal); 2489}; 2490 2491//Events Search 2492jQuery(document).ready( function($){ 2493 // handle the views tip/ddm 2494 let views_ddm_options = { 2495 theme : 'light-border', 2496 allowHTML : true, 2497 interactive : true, 2498 trigger : 'manual', 2499 placement : 'bottom', 2500 zIndex : 1000000, 2501 touch: true, 2502 }; 2503 $(document).trigger('em-search-views-trigger-vars',[views_ddm_options]); 2504 let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; 2505 $(document).trigger('em-tippy-vars',[tooltip_vars]); 2506 2507 // sync main search texts to advanced search 2508 let search_forms = $('.em-search:not(.em-search-advanced)'); 2509 search_forms.each( function(){ 2510 /* 2511 * Important references we'll reuse in scope 2512 */ 2513 let search = $(this); 2514 let search_id = search.attr('id').replace('em-search-', ''); 2515 let search_form = search.find('.em-search-form').first(); 2516 let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway 2517 2518 /* 2519 * Counter functions 2520 */ 2521 const update_input_count = function( input, qty = 1 ){ 2522 let el = jQuery(input); 2523 let total = qty > 0 ? qty : null; 2524 el.attr('data-advanced-total-input', total); 2525 update_search_totals(); 2526 }; 2527 2528 const update_search_totals = function( applied = false ){ 2529 // set everything to 0, recount 2530 search.find('span.total-count').remove(); 2531 // find all fields with total attributes and sum them up 2532 let total = 0; 2533 search_advanced.find('[data-advanced-total-input]').each( function(){ 2534 let total_input = this.getAttribute('data-advanced-total-input'); 2535 total += Math.abs( total_input ); 2536 }); 2537 search.attr('data-advanced-total', total); 2538 update_trigger_count( applied ); 2539 // find all sections with totals and display them (added above) 2540 search_advanced.find('.em-search-advanced-section').each( function(){ 2541 let section = $(this); 2542 let section_total = 0; 2543 section.attr('data-advanced-total', 0); 2544 // go through all set qtys and calculate 2545 section.find('[data-advanced-total-input]').each( function(){ 2546 let total_input = this.getAttribute('data-advanced-total-input'); 2547 section_total += Math.abs( total_input ); 2548 }); 2549 section.attr('data-advanced-total', section_total); 2550 update_section_count(section); 2551 }); 2552 // update triggers, search, clear button etc. 2553 if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){ 2554 update_submit_buttons( true ); 2555 } 2556 update_clear_button_count(); 2557 } 2558 2559 const update_trigger_count = function( applied = false ){ 2560 let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers 2561 triggers.find('span.total-count').remove(); 2562 let total = search.attr('data-advanced-total'); 2563 if( total > 0 ){ 2564 let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers); 2565 if( !applied ){ 2566 trigger_count.addClass('tentative'); 2567 } 2568 } 2569 }; 2570 2571 const update_submit_buttons = function( enabled = false ){ 2572 // update the clear link 2573 let submit_button = search_advanced.find('button[type="submit"]'); 2574 let main_submit_button = search.find('.em-search-main-bar button[type="submit"]'); 2575 let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs 2576 if( enabled ){ 2577 submit_buttons.removeClass('disabled').attr('aria-disabled', 'false'); 2578 }else{ 2579 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 2580 } 2581 }; 2582 2583 const update_section_count = function( section ){ 2584 let section_total = section.attr('data-advanced-total'); 2585 section.find('header span.total-count').remove(); 2586 if( section_total > 0 ){ 2587 $('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') ); 2588 } 2589 }; 2590 2591 const update_clear_button_count = function(){ 2592 // update the clear link 2593 let clear_link = search_advanced.find('button[type="reset"]'); 2594 if( !clear_link.attr('data-placeholder') ){ 2595 clear_link.attr('data-placeholder', clear_link.text()); 2596 } 2597 let total = search.attr('data-advanced-total'); 2598 if( total > 0 ){ 2599 clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false); 2600 clear_link.removeClass('disabled').attr('aria-disabled', 'false'); 2601 }else{ 2602 clear_link.text( clear_link.attr('data-placeholder') ); 2603 clear_link.addClass('disabled').attr('aria-disabled', 'true'); 2604 } 2605 }; 2606 2607 /* 2608 * Triggers 2609 */ 2610 search.find('.em-search-views-trigger').each( function(){ 2611 tooltip_vars.content = this.parentElement.getAttribute('aria-label'); 2612 let views_tooltip = tippy(this.parentElement, tooltip_vars); 2613 let views_content = this.parentElement.querySelector('.em-search-views-options'); 2614 let views_content_parent = views_content.parentElement; 2615 let tippy_content = document.createElement('div'); 2616 views_ddm_options.content = tippy_content; 2617 let views_ddm = tippy(this, views_ddm_options); 2618 views_ddm.setProps({ 2619 onShow(instance){ 2620 views_tooltip.disable(); 2621 tippy_content.append(views_content); 2622 }, 2623 onShown(instance){ // keyboard support 2624 views_content.querySelector('input:checked').focus(); 2625 }, 2626 onHidden(instance){ 2627 views_tooltip.enable(); 2628 if( views_content.parentElement !== views_content_parent ) { 2629 views_content_parent.append(views_content); 2630 } 2631 } 2632 }); 2633 let tippy_listener = function(e){ 2634 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2635 e.preventDefault(); 2636 e.stopPropagation(); 2637 this._tippy.show(); 2638 views_tooltip.hide(); 2639 } 2640 this.addEventListener('click', tippy_listener); 2641 this.addEventListener('keydown', tippy_listener); 2642 this.firstElementChild.addEventListener('focus', function(e){ 2643 views_ddm.hide(); 2644 views_tooltip.enable(); 2645 views_tooltip.show(); 2646 }); 2647 this.firstElementChild.addEventListener('blur', function(){ 2648 views_tooltip.hide(); 2649 }); 2650 2651 search.on('focus blur', '.em-search-views-options input', function(){ 2652 if( document.activeElement === this ){ 2653 this.parentElement.classList.add('focused'); 2654 }else{ 2655 this.parentElement.classList.remove('focused'); 2656 } 2657 }); 2658 2659 search[0].addEventListener('change', function(){ 2660 update_submit_buttons(true); 2661 }); 2662 2663 search.on('keydown click', '.em-search-views-options input', function( e ){ 2664 // get relevant vars 2665 if( e.type === 'keydown' && e.which !== 13 ){ 2666 if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { 2667 if (e.which === 38) { 2668 if (this.parentElement.previousElementSibling) { 2669 this.parentElement.previousElementSibling.focus(); 2670 } 2671 } else if (e.which === 40) { 2672 if (this.parentElement.nextElementSibling) { 2673 this.parentElement.nextElementSibling.focus(); 2674 } 2675 } 2676 return false; 2677 } else if ( e.which === 9 ) { 2678 // focus out 2679 views_ddm.hide(); 2680 } 2681 return true; 2682 } 2683 this.checked = true; 2684 let input = $(this); 2685 // mark label selected 2686 input.closest('fieldset').find('label').removeClass('checked'); 2687 input.parent().addClass('checked'); 2688 // get other reference elements we need 2689 let views_wrapper = $(this).closest('.em-search-views'); 2690 let view_type = this.value; 2691 let trigger = views_wrapper.children('.em-search-views-trigger'); 2692 let trigger_option = trigger.children('.em-search-view-option'); 2693 // change view, if different 2694 if( view_type !== trigger_option.attr('data-view') ){ 2695 trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); 2696 // remove custom search vals from current view so it's not used into another view 2697 $('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove(); 2698 // trigger custom event in case form disabled due to no search vals 2699 search_form.find('button[type="submit"]').focus(); 2700 search_form.trigger('forcesubmit'); 2701 } 2702 views_ddm.hide(); 2703 }); 2704 }); 2705 2706 search.find('.em-search-sort-trigger').each( function(){ 2707 tooltip_vars.content = this.parentElement.getAttribute('aria-label'); 2708 let views_tooltip = tippy(this.parentElement, tooltip_vars); 2709 search.on('keydown click', '.em-search-sort-option', function( e ){ 2710 // get other reference elements we need 2711 let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC'; 2712 this.setAttribute('data-sort', order); 2713 this.parentElement.querySelector('input[name="order"]').value = order; 2714 // trigger custom event in case form disabled due to no search vals 2715 search_form.find('button[type="submit"]').focus(); 2716 search_form.trigger('forcesubmit'); 2717 }); 2718 }); 2719 2720 // add trigger logic for advanced popup modal 2721 let search_advanced_trigger_click = function( e ){ 2722 if( search.hasClass('advanced-mode-inline') ){ 2723 // inline 2724 if( !search_advanced.hasClass('visible') ){ 2725 search_advanced.slideDown().addClass('visible'); 2726 if( '_tippy' in this ){ 2727 this._tippy.setContent(this.getAttribute('data-label-hide')); 2728 } 2729 }else{ 2730 search_advanced.slideUp().removeClass('visible'); 2731 if( '_tippy' in this ){ 2732 this._tippy.setContent(this.getAttribute('data-label-show')); 2733 } 2734 } 2735 }else{ 2736 // wrap modal popup element in a form, so taht it's 'accessible' with keyboard 2737 if( !search_advanced.hasClass('active') ) { 2738 let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>'); 2739 form_wrapper.appendTo(search_advanced); 2740 search_advanced.find('.em-modal-popup').appendTo(form_wrapper); 2741 // open modal 2742 let button = this; 2743 openModal(search_advanced, function () { 2744 // Do this instead 2745 button.blur(); 2746 search_advanced.find('input.em-search-text').focus(); 2747 }); 2748 } 2749 } 2750 }; 2751 search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click); 2752 search_form.on('search_advanced_trigger', search_advanced_trigger_click); 2753 2754 search_advanced.on('em_modal_close', function(){ 2755 search_advanced.find('.em-modal-popup').appendTo(search_advanced); 2756 search_advanced.children('form').remove(); 2757 let trigger = search.find('button.em-search-advanced-trigger').focus(); 2758 if( trigger.length > 0 && '_tippy' in trigger[0] ){ 2759 trigger[0]._tippy.hide(); 2760 } 2761 }); 2762 2763 // add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal 2764 search_advanced.find('.em-search-advanced-section > header').on('click', function(){ 2765 let header = $(this); 2766 let section = header.closest('section'); 2767 let content = header.siblings('.em-search-section-content'); 2768 if( section.hasClass('active') ){ 2769 content.slideUp(); 2770 section.removeClass('active'); 2771 }else{ 2772 content.slideDown(); 2773 section.addClass('active'); 2774 } 2775 }); 2776 2777 /* 2778 * Advanced Search Field Listeners - Main Search Form 2779 */ 2780
2781 let search_form_advanced_calculate_totals_inputs = function( input ){ 2782 // for textboxes we only need to add or remove 1 advanced 2783 let el = $(input); 2784 let qty = el.val() !== '' ? 1:0; 2785 update_input_count( el, qty ); 2786 }; 2787 2788 // These are for the main search bar, syncing information back into the advanced form 2789 search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){ 2790 // sync advanced input field with same text 2791 let advanced_search_input = search_advanced.find('input.em-search-text'); 2792 if ( advanced_search_input.length === 0 ) { 2793 search_form_advanced_calculate_totals_inputs(this); 2794 } else { 2795 advanced_search_input.val( this.value ); 2796 // recalculate totals from here 2797 search_form_advanced_calculate_totals_inputs(advanced_search_input[0]); 2798 } 2799 // any change without advanced form should show the search form still 2800 update_submit_buttons( true); 2801 }); 2802 search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){ 2803 let el = $(this); 2804 let advanced_geo = search_advanced.find('div.em-search-geo'); 2805 // copy over value and class names 2806 let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords'); 2807 if( advanced_geo_coords.length > 0 ) { 2808 advanced_geo_coords.val(el.val()).attr('class', el.attr('class')); 2809 let geo_text = el.siblings('input.em-search-geo').first(); 2810 advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2811 // calculate totals from here 2812 search_form_advanced_calculate_totals_inputs(advanced_geo_coords); 2813 } else { 2814 // calculate totals from here 2815 search_form_advanced_calculate_totals_inputs(this); 2816 } 2817 }); 2818 search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2819 if( !('_flatpickr' in this) ) return; 2820 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2821 // any change without advanced form should show the search form 2822 let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); 2823 if( advanced_datepicker.length === 0 ) { 2824 // update counter 2825 let qty = dateStr ? 1:0; 2826 update_input_count(instance.input, qty); 2827 } else { 2828 // update advanced search form datepicker values, trigger a close for it to handle the rest 2829 advanced_datepicker[0]._flatpickr.setDate( selectedDates, true ); 2830 advanced_datepicker[0]._flatpickr.close(); 2831 } 2832 }); 2833 }); 2834 2835 search.find('select.em-selectize').each(function () { 2836 if( 'selectize' in this ) { 2837 this.selectize.on('change', function () { 2838 search_advanced_selectize_change(this); 2839 }); 2840 } 2841 }); 2842 2843 /* 2844 * Advanced Search Field Listeners - Advanced Search Form 2845 */ 2846 2847 // regular text advanced or hidden inputs that represent another ui 2848 search_advanced.on('change input', 'input.em-search-text', function( e ){ 2849 if( e.type === 'change' ){ 2850 // copy over place info on change only, not on each keystroke 2851 search.find('.em-search-main input.em-search-text').val( this.value ); 2852 } 2853 search_form_advanced_calculate_totals_inputs(this); 2854 }); 2855 search_advanced.on('change', 'input.em-search-geo-coords', function( e ){ 2856 search_form_advanced_calculate_totals_inputs(this); 2857 //update values in main search 2858 let el = $(this); 2859 let main = search.find('.em-search-main div.em-search-geo'); 2860 if( main.length > 0 ){ 2861 // copy over value and class names 2862 main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class')); 2863 let geo_text = el.siblings('input.em-search-geo'); 2864 main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2865 } 2866 }); 2867 search_advanced.on('clear_search', function(){ 2868 let text = $(this).find('input.em-search-text'); 2869 if( text.length === 0 ) { 2870 // select geo from main if it exists, so we keep counts synced 2871 text = search.find('input.em-search-text'); 2872 } 2873 text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more) 2874 }); 2875 /* Not sure we should be calculating this... since it's always set to something. 2876 search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2877 // combine both values into parent, if value set then it's a toggle 2878 let el = jQuery(this); 2879 let qty = el.val() ? 1 : null; 2880 el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty); 2881 update_search_totals(); 2882 }); 2883 */ 2884 search_advanced.on('change', 'input[type="checkbox"]', function( e ){ 2885 let el = $(this); 2886 let qty = el.prop('checked') ? 1:0; 2887 update_input_count( el, qty ); 2888 }); 2889 search_advanced.on('calculate_totals', function(){ 2890 search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){ 2891 search_form_advanced_calculate_totals_inputs(this); 2892 }); 2893 search_advanced.find('input[type="checkbox"]').trigger('change'); 2894 }); 2895 search_advanced.on('clear_search', function(){ 2896 let geo = $(this).find('input.em-search-geo'); 2897 if( geo.length === 0 ) { 2898 // select geo from main if it exists, so we keep counts synced 2899 geo = search.find('input.em-search-geo'); 2900 } 2901 geo.removeClass('off').removeClass('on').val(''); 2902 geo.siblings('input.em-search-geo-coords').val('').trigger('change'); 2903 search_advanced.find('input[type="checkbox"]').prop("checked", false).trigger('change').prop("checked", false); // set checked after trigger because something seems to be checking during event 2904 }); 2905 2906 // datepicker advanced logic 2907 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2908 if( !('_flatpickr' in this) ) return; 2909 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2910 // check previous value against current value, no change, no go 2911 let previous_value = instance.input.getAttribute('data-previous-value'); 2912 if( previous_value !== dateStr ){ 2913 // update counter 2914 let qty = dateStr ? 1:0; 2915 update_input_count(instance.input, qty); 2916 // update main search form datepicker values 2917 let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input'); 2918 if( main_datepicker.length > 0 ) { 2919 main_datepicker[0]._flatpickr.setDate(selectedDates, true); 2920 } 2921 // set for next time 2922 instance.input.setAttribute('data-previous-value', dateStr); 2923 } 2924 }); 2925 }); 2926 search_advanced.on('calculate_totals', function(){ 2927 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){ 2928 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 2929 update_input_count(this, qty); 2930 }); 2931 }); 2932 search_advanced.on('clear_search', function(){ 2933 let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); 2934 if( datepickers.length === 0 ) { 2935 // find datepickers on main form so syncing is sent up 2936 datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input'); 2937 } 2938 datepickers.each(function () { 2939 this._flatpickr.clear(); 2940 update_input_count(this, 0); 2941 }); 2942 }); 2943 // clear the date total for calendars, before anything is done 2944 let scope_calendar_check = function(){ 2945 search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2946 if( search.attr('data-view') == 'calendar' ){ 2947 this.setAttribute('data-advanced-total-input', 0); 2948 this._flatpickr.input.disabled = true; 2949 }else{ 2950 this._flatpickr.input.disabled = false; 2951 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 2952 this.setAttribute('data-advanced-total-input', qty); 2953 } 2954 }); 2955 }; 2956 $(document).on('em_search_loaded', scope_calendar_check); 2957 scope_calendar_check(); 2958 2959 // selectize advanced 2960 let search_advanced_selectize_change = function( selectize ){ 2961 let qty = selectize.items.length; 2962 // handle 'all' default values 2963 if( qty == 1 && !selectize.items[0] ){ 2964 qty = 0; 2965 } 2966 if ( selectize.$input.closest('.em-search-advanced').length === 0 ) { 2967 // sync advanced input field with same text 2968 let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim(); 2969 let advanced_search_input = search_advanced.find( classSearch ); 2970 if ( advanced_search_input.length > 0 ) { 2971 // copy over values 2972 advanced_search_input[0].selectize.setValue( selectize.items ); 2973 // recalculate totals from here 2974 search_advanced_selectize_change(advanced_search_input[0].selectize); 2975 } 2976 } 2977 update_input_count( selectize.$input, qty ); 2978 }; 2979 2980 search_advanced.find('select.em-selectize').each(function () { 2981 if( 'selectize' in this ) { 2982 this.selectize.on('change', function () { 2983 search_advanced_selectize_change(this); 2984 }); 2985 } 2986 }); 2987 search_advanced.on('calculate_totals', function(){ 2988 $(this).find('select.em-selectize').each( function(){ 2989 search_advanced_selectize_change(this.selectize); 2990 }); 2991 }); 2992 search_advanced.on('clear_search', function(){ 2993 let clearSearch = function(){ 2994 this.selectize.clear(); 2995 this.selectize.refreshItems(); 2996 this.selectize.refreshOptions(false); 2997 this.selectize.blur(); 2998 }; 2999 search_advanced.find('select.em-selectize').each( clearSearch ); 3000 search.find('.em-search-main-bar select.em-selectize').each( clearSearch ); 3001 }); 3002 3003 // location-specific stuff for dropdowns (powered by selectize) 3004 let locations_selectize_load_complete = function(){ 3005 if( 'selectize' in this ) { 3006 this.selectize.settings.placeholder = this.selectize.settings.original_placeholder; 3007 this.selectize.updatePlaceholder(); 3008 // get options from select again 3009 let options = []; 3010 this.selectize.$input.find('option').each( function(){ 3011 let value = this.value !== null ? this.value : this.innerHTML; 3012 options.push({ value : value, text: this.innerHTML}); 3013 }); 3014 this.selectize.addOption(options); 3015 this.selectize.refreshOptions(false); 3016 } 3017 }; 3018 let locations_selectize_load_start = function(){ 3019 if( 'selectize' in this ){ 3020 this.selectize.clearOptions(); 3021 if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder; 3022 this.selectize.settings.placeholder = EM.txt_loading; 3023 this.selectize.updatePlaceholder(); 3024 } 3025 }; 3026 $('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){ 3027 var el = $(this); 3028 let wrapper = el.closest('.em-search-location'); 3029 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 3030 wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>'); 3031 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 3032 wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start ); 3033 if( el.val() != '' ){ 3034 wrapper.find('.em-search-location-meta').slideDown(); 3035 var data = { 3036 action : 'search_states', 3037 country : el.val(), 3038 return_html : true, 3039 }; 3040 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3041 data.action = 'search_regions'; 3042 wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3043 data.action = 'search_towns'; 3044 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3045 }else{
3046 wrapper.find('.em-search-location-meta').slideUp(); 3047 } 3048 }); 3049 $('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){ 3050 var el = $(this); 3051 let wrapper = el.closest('.em-search-location'); 3052 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 3053 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 3054 wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start ); 3055 var data = { 3056 action : 'search_states', 3057 region : el.val(), 3058 country : wrapper.find('select[name=country]').val(), 3059 return_html : true 3060 }; 3061 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3062 data.action = 'search_towns'; 3063 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3064 }); 3065 $('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){ 3066 var el = $(this); 3067 let wrapper = el.closest('.em-search-location'); 3068 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start ); 3069 var data = { 3070 action : 'search_towns', 3071 state : el.val(), 3072 region : wrapper.find('select[name=region]').val(), 3073 country : wrapper.find('select[name=country]').val(), 3074 return_html : true 3075 }; 3076 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3077 }); 3078 3079 /* 3080 * Clear & Search Actions 3081 */ 3082 // handle clear link for advanced 3083 search_advanced.on( 'click', 'button[type="reset"]', function(){ 3084 // clear text search advanced, run clear hook for other parts to hook into 3085 if( search.attr('data-advanced-total') == 0 ) return; 3086 // search text and geo search 3087 search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change'); 3088 // other implementations hook here and do what you need 3089 search.trigger('clear_search'); 3090 search_advanced.trigger('clear_search'); 3091 // remove counters, set data counters to 0, hide section and submit form without search settings 3092 update_search_totals(true); // in theory, this is 0 and removes everything 3093 if( search_advanced.hasClass('em-modal') ) { 3094 search_advanced_trigger_click(); 3095 } 3096 search_advanced.append('<input name="clear_search" type="hidden" value="1">'); 3097 search_advanced.find('button[type="submit"]').trigger('forceclick'); 3098 update_clear_button_count(); 3099 }).each( function(){ 3100 search_advanced.trigger('calculate_totals'); 3101 update_search_totals(true); 3102 }); 3103 const on_update_trigger_count = function(e, applied = true){ 3104 update_trigger_count( applied ); 3105 }; 3106 search.on('update_trigger_count', on_update_trigger_count); 3107 search_advanced.on('update_trigger_count', on_update_trigger_count); 3108 3109 // handle submission for advanced 3110 search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){ 3111 e.preventDefault(); 3112 if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false; 3113 // close attach back to search form 3114 if( search_advanced.hasClass('em-modal') ) { 3115 closeModal(search_advanced, function () { 3116 // submit for search 3117 search_form.submit(); 3118 }); 3119 }else{ 3120 search_form.submit(); 3121 } 3122 return false; // we handled it 3123 }); 3124 3125 search.on('submit forcesubmit', '.em-search-form', function(e){ 3126 if ( search.hasClass('no-ajax') ) { 3127 return true; 3128 } 3129 e.preventDefault(); 3130 let form = $(this); 3131 let submit_buttons = form.find('button[type="submit"]'); 3132 if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false; 3133 let wrapper = form.closest('.em-search'); 3134 if( wrapper.hasClass('em-search-legacy') ){ 3135 em_submit_legacy_search_form(form); 3136 }else{ 3137 let view = $('#em-view-'+search_id); 3138 let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val(); 3139 if( Array.isArray(view_type) ) view_type = view_type.shift(); 3140 // copy over custom view information, remove it further down 3141 let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
3142 let custom_view_data_container = $('<div class="em-view-custom-data"></div>'); 3143 custom_view_data.children().appendTo(custom_view_data_container); 3144 custom_view_data.remove(); 3145 custom_view_data_container.appendTo(form); 3146 // add loading stuff 3147 view.append('<div class="em-loading"></div>'); 3148 submit_buttons.each( function(){ 3149 if( EM.txt_searching !== this.innerHTML ) { 3150 this.setAttribute('data-button-text', this.innerHTML); 3151 this.innerHTML = EM.txt_searching; 3152 } 3153 }); 3154 var vars = form.serialize(); 3155 $.ajax( EM.ajaxurl, { 3156 type : 'POST', 3157 dataType : 'html', 3158 data : vars, 3159 success : function(responseText){ 3160 submit_buttons.each( function(){ 3161 this.innerHTML = this.getAttribute('data-button-text'); 3162 }); 3163 view = EM_View_Updater( view, responseText ); 3164 // update view definitions 3165 view.attr('data-view', view_type); 3166 search.attr('data-view', view_type); 3167 search_advanced.attr('data-view', view_type); 3168 jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]); 3169 jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results 3170 jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above 3171 wrapper.find('.count.tentative').removeClass('tentative'); 3172 // deactivate submit button until changes are made again 3173 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 3174 // update search totals 3175 update_search_totals(true); 3176 search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search 3177 update_submit_buttons(false); 3178 custom_view_data_container.remove(); // remove data so it's reloaded again later 3179 search.find('input[name="clear_search"]').remove(); 3180 } 3181 }); 3182 } 3183 return false; 3184 }); 3185 3186 // observe resizing 3187 EM_ResizeObserver( EM.search.breakpoints, [search[0]]); 3188 }); 3189 3190 // handle external triggers, e.g. a calendar shortcut for a hidden search form 3191 $(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){ 3192 if( this.getAttribute('data-search-advanced-id') ){ 3193 // trigger the search form by parent 3194 let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') ); 3195 if( search_advanced_form ){ 3196 let search_form = search_advanced_form.closest('form.em-search-form'); 3197 if( search_form ){ 3198 search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') ); 3199 return; 3200 } 3201 } 3202 } else if( this.getAttribute('data-parent-trigger') ) { 3203 let trigger = document.getElementById(this.getAttribute('data-parent-trigger')); 3204 if ( trigger ) { 3205 trigger.click(); 3206 return; 3207 } 3208 } 3209 console.log('Cannot locate a valid advanced search form trigger for %o', this); 3210 }); 3211 3212 $(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){ 3213 let a = $(this); 3214 let view = a.closest('.em-view-container'); 3215 let href = a.attr('href'); 3216 //add data-em-ajax att if it exists 3217 let data = a.closest('.em-pagination').attr('data-em-ajax'); 3218 if( data ){ 3219 href += href.includes('?') ? '&' : '?'; 3220 href += data; 3221 } 3222 // build querystring from url 3223 let url_params = new URL(href, window.location.origin).searchParams; 3224 if( view.attr('data-view') ) { 3225 url_params.set('view', view.attr('data-view')); 3226 } 3227 // start ajax 3228 view.append('<div class="loading" id="em-loading"></div>'); 3229 $.ajax( EM.ajaxurl, { 3230 type : 'POST', 3231 dataType : 'html', 3232 data : url_params.toString(), 3233 success : function(responseText) { 3234 view = EM_View_Updater( view, responseText ); 3235 view.find('.em-pagination').each( function(){ 3236 paginationObserver.observe(this); 3237 }); 3238 jQuery(document).triggerHandler('em_page_loaded', [view]); 3239 view[0].scrollIntoView({ behavior: "smooth" }); 3240 } 3241 }); 3242 e.preventDefault(); 3243 return false; 3244 }); 3245 3246 const paginationObserver = new ResizeObserver( function( entries ){
3247 for (let entry of entries) { 3248 let el = entry.target; 3249 if( !el.classList.contains('observing') ) { 3250 el.classList.add('observing'); // prevent endless loop on resizing within this check 3251 // check if any pagination parts are overflowing 3252 let overflowing = false; 3253 el.classList.remove('overflowing'); 3254 for ( const item of el.querySelectorAll('.not-current')) { 3255 if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){ 3256 overflowing = true; 3257 break; // break if one has overflown 3258 } 3259 }; 3260 // add or remove overflow classes 3261 if( overflowing ){ 3262 el.classList.add('overflowing') 3263 } 3264 el.classList.remove('observing'); 3265 } 3266 } 3267 }); 3268 $('.em-pagination').each( function(){ 3269 paginationObserver.observe(this); 3270 }); 3271 3272 /* START Legacy */ 3273 // deprecated - hide/show the advanced search advanced link - relevant for old template overrides 3274 $(document).on('click change', '.em-search-legacy .em-toggle', function(e){ 3275 e.preventDefault(); 3276 //show or hide advanced search, hidden by default 3277 var el = $(this); 3278 var rel = el.attr('rel').split(':'); 3279 if( el.hasClass('show-search') ){ 3280 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); } 3281 else{ $(rel[0]).slideUp(); } 3282 el.find('.show, .show-advanced').show(); 3283 el.find('.hide, .hide-advanced').hide(); 3284 el.removeClass('show-search'); 3285 }else{ 3286 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); } 3287 else{ $(rel[0]).slideDown(); } 3288 el.find('.show, .show-advanced').hide(); 3289 el.find('.hide, .hide-advanced').show(); 3290 el.addClass('show-search'); 3291 } 3292 }); 3293 // handle search form submission 3294 let em_submit_legacy_search_form = function( form ){ 3295 if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; } 3296 var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 3297 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 3298 if( results_wrapper.length > 0 ){ 3299 results_wrapper.append('<div class="loading" id="em-loading"></div>'); 3300 var submitButton = form.find('.em-search-submit button'); 3301 submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching); 3302 var img = submitButton.children('img'); 3303 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif')); 3304 var vars = form.serialize(); 3305 $.ajax( EM.ajaxurl, { 3306 type : 'POST', 3307 dataType : 'html', 3308 data : vars, 3309 success : function(responseText){ 3310 submitButton.val(submitButton.attr('data-button-text')); 3311 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png')); 3312 results_wrapper.replaceWith(responseText); 3313 if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); } 3314 //reload results_wrapper 3315 results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 3316 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 3317 jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results 3318 } 3319 }); 3320 e.preventDefault(); 3321 return false; 3322 } 3323 }; 3324 if( $('.em-search-ajax').length > 0 ){ 3325 $(document).on('click', '.em-search-ajax a.page-numbers', function(e){ 3326 var a = $(this); 3327 var data = a.closest('.em-pagination').attr('data-em-ajax'); 3328 var wrapper = a.closest('.em-search-ajax'); 3329 var wrapper_parent = wrapper.parent(); 3330 var qvars = a.attr('href').split('?'); 3331 var vars = qvars[1]; 3332 //add data-em-ajax att if it exists 3333 if( data != '' ){ 3334 vars = vars != '' ? vars+'&'+data : data; 3335 } 3336 vars += '&legacy=1'; 3337 wrapper.append('<div class="loading" id="em-loading"></div>'); 3338 $.ajax( EM.ajaxurl, { 3339 type : 'POST', 3340 dataType : 'html', 3341 data : vars, 3342 success : function(responseText) { 3343 wrapper.replaceWith(responseText); 3344 wrapper = wrapper_parent.find('.em-search-ajax'); 3345 jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results 3346 } 3347 }); 3348 e.preventDefault(); 3349 return false;
3350 }); 3351 } 3352 /* END Legacy */ 3353}); 3354 3355/* 3356* CALENDAR 3357*/ 3358jQuery(document).ready( function($){ 3359 3360 const em_calendar_init = function( calendar ){ 3361 calendar = $(calendar); 3362 if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9]+$/) ){ 3363 calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates 3364 } 3365 calendar.find('a').off("click"); 3366 calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){ 3367 e.preventDefault(); 3368 const el = $(this); 3369 if( el.attr('href') === '') return; // do nothing if disabled or no link provided 3370 el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>'); 3371 let url = el.attr('href'); 3372 const view_id = el.closest('[data-view-id]').data('view-id'); 3373 const custom_data = $('form#em-view-custom-data-calendar-'+ view_id); 3374 let form_data = new FormData(); 3375 if( custom_data.length > 0 ){ 3376 form_data = new FormData(custom_data[0]); 3377 let $URL = new URL(url, window.location.origin); 3378 let url_params = $URL.searchParams; 3379 for (const [key, value] of url_params.entries()) { 3380 if( key === 'mo' ) { 3381 form_data.set('month', value); 3382 } else if ( key === 'yr' ) { 3383 form_data.set('year', value); 3384 } else { 3385 form_data.set(key, value); 3386 } 3387 } 3388 // remove mo and yr from URL 3389 $URL.searchParams.delete('mo'); 3390 $URL.searchParams.delete('yr'); 3391 url = $URL.toString(); 3392 } 3393 if ( calendar.attr('data-timezone') ) { 3394 form_data.set('calendar_timezone', calendar.attr('data-timezone') ); 3395 } 3396 form_data.set('id', view_id); 3397 form_data.set('ajaxCalendar', 1); // AJAX trigger 3398 form_data.set('em_ajax', 1); // AJAX trigger 3399 // check advanced trigger 3400 if( calendar.hasClass('with-advanced') ){ 3401 form_data.set('has_advanced_trigger', 1); 3402 } 3403 $.ajax({ 3404 url: url, 3405 data: form_data, 3406 processData: false, 3407 contentType: false, 3408 method: 'POST', 3409 success: function( data ){ 3410 let view = EM_View_Updater( calendar, data ); 3411 if( view.hasClass('em-view-container') ){ 3412 calendar = view.find('.em-calendar'); 3413 }else{ 3414 calendar = view; 3415 } 3416 calendar[0].dispatchEvent( new CustomEvent( 'em_calendar_load', { bubbles: true } ) ); 3417 }, 3418 dataType: 'html' 3419 }); 3420 } ); 3421 calendar[0].addEventListener('reload', () => { 3422 calendar_trigger_ajax( calendar, calendar.attr('data-year'), calendar.attr('data-month') ); 3423 }); 3424 let calendar_trigger_ajax = function( calendar, year, month ){ 3425 let link = calendar.find('.em-calnav-next'); 3426 let url = new URL(link.attr('href'), window.location.origin); 3427 url.searchParams.set('mo', month); 3428 url.searchParams.set('yr', year); 3429 link.attr('href', url.toString()).trigger('click'); 3430 }; 3431 let calendar_resize_monthpicker = function( instance, text ){ 3432 let span = $('<span class="marker">'+ text +'</span>'); 3433 span.insertAfter(instance); 3434 let width = span.width() + 40; 3435 span.remove(); 3436 instance.style.setProperty('width', width+'px', 'important'); 3437 } 3438 let calendar_month_init = function(){ 3439 let month_form = calendar.find('.month form'); 3440 calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){ 3441 e.preventDefault(); 3442 if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) { 3443 let link = this.getAttribute('data-event-url'); 3444 if (link !== null) { 3445 window.location.href = link; 3446 } 3447 } 3448 // select this date, all others no 3449 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3450 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3451 }); 3452 if( month_form.length > 0 ){ 3453 month_form.find('input[type="submit"]').hide(); 3454 let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form); 3455 let option = $('<option></option>').appendTo(select); 3456 let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val(); 3457 let month = calendar.find('select[name="month"]'); 3458 let year = calendar.find('select[name="year"]'); 3459 let monthpicker = calendar.find('.em-month-picker'); 3460 let month_value = monthpicker.data('month-value'); 3461 monthpicker.prop('type', 'text').prop('value', month_value); 3462 calendar_resize_monthpicker( monthpicker[0], month_value ); 3463 let monthpicker_wrapper = $('#em-flatpickr'); 3464 if( monthpicker_wrapper.length === 0 ) {
3465 monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body'); 3466 } 3467 let minDate = null; 3468 if( calendar.data('scope') === 'future' ){ 3469 minDate = new Date(); 3470 minDate.setMonth(minDate.getMonth()-1); 3471 } 3472 // locale 3473 if( 'locale' in EM.datepicker ){ 3474 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 3475 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 3476 } 3477 monthpicker.flatpickr({ 3478 appendTo : monthpicker_wrapper[0], 3479 dateFormat : 'F Y', 3480 minDate : minDate, 3481 disableMobile: "true", 3482 plugins: [ 3483 new monthSelectPlugin({ 3484 shorthand: true, //defaults to false 3485 dateFormat: "F Y", //defaults to "F Y" 3486 altFormat: "F Y", //defaults to "F Y" 3487 }) 3488 ], 3489 onChange: function(selectedDates, dateStr, instance) { 3490 calendar_resize_monthpicker( instance.input, dateStr ); 3491 calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1); 3492 }, 3493 }); 3494 monthpicker.addClass('select-toggle') 3495 /* Disabling native picker at the moment, too quriky cross-browser 3496 } 3497 */ 3498 } 3499 if( calendar.hasClass('preview-tooltips') ){ 3500 var tooltip_vars = { 3501 theme : 'light-border', 3502 allowHTML : true, 3503 interactive : true, 3504 trigger : 'mouseenter focus click', 3505 content(reference) { 3506 return document.createElement('div'); 3507 }, 3508 onShow( instance ){ 3509 const id = instance.reference.getAttribute('data-event-id'); 3510 const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 3511 instance.props.content.append(template.first().clone()[0]); 3512 }, 3513 onHide( instance ){ 3514 instance.props.content.innerHTML = ''; 3515 } 3516 }; 3517 if( calendar.data('preview-tooltips-trigger') ) { 3518 tooltip_vars.trigger = calendar.data('preview-tooltips-trigger'); 3519 } 3520 $(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]); 3521 tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars); 3522 }else if( calendar.hasClass('preview-modal') ){ 3523 // Modal 3524 calendar.find('.em-cal-event').on('click', function( e ){ 3525 const id = this.getAttribute('data-event-id'); 3526 const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 3527 modal.attr('data-calendar-id', calendar.attr('id')); 3528 openModal(modal); 3529 // select this date, all others no 3530 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3531 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3532 }); 3533 } 3534 // responsive mobile view for date clicks 3535 if( calendar.hasClass('responsive-dateclick-modal') ){ 3536 calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){ 3537 //if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){ 3538 e.preventDefault(); 3539 const id = this.getAttribute('data-timestamp'); 3540 const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"], .em-cal-date-content[data-timestamp="'+id+'"]'); 3541 modal.attr('data-calendar-id', calendar.attr('id')); 3542 openModal(modal); 3543 // select this date, all others no 3544 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3545 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3546 }); 3547 } 3548 // observe resizing if not fixed 3549 if( !calendar.hasClass('size-fixed') ){ 3550 EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]); 3551 } 3552 // even aspect, because aspect ratio can screw up widths vs row template heights 3553 let calendar_body = calendar.find('.em-cal-body'); 3554 if( calendar_body.hasClass('even-aspect') ) { 3555 let ro_function = function (el) { 3556 let width = el.firstElementChild.getBoundingClientRect().width; 3557 if (width > 0) { 3558 el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)'); 3559 } 3560 } 3561 let ro = new ResizeObserver(function (entries) {
3562 for (let entry of entries) { 3563 ro_function(entry.target); 3564 } 3565 }); 3566 ro.observe(calendar_body[0]); 3567 ro_function(calendar_body[0]); 3568 } 3569 3570 // figure out colors 3571 calendar.find('.date-day-colors').each( function(){ 3572 let colors = JSON.parse(this.getAttribute('data-colors')); 3573 let day = $(this).siblings('.em-cal-day-date.colored'); 3574 let sides = { 3575 1 : { 1 : '--date-border-color', 'class' : 'one' }, 3576 2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' }, 3577 3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' }, 3578 4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' }, 3579 }; 3580 for (let i = 0; i < colors.length; i += 4) { 3581 const ring_colors = colors.slice(i, i + 4); 3582 // add a ring 3583 let outer_ring = day.children().first(); 3584 let new_ring = $('<div class="ring"></div>').prependTo(day); 3585 outer_ring.appendTo(new_ring); 3586 new_ring.addClass( sides[ring_colors.length].class ); 3587 for ( let it = 0; it < ring_colors.length; it++ ){ 3588 new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]); 3589 } 3590 } 3591 }); 3592 3593 if( calendar.hasClass('with-advanced') ){ 3594 const trigger = calendar.find('.em-search-advanced-trigger'); 3595 const search_advanced = $('#'+trigger.attr('data-search-advanced-id')); 3596 search_advanced.triggerHandler('update_trigger_count'); 3597 } 3598 } 3599 calendar_month_init(); 3600 $(document).triggerHandler('em_calendar_loaded', [calendar]); 3601 }; 3602 $('.em-calendar').each( function(){ 3603 let calendar = $(this); 3604 em_calendar_init( calendar ); 3605 }); 3606 $(document).on('em_calendar_load', '.em-calendar', function(){ 3607 em_calendar_init( this ); 3608 }); 3609 $(document).on('em_view_loaded_calendar', function( e, view, form ){ 3610 let calendar; 3611 if( view.hasClass('em-calendar') ){ 3612 calendar = view; 3613 }else { 3614 calendar = view.find('.em-calendar').first(); 3615 } 3616 em_calendar_init( calendar ); 3617 }); 3618}); 3619 3620let EM_View_Updater = function( element, html ){ 3621 let content = jQuery(html); 3622 let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container'); 3623 if( view.length > 0 ){ 3624 if( content.hasClass('em-view-container') ){ 3625 view.replaceWith(content); 3626 view = content; 3627 }else{ 3628 view.empty().append(content); 3629 } 3630 }else{ 3631 // create a view if possible 3632 if( content.hasClass('em-view-container') ){ 3633 element.replaceWith(content); 3634 view = content; 3635 }else if( content.attr('data-view-id') ){ 3636 let view = jQuery('<div class="em em-view-container"></div>'); 3637 let view_id = content.attr('data-view-id'); 3638 view.attr('data-view-id', view_id); 3639 view.attr('id', 'em-view-'+ view_id); 3640 view.attr('data-view-type', content.attr('data-view-type')); 3641 view.append(content); 3642 element.replaceWith(view); 3643 } 3644 } 3645 em_setup_ui_elements( view[0] ); 3646 return view; 3647} 3648 3649/** 3650 * Resize watcher for EM elements. Supply an object (localized array) of name > breakpoint, in order of least to largest and it'll add size-{name} class name according to the breakpoint. 3651 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met. 3652 * @param breakpoints 3653 * @param elements 3654 * @constructor 3655 */ 3656let EM_ResizeObserver = function( breakpoints, elements ){ 3657 const ro = new ResizeObserver( function( entries ){ 3658 for (let entry of entries) { 3659 let el = entry.target; 3660 if( !el.classList.contains('size-fixed') ) { 3661 for (const [name, breakpoint] of Object.entries(breakpoints)) { 3662 if (el.offsetWidth <= breakpoint || breakpoint === false) { 3663 for (let breakpoint_name of Object.keys(breakpoints)) { 3664 if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name); 3665 } 3666 // add class and trigger event only once 3667 if( !el.classList.contains('size-' + name) ) { 3668 el.classList.add('size-' + name); 3669 el.dispatchEvent( new CustomEvent('em_resize') ); 3670 } 3671 break; 3672 } 3673 } 3674 } 3675 } 3676 });
3677 elements.forEach( function( el ){ 3678 if( typeof el !== 'undefined' ){ 3679 ro.observe(el); 3680 } 3681 }); 3682 return ro; 3683}; 3684 3685// event list and event page (inc. some extra booking form logic) - todo/cleanup 3686jQuery(document).ready( function($){ 3687 // Events List 3688 let breakpoints = { 3689 'small' : 600, 3690 'large' : false, 3691 } 3692 const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() ); 3693 $(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){ 3694 let new_elements = view.find('.em-list').each( function(){ 3695 if( !this.classList.contains('size-fixed') ){ 3696 events_ro.observe( this ); 3697 } 3698 }); 3699 }); 3700 3701 $(document).on('click', '.em-grid .em-item[data-href]', function(e){ 3702 if( e.target.type !== 'a' ){ 3703 window.location.href = this.getAttribute('data-href'); 3704 } 3705 }); 3706 3707 // Single event area 3708 breakpoints = { 3709 'small' : 600, 3710 'medium' : 900, 3711 'large' : false, 3712 } 3713 const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() ); 3714 $(document).on('em_view_loaded', function( e, view ){ 3715 let new_elements = view.find('.em-event-single').each( function(){ 3716 if( !this.classList.contains('size-fixed') ){ 3717 event_ro.observe( this ); 3718 } 3719 }); 3720 }); 3721 // booking form area (WIP) 3722 $(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){ 3723 e.preventDefault(); 3724 var parent = $(this).closest('.em-event-booking-form'); 3725 parent.find('.em-login-trigger').hide(); 3726 parent.find('.em-login-content').fadeIn(); 3727 let login_form = parent.find('.em-login'); 3728 login_form[0].scrollIntoView({ 3729 behavior: 'smooth' 3730 }); 3731 login_form.first().find('input[name="log"]').focus(); 3732 3733 }); 3734 $(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){ 3735 e.preventDefault(); 3736 let parent = $(this).closest('.em-event-booking-form'); 3737 parent.find('.em-login-content').hide(); 3738 parent.find('.em-login-trigger').show(); 3739 }); 3740 EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray()); 3741 3742}); 3743 3744// handle generic ajax submission forms vanilla style 3745document.addEventListener('DOMContentLoaded', function () { 3746 document.querySelectorAll('form.em-ajax-form').forEach( function(el){ 3747 el.addEventListener('submit', function(e){ 3748 e.preventDefault(); 3749 let form = e.currentTarget; 3750 let formData = new FormData(form); 3751 let button = form.querySelector('button[type="submit"]'); 3752 let loader; 3753 3754 if( form.classList.contains('no-overlay-spinner') ){ 3755 form.classList.add('loading'); 3756 }else{ 3757 let loader = document.createElement('div'); 3758 loader.id = 'em-loading'; 3759 form.append(loader); 3760 } 3761 3762 var request = new XMLHttpRequest(); 3763 if( form.getAttribute('data-api-url') ){ 3764 request.open('POST', form.getAttribute('data-api-url'), true); 3765 request.setRequestHeader('X-WP-Nonce', EM.api_nonce); 3766 }else{ 3767 request.open('POST', EM.ajaxurl, true); 3768 } 3769 3770 request.onload = function() { 3771 if( loader ) loader.remove(); 3772 if (this.status >= 200 && this.status < 400) { 3773 // Success! 3774 try { 3775 let data = JSON.parse(this.response); 3776 let notice; 3777 if( !form.classList.contains('no-inline-notice') ){ 3778 notice = form.querySelector('.em-notice'); 3779 if( !notice ){ 3780 notice = document.createElement('div'); 3781 form.prepend(notice); 3782 if( formData.get('action') ){ 3783 form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), { 3784 detail : { 3785 form : form, 3786 notice : notice, 3787 response : data, 3788 } 3789 }) ); 3790 } 3791 } 3792 notice.innerHTML = ''; 3793 notice.setAttribute('class', 'em-notice'); 3794 } 3795 if( data.result ){ 3796 if( !form.classList.contains('no-inline-notice') ){ 3797 notice.classList.add('em-notice-success'); 3798 notice.innerHTML = data.message; 3799 form.replaceWith(notice); 3800 }else{ 3801 form.classList.add('load-successful'); 3802 form.classList.remove('loading'); 3803 if( data.message ){ 3804 EM_Alert(data.message); 3805 } 3806 } 3807 }else{ 3808 if( !form.classList.contains('no-inline-notice') ){ 3809 notice.classList.add('em-notice-error'); 3810 notice.innerHTML = data.errors; 3811 }else{ 3812 EM_Alert(data.errors); 3813 } 3814 } 3815 } catch(e) { 3816 alert( 'Error Encountered : ' + e); 3817 } 3818 } else { 3819 alert('Error encountered... please see debug logs or contact support.'); 3820 } 3821 form.classList.remove('loading'); 3822 }; 3823 3824 request.onerror = function() {
3825 alert('Connection error encountered... please see debug logs or contact support.'); 3826 }; 3827 3828 request.send( formData ); 3829 return false; 3830 }); 3831 }); 3832}); 3833 3834// phone numbers 3835let em_setup_phone_inputs = function( container ){}; 3836let em_unsetup_phone_inputs = function( container ){}; 3837if ( EM.phone ) { 3838 3839 let getCountry = function() { 3840 var timezones = { 3841 "Africa/Abidjan": { c : ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"] }, 3842 "Africa/Accra": { c : ["GH"] }, 3843 "Africa/Addis_Ababa": { c : ["ET"] }, 3844 "Africa/Algiers": { c : ["DZ"] }, 3845 "Africa/Asmara": { c : ["ER"] }, 3846 "Africa/Asmera": { c : ["ER"] }, 3847 "Africa/Bamako": { c : ["ML"] }, 3848 "Africa/Bangui": { c : ["CF"] }, 3849 "Africa/Banjul": { c : ["GM"] }, 3850 "Africa/Bissau": { c : ["GW"] }, 3851 "Africa/Blantyre": { c : ["MW"] }, 3852 "Africa/Brazzaville": { c : ["CG"] }, 3853 "Africa/Bujumbura": { c : ["BI"] }, 3854 "Africa/Cairo": { c : ["EG"] }, 3855 "Africa/Casablanca": { c : ["MA"] }, 3856 "Africa/Ceuta": { c : ["ES"] }, 3857 "Africa/Conakry": { c : ["GN"] }, 3858 "Africa/Dakar": { c : ["SN"] }, 3859 "Africa/Dar_es_Salaam": { c : ["TZ"] }, 3860 "Africa/Djibouti": { c : ["DJ"] }, 3861 "Africa/Douala": { c : ["CM"] }, 3862 "Africa/El_Aaiun": { c : ["EH"] }, 3863 "Africa/Freetown": { c : ["SL"] }, 3864 "Africa/Gaborone": { c : ["BW"] }, 3865 "Africa/Harare": { c : ["ZW"] }, 3866 "Africa/Johannesburg": { c : ["ZA", "LS", "SZ"] }, 3867 "Africa/Juba": { c : ["SS"] }, 3868 "Africa/Kampala": { c : ["UG"] }, 3869 "Africa/Khartoum": { c : ["SD"] }, 3870 "Africa/Kigali": { c : ["RW"] }, 3871 "Africa/Kinshasa": { c : ["CD"] }, 3872 "Africa/Lagos": { c : ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"] }, 3873 "Africa/Libreville": { c : ["GA"] }, 3874 "Africa/Lome": { c : ["TG"] }, 3875 "Africa/Luanda": { c : ["AO"] }, 3876 "Africa/Lubumbashi": { c : ["CD"] }, 3877 "Africa/Lusaka": { c : ["ZM"] }, 3878 "Africa/Malabo": { c : ["GQ"] }, 3879 "Africa/Maputo": { c : ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"] }, 3880 "Africa/Maseru": { c : ["LS"] }, 3881 "Africa/Mbabane": { c : ["SZ"] }, 3882 "Africa/Mogadishu": { c : ["SO"] }, 3883 "Africa/Monrovia": { c : ["LR"] }, 3884 "Africa/Nairobi": { c : ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"] }, 3885 "Africa/Ndjamena": { c : ["TD"] }, 3886 "Africa/Niamey": { c : ["NE"] }, 3887 "Africa/Nouakchott": { c : ["MR"] }, 3888 "Africa/Ouagadougou": { c : ["BF"] }, 3889 "Africa/Porto-Novo": { c : ["BJ"] }, 3890 "Africa/Sao_Tome": { c : ["ST"] }, 3891 "Africa/Timbuktu": { c : ["ML"] }, 3892 "Africa/Tripoli": { c : ["LY"] }, 3893 "Africa/Tunis": { c : ["TN"] }, 3894 "Africa/Windhoek": { c : ["NA"] }, 3895 "America/Adak": { c : ["US"] }, 3896 "America/Anchorage": { c : ["US"] }, 3897 "America/Anguilla": { c : ["AI"] }, 3898 "America/Antigua": { c : ["AG"] }, 3899 "America/Araguaina": { c : ["BR"] }, 3900 "America/Argentina/Buenos_Aires": { c : ["AR"] }, 3901 "America/Argentina/Catamarca": { c : ["AR"] }, 3902 "America/Argentina/ComodRivadavia": { c : ["AR"] }, 3903 "America/Argentina/Cordoba": { c : ["AR"] }, 3904 "America/Argentina/Jujuy": { c : ["AR"] }, 3905 "America/Argentina/La_Rioja": { c : ["AR"] }, 3906 "America/Argentina/Mendoza": { c : ["AR"] }, 3907 "America/Argentina/Rio_Gallegos": { c : ["AR"] }, 3908 "America/Argentina/Salta": { c : ["AR"] }, 3909 "America/Argentina/San_Juan": { c : ["AR"] }, 3910 "America/Argentina/San_Luis": { c : ["AR"] }, 3911 "America/Argentina/Tucuman": { c : ["AR"] }, 3912 "America/Argentina/Ushuaia": { c : ["AR"] }, 3913 "America/Aruba": { c : ["AW"] }, 3914 "America/Asuncion": { c : ["PY"] }, 3915 "America/Atikokan": { c : ["CA"] }, 3916 "America/Atka": {}, 3917 "America/Bahia": { c : ["BR"] }, 3918 "America/Bahia_Banderas": { c : ["MX"] }, 3919 "America/Barbados": { c : ["BB"] }, 3920 "America/Belem": { c : ["BR"] }, 3921 "America/Belize": { c : ["BZ"] }, 3922 "America/Blanc-Sablon": { c : ["CA"] }, 3923 "America/Boa_Vista": { c : ["BR"] }, 3924 "America/Bogota": { c : ["CO"] }, 3925 "America/Boise": { c : ["US"] }, 3926 "America/Buenos_Aires": { c : ["AR"] }, 3927 "America/Cambridge_Bay": { c : ["CA"] }, 3928 "America/Campo_Grande": { c : ["BR"] }, 3929 "America/Cancun": { c : ["MX"] }, 3930 "America/Caracas": { c : ["VE"] }, 3931 "America/Catamarca": {}, 3932 "America/Cayenne": { c : ["GF"] }, 3933 "America/Cayman": { c : ["KY"] }, 3934 "America/Chicago": { c : ["US"] }, 3935 "America/Chihuahua": { c : ["MX"] }, 3936 "America/Coral_Harbour": { c : ["CA"] }, 3937 "America/Cordoba": { c: ['AR'] }, 3938 "America/Costa_Rica": { c : ["CR"] },
3939 "America/Creston": { c : ["CA"] }, 3940 "America/Cuiaba": { c : ["BR"] }, 3941 "America/Curacao": { c : ["CW"] }, 3942 "America/Danmarkshavn": { c : ["GL"] }, 3943 "America/Dawson": { c : ["CA"] }, 3944 "America/Dawson_Creek": { c : ["CA"] }, 3945 "America/Denver": { c : ["US"] }, 3946 "America/Detroit": { c : ["US"] }, 3947 "America/Dominica": { c : ["DM"] }, 3948 "America/Edmonton": { c : ["CA"] }, 3949 "America/Eirunepe": { c : ["BR"] }, 3950 "America/El_Salvador": { c : ["SV"] }, 3951 "America/Ensenada": {}, 3952 "America/Fort_Nelson": { c : ["CA"] }, 3953 "America/Fort_Wayne": {}, 3954 "America/Fortaleza": { c : ["BR"] }, 3955 "America/Glace_Bay": { c : ["CA"] }, 3956 "America/Godthab": {}, 3957 "America/Goose_Bay": { c : ["CA"] }, 3958 "America/Grand_Turk": { c : ["TC"] }, 3959 "America/Grenada": { c : ["GD"] }, 3960 "America/Guadeloupe": { c : ["GP"] }, 3961 "America/Guatemala": { c : ["GT"] }, 3962 "America/Guayaquil": { c : ["EC"] }, 3963 "America/Guyana": { c : ["GY"] }, 3964 "America/Halifax": { c : ["CA"] }, 3965 "America/Havana": { c : ["CU"] }, 3966 "America/Hermosillo": { c : ["MX"] }, 3967 "America/Indiana/Indianapolis": { c : ["US"] }, 3968 "America/Indiana/Knox": { c : ["US"] }, 3969 "America/Indiana/Marengo": { c : ["US"] }, 3970 "America/Indiana/Petersburg": { c : ["US"] }, 3971 "America/Indiana/Tell_City": { c : ["US"] }, 3972 "America/Indiana/Vevay": { c : ["US"] }, 3973 "America/Indiana/Vincennes": { c : ["US"] }, 3974 "America/Indiana/Winamac": { c : ["US"] }, 3975 "America/Indianapolis": {}, 3976 "America/Inuvik": { c : ["CA"] }, 3977 "America/Iqaluit": { c : ["CA"] }, 3978 "America/Jamaica": { c : ["JM"] }, 3979 "America/Jujuy": {}, 3980 "America/Juneau": { c : ["US"] }, 3981 "America/Kentucky/Louisville": { c : ["US"] }, 3982 "America/Kentucky/Monticello": { c : ["US"] }, 3983 "America/Knox_IN": {}, 3984 "America/Kralendijk": { c : ["BQ"] }, 3985 "America/La_Paz": { c : ["BO"] }, 3986 "America/Lima": { c : ["PE"] }, 3987 "America/Los_Angeles": { c : ["US"] }, 3988 "America/Louisville": {}, 3989 "America/Lower_Princes": { c : ["SX"] }, 3990 "America/Maceio": { c : ["BR"] }, 3991 "America/Managua": { c : ["NI"] }, 3992 "America/Manaus": { c : ["BR"] }, 3993 "America/Marigot": { c : ["MF"] }, 3994 "America/Martinique": { c : ["MQ"] }, 3995 "America/Matamoros": { c : ["MX"] }, 3996 "America/Mazatlan": { c : ["MX"] }, 3997 "America/Mendoza": {}, 3998 "America/Menominee": { c : ["US"] }, 3999 "America/Merida": { c : ["MX"] }, 4000 "America/Metlakatla": { c : ["US"] }, 4001 "America/Mexico_City": { c : ["MX"] }, 4002 "America/Miquelon": { c : ["PM"] }, 4003 "America/Moncton": { c : ["CA"] }, 4004 "America/Monterrey": { c : ["MX"] }, 4005 "America/Montevideo": { c : ["UY"] }, 4006 "America/Montreal": { c : ["CA"] }, 4007 "America/Montserrat": { c : ["MS"] }, 4008 "America/Nassau": { c : ["BS"] }, 4009 "America/New_York": { c : ["US"] }, 4010 "America/Nipigon": { c : ["CA"] }, 4011 "America/Nome": { c : ["US"] }, 4012 "America/Noronha": { c : ["BR"] }, 4013 "America/North_Dakota/Beulah": { c : ["US"] }, 4014 "America/North_Dakota/Center": { c : ["US"] }, 4015 "America/North_Dakota/New_Salem": { c : ["US"] }, 4016 "America/Nuuk": { c : ["GL"] }, 4017 "America/Ojinaga": { c : ["MX"] }, 4018 "America/Panama": { c : ["PA", "CA", "KY"] }, 4019 "America/Pangnirtung": { c : ["CA"] }, 4020 "America/Paramaribo": { c : ["SR"] }, 4021 "America/Phoenix": { c : ["US", "CA"] }, 4022 "America/Port-au-Prince": { c : ["HT"] }, 4023 "America/Port_of_Spain": { c : ["TT"] }, 4024 "America/Porto_Acre": {}, 4025 "America/Porto_Velho": { c : ["BR"] }, 4026 "America/Puerto_Rico": { c : ["PR", "AG", "CA", "AI","AW","BL","BQ","CW","DM","GD","GP","KN","LC","MF","MS","SX","TT","VC","VG","VI"] }, 4027 "America/Punta_Arenas": { c : ["CL"] }, 4028 "America/Rainy_River": { c : ["CA"] }, 4029 "America/Rankin_Inlet": { c : ["CA"] }, 4030 "America/Recife": { c : ["BR"] }, 4031 "America/Regina": { c : ["CA"] }, 4032 "America/Resolute": { c : ["CA"] }, 4033 "America/Rio_Branco": { c : ["BR"] }, 4034 "America/Rosario": {}, 4035 "America/Santa_Isabel": {}, 4036 "America/Santarem": { c : ["BR"] }, 4037 "America/Santiago": { c : ["CL"] }, 4038 "America/Santo_Domingo": { c : ["DO"] }, 4039 "America/Sao_Paulo": { c : ["BR"] }, 4040 "America/Scoresbysund": { c : ["GL"] }, 4041 "America/Shiprock": {}, 4042 "America/Sitka": { c : ["US"] }, 4043 "America/St_Barthelemy": { c : ["BL"] }, 4044 "America/St_Johns": { c : ["CA"] }, 4045 "America/St_Kitts": { c : ["KN"] }, 4046 "America/St_Lucia": { c : ["LC"] }, 4047 "America/St_Thomas": { c : ["VI"] }, 4048 "America/St_Vincent": { c : ["VC"] }, 4049 "America/Swift_Current": { c : ["CA"] }, 4050 "America/Tegucigalpa": { c : ["HN"] }, 4051 "America/Thule": { c : ["GL"] }, 4052 "America/Thunder_Bay": { c : ["CA"] }, 4053 "America/Tijuana": { c : ["MX"] }, 4054 "America/Toronto": { c : ["CA", "BS"] }, 4055 "America/Tortola": { c : ["VG"] }, 4056 "America/Vancouver": { c : ["CA"] }, 4057 "America/Virgin": { c : ["VI"] }, 4058 "America/Whitehorse": { c : ["CA"] }, 4059 "America/Winnipeg": { c : ["CA"] }, 4060 "America/Yakutat": { c : ["US"] }, 4061 "America/Yellowknife": { c : ["CA"] }, 4062 "Antarctica/Casey": { c : ["AQ"] }, 4063 "Antarctica/Davis": { c : ["AQ"] }, 4064 "Antarctica/DumontDUrville": { c : ["AQ"] }, 4065 "Antarctica/Macquarie": { c : ["AU"] }, 4066 "Antarctica/Mawson": { c : ["AQ"] }, 4067 "Antarctica/McMurdo": { c : ["AQ"] }, 4068 "Antarctica/Palmer": { c : ["AQ"] }, 4069 "Antarctica/Rothera": { c : ["AQ"] }, 4070 "Antarctica/South_Pole": { c : ["AQ"] }, 4071 "Antarctica/Syowa": { c : ["AQ"] }, 4072 "Antarctica/Troll": { c : ["AQ"] }, 4073 "Antarctica/Vostok": { c : ["AQ"] }, 4074 "Arctic/Longyearbyen": { c : ["SJ"] }, 4075 "Asia/Aden": { c : ["YE"] }, 4076 "Asia/Almaty": { c : ["KZ"] }, 4077 "Asia/Amman": { c : ["JO"] }, 4078 "Asia/Anadyr": { c : ["RU"] }, 4079 "Asia/Aqtau": { c : ["KZ"] }, 4080 "Asia/Aqtobe": { c : ["KZ"] }, 4081 "Asia/Ashgabat": { c : ["TM"] }, 4082 "Asia/Ashkhabad": {}, 4083 "Asia/Atyrau": { c : ["KZ"] }, 4084 "Asia/Baghdad": { c : ["IQ"] },
4085 "Asia/Bahrain": { c : ["BH"] }, 4086 "Asia/Baku": { c : ["AZ"] }, 4087 "Asia/Bangkok": { c : ["TH", "KH", "LA", "VN"] }, 4088 "Asia/Barnaul": { c : ["RU"] }, 4089 "Asia/Beirut": { c : ["LB"] }, 4090 "Asia/Bishkek": { c : ["KG"] }, 4091 "Asia/Brunei": { c : ["BN"] }, 4092 "Asia/Calcutta": {}, 4093 "Asia/Chita": { c : ["RU"] }, 4094 "Asia/Choibalsan": { c : ["MN"] }, 4095 "Asia/Chongqing": {}, 4096 "Asia/Chungking": {}, 4097 "Asia/Colombo": { c : ["LK"] }, 4098 "Asia/Dacca": {}, 4099 "Asia/Damascus": { c : ["SY"] }, 4100 "Asia/Dhaka": { c : ["BD"] }, 4101 "Asia/Dili": { c : ["TL"] }, 4102 "Asia/Dubai": { c : ["AE", "OM"] }, 4103 "Asia/Dushanbe": { c : ["TJ"] }, 4104 "Asia/Famagusta": { c : ["CY"] }, 4105 "Asia/Gaza": { c : ["PS"] }, 4106 "Asia/Harbin": {}, 4107 "Asia/Hebron": { c : ["PS"] }, 4108 "Asia/Ho_Chi_Minh": { c : ["VN"] }, 4109 "Asia/Hong_Kong": { c : ["HK"] }, 4110 "Asia/Hovd": { c : ["MN"] }, 4111 "Asia/Irkutsk": { c : ["RU"] }, 4112 "Asia/Istanbul": {}, 4113 "Asia/Jakarta": { c : ["ID"] }, 4114 "Asia/Jayapura": { c : ["ID"] }, 4115 "Asia/Jerusalem": { c : ["IL"] }, 4116 "Asia/Kabul": { c : ["AF"] }, 4117 "Asia/Kamchatka": { c : ["RU"] }, 4118 "Asia/Karachi": { c : ["PK"] },
4119 "Asia/Kashgar": {}, 4120 "Asia/Kathmandu": { c : ["NP"] }, 4121 "Asia/Katmandu": {}, 4122 "Asia/Khandyga": { c : ["RU"] }, 4123 "Asia/Kolkata": { c : ["IN"] }, 4124 "Asia/Krasnoyarsk": { c : ["RU"] }, 4125 "Asia/Kuala_Lumpur": { c : ["MY"] }, 4126 "Asia/Kuching": { c : ["MY"] }, 4127 "Asia/Kuwait": { c : ["KW"] }, 4128 "Asia/Macao": {}, 4129 "Asia/Macau": { c : ["MO"] }, 4130 "Asia/Magadan": { c : ["RU"] }, 4131 "Asia/Makassar": { c : ["ID"] }, 4132 "Asia/Manila": { c : ["PH"] }, 4133 "Asia/Muscat": { c : ["OM"] }, 4134 "Asia/Nicosia": { c : ["CY"] }, 4135 "Asia/Novokuznetsk": { c : ["RU"] }, 4136 "Asia/Novosibirsk": { c : ["RU"] }, 4137 "Asia/Omsk": { c : ["RU"] }, 4138 "Asia/Oral": { c : ["KZ"] }, 4139 "Asia/Phnom_Penh": { c : ["KH"] }, 4140 "Asia/Pontianak": { c : ["ID"] }, 4141 "Asia/Pyongyang": { c : ["KP"] }, 4142 "Asia/Qatar": { c : ["QA", "BH"] }, 4143 "Asia/Qostanay": { c : ["KZ"] }, 4144 "Asia/Qyzylorda": { c : ["KZ"] }, 4145 "Asia/Rangoon": {}, 4146 "Asia/Riyadh": { c : ["SA", "AQ", "KW", "YE"] }, 4147 "Asia/Saigon": {}, 4148 "Asia/Sakhalin": { c : ["RU"] }, 4149 "Asia/Samarkand": { c : ["UZ"] }, 4150 "Asia/Seoul": { c : ["KR"] }, 4151 "Asia/Shanghai": { c : ["CN"] }, 4152 "Asia/Singapore": { c : ["SG", "MY"] }, 4153 "Asia/Srednekolymsk": { c : ["RU"] }, 4154 "Asia/Taipei": { c : ["TW"] }, 4155 "Asia/Tashkent": { c : ["UZ"] }, 4156 "Asia/Tbilisi": { c : ["GE"] }, 4157 "Asia/Tehran": { c : ["IR"] }, 4158 "Asia/Tel_Aviv": {}, 4159 "Asia/Thimbu": {}, 4160 "Asia/Thimphu": { c : ["BT"] }, 4161 "Asia/Tokyo": { c : ["JP"] }, 4162 "Asia/Tomsk": { c : ["RU"] }, 4163 "Asia/Ujung_Pandang": {}, 4164 "Asia/Ulaanbaatar": { c : ["MN"] }, 4165 "Asia/Ulan_Bator": {}, 4166 "Asia/Urumqi": { c : ["CN"] }, 4167 "Asia/Ust-Nera": { c : ["RU"] }, 4168 "Asia/Vientiane": { c : ["LA"] }, 4169 "Asia/Vladivostok": { c : ["RU"] }, 4170 "Asia/Yakutsk": { c : ["RU"] }, 4171 "Asia/Yangon": { c : ["MM"] }, 4172 "Asia/Yekaterinburg": { c : ["RU"] }, 4173 "Asia/Yerevan": { c : ["AM"] }, 4174 "Atlantic/Azores": { c : ["PT"] }, 4175 "Atlantic/Bermuda": { c : ["BM"] }, 4176 "Atlantic/Canary": { c : ["ES"] }, 4177 "Atlantic/Cape_Verde": { c : ["CV"] }, 4178 "Atlantic/Faeroe": {}, 4179 "Atlantic/Faroe": { c : ["FO"] }, 4180 "Atlantic/Jan_Mayen": { c : ["SJ"] }, 4181 "Atlantic/Madeira": { c : ["PT"] }, 4182 "Atlantic/Reykjavik": { c : ["IS"] }, 4183 "Atlantic/South_Georgia": { c : ["GS"] }, 4184 "Atlantic/St_Helena": { c : ["SH"] }, 4185 "Atlantic/Stanley": { c : ["FK"] }, 4186 "Australia/ACT": {}, 4187 "Australia/Adelaide": { c : ["AU"] }, 4188 "Australia/Brisbane": { c : ["AU"] }, 4189 "Australia/Broken_Hill": { c : ["AU"] }, 4190 "Australia/Canberra": {}, 4191 "Australia/Currie": {}, 4192 "Australia/Darwin": { c : ["AU"] }, 4193 "Australia/Eucla": { c : ["AU"] }, 4194 "Australia/Hobart": { c : ["AU"] }, 4195 "Australia/LHI": {}, 4196 "Australia/Lindeman": { c : ["AU"] }, 4197 "Australia/Lord_Howe": { c : ["AU"] }, 4198 "Australia/Melbourne": { c : ["AU"] }, 4199 "Australia/NSW": {}, 4200 "Australia/North": {}, 4201 "Australia/Perth": { c : ["AU"] }, 4202 "Australia/Queensland": {}, 4203 "Australia/South": {}, 4204 "Australia/Sydney": { c : ["AU"] }, 4205 "Australia/Tasmania": {}, 4206 "Australia/Victoria": {}, 4207 "Australia/West": {}, 4208 "Australia/Yancowinna": {}, 4209 "Brazil/Acre": {}, 4210 "Brazil/DeNoronha": {}, 4211 "Brazil/East": {}, 4212 "Brazil/West": {}, 4213 CET: { c : ["XK"] }, 4214 CST6CDT: {}, 4215 "Canada/Atlantic": {}, 4216 "Canada/Central": {}, 4217 "Canada/Eastern": { c : ["CA"] }, 4218 "Canada/Mountain": {}, 4219 "Canada/Newfoundland": {}, 4220 "Canada/Pacific": {}, 4221 "Canada/Saskatchewan": {}, 4222 "Canada/Yukon": {}, 4223 "Chile/Continental": {}, 4224 "Chile/EasterIsland": {}, 4225 Cuba: {}, 4226 EET: {}, 4227 EST: {}, 4228 EST5EDT: {}, 4229 Egypt: {}, 4230 Eire: {}, 4231 "Etc/GMT": { c : ["AC"] }, 4232 "Etc/GMT+0": {}, 4233 "Etc/GMT+1": {}, 4234 "Etc/GMT+10": {}, 4235 "Etc/GMT+11": {}, 4236 "Etc/GMT+12": {}, 4237 "Etc/GMT+2": {}, 4238 "Etc/GMT+3": {}, 4239 "Etc/GMT+4": {}, 4240 "Etc/GMT+5": {}, 4241 "Etc/GMT+6": {}, 4242 "Etc/GMT+7": {}, 4243 "Etc/GMT+8": {}, 4244 "Etc/GMT+9": {}, 4245 "Etc/GMT-0": {}, 4246 "Etc/GMT-1": {}, 4247 "Etc/GMT-10": {}, 4248 "Etc/GMT-11": {}, 4249 "Etc/GMT-12": {}, 4250 "Etc/GMT-13": {}, 4251 "Etc/GMT-14": {}, 4252 "Etc/GMT-2": {}, 4253 "Etc/GMT-3": {}, 4254 "Etc/GMT-4": {}, 4255 "Etc/GMT-5": {}, 4256 "Etc/GMT-6": {}, 4257 "Etc/GMT-7": {}, 4258 "Etc/GMT-8": {}, 4259 "Etc/GMT-9": {}, 4260 "Etc/GMT0": {}, 4261 "Etc/Greenwich": {}, 4262 "Etc/UCT": {}, 4263 "Etc/UTC": {}, 4264 "Etc/Universal": {}, 4265 "Etc/Zulu": {}, 4266 "Europe/Amsterdam": { c : ["NL"] }, 4267 "Europe/Andorra": { c : ["AD"] }, 4268 "Europe/Astrakhan": { c : ["RU"] }, 4269 "Europe/Athens": { c : ["GR"] }, 4270 "Europe/Belfast": { c : ["GB"] }, 4271 "Europe/Belgrade": { c : ["RS", "BA", "HR", "ME", "MK", "SI"] },
4272 "Europe/Berlin": { c : ["DE"] }, 4273 "Europe/Bratislava": { c : ["SK"] }, 4274 "Europe/Brussels": { c : ["BE"] }, 4275 "Europe/Bucharest": { c : ["RO"] }, 4276 "Europe/Budapest": { c : ["HU"] }, 4277 "Europe/Busingen": { c : ["DE"] }, 4278 "Europe/Chisinau": { c : ["MD"] }, 4279 "Europe/Copenhagen": { c : ["DK"] }, 4280 "Europe/Dublin": { c : ["IE"] }, 4281 "Europe/Gibraltar": { c : ["GI"] }, 4282 "Europe/Guernsey": { c : ["GG"] }, 4283 "Europe/Helsinki": { c : ["FI", "AX"] }, 4284 "Europe/Isle_of_Man": { c : ["IM"] }, 4285 "Europe/Istanbul": { c : ["TR"] }, 4286 "Europe/Jersey": { c : ["JE"] }, 4287 "Europe/Kaliningrad": { c : ["RU"] }, 4288 "Europe/Kiev": { c : ["UA"] }, 4289 "Europe/Kirov": { c : ["RU"] }, 4290 "Europe/Lisbon": { c : ["PT"] }, 4291 "Europe/Ljubljana": { c : ["SI"] }, 4292 "Europe/London": { c : ["GB", "GG", "IM", "JE"] }, 4293 "Europe/Luxembourg": { c : ["LU"] }, 4294 "Europe/Madrid": { c : ["ES"] }, 4295 "Europe/Malta": { c : ["MT"] }, 4296 "Europe/Mariehamn": { c : ["AX"] }, 4297 "Europe/Minsk": { c : ["BY"] }, 4298 "Europe/Monaco": { c : ["MC"] }, 4299 "Europe/Moscow": { c : ["RU"] }, 4300 "Europe/Nicosia": {}, 4301 "Europe/Oslo": { c : ["NO", "SJ", "BV"] }, 4302 "Europe/Paris": { c : ["FR"] }, 4303 "Europe/Podgorica": { c : ["ME"] }, 4304 "Europe/Prague": { c : ["CZ", "SK"] }, 4305 "Europe/Riga": { c : ["LV"] }, 4306 "Europe/Rome": { c : ["IT", "SM", "VA"] }, 4307 "Europe/Samara": { c : ["RU"] }, 4308 "Europe/San_Marino": { c : ["SM"] }, 4309 "Europe/Sarajevo": { c : ["BA"] }, 4310 "Europe/Saratov": { c : ["RU"] }, 4311 "Europe/Simferopol": { c : ["RU", "UA"] }, 4312 "Europe/Skopje": { c : ["MK"] }, 4313 "Europe/Sofia": { c : ["BG"] }, 4314 "Europe/Stockholm": { c : ["SE"] }, 4315 "Europe/Tallinn": { c : ["EE"] }, 4316 "Europe/Tirane": { c : ["AL"] }, 4317 "Europe/Tiraspol": {}, 4318 "Europe/Ulyanovsk": { c : ["RU"] }, 4319 "Europe/Uzhgorod": { c : ["UA"] }, 4320 "Europe/Vaduz": { c : ["LI"] }, 4321 "Europe/Vatican": { c : ["VA"] }, 4322 "Europe/Vienna": { c : ["AT"] }, 4323 "Europe/Vilnius": { c : ["LT"] }, 4324 "Europe/Volgograd": { c : ["RU"] }, 4325 "Europe/Warsaw": { c : ["PL"] }, 4326 "Europe/Zagreb": { c : ["HR"] }, 4327 "Europe/Zaporozhye": { c : ["UA"] }, 4328 "Europe/Zurich": { c : ["CH", "DE", "LI"] }, 4329 Factory: {}, 4330 GB: { c : ["GB"] }, 4331 "GB-Eire": { c : ["GB"] }, 4332 GMT: { c : ["AC"] }, 4333 "GMT+0": {}, 4334 "GMT-0": {}, 4335 GMT0: {}, 4336 Greenwich: {}, 4337 HST: {}, 4338 Hongkong: {}, 4339 Iceland: {}, 4340 "Indian/Antananarivo": { c : ["MG"] }, 4341 "Indian/Chagos": { c : ["IO"] }, 4342 "Indian/Christmas": { c : ["CX"] }, 4343 "Indian/Cocos": { c : ["CC"] }, 4344 "Indian/Comoro": { c : ["KM"] }, 4345 "Indian/Kerguelen": { c : ["TF", "HM"] }, 4346 "Indian/Mahe": { c : ["SC"] }, 4347 "Indian/Maldives": { c : ["MV"] }, 4348 "Indian/Mauritius": { c : ["MU"] }, 4349 "Indian/Mayotte": { c : ["YT"] }, 4350 "Indian/Reunion": { c : ["RE", "TF"] }, 4351 Iran: {}, 4352 Israel: {}, 4353 Jamaica: {}, 4354 Japan: {}, 4355 Kwajalein: {}, 4356 Libya: {}, 4357 MET: {}, 4358 MST: {}, 4359 MST7MDT: {}, 4360 "Mexico/BajaNorte": {}, 4361 "Mexico/BajaSur": {}, 4362 "Mexico/General": {}, 4363 NZ: { c : ["NZ"] }, 4364 "NZ-CHAT": {}, 4365 Navajo: {}, 4366 PRC: {}, 4367 PST8PDT: {}, 4368 "Pacific/Apia": { c : ["WS"] }, 4369 "Pacific/Auckland": { c : ["NZ", "AQ"] }, 4370 "Pacific/Bougainville": { c : ["PG"] }, 4371 "Pacific/Chatham": { c : ["NZ"] }, 4372 "Pacific/Chuuk": { c : ["FM"] }, 4373 "Pacific/Easter": { c : ["CL"] }, 4374 "Pacific/Efate": { c : ["VU"] }, 4375 "Pacific/Enderbury": {}, 4376 "Pacific/Fakaofo": { c : ["TK"] }, 4377 "Pacific/Fiji": { c : ["FJ"] }, 4378 "Pacific/Funafuti": { c : ["TV"] }, 4379 "Pacific/Galapagos": { c : ["EC"] }, 4380 "Pacific/Gambier": { c : ["PF"] }, 4381 "Pacific/Guadalcanal": { c : ["SB"] }, 4382 "Pacific/Guam": { c : ["GU", "MP"] }, 4383 "Pacific/Honolulu": { c : ["US", "UM"] }, 4384 "Pacific/Johnston": { c : ["UM"] }, 4385 "Pacific/Kanton": { c : ["KI"] }, 4386 "Pacific/Kiritimati": { c : ["KI"] }, 4387 "Pacific/Kosrae": { c : ["FM"] }, 4388 "Pacific/Kwajalein": { c : ["MH"] }, 4389 "Pacific/Majuro": { c : ["MH"] }, 4390 "Pacific/Marquesas": { c : ["PF"] }, 4391 "Pacific/Midway": { c : ["UM"] }, 4392 "Pacific/Nauru": { c : ["NR"] }, 4393 "Pacific/Niue": { c : ["NU"] }, 4394 "Pacific/Norfolk": { c : ["NF"] }, 4395 "Pacific/Noumea": { c : ["NC"] }, 4396 "Pacific/Pago_Pago": { c : ["AS", "UM"] },
4397 "Pacific/Palau": { c : ["PW"] }, 4398 "Pacific/Pitcairn": { c : ["PN"] }, 4399 "Pacific/Pohnpei": { c : ["FM"] }, 4400 "Pacific/Ponape": {}, 4401 "Pacific/Port_Moresby": { c : ["PG", "AQ"] }, 4402 "Pacific/Rarotonga": { c : ["CK"] }, 4403 "Pacific/Saipan": { c : ["MP"] }, 4404 "Pacific/Samoa": { c : ["WS"] }, 4405 "Pacific/Tahiti": { c : ["PF"] }, 4406 "Pacific/Tarawa": { c : ["KI"] }, 4407 "Pacific/Tongatapu": { c : ["TO"] }, 4408 "Pacific/Truk": {}, 4409 "Pacific/Wake": { c : ["UM"] }, 4410 "Pacific/Wallis": { c : ["WF"] }, 4411 "Pacific/Yap": {}, 4412 Poland: {}, 4413 Portugal: {}, 4414 ROC: {}, 4415 ROK: {}, 4416 Singapore: { c : ["SG"] }, 4417 Turkey: {}, 4418 UCT: {}, 4419 "US/Alaska": {}, 4420 "US/Aleutian": {}, 4421 "US/Arizona": { c : ["US"] }, 4422 "US/Central": {}, 4423 "US/East-Indiana": {}, 4424 "US/Eastern": {}, 4425 "US/Hawaii": { c : ["US"] }, 4426 "US/Indiana-Starke": {}, 4427 "US/Michigan": {}, 4428 "US/Mountain": {}, 4429 "US/Pacific": {}, 4430 "US/Samoa": { c : ["WS"] }, 4431 UTC: {}, 4432 Universal: {}, 4433 "W-SU": {}, 4434 WET: {}, 4435 Zulu: { 4436 } 4437 }; 4438 4439 const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; 4440 4441 if (timezone === "" || !timezone) { 4442 return null; 4443 } 4444 4445 return timezones[timezone].c[0]; 4446 } 4447 4448 let utilsScriptLoaded; 4449 4450 em_setup_phone_inputs = async function ( container, overriding_options = {} ) { 4451 if ( !EM.phone ) return false; 4452 if( !utilsScriptLoaded ) { 4453 import( EM.url + '/includes/external/intl-tel-input/js/intlTelInputWithUtils.js' ).then( () => { 4454 utilsScriptLoaded = true; 4455 em_setup_phone_inputs( container ); 4456 }); 4457 return false; 4458 } // on initial load, we wait for scripts to load 4459 container.querySelectorAll('input.em-phone-intl[type="tel"]').forEach( function(input){ 4460 // change name and allow a hidden field for submission 4461 let alt = document.createElement('input'); 4462 let name = input.name; 4463 if( name ) { 4464 input.name = name + '_intl'; 4465 alt.name = name; 4466 } 4467 input.classList.add('em-intl-tel'); 4468 // copy all classes and remove ones we know we don't want 4469 alt.setAttribute('class', input.getAttribute('class') + ' em-intl-tel-full'); 4470 alt.classList.remove('em-intl-tel'); 4471 alt.type = 'hidden'; 4472 if( input.id ) { 4473 alt.id = input.id + '-full' 4474 } 4475 alt.value = input.value; 4476 // add data-name to the full input if it exists, for use in dynamic input forms for JS submission within forms 4477 if( input.getAttribute('data-name') ) { 4478 alt.setAttribute('data-name', input.getAttribute('data-name')); 4479 input.removeAttribute('data-name'); 4480 } 4481 input.after(alt); 4482 4483 let default_options = Object.assign({ 4484 autoPlaceholder: 'aggressive', 4485 separateDialCode : true, 4486 }, EM.phone.options); 4487 let options = Object.assign( default_options, overriding_options ); 4488 4489 if( EM.phone.detectJS || options.detectJS ) { 4490 let country = getCountry(); 4491 if( country ) { 4492 options.initialCountry = country; 4493 } else if ( EM.phone.initialCountry ) { 4494 options.initialCountry = EM.phone.initialCountry; 4495 } 4496 } 4497 if( options.onlyCountries ) { 4498 if( Array.isArray(options.onlyCountries) && options.onlyCountries.length > 0 ) { 4499 // make sure initial country is not excluded 4500 if (!options.onlyCountries.includes(options.initialCountry && options.initialCountry)) { 4501 options.onlyCountries.push(options.initialCountry); 4502 } 4503 } else { 4504 options.onlyCountries = []; 4505 } 4506 } 4507 4508 let iti = EM.intlTelInput( input, options); 4509 //iti.countryContainer.querySelector('button')?.setAttribute('data-nostyle', ''); 4510 let pixels = parseInt( input.style.paddingLeft.replace('px', '') ); // pad this an extra px 4511 input.style.setProperty('padding-left', pixels + 'px', 'important' ); 4512 4513 // do some basic inline validation 4514 input.addEventListener('change', function( e ){ 4515 alt.value = iti.getNumber(); 4516 if ( input.value.trim() ) { 4517 let wrapper = input.closest('.iti') 4518 if ( iti.isValidNumber() ) { 4519 wrapper.classList.remove("invalid-number"); 4520 if ( wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error') ) { 4521 wrapper.nextElementSibling.remove(); 4522 } 4523 } else { 4524 wrapper.classList.add("invalid-number"); 4525 const errorCode = iti.getValidationError(); 4526 let errorMsg; 4527 if( !(wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error')) ) { 4528 // create a div em-form-error class name and append after input 4529 errorMsg = document.createElement('div'); 4530 errorMsg.classList.add('em-inline-error'); 4531 wrapper.after(errorMsg); 4532 } else { 4533 errorMsg = wrapper.nextElementSibling; 4534 } 4535 errorMsg.innerHTML = '<span class="em-icon"></span> ' + EM.phone.error; 4536 errorMsg.classList.remove("hide"); 4537 } 4538 } 4539 }); 4540 4541 // trigger changes 4542 input.addEventListener('countrychange', function( e ){ 4543 alt.value = iti.getNumber(); 4544 // check input padding inline style and set it to important 4545 if( input.getAttribute('style') ) { 4546 let pixels = parseInt(input.style.paddingLeft.replace('px', '')); // pad this an extra px 4547 input.style.setProperty('padding-left', pixels + 'px', 'important' ); 4548 } 4549 }); 4550 4551 }); 4552 }; 4553 4554 em_unsetup_phone_inputs = function( container ) { 4555 container.querySelectorAll( 'input.em-phone-intl[type="tel"]' ).forEach( function(el){ 4556 let iti = EM.intlTelInput?.getInstance(el); 4557 if ( iti ) { 4558 iti.destroy(); 4559 } 4560 }); 4561 }; 4562} 4563 4564/*! 4565 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/ 4566 * Did a search/replace of timepicker to em_timepicker to prevent conflicts. 4567 */ 4568(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function(obj){return typeof obj}}else{_typeof=function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);
4568if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _objectSpread2(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _createForOfIteratorHelper(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray(o))){var i=0;var F=function(){};return{s:F,n:function(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var it,normalCompletion=true,didErr=false,err;return{s:function(){it=o[Symbol.iterator]()},n:function(){var step=it.next();normalCompletion=step.done;return step},e:function(e){didErr=true;err=e},f:function(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}var ONE_DAY=86400;var roundingFunction=function roundingFunction(seconds,settings){if(seconds===null){return null}else if(typeof settings.step!=="number"){return seconds}else{var offset=seconds%(settings.step*60);var start=settings.minTime||0;offset-=start%(settings.step*60);if(offset>=settings.step*30){seconds+=settings.step*60-offset}else{seconds-=offset}return _moduloSeconds(seconds,settings)}};function _moduloSeconds(seconds,settings){if(seconds==ONE_DAY&&settings.show2400){return seconds}return seconds%ONE_DAY}var DEFAULT_SETTINGS={appendTo:"body",className:null,closeOnWindowScroll:false,disableTextInput:false,disableTimeRanges:[],disableTouchKeyboard:false,durationTime:null,forceRoundTime:false,lang:{},listWidth:null,maxTime:null,minTime:null,noneOption:false,orientation:"l",roundingFunction:roundingFunction,scrollDefault:null,selectOnBlur:false,show2400:false,showDuration:false,showOn:["click","focus"],showOnFocus:true,step:30,stopScrollPropagation:false,timeFormat:"g:ia",typeaheadHighlight:true,useSelect:false,wrapHours:true};var DEFAULT_LANG={am:"am",pm:"pm",AM:"AM",PM:"PM",decimal:".",mins:"mins",hr:"hr",hrs:"hrs"};var Timepicker=function(){function Timepicker(targetEl){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,Timepicker);this._handleFormatValue=this._handleFormatValue.bind(this);this._handleKeyUp=this._handleKeyUp.bind(this);this.targetEl=targetEl;var attrOptions=Timepicker.extractAttrOptions(targetEl,Object.keys(DEFAULT_SETTINGS));this.settings=this.parseSettings(_objectSpread2(_objectSpread2(_objectSpread2({},DEFAULT_SETTINGS),options),attrOptions))}_createClass(Timepicker,[{key:"hideMe",value:function hideMe(){if(this.settings.useSelect){this.targetEl.blur();return}if(!this.list||!Timepicker.isVisible(this.list)){return}if(this.settings.selectOnBlur){this._selectValue()}this.list.hide();var hideTimepickerEvent=new CustomEvent("hideTimepicker");this.targetEl.dispatchEvent(hideTimepickerEvent)}},{key:"_findRow",value:function _findRow(value){if(!value&&value!==0){return false}var out=false;var value=this.settings.roundingFunction(value,this.settings);if(!this.list){return false}this.list.find("li").each(function(i,obj){var parsed=Number.parseInt(obj.dataset.time);if(Number.isNaN(parsed)){return}if(parsed==value){out=obj;return false}});return out}},{key:"_hideKeyboard",value:function _hideKeyboard(){return(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&this.settings.disableTouchKeyboard}},{key:"_setTimeValue",value:function _setTimeValue(value,source){if(this.targetEl.nodeName==="INPUT"){if(value!==null||this.targetEl.value!=""){this.targetEl.value=value}var tp=this;var settings=tp.settings;if(settings.useSelect&&source!="select"&&tp.list){tp.list.val(tp._roundAndFormatTime(tp.time2int(value)))}}
4568var selectTimeEvent=new Event("selectTime");if(this.selectedValue!=value){this.selectedValue=value;var changeTimeEvent=new Event("changeTime");var changeEvent=new CustomEvent("change",{detail:"em_timepicker"});if(source=="select"){this.targetEl.dispatchEvent(selectTimeEvent);this.targetEl.dispatchEvent(changeTimeEvent);this.targetEl.dispatchEvent(changeEvent)}else if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(changeTimeEvent)}return true}else{if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(selectTimeEvent)}return false}}},{key:"_getTimeValue",value:function _getTimeValue(){if(this.targetEl.nodeName==="INPUT"){return this.targetEl.value}else{return this.selectedValue}}},{key:"_selectValue",value:function _selectValue(){var tp=this;var settings=tp.settings;var list=tp.list;var cursor=list.find(".ui-em_timepicker-selected");if(cursor.hasClass("ui-em_timepicker-disabled")){return false}if(!cursor.length){return true}var timeValue=cursor.get(0).dataset.time;if(timeValue){var parsedTimeValue=Number.parseInt(timeValue);if(!Number.isNaN(parsedTimeValue)){timeValue=parsedTimeValue}}if(timeValue!==null){if(typeof timeValue!="string"){timeValue=tp._int2time(timeValue)}tp._setTimeValue(timeValue,"select")}return true}},{key:"time2int",value:function time2int(timeString){if(timeString===""||timeString===null||timeString===undefined)return null;if(timeString instanceof Date){return timeString.getHours()*3600+timeString.getMinutes()*60+timeString.getSeconds()}if(typeof timeString!="string"){return timeString}timeString=timeString.toLowerCase().replace(/[\s\.]/g,"");if(timeString.slice(-1)=="a"||timeString.slice(-1)=="p"){timeString+="m"}var pattern=/^(([^0-9]*))?([0-9]?[0-9])(([0-5][0-9]))?(([0-5][0-9]))?(([^0-9]*))$/;var hasDelimetersMatch=timeString.match(/\W/);if(hasDelimetersMatch){pattern=/^(([^0-9]*))?([0-9]?[0-9])(\W+([0-5][0-9]?))?(\W+([0-5][0-9]))?(([^0-9]*))$/}var time=timeString.match(pattern);if(!time){return null}var hour=parseInt(time[3]*1,10);var ampm=time[2]||time[9];var hours=hour;var minutes=time[5]*1||0;var seconds=time[7]*1||0;if(!ampm&&time[3].length==2&&time[3][0]=="0"){ampm="am"}if(hour<=12&&m){ampm=ampm.trim();var isPm=ampm==this.settings.lang.pm||ampm==this.settings.lang.PM;if(hour==12){hours=isPm?12:0}else{hours=hour+(isPm?12:0)}}else{var t=hour*3600+minutes*60+seconds;if(t>=ONE_DAY+(this.settings.show2400?1:0)){if(this.settings.wrapHours===false){return null}hours=hour%24}}var timeInt=hours*3600+minutes*60+seconds;if(hour<12&&!ampm&&this.settings._twelveHourTime&&this.settings.scrollDefault){var delta=timeInt-this.settings.scrollDefault();if(delta<0&&delta>=ONE_DAY/-2){timeInt=(timeInt+ONE_DAY/2)%ONE_DAY}}return timeInt}},{key:"parseSettings",value:function parseSettings(settings){var _this=this;settings.lang=_objectSpread2(_objectSpread2({},DEFAULT_LANG),settings.lang);this.settings=settings;if(settings.minTime){settings.minTime=this.time2int(settings.minTime)}if(settings.maxTime){settings.maxTime=this.time2int(settings.maxTime)}if(settings.listWidth){settings.listWidth=this.time2int(settings.listWidth)}if(settings.durationTime&&typeof settings.durationTime!=="function"){settings.durationTime=this.time2int(settings.durationTime)}if(settings.scrollDefault=="now"){settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(new Date),settings)}}else if(settings.scrollDefault&&typeof settings.scrollDefault!="function"){var val=settings.scrollDefault;settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(val),settings)}}else if(settings.minTime){settings.scrollDefault=function(){return settings.roundingFunction(settings.minTime,settings)}}if(typeof settings.timeFormat==="string"&&settings.timeFormat.match(/[gh]/)){settings._twelveHourTime=true}if(settings.showOnFocus===false&&settings.showOn.indexOf("focus")!=-1){settings.showOn.splice(settings.showOn.indexOf("focus"),1)}if(!settings.disableTimeRanges){settings.disableTimeRanges=[]}if(settings.disableTimeRanges.length>0){for(var i in settings.disableTimeRanges){settings.disableTimeRanges[i]=[this.time2int(sett
4568ings.disableTimeRanges[i][0]),this.time2int(settings.disableTimeRanges[i][1])]}settings.disableTimeRanges=settings.disableTimeRanges.sort(function(a,b){return a[0]-b[0]});for(var i=settings.disableTimeRanges.length-1;i>0;i--){if(settings.disableTimeRanges[i][0]<=settings.disableTimeRanges[i-1][1]){settings.disableTimeRanges[i-1]=[Math.min(settings.disableTimeRanges[i][0],settings.disableTimeRanges[i-1][0]),Math.max(settings.disableTimeRanges[i][1],settings.disableTimeRanges[i-1][1])];settings.disableTimeRanges.splice(i,1)}}}return settings}},{key:"_disableTextInputHandler",value:function _disableTextInputHandler(e){switch(e.keyCode){case 13:case 9:return;default:e.preventDefault()}}},{key:"_int2duration",value:function _int2duration(seconds,step){seconds=Math.abs(seconds);var minutes=Math.round(seconds/60),duration=[],hours,mins;if(minutes<60){duration=[minutes,this.settings.lang.mins]}else{hours=Math.floor(minutes/60);mins=minutes%60;if(step==30&&mins==30){hours+=this.settings.lang.decimal+5}duration.push(hours);duration.push(hours==1?this.settings.lang.hr:this.settings.lang.hrs);if(step!=30&&mins){duration.push(mins);duration.push(this.settings.lang.mins)}}return duration.join(" ")}},{key:"_roundAndFormatTime",value:function _roundAndFormatTime(seconds){seconds=this.settings.roundingFunction(seconds,this.settings);if(seconds!==null){return this._int2time(seconds)}}},{key:"_int2time",value:function _int2time(timeInt){if(typeof timeInt!="number"){return null}var seconds=parseInt(timeInt%60),minutes=parseInt(timeInt/60%60),hours=parseInt(timeInt/(60*60)%24);var time=new Date(1970,0,2,hours,minutes,seconds,0);if(isNaN(time.getTime())){return null}if(typeof this.settings.timeFormat==="function"){return this.settings.timeFormat(time)}var output="";var hour,code;for(var i=0;i<this.settings.timeFormat.length;i++){code=this.settings.timeFormat.charAt(i);switch(code){case"a":output+=time.getHours()>11?this.settings.lang.pm:this.settings.lang.am;break;case"A":output+=time.getHours()>11?this.settings.lang.PM:this.settings.lang.AM;break;case"g":hour=time.getHours()%12;output+=hour===0?"12":hour;break;case"G":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour;break;case"h":hour=time.getHours()%12;if(hour!==0&&hour<10){hour="0"+hour}output+=hour===0?"12":hour;break;case"H":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour>9?hour:"0"+hour;break;case"i":var minutes=time.getMinutes();output+=minutes>9?minutes:"0"+minutes;break;case"s":seconds=time.getSeconds();output+=seconds>9?seconds:"0"+seconds;break;case"\\":i++;output+=this.settings.timeFormat.charAt(i);break;default:output+=code}}return output}},{key:"_setSelected",value:function _setSelected(){var list=this.list;list.find("li").removeClass("ui-em_timepicker-selected");var timeValue=this.time2int(this._getTimeValue());if(timeValue===null){return}var selected=this._findRow(timeValue);if(selected){var selectedRect=selected.getBoundingClientRect();var listRect=list.get(0).getBoundingClientRect();var topDelta=selectedRect.top-listRect.top;if(topDelta+selectedRect.height>listRect.height||topDelta<0){var newScroll=list.scrollTop()+(selectedRect.top-listRect.top)-selectedRect.height;list.scrollTop(newScroll)}var parsed=Number.parseInt(selected.dataset.time);if(this.settings.forceRoundTime||parsed===timeValue){selected.classList.add("ui-em_timepicker-selected")}}}},{key:"_isFocused",value:function _isFocused(el){return el===document.activeElement}},{key:"_handleFormatValue",value:function _handleFormatValue(e){if(e&&e.detail=="em_timepicker"){return}this._formatValue(e)}},{key:"_formatValue",value:function _formatValue(e,origin){if(this.targetEl.value===""){this._setTimeValue(null,origin);return}if(this._isFocused(this.targetEl)&&(!e||e.type!="change")){return}var settings=this.settings;var seconds=this.time2int(this.targetEl.value);if(seconds===null){var timeFormatErrorEvent=new CustomEvent("timeFormatError");this.targetEl.dispatchEvent(timeFormatErrorEvent);return}var rangeError=false;if(settings.minTime!==null&&settings.maxTime!==null&&(seconds<settings.minTime||seconds>
4568settings.maxTime)){rangeError=true}var _iterator=_createForOfIteratorHelper(settings.disableTimeRanges),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var range=_step.value;if(seconds>=range[0]&&seconds<range[1]){rangeError=true;break}}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(settings.forceRoundTime){var roundSeconds=settings.roundingFunction(seconds,settings);if(roundSeconds!=seconds){seconds=roundSeconds;origin=null}}var prettyTime=this._int2time(seconds);if(rangeError){this._setTimeValue(prettyTime);var timeRangeErrorEvent=new CustomEvent("timeRangeError");this.targetEl.dispatchEvent(timeRangeErrorEvent)}else{this._setTimeValue(prettyTime,origin)}}},{key:"_generateNoneElement",value:function _generateNoneElement(optionValue,useSelect){var label,className,value;if(_typeof(optionValue)=="object"){label=optionValue.label;className=optionValue.className;value=optionValue.value}else if(typeof optionValue=="string"){label=optionValue;value=""}else{$.error("Invalid noneOption value")}var el;if(useSelect){el=document.createElement("option");el.value=value}else{el=document.createElement("li");el.dataset.time=String(value)}el.innerText=label;el.classList.add(className);return el}},{key:"_handleKeyUp",value:function _handleKeyUp(e){if(!this.list||!Timepicker.isVisible(this.list)||this.settings.disableTextInput){return true}if(e.type==="paste"||e.type==="cut"){setTimeout(function(){if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}},0);return}switch(e.keyCode){case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 77:case 80:case 186:case 8:case 46:if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}break}}}],[{key:"extractAttrOptions",value:function extractAttrOptions(element,keys){var output={};var _iterator2=_createForOfIteratorHelper(keys),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var key=_step2.value;if(key in element.dataset){output[key]=element.dataset[key]}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return output}},{key:"isVisible",value:function isVisible(elem){var el=elem[0];return el.offsetWidth>0&&el.offsetHeight>0}},{key:"hideAll",value:function hideAll(){var _iterator3=_createForOfIteratorHelper(document.getElementsByClassName("ui-em_timepicker-input")),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var el=_step3.value;var tp=el.em_timepickerObj;if(tp){tp.hideMe()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}]);return Timepicker}();(function(factory){if((typeof exports==="undefined"?"undefined":_typeof(exports))==="object"&&exports&&(typeof module==="undefined"?"undefined":_typeof(module))==="object"&&module&&module.exports===exports){factory(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}})(function($){var _lang={};var methods={init:function init(options){return this.each(function(){var self=$(this);var tp=new Timepicker(this,options);var settings=tp.settings;_lang=settings.lang;this.em_timepickerObj=tp;self.addClass("ui-em_timepicker-input");if(settings.useSelect){_render(self)}else{self.prop("autocomplete","off");if(settings.showOn){for(var i in settings.showOn){self.on(settings.showOn[i]+".em_timepicker",methods.show)}}self.on("change.em_timepicker",tp._handleFormatValue);self.on("keydown.em_timepicker",_keydownhandler);self.on("keyup.em_timepicker",tp._handleKeyUp);if(settings.disableTextInput){self.on("keydown.em_timepicker",tp._disableTextInputHandler)}self.on("cut.em_timepicker",tp._handleKeyUp);self.on("paste.em_timepicker",tp._handleKeyUp);tp._formatValue(null,"initial")}})},show:function show(e){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;if(e){e.preventDefault()}if(settings.useSelect){tp.list.trigger("focus");return}if(tp._hideKeyboard()){self.trigger("blur")}var list=tp.list;if(self.prop("readonly")){return}if(!list||list.length===0||typeof settings.durationTime==="function"){_render(self);list=tp.list}if(Timepicker.isVisible(list)){return}if(self.is("input")){tp.selectedValue=self.val()}tp._setSelected();Timepicker.hideAll();if(typeof settings.listWidth=="number"){list.width(self.outerWidth()*settings.listWidth)}list.show();var listOffset={};if(settings.orientation.match(/r/)){listOffset.left=self.offset().left+self.outerWidth()-list.outerWidth()+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/l/)){listOffset.left=self.offset().left+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/c/)){listOffset.left=self.offset().left+(self.outerWidth()-list.outerWidth())/2+parseInt(list.css("marginLeft").replace("px",""),10)}var verticalOrientation;if(settings.orientation.match(/t/)){verticalOrientation="t"}else if(settings.orientation.match(/b/)){verticalOrientation="b"}else if(self.offset().top+self.outerHeight(true)+list.outerHeight()>$(window).height()+$(window).scrollTop()){verticalOrientation="t"}else{verticalOrientation="b"}if(verticalOrientation=="t"){list.addClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top-list.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}else{list.removeClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top+self.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}list.offset(listOffset);var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){var timeInt=tp.time2int(tp._getTimeValue());if(timeInt!==null){selected=$(tp._findRow(timeInt))}else if(settings.scrollDefault){selected=$(tp._findRow(settings.scrollDefault()))}}if(!selected.length||selected.hasClass("ui-em_timepicker-disabled")){selected=list.find("li:not(.ui-em_timepicker-disabled):first")}if(selected&&selected.length){var topOffset=list.scrollTop()+selected.position().top-selected.outerHeight();list.scrollTop(topOffset)}else{list.scrollTop(0)}if(settings.stopScrollPropagation){$(document).on("wheel.ui-em_timepicker",".ui-em_timepicker-wrapper",function(e){e.preventDefault();var currentScroll=$(this).scrollTop();$(this).scrollTop(currentScroll+e.originalEvent.deltaY)})}$(document).on("mousedown.ui-em_timepicker",_closeHandler);$(window).on("resize.ui-em_timepicker",_closeHandler);if(settings.closeOnWindowScroll){$(document).on("scroll.ui-em_timepicker",_closeHandler)}self.trigger("showTimepicker");return this},hide:function hide(e){var tp=this[0].em_timepickerObj;if(tp){tp.hideMe()}Timepicker.hideAll();return this},option:function option(key,value){if(typeof key=="string"&&typeof value=="undefined"){var tp=this[0].em_timepickerObj;return tp.settings[key]}return this.each(function(){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;var list=tp.list;
4568if(_typeof(key)=="object"){settings=$.extend(settings,key)}else if(typeof key=="string"){settings[key]=value}settings=tp.parseSettings(settings);tp.settings=settings;tp._formatValue({type:"change"},"initial");if(list){list.remove();tp.list=null}if(settings.useSelect){_render(self)}})},getSecondsFromMidnight:function getSecondsFromMidnight(){var tp=this[0].em_timepickerObj;return tp.time2int(tp._getTimeValue())},getTime:function getTime(relative_date){var tp=this[0].em_timepickerObj;var time_string=tp._getTimeValue();if(!time_string){return null}var offset=tp.time2int(time_string);if(offset===null){return null}if(!relative_date){relative_date=new Date}var time=new Date(relative_date);time.setHours(offset/3600);time.setMinutes(offset%3600/60);time.setSeconds(offset%60);time.setMilliseconds(0);return time},isVisible:function isVisible(){var tp=this[0].em_timepickerObj;return!!(tp&&tp.list&&Timepicker.isVisible(tp.list))},setTime:function setTime(value){var tp=this[0].em_timepickerObj;var settings=tp.settings;if(settings.forceRoundTime){var prettyTime=tp._roundAndFormatTime(tp.time2int(value))}else{var prettyTime=tp._int2time(tp.time2int(value))}if(value&&prettyTime===null&&settings.noneOption){prettyTime=value}tp._setTimeValue(prettyTime,"initial");tp._formatValue({type:"change"},"initial");if(tp&&tp.list){tp._setSelected()}return this},remove:function remove(){var self=this;if(!self.hasClass("ui-em_timepicker-input")){return}var tp=self[0].em_timepickerObj;var settings=tp.settings;self.removeAttr("autocomplete","off");self.removeClass("ui-em_timepicker-input");self.removeData("em_timepicker-obj");self.off(".em_timepicker");if(tp.list){tp.list.remove()}if(settings.useSelect){self.show()}tp.list=null;return this}};function _render(self){var tp=self[0].em_timepickerObj;var list=tp.list;var settings=tp.settings;if(list&&list.length){list.remove();tp.list=null}if(settings.useSelect){list=$("<select></select>",{class:"ui-em_timepicker-select"});if(self.attr("name")){list.attr("name","ui-em_timepicker-"+self.attr("name"))}var wrapped_list=list}else{list=$("<ul></ul>",{class:"ui-em_timepicker-list"});var wrapped_list=$("<div></div>",{class:"ui-em_timepicker-wrapper",tabindex:-1});wrapped_list.css({display:"none",position:"absolute"}).append(list)}if(settings.noneOption){if(settings.noneOption===true){settings.noneOption=settings.useSelect?"Time...":"None"}if($.isArray(settings.noneOption)){for(var i in settings.noneOption){if(parseInt(i,10)==i){var noneElement=tp._generateNoneElement(settings.noneOption[i],settings.useSelect);list.append(noneElement)}}}else{var noneElement=tp._generateNoneElement(settings.noneOption,settings.useSelect);list.append(noneElement)}}if(settings.className){wrapped_list.addClass(settings.className)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var stepval=typeof settings.step=="function"?"function":settings.step;wrapped_list.addClass("ui-em_timepicker-with-duration");wrapped_list.addClass("ui-em_timepicker-step-"+settings.step)}var durStart=settings.minTime;if(typeof settings.durationTime==="function"){durStart=tp.time2int(settings.durationTime())}else if(settings.durationTime!==null){durStart=settings.durationTime}var start=settings.minTime!==null?settings.minTime:0;var end=settings.maxTime!==null?settings.maxTime:start+ONE_DAY-1;if(end<start){end+=ONE_DAY}if(end===ONE_DAY-1&&$.type(settings.timeFormat)==="string"&&settings.show2400){end=ONE_DAY}var dr=settings.disableTimeRanges;var drCur=0;var drLen=dr.length;var stepFunc=settings.step;if(typeof stepFunc!="function"){stepFunc=function stepFunc(){return settings.step}}for(var i=start,j=0;i<=end;j++,i+=stepFunc(j)*60){var timeInt=i;var timeString=tp._int2time(timeInt);if(settings.useSelect){var row=$("<option></option>",{value:timeString});row.text(timeString)}else{var row=$("<li></li>");row.addClass(timeInt%ONE_DAY<ONE_DAY/2?"ui-em_timepicker-am":"ui-em_timepicker-pm");row.attr("data-time",roundingFunction(timeInt,settings));row.text(timeString)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var durationString=tp._int2duration(i-durStart,settings.step);if(settings.useSelect){row.text(row.text()+" ("+durationString+")")}else{var duration=$("<span></span>",{class:"ui-em_timepicker-duration"});duration.text(" ("+durationString+")");row.append(duration)}}if(drCur<drLen){if(timeInt>=dr[drCur][1]){drCur+=1}if(dr[drCur]&&timeInt>=dr[drCur][0]&&timeInt<dr[drCur][1]){if(settings.useSelect){row.prop("disabled",true)}else{row.addClass("ui-em_timepicker-disabled")}}}list.append(row)}wrapped_list.data("em_timepicker-input",self);tp.list=wrapped_list;if(settings.useSelect){if(self.val()){list.val(tp._roundAndFormatTime(tp.time2int(self.val())))}list.on("focus",function(){$(this).data("em_timepicker-input").trigger("showTimepicker")});list.on("blur",function(){$(this).data("em_timepicker-input").trigger("hideTimepicker")});list.on("change",function(){tp._setTimeValue($(this).val(),"select")});tp._setTimeValue(list.val(),"initial");self.hide().after(list)}else{var appendTo=settings.appendTo;if(typeof appendTo==="string"){appendTo=$(appendTo)}else if(typeof appendTo==="function"){appendTo=appendTo(self)}appendTo.append(wrapped_list);tp._setSelected();list.on("mousedown click","li",function(e){self.off("focus.em_timepicker");self.on("focus.em_timepicker-ie-hack",function(){self.off("focus.em_timepicker-ie-hack");self.on("focus.em_timepicker",methods.show)});if(!tp._hideKeyboard()){self[0].focus()}list.find("li").removeClass("ui-em_timepicker-selected");$(this).addClass("ui-em_timepicker-selected");if(tp._selectValue()){self.trigger("hideTimepicker");list.on("mouseup.em_timepicker click.em_timepicker","li",function(e){list.off("mouseup.em_timepicker click.em_timepicker");wrapped_list.hide()})}})}}function _closeHandler(e){if(e.target==window){return}var target=$(e.target);if(target.closest(".ui-em_timepicker-input").length||target.closest(".ui-em_timepicker-wrapper").length){return}Timepicker.hideAll();$(document).off(".ui-em_timepicker");$(window).off(".ui-em_timepicker")}function _keydownhandler(e){var self=$(this);var tp=self[0].em_timepickerObj;var list=tp.list;if(!list||!Timepicker.isVisible(list)){if(e.keyCode==40){methods.show.call(self.get(0));list=tp.list;if(!tp._hideKeyboard()){self.trigger("focus")}}else{return true}}switch(e.keyCode){case 13:if(tp._selectValue()){tp._formatValue({type:"change"});tp.hideMe()}e.preventDefault();return false;case 38:var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":first-child")){selected.removeClass("ui-em_timepicker-selected");selected.prev().addClass("ui-em_timepicker-selected");if(selected.prev().position().top<selected.outerHeight()){list.scrollTop(list.scrollTop()-selected.outerHeight())}}return false;case 40:selected=list.find(".ui-em_timepicker-selected");if(selected.length===0){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":last-child")){selected.removeClass("ui-em_timepicker-selected");selected.next().addClass("ui-em_timepicker-selected");if(selected.next().position().top+2*selected.outerHeight()>list.outerHeight()){list.scrollTop(list.scrollTop()+selected.outerHeight())}}return false;case 27:list.find("li").removeClass("ui-em_timepicker-selected");tp.hideMe();break;case 9:tp.hideMe();break;default:return true}}$.fn.em_timepicker=function(method){if(!this.length)return this;if(methods[method]){if(!this.hasClass("ui-em_timepicker-input")){return this}return methods[method].apply(this,Array.prototype.slice.call(arguments,1
4568))}else if(_typeof(method)==="object"||!method){return methods.init.apply(this,arguments)}else{$.error("Method "+method+" does not exist on jQuery.em_timepicker")}};$.fn.em_timepicker.defaults=DEFAULT_SETTINGS})})(); 4569 4570/*! 4571 * flatpickr v4.6.13,, @license MIT
vendor: 50,644 bytes, lines 4572-4573
4572 */ 4573!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).flatpickr=n()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var n,t=1,a=arguments.length;t<a;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function n(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var a=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],r=0,l=o.length;r<l;r++,i++)a[i]=o[r];return a}var t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var n=new Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t=new Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n=e%100;if(n>3&&n<21)return"th";switch(n%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,n){return void 0===n&&(n=2),("000"+e).slice(-1*n)},r=function(e){return!0===e?1:0};function l(e,n){var t;return function(){var a=this,i=arguments;clearTimeout(t),t=setTimeout((function(){return e.apply(a,i)}),n)}}var c=function(e){return e instanceof Array?e:[e]};function s(e,n,t){if(!0===t)return e.classList.add(n);e.classList.remove(n)}function d(e,n,t){var a=window.document.createElement(e);return n=n||"",t=t||"",a.className=n,void 0!==t&&(a.textContent=t),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){return n(e)?e:e.parentNode?f(e.parentNode,n):void 0}function m(e,n){var t=d("div","numInputWrapper"),a=d("input","numInput "+e),i=d("span","arrowUp"),o=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==n)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function g(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var p=function(){},h=function(e,n,t){return t.months[n?"shorthand":"longhand"][e]},v={D:p,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],"i").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a=parseInt(n),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:p,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:p,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},D={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},w={Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[w.w(e,n,t)]},F:function(e,n,t){return h(w.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(w.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!==n.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()>11)]},M:function(e,n){return h(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,n,a){var i=a||r;return void 0===t.formatDate||c?n.split("").map((function(n,a,o){return w[n]&&"\\"!==o[a-1]?w[n](e,i,t):"\\"!==n?n:""})).join(""):t.formatDate(e,n,i)}},C=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o;return function(e,n,i,o){if(0===e||e){var l,c=o||r,s=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var d=n||(t||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(t&&t.parseDate)l=t.parseDate(e,d);else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else{for(var f=void 0,m=[],g=0,p=0,h="";g<d.length;g++){var w=d[g],b="\\"===w,C="\\"===d[g-1]||b;if(D[w]&&!C){h+=D[w];var M=new RegExp(h).exec(e);M&&(f=!0)&&m["Y"!==w?"push":"unshift"]({fn:v[w],val:M[++p]})}else b||(h+=".")}l=t&&t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0),m.forEach((function(e){var n=e.fn,t=e.val;return l=n(l,t,c)||l})),l=f?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===i&&l.setHours(0,0,0,0),l;t.errorHandler(new Error("Invalid date provided: "+s))}}};function M(e,n,t){return void 0===t&&(t=!0),!1!==t?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var y=function(e,n,t){return 3600*e+60*n+t},x=864e5;function E(e){var n=e.defaultHour,t=e.defaultMinute,a=e.defaultSeconds;if(void 0!==e.minDate){var i=e.minDate.getHours(),o=e.minDate.getMinutes(),r=e.minDate.getSeconds();n<i&&(n=i),n===i&&t<o&&(t=o),n===i&&t===o&&a<r&&(a=e.minDate.getSeconds())}if(void 0!==e.maxDate){var l=e.maxDate.getHours(),c=e.maxDate.getMinutes();(n=Math.min(n,l))===l&&(t=Math.min(c,t)),n===l&&t===c&&(a=e.maxDate.getSeconds())}return{hours:n,minutes:t,seconds:a}}"function"!=typeof Object.assign&&(Object.assign=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var a=function(n){n&&Object.keys(n).forEach((function(t){return e[t]=n[t]}))},i=0,o=n;i<o.length;i++){var r=o[i];a(r)}return e});function k(p,v){var w={config:e(e({},a),I.defaultConfig),l10n:i};function k(){var e;return(null===(e=w.calendarContainer)||void 0===e?void 0:e.getRootNode()).activeElement||document.activeElement}function T(e){return e.bind(w)}function S(){var e=w.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==w.calendarContainer&&(w.calendarContainer.style.visibility="hidden",w.calendarContainer.style.display="block"),void 0!==w.daysContainer){var n=(w.days.offsetWidth+1)*e.showMonths;w.daysContainer.style.width=n+"px",w.calendarContainer.style.width=n+(void 0!==w.weekWrapper?w.weekWrapper.offsetWidth:0)+"px",w.calendarContainer.style.removeProperty("visibility"),w.calendarContainer.style.removeProperty("display")}}))}function _(e){if(0===w.selectedDates.length){var n=void 0===w.config.minDate||M(new Date,w.config.minDate)>=0?new Date:new Date(w.config.minDate.getTime()),t=E(w.config);n.setHours(t.hours,t.minutes,t.seconds,n.getMilliseconds()),w.selectedDates=[n],w.latestSelectedDateObj=n}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var n="keydown"===e.type,t=g(e),a=t;void 0!==w.amPM&&t===w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),s=parseInt(a.value,10),d=e.delta||(n?38===e.which?1:-1:0),u=s+c*d;if(void 0!==a.value&&2===a.value.length){var f=a===w.hourElement,m=a===w.minuteElement;u<i?(u=l+u+r(!f)+(r(f)&&r(!w.amPM)),m&&L(void 0,-1,w.hourElement)):u>l&&(u=a===w.hourElement?u-l-r(!w.amPM):i,m&&L(void 0,1,w.hourElement)),w.amPM&&f&&(1===c?u+s===23:Math.abs(u-s)>c)&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]),a.value=o(u)}}(e);var a=w._input.value;O(),ye(),w._input.value!==a&&w._debouncedChange()}function O(){if(void 0!==w.hourElement&&void 0!==w.minuteElement){var e,n,t=(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(w.minuteElement.value,10)||0)%60,i=void 0!==w.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!==w.amPM&&(e=t,n=w.amPM.textContent,t=e%12+12*r(n===w.l10n.amPM[1]));var o=void 0!==w.config.minTime||w.config.minDate&&w.minDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.minDate,!0),l=void 0!==w.config.maxTime||w.config.maxDate&&w.maxDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.maxDate,!0);if(void 0!==w.config.maxTime&&void 0!==w.config.minTime&&w.config.minTime>w.config.maxTime){var c=y(w.config.minTime.getHours(),w.config.minTime.getMinutes(),w.config.minTime.getSeconds()),s=y(w.config.maxTime.getHours(),w.config.maxTime.getMinutes(),w.config.maxTime.getSeconds()),d=y(t,a,i);if(d>s&&d<c){var u=function(e){var n=Math.floor(e/3600),t=(e-3600*n)/60;return[n,t,e-3600*n-60*t]}(c);t=u[0],a=u[1],i=u[2]}}else{if(l){var f=void 0!==w.config.maxTime?w.config.maxTime:w.config.maxDate;(t=Math.min(t,f.getHours()))===f.getHours()&&(a=Math.min(a,f.getMinutes())),a===f.getMinutes()&&(i=Math.min(i,f.getSeconds()))}if(o){var m=void 0!==w.config.minTime?w.config.minTime:w.config.minDate;(t=Math.max(t,m.getHours()))===m.getHours()&&a<m.getMinutes()&&(a=m.getMinutes()),a===m.getMinutes()&&(i=Math.max(i,m.getSeconds()))}}A(t,a,i)}}function F(e){var n=e||w.latestSelectedDateObj;n&&n instanceof Date&&A(n.getHours(),n.getMinutes(),n.getSeconds())}function A(e,n,t){void 0!==w.latestSelectedDateObj&&w.latestSelectedDateObj.setHours(e%24,n,t||0,0),w.hourElement&&w.minuteElement&&!w.isMobile&&(w.hourElement.value=o(w.config.time_24hr?e:(12+e)%12+12*r(e%12==0)),w.minuteElement.value=o(n),void 0!==w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(e>=12)]),void 0!==w.secondElement&&(w.secondElement.value=o(t)))}function N(e){var n=g(e),t=parseInt(n.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&ee(t)}function P(e,n,t,a){return n instanceof Array?n.forEach((function(n){return P(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return P(e,n,t,a)})):(e.addEventListener(n,t,a),void w._handlers.push({remove:function(){return e.removeEventListener(n,t,a)}}))}function Y(){De("onChange")}function j(e,n){var t=void 0!==e?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate&&w.config.minDate>w.now?w.config.minDate:w.config.maxDate&&w.config.maxDate<w.now?w.config.maxDate:w.now),a=w.currentYear,i=w.currentMonth;try{void 0!==t&&(w.currentYear=t.getFullYear(),w.currentMonth=t.getMonth())}catch(e){e.message="Invalid date supplied: "+t,w.config.errorHandler(e)}n&&w.currentYear!==a&&(De("onYearChange"),q()),!n||w.currentYear===a&&w.currentMonth===i||De("onMonthChange"),w.redraw()}function H(e){var n=g(e);~n.className.indexOf("arrow")&&L(e,n.classList.contains("arrowUp")?1:-1)}function L(e,n,t){var a=e&&g(e),i=t||a&&a.parentNode&&a.parentNode.firstChild,o=we("increment");o.delta=n,i&&i.dispatchEvent(o)}function R(e,n,t,a){var i=ne(n,!0),o=d("span",e,n.getDate().toString());return o.dateObj=n,o.$i=a,o.setAttribute("aria-label",w.formatDate(n,w.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===M(n,w.now)&&(w.todayDateElem=o,o.classList.add("today"),o.setAttribute("aria-current","date")),i?(o.tabIndex=-1,be(n)&&(o.classList.add("selected"),w.selectedDateElem=o,"range"===w.config.mode&&(s(o,"startRange",w.selectedDates[0]&&0===M(n,w.selectedDates[0],!0)),s(o,"endRange",w.selectedDates[1]&&0===M(n,w.selectedDates[1],!0)),"nextMonthDay"===e&&o.classList.add("inRange")))):o.classList.add("flatpickr-disabled"),"range"===w.config.mode&&function(e){return!("range"!==w.config.mode||w.selectedDates.length<2)&&(M(e,w.selectedDates[0])>=0&&M(e,w.selectedDates[1])<=0)}(n)&&!be(n)&&o.classList.add("inRange"),w.weekNumbers&&1===w.config.showMonths&&"prevMonthDay"!==e&&a%7==6&&w.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+w.config.getWeek(n)+"</span>"),De("onDayCreate",o),o}function W(e){e.focus(),"range"===w.config.mode&&oe(e)}function B(e){for(var n=e>0?0:w.config.showMonths-1,t=e>0?w.config.showMonths:-1,a=n;a!=t;a+=e)for(var i=w.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&ne(c.dateObj))return c}}function J(e,n){var t=k(),a=te(t||document.body),i=void 0!==e?e:a?t:void 0!==w.selectedDateElem&&te(w.selectedDateElem)?w.selectedDateElem:void 0!==w.todayDateElem&&te(w.todayDateElem)?w.todayDateElem:B(n>0?1:-1);void 0===i?w._input.focus():a?function(e,n){for(var t=-1===e.className.indexOf("Month")?e.dateObj.getMonth():w.currentMonth,a=n>0?w.config.showMonths:-1,i=n>0?1:-1,o=t-w.currentMonth;o!=a;o+=i)for(var r=w.daysContainer.children[o],l=t-w.currentMonth===o?e.$i+n:n<0?r.children.length-1:0,c=r.children.length,s=l;s>=0&&s<c&&s!=(n>0?c:-1);s+=i){var d=r.children[s];if(-1===d.className.indexOf("hidden")&&ne(d.dateObj)&&Math.abs(e.$i-s)>=Math.abs(n))return W(d)}w.changeMonth(i),J(B(i),0)}(i,n):W(i)}function K(e,n){for(var t=(new Date(e,n,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a=w.utils.getDaysInMonth((n-1+12)%12,e),i=w.utils.getDaysInMonth(n,e),o=window.document.createDocumentFragment(),r=w.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",s=a+1-t,u=0;s<=a;s++,u++)o.appendChild(R("flatpickr-day "+l,new Date(e,n-1,s),0,u));for(s=1;s<=i;s++,u++)o.appendChild(R("flatpickr-day",new Date(e,n,s),0,u));for(var f=i+1;f<=42-t&&(1===w.config.showMonths||u%7!=0);f++,u++)o.appendChild(R("flatpickr-day "+c,new Date(e,n+1,f%i),0,u));var m=d("div","dayContainer");return m.appendChild(o),m}function U(){if(void 0!==w.daysContainer){u(w.daysContainer),w.weekNumbers&&u(w.weekNumbers);for(var e=document.createDocumentFragment(),n=0;n<w.config.showMonths;n++){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),e.appendChild(K(t.getFullYear(),t.getMonth()))}w.daysContainer.appendChild(e),w.days=w.daysContainer.firstChild,"range"===w.config.mode&&1===w.selectedDates.length&&oe()}}function q(){if(!(w.config.showMonths>1||"dropdown"!==w.config.monthSelectorType)){var e=function(e){return!(void 0!==w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&e<w.config.minDate.getMonth())&&!(void 0!==w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()&&e>w.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex=-1,w.monthsDropdownContainer.innerHTML="";for(var n=0;n<12;n++)if(e(n)){var t=d("option","flatpickr-monthDropdown-month");t.value=new Date(w.currentYear,n).getMonth().toString(),t.textContent=h(n,w.config.shorthandCurrentMonth,w.l10n),t.tabIndex=-1,w.currentMonth===n&&(t.selected=!0),w.monthsDropdownContainer.appendChild(t)}}}function $(){var e,n=d("div","flatpickr-month"),t=window.document.createDocumentFragment();w.config.showMonths>1||"static"===w.config.monthSelectorType?e=d("span","cur-month"):(w.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),w.monthsDropdownContainer.setAttribute("aria-label",w.l10n.monthAriaLabel),P(w.monthsDropdownContainer,"change",(function(e){var n=g(e),t=parseInt(n.value,10);w.changeMonth(t-w.currentMonth),De("onMonthChange")})),q(),e=w.monthsDropdownContainer);var a=m("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",w.l10n.yearAriaLabel),w.config.minDate&&i.setAttribute("min",w.config.minDate.getFullYear().toString()),w.config.maxDate&&(i.setAttribute("max",w.config.maxDate.getFullYear().toString()),i.disabled=!!w.config.minDate&&w.config.minDate.getFullYear()===w.config.maxDate.getFullYear());var o=d("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function V(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths&&(w.yearElements=[],w.monthElements=[]);for(var e=w.config.showMonths;e--;){var n=$();w.yearElements.push(n.yearElement),w.monthElements.push(n.monthElement),w.monthNav.appendChild(n.container)}w.monthNav.appendChild(w.nextMonthNav)}function z(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer=d("div","flatpickr-weekdays");for(var e=w.config.showMonths;e--;){var n=d("div","flatpickr-weekdaycontainer");w.weekdayContainer.appendChild(n)}return G(),w.weekdayContainer}function G(){if(w.weekdayContainer){var e=w.l10n.firstDayOfWeek,t=n(w.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=n(t.splice(e,t.length),t.splice(0,e)));for(var a=w.config.showMonths;a--;)w.weekdayContainer.children[a].innerHTML="\n <span class='flatpickr-weekday'>\n "+t.join("</span><span class='flatpickr-weekday'>")+"\n </span>\n "}}function Z(e,n){void 0===n&&(n=!0);var t=n?e:e-w.currentMonth;t<0&&!0===w._hidePrevMonthArrow||t>0&&!0===w._hideNextMonthArrow||(w.currentMonth+=t,(w.currentMonth<0||w.currentMonth>11)&&(w.currentYear+=w.currentMonth>11?1:-1,w.currentMonth=(w.currentMonth+12)%12,De("onYearChange"),q()),U(),De("onMonthChange"),Ce())}function Q(e){return w.calendarContainer.contains(e)}function X(e){if(w.isOpen&&!w.config.inline){var n=g(e),t=Q(n),a=!(n===w.input||n===w.altInput||w.element.contains(n)||e.path&&e.path.indexOf&&(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)))&&!t&&!Q(e.relatedTarget),i=!w.config.ignoredFocusElements.some((function(e){return e.contains(n)}));a&&i&&(w.config.allowInput&&w.setDate(w._input.value,!1,w.config.altInput?w.config.altFormat:w.config.dateFormat),void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement&&""!==w.input.value&&void 0!==w.input.value&&_(),w.close(),w.config&&"range"===w.config.mode&&1===w.selectedDates.length&&w.clear(!1))}}function ee(e){if(!(!e||w.config.minDate&&e<w.config.minDate.getFullYear()||w.config.maxDate&&e>w.config.maxDate.getFullYear())){var n=e,t=w.currentYear!==n;w.currentYear=n||w.currentYear,w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth=Math.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&(w.currentMonth=Math.max(w.config.minDate.getMonth(),w.currentMonth)),t&&(w.redraw(),De("onYearChange"),q())}}function ne(e,n){var t;void 0===n&&(n=!0);var a=w.parseDate(e,void 0,n);if(w.config.minDate&&a&&M(a,w.config.minDate,void 0!==n?n:!w.minDateHasTime)<0||w.config.maxDate&&a&&M(a,w.config.maxDate,void 0!==n?n:!w.maxDateHasTime)>0)return!1;if(!w.config.enable&&0===w.config.disable.length)return!0;if(void 0===a)return!1;for(var i=!!w.config.enable,o=null!==(t=w.config.enable)&&void 0!==t?t:w.config.disable,r=0,l=void 0;r<o.length;r++){if("function"==typeof(l=o[r])&&l(a))return i;if(l instanceof Date&&void 0!==a&&l.getTime()===a.getTime())return i;if("string"==typeof l){var c=w.parseDate(l,void 0,!0);return c&&c.getTime()===a.getTime()?i:!i}if("object"==typeof l&&void 0!==a&&l.from&&l.to&&a.getTime()>=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function te(e){return void 0!==w.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&w.daysContainer.contains(e))}function ae(e){var n=e.target===w._input,t=w._input.value.trimEnd()!==Me();!n||!t||e.relatedTarget&&Q(e.relatedTarget)||w.setDate(w._input.value,!0,e.target===w.altInput?w.config.altFormat:w.config.dateFormat)}function ie(e){var n=g(e),t=w.config.wrap?p.contains(n):n===w._input,a=w.config.allowInput,i=w.isOpen&&(!a||!t),o=w.config.inline&&t&&!a;if(13===e.keyCode&&t){if(a)return w.setDate(w._input.value,!0,n===w.altInput?w.config.altFormat:w.config.dateFormat),w.close(),n.blur();w.open()}else if(Q(n)||i||o){var r=!!w.timeContainer&&w.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),_(),fe()):me(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:t&&!w.config.allowInput&&(e.preventDefault(),w.clear());break;case 37:case 39:if(r||t)w.hourElement&&w.hourElement.focus();else{e.preventDefault();var l=k();if(void 0!==w.daysContainer&&(!1===a||l&&te(l))){var c=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(c),J(B(1),0)):J(void 0,c)}}break;case 38:case 40:e.preventDefault();var s=40===e.keyCode?1:-1;w.daysContainer&&void 0!==n.$i||n===w.input||n===w.altInput?e.ctrlKey?(e.stopPropagation(),ee(w.currentYear-s),J(B(1),0)):r||J(void 0,7*s):n===w.currentYearElement?ee(w.currentYear-s):w.config.enableTime&&(!r&&w.hourElement&&w.hourElement.focus(),_(e),w._debouncedChange());break;case 9:if(r){var d=[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),u=d.indexOf(n);if(-1!==u){var f=d[u+(e.shiftKey?-1:1)];e.preventDefault(),(f||w._input).focus()}}else!w.config.noCalendar&&w.daysContainer&&w.daysContainer.contains(n)&&e.shiftKey&&(e.preventDefault(),w._input.focus())}}if(void 0!==w.amPM&&n===w.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[0],O(),ye();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[1],O(),ye()}(t||Q(n))&&De("onKeyDown",e)}function oe(e,n){if(void 0===n&&(n="flatpickr-day"),1===w.selectedDates.length&&(!e||e.classList.contains(n)&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),a=w.parseDate(w.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,w.selectedDates[0].getTime()),o=Math.max(t,w.selectedDates[0].getTime()),r=!1,l=0,c=0,s=i;s<o;s+=x)ne(new Date(s),!0)||(r=r||s>i&&s<o,s<a&&(!l||s>l)?l=s:s>a&&(!c||s<c)&&(c=s));Array.from(w.rContainer.querySelectorAll("*:nth-child(-n+"+w.config.showMonths+") > ."+n)).forEach((function(n){var i,o,s,d=n.dateObj.getTime(),u=l>0&&d<l||c>0&&d>c;if(u)return n.classList.add("notAllowed"),void["inRange","startRange","endRange"].forEach((function(e){n.classList.remove(e)}));r&&!u||(["startRange","inRange","endRange","notAllowed"].forEach((function(e){n.classList.remove(e)})),void 0!==e&&(e.classList.add(t<=w.selectedDates[0].getTime()?"startRange":"endRange"),a<t&&d===a?n.classList.add("startRange"):a>t&&d===a&&n.classList.add("endRange"),d>=l&&(0===c||d<=c)&&(o=a,s=t,(i=d)>Math.min(o,s)&&i<Math.max(o,s))&&n.classList.add("inRange")))}))}}function re(){!w.isOpen||w.config.static||w.config.inline||de()}function le(e){return function(n){var t=w.config["_"+e+"Date"]=w.parseDate(n,w.config.dateFormat),a=w.config["_"+("min"===e?"max":"min")+"Date"];void 0!==t&&(w["min"===e?"minDateHasTime":"maxDateHasTime"]=t.getHours()>0||t.getMinutes()>0||t.getSeconds()>0),w.selectedDates&&(w.selectedDates=w.selectedDates.filter((function(e){return ne(e)})),w.selectedDates.length||"min"!==e||F(t),ye()),w.daysContainer&&(ue(),void 0!==t?w.currentYearElement[e]=t.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled=!!a&&void 0!==t&&a.getFullYear()===t.getFullYear())}}function ce(){return w.config.wrap?p.querySelector("[data-input]"):p}function se(){"object"!=typeof w.config.locale&&void 0===I.l10ns[w.config.locale]&&w.config.errorHandler(new Error("flatpickr: invalid locale "+w.config.locale)),w.l10n=e(e({},I.l10ns.default),"object"==typeof w.config.locale?w.config.locale:"default"!==w.config.locale?I.l10ns[w.config.locale]:void 0),D.D="("+w.l10n.weekdays.shorthand.join("|")+")",D.l="("+w.l10n.weekdays.longhand.join("|")+")",D.M="("+w.l10n.months.shorthand.join("|")+")",D.F="("+w.l10n.months.longhand.join("|")+")",D.K="("+w.l10n.amPM[0]+"|"+w.l10n.amPM[1]+"|"+w.l10n.amPM[0].toLowerCase()+"|"+w.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr&&void 0===I.defaultConfig.time_24hr&&(w.config.time_24hr=w.l10n.time_24hr),w.formatDate=b(w),w.parseDate=C({config:w.config,l10n:w.l10n})}function de(e){if("function"!=typeof w.config.position){if(void 0!==w.calendarContainer){De("onPreCalendarPosition");var n=e||w._positionElement,t=Array.prototype.reduce.call(w.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a=w.calendarContainer.offsetWidth,i=w.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=n.getBoundingClientRect(),c=window.innerHeight-l.bottom,d="above"===o||"below"!==o&&c<t&&l.top>t,u=window.pageYOffset+l.top+(d?-t-2:n.offsetHeight+2);if(s(w.calendarContainer,"arrowTop",!d),s(w.calendarContainer,"arrowBottom",d),!w.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),s(w.calendarContainer,"arrowLeft",!m&&!g),s(w.calendarContainer,"arrowCenter",m),s(w.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(s(w.calendarContainer,"rightMost",h),!w.config.static)if(w.calendarContainer.style.top=u+"px",h)if(v){var D=function(){for(var e=null,n=0;n<document.styleSheets.length;n++){var t=document.styleSheets[n];if(t.cssRules){try{t.cssRules}catch(e){continue}e=t;break}}return null!=e?e:(a=document.createElement("style"),document.head.appendChild(a),a.sheet);var a}();if(void 0===D)return;var b=window.document.body.offsetWidth,C=Math.max(0,b/2-a/2),M=D.cssRules.length,y="{left:"+l.left+"px;right:auto;}";s(w.calendarContainer,"rightMost",!1),s(w.calendarContainer,"centerMost",!0),D.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+y,M),w.calendarContainer.style.left=C+"px",w.calendarContainer.style.right="auto"}else w.calendarContainer.style.left="auto",w.calendarContainer.style.right=p+"px";else w.calendarContainer.style.left=f+"px",w.calendarContainer.style.right="auto"}}}else w.config.position(w,e)}function ue(){w.config.noCalendar||w.isMobile||(q(),Ce(),U())}function fe(){w._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(w.close,0):w.close()}function me(e){e.preventDefault(),e.stopPropagation();var n=f(g(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==n){var t=n,a=w.latestSelectedDateObj=new Date(t.dateObj.getTime()),i=(a.getMonth()<w.currentMonth||a.getMonth()>w.currentMonth+w.config.showMonths-1)&&"range"!==w.config.mode;if(w.selectedDateElem=t,"single"===w.config.mode)w.selectedDates=[a];else if("multiple"===w.config.mode){var o=be(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else"range"===w.config.mode&&(2===w.selectedDates.length&&w.clear(!1,!1),w.latestSelectedDateObj=a,w.selectedDates.push(a),0!==M(a,w.selectedDates[0],!0)&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(O(),i){var r=w.currentYear!==a.getFullYear();w.currentYear=a.getFullYear(),w.currentMonth=a.getMonth(),r&&(De("onYearChange"),q()),De("onMonthChange")}if(Ce(),U(),ye(),i||"range"===w.config.mode||1!==w.config.showMonths?void 0!==w.selectedDateElem&&void 0===w.hourElement&&w.selectedDateElem&&w.selectedDateElem.focus():W(t),void 0!==w.hourElement&&void 0!==w.hourElement&&w.hourElement.focus(),w.config.closeOnSelect){var l="single"===w.config.mode&&!w.config.enableTime,c="range"===w.config.mode&&2===w.selectedDates.length&&!w.config.enableTime;(l||c)&&fe()}Y()}}w.parseDate=C({config:w.config,l10n:w.l10n}),w._handlers=[],w.pluginElements=[],w.loadedPlugins=[],w._bind=P,w._setHoursFromDate=F,w._positionCalendar=de,w.changeMonth=Z,w.changeYear=ee,w.clear=function(e,n){void 0===e&&(e=!0);void 0===n&&(n=!0);w.input.value="",void 0!==w.altInput&&(w.altInput.value="");void 0!==w.mobileInput&&(w.mobileInput.value="");w.selectedDates=[],w.latestSelectedDateObj=void 0,!0===n&&(w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth());if(!0===w.config.enableTime){var t=E(w.config),a=t.hours,i=t.minutes,o=t.seconds;A(a,i,o)}w.redraw(),e&&De("onChange")},w.close=function(){w.isOpen=!1,w.isMobile||(void 0!==w.calendarContainer&&w.calendarContainer.classList.remove("open"),void 0!==w._input&&w._input.classList.remove("active"));De("onClose")},w.onMouseOver=oe,w._createElement=d,w.createDay=R,w.destroy=function(){void 0!==w.config&&De("onDestroy");for(var e=w._handlers.length;e--;)w._handlers[e].remove();if(w._handlers=[],w.mobileInput)w.mobileInput.parentNode&&w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput=void 0;else if(w.calendarContainer&&w.calendarContainer.parentNode)if(w.config.static&&w.calendarContainer.parentNode){var n=w.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput&&(w.input.type="text",w.altInput.parentNode&&w.altInput.parentNode.removeChild(w.altInput),delete w.altInput);w.input&&(w.input.type=w.input._type,w.input.classList.remove("flatpickr-input"),w.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled=ne,w.jumpToDate=j,w.updateValue=ye,w.open=function(e,n){void 0===n&&(n=w._positionElement);if(!0===w.isMobile){if(e){e.preventDefault();var t=g(e);t&&t.blur()}return void 0!==w.mobileInput&&(w.mobileInput.focus(),w.mobileInput.click()),void De("onOpen")}if(w._input.disabled||w.config.inline)return;var a=w.isOpen;w.isOpen=!0,a||(w.calendarContainer.classList.add("open"),w._input.classList.add("active"),De("onOpen"),de(n));!0===w.config.enableTime&&!0===w.config.noCalendar&&(!1!==w.config.allowInput||void 0!==e&&w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))},w.redraw=ue,w.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(w.config,e),e)void 0!==ge[a]&&ge[a].forEach((function(e){return e()}));else w.config[e]=n,void 0!==ge[e]?ge[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(w.config[e]=c(n));w.redraw(),ye(!0)},w.setDate=function(e,n,t){void 0===n&&(n=!1);void 0===t&&(t=w.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return w.clear(n);pe(e,t),w.latestSelectedDateObj=w.selectedDates[w.selectedDates.length-1],w.redraw(),j(void 0,n),F(),0===w.selectedDates.length&&w.clear(!1);ye(n),n&&De("onChange")},w.toggle=function(e){if(!0===w.isOpen)return w.close();w.open(e)};var ge={locale:[se,G],showMonths:[V,S,z],minDate:[j],maxDate:[j],positionElement:[ve],clickOpens:[function(){!0===w.config.clickOpens?(P(w._input,"focus",w.open),P(w._input,"click",w.open)):(w._input.removeEventListener("focus",w.open),w._input.removeEventListener("click",w.open))}]};function pe(e,n){var t=[];if(e instanceof Array)t=e.map((function(e){return w.parseDate(e,n)}));else if(e instanceof Date||"number"==typeof e)t=[w.parseDate(e,n)];else if("string"==typeof e)switch(w.config.mode){case"single":case"time":t=[w.parseDate(e,n)];break;case"multiple":t=e.split(w.config.conjunction).map((function(e){return w.parseDate(e,n)}));break;case"range":t=e.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,n)}))}else w.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));w.selectedDates=w.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date&&ne(e,!1)})),"range"===w.config.mode&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function he(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?w.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function ve(){w._positionElement=w.config.positionElement||w._input}function De(e,n){if(void 0!==w.config){var t=w.config[e];if(void 0!==t&&t.length>0)for(var a=0;t[a]&&a<t.length;a++)t[a](w.selectedDates,w.input.value,w,n);"onChange"===e&&(w.input.dispatchEvent(we("change")),w.input.dispatchEvent(we("input")))}}function we(e){var n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}function be(e){for(var n=0;n<w.selectedDates.length;n++){var t=w.selectedDates[n];if(t instanceof Date&&0===M(t,e))return""+n}return!1}function Ce(){w.config.noCalendar||w.isMobile||!w.monthNav||(w.yearElements.forEach((function(e,n){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),w.config.showMonths>1||"static"===w.config.monthSelectorType?w.monthElements[n].textContent=h(t.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+" ":w.monthsDropdownContainer.value=t.getMonth().toString(),e.value=t.getFullYear().toString()})),w._hidePrevMonthArrow=void 0!==w.config.minDate&&(w.currentYear===w.config.minDate.getFullYear()?w.currentMonth<=w.config.minDate.getMonth():w.currentYear<w.config.minDate.getFullYear()),w._hideNextMonthArrow=void 0!==w.config.maxDate&&(w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth+1>w.config.maxDate.getMonth():w.currentYear>w.config.maxDate.getFullYear()))}function Me(e){var n=e||(w.config.altInput?w.config.altFormat:w.config.dateFormat);return w.selectedDates.map((function(e){return w.formatDate(e,n)})).filter((function(e,n,t){return"range"!==w.config.mode||w.config.enableTime||t.indexOf(e)===n})).join("range"!==w.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function ye(e){void 0===e&&(e=!0),void 0!==w.mobileInput&&w.mobileFormatStr&&(w.mobileInput.value=void 0!==w.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):""),w.input.value=Me(w.config.dateFormat),void 0!==w.altInput&&(w.altInput.value=Me(w.config.altFormat)),!1!==e&&De("onValueUpdate")}function xe(e){var n=g(e),t=w.prevMonthNav.contains(n),a=w.nextMonthNav.contains(n);t||a?Z(t?-1:1):w.yearElements.indexOf(n)>=0?n.select():n.classList.contains("arrowUp")?w.changeYear(w.currentYear+1):n.classList.contains("arrowDown")&&w.changeYear(w.currentYear-1)}return function(){w.element=w.input=p,w.isOpen=!1,function(){var n=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o={};w.config.parseDate=i.parseDate,w.config.formatDate=i.formatDate,Object.defineProperty(w.config,"enable",{get:function(){return w.config._enable},set:function(e){w.config._enable=he(e)}}),Object.defineProperty(w.config,"disable",{get:function(){return w.config._disable},set:function(e){w.config._disable=he(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=I.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var s=I.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):s+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(w.config,"minDate",{get:function(){return w.config._minDate},set:le("min")}),Object.defineProperty(w.config,"maxDate",{get:function(){return w.config._maxDate},set:le("max")});var d=function(e){return function(n){w.config["min"===e?"_minTime":"_maxTime"]=w.parseDate(n,"H:i:S")}};Object.defineProperty(w.config,"minTime",{get:function(){return w.config._minTime},set:d("min")}),Object.defineProperty(w.config,"maxTime",{get:function(){return w.config._maxTime},set:d("max")}),"time"===i.mode&&(w.config.noCalendar=!0,w.config.enableTime=!0);Object.assign(w.config,o,i);for(var u=0;u<n.length;u++)w.config[n[u]]=!0===w.config[n[u]]||"true"===w.config[n[u]];t.filter((function(e){return void 0!==w.config[e]})).forEach((function(e){w.config[e]=c(w.config[e]||[]).map(T)})),w.isMobile=!w.config.disableMobile&&!w.config.inline&&"single"===w.config.mode&&!w.config.disable.length&&!w.config.enable&&!w.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(u=0;u<w.config.plugins.length;u++){var f=w.config.plugins[u](w)||{};for(var m in f)t.indexOf(m)>-1?w.config[m]=c(f[m]).map(T).concat(w.config[m]):void 0===i[m]&&(w.config[m]=f[m])}i.altInputClass||(w.config.altInputClass=ce().className+" "+w.config.altInputClass);De("onParseConfig")}(),se(),function(){if(w.input=ce(),!w.input)return void w.config.errorHandler(new Error("Invalid input element specified"));w.input._type=w.input.type,w.input.type="text",w.input.classList.add("flatpickr-input"),w._input=w.input,w.config.altInput&&(w.altInput=d(w.input.nodeName,w.config.altInputClass),w._input=w.altInput,w.altInput.placeholder=w.input.placeholder,w.altInput.disabled=w.input.disabled,w.altInput.required=w.input.required,w.altInput.tabIndex=w.input.tabIndex,w.altInput.type="text",w.input.setAttribute("type","hidden"),!w.config.static&&w.input.parentNode&&w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling));w.config.allowInput||w._input.setAttribute("readonly","readonly");ve()}(),function(){w.selectedDates=[],w.now=w.parseDate(w.config.now)||new Date;var e=w.config.defaultDate||("INPUT"!==w.input.nodeName&&"TEXTAREA"!==w.input.nodeName||!w.input.placeholder||w.input.value!==w.input.placeholder?w.input.value:null);e&&pe(e,w.config.dateFormat);w._initialDate=w.selectedDates.length>0?w.selectedDates[0]:w.config.minDate&&w.config.minDate.getTime()>w.now.getTime()?w.config.minDate:w.config.maxDate&&w.config.maxDate.getTime()<w.now.getTime()?w.config.maxDate:w.now,w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth(),w.selectedDates.length>0&&(w.latestSelectedDateObj=w.selectedDates[0]);void 0!==w.config.minTime&&(w.config.minTime=w.parseDate(w.config.minTime,"H:i"));void 0!==w.config.maxTime&&(w.config.maxTime=w.parseDate(w.config.maxTime,"H:i"));w.minDateHasTime=!!w.config.minDate&&(w.config.minDate.getHours()>0||w.config.minDate.getMinutes()>0||w.config.minDate.getSeconds()>0),w.maxDateHasTime=!!w.config.maxDate&&(w.config.maxDate.getHours()>0||w.config.maxDate.getMinutes()>0||w.config.maxDate.getSeconds()>0)}(),w.utils={getDaysInMonth:function(e,n){return void 0===e&&(e=w.currentMonth),void 0===n&&(n=w.currentYear),1===e&&(n%4==0&&n%100!=0||n%400==0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e=window.document.createDocumentFragment();if(w.calendarContainer=d("div","flatpickr-calendar"),w.calendarContainer.tabIndex=-1,!w.config.noCalendar){if(e.appendChild((w.monthNav=d("div","flatpickr-months"),w.yearElements=[],w.monthElements=[],w.prevMonthNav=d("span","flatpickr-prev-month"),w.prevMonthNav.innerHTML=w.config.prevArrow,w.nextMonthNav=d("span","flatpickr-next-month"),w.nextMonthNav.innerHTML=w.config.nextArrow,V(),Object.defineProperty(w,"_hidePrevMonthArrow",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!==e&&(s(w.prevMonthNav,"flatpickr-disabled",e),w.__hidePrevMonthArrow=e)}}),Object.defineProperty(w,"_hideNextMonthArrow",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!==e&&(s(w.nextMonthNav,"flatpickr-disabled",e),w.__hideNextMonthArrow=e)}}),w.currentYearElement=w.yearElements[0],Ce(),w.monthNav)),w.innerContainer=d("div","flatpickr-innerContainer"),w.config.weekNumbers){var n=function(){w.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",w.l10n.weekAbbreviation));var n=d("div","flatpickr-weeks");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t=n.weekWrapper,a=n.weekNumbers;w.innerContainer.appendChild(t),w.weekNumbers=a,w.weekWrapper=t}w.rContainer=d("div","flatpickr-rContainer"),w.rContainer.appendChild(z()),w.daysContainer||(w.daysContainer=d("div","flatpickr-days"),w.daysContainer.tabIndex=-1),U(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime&&e.appendChild(function(){w.calendarContainer.classList.add("hasTime"),w.config.noCalendar&&w.calendarContainer.classList.add("noCalendar");var e=E(w.config);w.timeContainer=d("div","flatpickr-time"),w.timeContainer.tabIndex=-1;var n=d("span","flatpickr-time-separator",":"),t=m("flatpickr-hour",{"aria-label":w.l10n.hourAriaLabel});w.hourElement=t.getElementsByTagName("input")[0];var a=m("flatpickr-minute",{"aria-label":w.l10n.minuteAriaLabel});w.minuteElement=a.getElementsByTagName("input")[0],w.hourElement.tabIndex=w.minuteElement.tabIndex=-1,w.hourElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),w.minuteElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():e.minutes),w.hourElement.setAttribute("step",w.config.hourIncrement.toString()),w.minuteElement.setAttribute("step",w.config.minuteIncrement.toString()),w.hourElement.setAttribute("min",w.config.time_24hr?"0":"1"),w.hourElement.setAttribute("max",w.config.time_24hr?"23":"12"),w.hourElement.setAttribute("maxlength","2"),w.minuteElement.setAttribute("min","0"),w.minuteElement.setAttribute("max","59"),w.minuteElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(t),w.timeContainer.appendChild(n),w.timeContainer.appendChild(a),w.config.time_24hr&&w.timeContainer.classList.add("time24hr");if(w.config.enableSeconds){w.timeContainer.classList.add("hasSeconds");var i=m("flatpickr-second");w.secondElement=i.getElementsByTagName("input")[0],w.secondElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():e.seconds),w.secondElement.setAttribute("step",w.minuteElement.getAttribute("step")),w.secondElement.setAttribute("min","0"),w.secondElement.setAttribute("max","59"),w.secondElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),w.timeContainer.appendChild(i)}w.config.time_24hr||(w.amPM=d("span","flatpickr-am-pm",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)>11)]),w.amPM.title=w.l10n.toggleTitle,w.amPM.tabIndex=-1,w.timeContainer.appendChild(w.amPM));return w.timeContainer}());s(w.calendarContainer,"rangeMode","range"===w.config.mode),s(w.calendarContainer,"animate",!0===w.config.animate),s(w.calendarContainer,"multiMonth",w.config.showMonths>1),w.calendarContainer.appendChild(e);var i=void 0!==w.config.appendTo&&void 0!==w.config.appendTo.nodeType;if((w.config.inline||w.config.static)&&(w.calendarContainer.classList.add(w.config.inline?"inline":"static"),w.config.inline&&(!i&&w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!==w.config.appendTo&&w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l=d("div","flatpickr-wrapper");w.element.parentNode&&w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput&&l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!==w.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){w.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll("[data-"+e+"]"),(function(n){return P(n,"click",w[e])}))}));if(w.isMobile)return void function(){var e=w.config.enableTime?w.config.noCalendar?"time":"datetime-local":"date";w.mobileInput=d("input",w.input.className+" flatpickr-mobile"),w.mobileInput.tabIndex=1,w.mobileInput.type=e,w.mobileInput.disabled=w.input.disabled,w.mobileInput.required=w.input.required,w.mobileInput.placeholder=w.input.placeholder,w.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",w.selectedDates.length>0&&(w.mobileInput.defaultValue=w.mobileInput.value=w.formatDate(w.selectedDates[0],w.mobileFormatStr));w.config.minDate&&(w.mobileInput.min=w.formatDate(w.config.minDate,"Y-m-d"));w.config.maxDate&&(w.mobileInput.max=w.formatDate(w.config.maxDate,"Y-m-d"));w.input.getAttribute("step")&&(w.mobileInput.step=String(w.input.getAttribute("step")));w.input.type="hidden",void 0!==w.altInput&&(w.altInput.type="hidden");try{w.input.parentNode&&w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}P(w.mobileInput,"change",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),De("onChange"),De("onClose")}))}();var e=l(re,50);w._debouncedChange=l(Y,300),w.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&P(w.daysContainer,"mouseover",(function(e){"range"===w.config.mode&&oe(g(e))}));P(w._input,"keydown",ie),void 0!==w.calendarContainer&&P(w.calendarContainer,"keydown",ie);w.config.inline||w.config.static||P(window,"resize",e);void 0!==window.ontouchstart?P(window.document,"touchstart",X):P(window.document,"mousedown",X);P(window.document,"focus",X,{capture:!0}),!0===w.config.clickOpens&&(P(w._input,"focus",w.open),P(w._input,"click",w.open));void 0!==w.daysContainer&&(P(w.monthNav,"click",xe),P(w.monthNav,["keyup","increment"],N),P(w.daysContainer,"click",me));if(void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement){var n=function(e){return g(e).select()};P(w.timeContainer,["increment"],_),P(w.timeContainer,"blur",_,{capture:!0}),P(w.timeContainer,"click",H),P([w.hourElement,w.minuteElement],["focus","click"],n),void 0!==w.secondElement&&P(w.secondElement,"focus",(function(){return w.secondElement&&w.secondElement.select()})),void 0!==w.amPM&&P(w.amPM,"click",(function(e){_(e)}))}w.config.allowInput&&P(w._input,"blur",ae)}(),(w.selectedDates.length||w.config.noCalendar)&&(w.config.enableTime&&F(w.config.noCalendar?w.latestSelectedDateObj:void 0),ye(!1)),S();var n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile&&n&&de(),De("onReady")}(),w}function T(e,n){for(var t=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i<t.length;i++){var o=t[i];try{if(null!==o.getAttribute("data-fp-omit"))continue;void 0!==o._flatpickr&&(o._flatpickr.destroy(),o._flatpickr=void 0),o._flatpickr=k(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1===a.length?a[0]:a}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return T(this,e)},HTMLElement.prototype.flatpickr=function(e){return T([this],e)});var I=function(e,n){return"string"==typeof e?T(window.document.querySelectorAll(e),n):e instanceof Node?T([e],n):T(e,n)};return I.defaultConfig={},I.l10ns={en:e({},i),default:e({},i)},I.localize=function(n){I.l10ns.default=e(e({},I.l10ns.default),n)},I.setDefaults=function(n){I.defaultConfig=e(e({},I.defaultConfig),n)},I.parseDate=C({}),I.formatDate=b({}),I.compareDates=M,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return T(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=I),I}));
vendor: 3,345 bytes, lines 4573-4574
4573 4574(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.monthSelectPlugin=factory())})(this,function(){"use strict";var __assign=function(){__assign=Object.assign||function __assign(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};var monthToStr=function(monthNumber,shorthand,locale){return locale.months[shorthand?"shorthand":"longhand"][monthNumber]};function clearNode(node){while(node.firstChild)node.removeChild(node.firstChild)}function getEventTarget(event){try{if(typeof event.composedPath==="function"){var path=event.composedPath();return path[0]}return event.target}catch(error){return event.target}}var defaultConfig={shorthand:false,dateFormat:"F Y",altFormat:"F Y",theme:"light"};function monthSelectPlugin(pluginConfig){var config=__assign(__assign({},defaultConfig),pluginConfig);return function(fp){fp.config.dateFormat=config.dateFormat;fp.config.altFormat=config.altFormat;var self={monthsContainer:null};function clearUnnecessaryDOMElements(){if(!fp.rContainer)return;clearNode(fp.rContainer);for(var index=0;index<fp.monthElements.length;index++){var element=fp.monthElements[index];if(!element.parentNode)continue;element.parentNode.removeChild(element)}}function build(){if(!fp.rContainer)return;self.monthsContainer=fp._createElement("div","flatpickr-monthSelect-months");self.monthsContainer.tabIndex=-1;buildMonths();fp.rContainer.appendChild(self.monthsContainer);fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-"+config.theme)}function buildMonths(){if(!self.monthsContainer)return;clearNode(self.monthsContainer);var frag=document.createDocumentFragment();for(var i=0;i<12;i++){var month=fp.createDay("flatpickr-monthSelect-month",new Date(fp.currentYear,i),0,i);if(month.dateObj.getMonth()===(new Date).getMonth()&&month.dateObj.getFullYear()===(new Date).getFullYear())month.classList.add("today");month.textContent=monthToStr(i,config.shorthand,fp.l10n);month.addEventListener("click",selectMonth);frag.appendChild(month)}self.monthsContainer.appendChild(frag);if(fp.config.minDate&&fp.currentYear===fp.config.minDate.getFullYear())fp.prevMonthNav.classList.add("flatpickr-disabled");else fp.prevMonthNav.classList.remove("flatpickr-disabled");if(fp.config.maxDate&&fp.currentYear===fp.config.maxDate.getFullYear())fp.nextMonthNav.classList.add("flatpickr-disabled");else fp.nextMonthNav.classList.remove("flatpickr-disabled")}function bindEvents(){fp._bind(fp.prevMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear-1);selectYear();buildMonths()});fp._bind(fp.nextMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear+1);selectYear();buildMonths()});fp._bind(self.monthsContainer,"mouseover",function(e){if(fp.config.mode==="range")fp.onMouseOver(getEventTarget(e),"flatpickr-monthSelect-month")})}function setCurrentlySelected(){if(!fp.rContainer)return;if(!fp.selectedDates.length)return;var currentlySelected=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");for(var index=0;
4574index<currentlySelected.length;index++){currentlySelected[index].classList.remove("selected")}var targetMonth=fp.selectedDates[0].getMonth();var month=fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child("+(targetMonth+1)+")");if(month){month.classList.add("selected")}}function selectYear(){var selectedDate=fp.selectedDates[0];if(selectedDate){selectedDate=new Date(selectedDate);selectedDate.setFullYear(fp.currentYear);if(fp.config.minDate&&selectedDate<fp.config.minDate){selectedDate=fp.config.minDate}if(fp.config.maxDate&&selectedDate>fp.config.maxDate){selectedDate=fp.config.maxDate}fp.currentYear=selectedDate.getFullYear()}fp.currentYearElement.value=String(fp.currentYear);if(fp.rContainer){var months=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");months.forEach(function(month){month.dateObj.setFullYear(fp.currentYear);if(fp.config.minDate&&month.dateObj<fp.config.minDate||fp.config.maxDate&&month.dateObj>fp.config.maxDate){month.classList.add("flatpickr-disabled")}else{month.classList.remove("flatpickr-disabled")}})}setCurrentlySelected()}function selectMonth(e){e.preventDefault();e.stopPropagation();var eventTarget=getEventTarget(e);if(!(eventTarget instanceof Element))return;if(eventTarget.classList.contains("flatpickr-disabled"))return;if(eventTarget.classList.contains("notAllowed"))return;setMonth(eventTarget.dateObj);if(fp.config.closeOnSelect){var single=fp.config.mode==="single";var range=fp.config.mode==="range"&&fp.selectedDates.length===2;if(single||range)fp.close()}}function setMonth(date){var selectedDate=new Date(fp.currentYear,date.getMonth(),date.getDate());var selectedDates=[];switch(fp.config.mode){case"single":selectedDates=[selectedDate];break;case"multiple":selectedDates.push(selectedDate);break;case"range":if(fp.selectedDates.length===2){selectedDates=[selectedDate]}else{selectedDates=fp.selectedDates.concat([selectedDate]);selectedDates.sort(function(a,b){return a.getTime()-b.getTime()})}break}fp.setDate(selectedDates,true);setCurrentlySelected()}var shifts={37:-1,39:1,40:3,38:-3};function onKeyDown(_,__,___,e){var shouldMove=shifts[e.keyCode]!==undefined;if(!shouldMove&&e.keyCode!==13){return}if(!fp.rContainer||!self.monthsContainer)return;var currentlySelected=fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");var index=Array.prototype.indexOf.call(self.monthsContainer.children,document.activeElement);if(index===-1){var target=currentlySelected||self.monthsContainer.firstElementChild;target.focus();index=target.$i}if(shouldMove){self.monthsContainer.children[(12+index+shifts[e.keyCode])%12].focus()}else if(e.keyCode===13&&self.monthsContainer.contains(document.activeElement)){setMonth(document.activeElement.dateObj)}}function closeHook(){var _a;if(((_a=fp.config)===null||_a===void 0?void 0:_a.mode)==="range"&&fp.selectedDates.length===1)fp.clear(false);if(!fp.selectedDates.length)buildMonths()}function stubCurrentMonth(){config._stubbedCurrentMonth=fp._initialDate.getMonth();fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth}function unstubCurrentMonth(){if(!config._stubbedCurrentMonth)return;fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth;delete config._stubbedCurrentMonth}function destroyPluginInstance(){if(self.monthsContainer!==null){var months=self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");for(var index=0;index<months.length;index++){months[index].removeEventListener("click",selectMonth)}}}return{onParseConfig:function(){fp.config.enableTime=false},onValueUpdate:setCurrentlySelected,onKeyDown:onKeyDown,onReady:[stubCurrentMonth,clearUnnecessaryDOMElements,build,bindEvents,setCurrentlySelected,function(){fp.config.onClose.push(closeHook);fp.loadedPlugins.push("monthSelect")}],onDestroy:[unstubCurrentMonth,destroyPluginInstance,function(){fp.config.onClose=fp.config.onClose.filter(function(hook){return hook!==closeHook})}]}}}return monthSelectPlugin}); 4575 4576/*! 4577 * popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core 4578 */ 4579!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),o=1,i=1;if(r(e)&&t){var a=e.offsetHeight,f=e.offsetWidth;f>0&&(o=s(n.width)/f||1),a>0&&(i=s(n.height)/a||1)}return{width:n.width/o,height:n.height/i,top:n.top/i,right:n.right/o,bottom:n.bottom/i,left:n.left/o,x:n.left/o,y:n.top/i}}function c(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function u(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function l(e){return f(u(e)).left+c(e).scrollLeft}function d(e){return t(e).getComputedStyle(e)}function h(e){var t=d(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function m(e,n,o){void 0===o&&(o=!1);var i,a,d=r(n),m=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),v=u(n),g=f(e,m),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(d||!d&&!o)&&(("body"!==p(n)||h(v))&&(y=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:c(i)),r(n)?((b=f(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=l(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function v(e){var t=f(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function g(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||u(e)}function y(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:r(e)&&h(e)?e:y(g(e))}function b(e,n){var r;void 0===n&&(n=[]);var o=y(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualVie
vendor: 4,539 bytes, line 4579
4579wport||[],h(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(b(g(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function w(e){return r(e)&&"fixed"!==d(e).position?e.offsetParent:null}function O(e){for(var n=t(e),i=w(e);i&&x(i)&&"static"===d(i).position;)i=w(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===d(i).position)?n:i||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&r(e)&&"fixed"===d(e).position)return null;var n=g(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(p(n))<0;){var i=d(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var j="top",E="bottom",D="right",A="left",L="auto",P=[j,E,D,A],M="start",k="end",W="viewport",B="popper",H=P.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+k])}),[]),T=[].concat(P,[L]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+k])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function S(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function q(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function V(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function N(e,r){return r===W?V(function(e){var n=t(e),r=u(e),o=n.visualViewport,i=r.clientWidth,a=r.clientHeight,s=0,f=0;return o&&(i=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=o.offsetLeft,f=o.offsetTop)),{width:i,height:a,x:s+l(e),y:f}}(e)):n(r)?function(e){var t=f(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(r):V(function(e){var t,n=u(e),r=c(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+l(e),p=-r.scrollTop;return"rtl"===d(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:p}}(u(e)))}function I(e,t,o){var s="clippingParents"===t?function(e){var t=b(g(e)),o=["absolute","fixed"].indexOf(d(e).position)>=0&&r(e)?O(e):e;return n(o)?t.filter((function(e){return n(e)&&q(e,o)&&"body"!==p(e)})):[]}(e):[].concat(t),f=[].concat(s,[o]),c=f[0],u=f.reduce((function(t,n){var r=N(e,n);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),N(e,c));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function _(e){return e.split("-")[1]}function F(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function U(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?_(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case j:t={x:s,y:n.y-r.height};break;case E:t={x:s,y:n.y+n.height};break;case D:t={x:n.x+n.width,y:f};break;case A:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?F(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case M:t[c]=t[c]-(n[p]/2-r[p]/2);break;case k:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function z(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function X(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Y(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.boundary,s=void 0===a?"clippingParents":a,c=r.rootBoundary,p=void 0===c?W:c,l=r.elementContext,d=void 0===l?B:l,h=r.altBoundary,m=void 0!==h&&h,v=r.padding,g=void 0===v?0:v,y=z("number"!=typeof g?g:X(g,P)),b=d===B?"reference":B,x=e.rects.popper,w=e.elements[m?b:d],O=I(n(w)?w:w.contextElement||u(e.elements.popper),s,p),A=f(e.elements.reference),L=U({reference:A,element:x,strategy:"absolute",placement:i}),M=V(Object.assign({},x,L)),k=d===B?M:A,H={top:O.top-k.top+y.top,bottom:k.bottom-O.bottom+y.bottom,left:O.left-k.left+y.left,right:k.right-O.right+y.right},T=e.modifiersData.offset;if(d===B&&T){var R=T[i];
vendor: 12,774 bytes, lines 4579-4583
4579Object.keys(H).forEach((function(e){var t=[D,E].indexOf(e)>=0?1:-1,n=[j,E].indexOf(e)>=0?"y":"x";H[e]+=R[n]*t}))}return H}var G={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function K(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?G:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},G,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?b(e):e.contextElement?b(e.contextElement):[],popper:b(t)};var s,p,d=function(e){var t=S(e);return R.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(J(t,n)){f.rects={reference:m(t,O(n),"fixed"===f.options.strategy),popper:v(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!J(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var Q={passive:!0};var Z={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,Q)})),f&&c.addEventListener("resize",r.update,Q),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,Q)})),f&&c.removeEventListener("resize",r.update,Q)}},data:{}};var $={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=U({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ee={top:"auto",right:"auto",bottom:"auto",left:"auto"};function te(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,l=e.adaptive,h=e.roundOffsets,m=e.isFixed,v=f.x,g=void 0===v?0:v,y=f.y,b=void 0===y?0:y,x="function"==typeof h?h({x:g,y:b}):{x:g,y:b};g=x.x,b=x.y;var w=f.hasOwnProperty("x"),L=f.hasOwnProperty("y"),P=A,M=j,W=window;if(l){var B=O(r),H="clientHeight",T="clientWidth";if(B===t(r)&&"static"!==d(B=u(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),B=B,i===j||(i===A||i===D)&&a===k)M=E,b-=(m&&B===W&&W.visualViewport?W.visualViewport.height:B[H])-o.height,b*=p?1:-1;if(i===A||(i===j||i===E)&&a===k)P=D,g-=(m&&B===W&&W.visualViewport?W.visualViewport.width:B[T])-o.width,g*=p?1:-1}var R,S=Object.assign({position:c},l&&ee),C=!0===h?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:s(t*r)/r||0,y:s(n*r)/r||0}}({x:g,y:b}):{x:g,y:b};return g=C.x,b=C.y,p?Object.assign({},S,((R={})[M]=L?"0":"",R[P]=w?"0":"",R.transform=(W.devicePixelRatio||1)<=1?"translate("+g+"px, "+b+"px)":"translate3d("+g+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=L?b+"px":"",n[P]=w?g+"px":"",n.transform="",n))}var ne={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:C(t.placement),variation:_(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,te(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,te(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var re={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&p(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&p(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var oe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=T.reduce((function(e,n){return e[n]=function(e,t,n){var r=C(e),o=[A,j].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[A,D].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function ae(e){return e.replace(/left|right|bottom|top/g,(function(e){return ie[e]}))}var se={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return se[e]}))}function ce(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?T:f,p=_(r),u=p?s?H:H.filter((function(e){return _(e)===p})):P,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=Y(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var pe={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,g=C(v),y=f||(g===v||!h?[ae(v)]:function(e){if(C(e)===L)return[];var t=ae(e);return[fe(e),t,fe(t)]}(v)),b=[v].concat(y).reduce((function(e,n){return e.concat(C(n)===L?ce(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,P=!0,k=b[0],W=0;W<b.length;W++){var B=b[W],H=C(B),T=_(B)===M,R=[j,E].indexOf(H)>=0,S=R?"width":"height",q=Y(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),V=R?T?D:A:T?E:j;x[S]>w[S]&&(V=ae(V));var N=ae(V),I=[];if(i&&I.push(q[H]<=0),s&&I.push(q[V]<=0,q[N]<=0),I.every((function(e){return e}))){k=B,P=!1;break}O.set(B,I)}if(P)for(var F=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return k=t,"break"},U=h?3:1;U>0;U--){if("break"===F(U))break}t.placement!==k&&(t.modifiersData[r]._skip=!0,t.placement=k,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ue(e,t,n){return i(e,a(t,n))}var le={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,g=n.tetherOffset,y=void 0===g?0:g,b=Y(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=_(t.placement),L=!w,P=F(x),k="x"===P?"y":"x",W=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,q={x:0,y:0};if(W){if(s){var V,N="y"===P?j:A,I="y"===P?E:D,U="y"===P?"height":"width",z=W[P],X=z+b[N],G=z-b[I],J=m?-H[U]/2:0,K=w===M?B[U]:H[U],Q=w===M?-H[U]:-B[U],Z=t.elements.arrow,$=m&&Z?v(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=ue(0,B[U],$[U]),oe=L?B[U]/2-J-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=L?-B[U]/2+J+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&O(t.elements.arrow),se=ae?"y"===P?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(V=null==S?void 0:S[P])?V:0,ce=z+ie-fe,pe=ue(m?a(X,z+oe-fe-se):X,z,m?i(G,ce):G);W[P]=pe,q[P]=pe-z}if(c){var le,de="x"===P?j:A,he="x"===P?E:D,me=W[k],ve="y"===k?"height":"width",ge=me+b[de],ye=me-b[he],be=-1!==[j,A].indexOf(x),xe=null!=(le=null==S?void 0:S[k])?le:0,we=be?ge:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ye,je=m&&be?function(e,t,n){var r=ue(e,t,n);return r>n?n:r}(we,me,Oe):ue(m?we:ge,me,m?Oe:ye);W[k]=je,q[k]=je-me}t.modifiersData[r]=q}},requiresIfExists:["offset"]};var de={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=F(s),c=[A,D].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return z("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:X(e,P))}(o.padding,n),u=v(i),l="y"===f?j:A,d="y"===f?E:D,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],g=O(i),y=g?"y"===f?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],L=y/2-u[c]/2+b,M=ue(x,L,w),k=f;n.modifiersData[r]=((t={})[k]=M,t.centerOffset=M-L,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&q(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function he(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function me(e){return[j,D,E,A].some((function(t){return e[t]>=0}))}var ve={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=Y(t,{elementContext:"reference"}),s=Y(t,{altBoundary:!0}),f=he(a,r),c=he(s,o,i),p=me(f),u=me(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},ge=K({defaultModifiers:[Z,$,ne,re]}),ye=[Z,$,ne,re,oe,pe,le,de,ve],be=K({defaultModifiers:ye});e.applyStyles=re,e.arrow=de,e.computeStyles=ne,e.createPopper=be,e.createPopperLite=ge,e.defaultModifiers=ye,e.detectOverflow=Y,e.eventListeners=Z,e.flip=pe,e.hide=ve,e.offset=oe,e.popperGenerator=K,e.popperOffsets=$,e.preventOverflow=le,Object.defineProperty(e,"__esModule",{value:!0})})); 4580 4581/*! 4582 * tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs 4583 */
vendor: 25,668 bytes, line 4584
4584!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=!!e&&!!window.msCrypto,r={passive:!0,capture:!0},o=function(){return document.body};function i(t,e,n){if(Array.isArray(t)){var r=t[e];return null==r?Array.isArray(n)?n[e]:n:r}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function u(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)};var n}function p(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(t){return Object.keys(t).reduce((function(e,n){return void 0!==t[n]&&(e[n]=t[n]),e}),{})}function m(){return document.createElement("div")}function g(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function h(t){return a(t,"MouseEvent")}function b(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function y(t){return g(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function w(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function E(t){var e,n=c(t)[0];return null!=n&&null!=(e=n.ownerDocument)&&e.body?n.ownerDocument:document}function O(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}function C(t,e){for(var n=e;n;){var r;if(t.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var T={isTouch:!1},A=0;function L(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",D))}function D(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",D)),A=t}function k(){var t=document.activeElement;if(b(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var R=Object.assign({appendTo:o,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),P=Object.keys(R);function j(t){var e=(t.plugins||[]).reduce((function(e,n){var r,o=n.name,i=n.defaultValue;o&&(e[o]=void 0!==t[o]?t[o]:null!=(r=R[o])?r:i);return e}),{});return Object.assign({},t,e)}function M(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(j(Object.assign({},R,{plugins:e}))):P).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim();if(!r)return e;if("content"===n)e[n]=r;else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function V(t,e){t.innerHTML=e}function I(t){var e=m();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",g(t)?e.appendChild(t):V(e,t)),e}function S(t,e){g(e.content)?(V(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?V(t,e.content):t.textContent=e.content)}function B(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function N(t){var e=m(),n=m();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=m();function o(n,r){var o=B(e),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||S(a,t.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(I(r.arrow))):i.appendChild(I(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),S(r,t.props),e.appendChild(n),n.appendChild(r),o(t.props,t.props),{popper:e,onUpdate:o}}N.$$tippy=!0;var H=1,U=[],_=[];function z(e,a){var p,g,b,y,A,L,D,k,P=M(e,Object.assign({},R,j(v(a)))),V=!1,I=!1,S=!1,N=!1,z=[],F=u(wt,P.interactiveDebounce),W=H++,X=(k=P.plugins).filter((function(t,e){return k.indexOf(t)===e})),Y={id:W,reference:e,popper:m(),popperInstance:null,props:P,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:X,clearDelayTimeouts:function(){clearTimeout(p),clearTimeout(g),cancelAnimationFrame(b)},setProps:function(t){if(Y.state.isDestroyed)return;at("onBeforeUpdate",[Y,t]),bt();var n=Y.props,r=M(e,Object.assign({},n,v(t),{ignoreAttributes:!0}));Y.props=r,ht(),n.interactiveDebounce!==r.interactiveDebounce&&(pt(),F=u(wt,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");ut(),it(),J&&J(n,r);Y.popperInstance&&(Ct(),At().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));at("onAfterUpdate",[Y,t])},setContent:function(t){Y.setProps({content:t})},show:function(){var t=Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=T.isTouch&&!Y.props.touch,a=i(Y.props.duration,0,R.duration);if(t||e||n||r)return;if(et().hasAttribute("disabled"))return;if(at("onShow",[Y],!1),!1===Y.props.onShow(Y))return;Y.state.isVisible=!0,tt()&&($.style.visibility="visible");it(),dt(),Y.state.isMounted||($.style.transition="none");if(tt()){var u=rt(),p=u.box,c=u.content;w([p,c],0)}L=function(){var t;if(Y.state.isVisible&&!N){if(N=!0,$.offsetHeight,$.style.transition=Y.props.moveTransition,tt()&&Y.props.animation){var e=rt(),n=e.box,r=e.content;w([n,r],a),x([n,r],"visible")}st(),ut(),f(_,Y),null==(t=Y.popperInstance)||t.forceUpdate(),at("onMount",[Y]),Y.props.animation&&tt()&&function(t,e){mt(t,e)}(a,(function(){Y.state.isShown=!0,at("onShown",[Y])}))}},function(){var t,e=Y.props.appendTo,n=et();t=Y.props.interactive&&e===o||"parent"===e?n.parentNode:s(e,[n]);t.contains($)||t.appendChild($);Y.state.isMounted=!0,Ct()}()},hide:function(){var t=!Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=i(Y.props.duration,1,R.duration);if(t||e||n)return;if(at("onHide",[Y],!1),!1===Y.props.onHide(Y))return;Y.state.isVisible=!1,Y.state.isShown=!1,N=!1,V=!1,tt()&&($.style.visibility="hidden");if(pt(),vt(),it(!0),tt()){var o=rt(),a=o.box,s=o.content;Y.props.animation&&(w([a,s],r),x([a,s],"hidden"))}st(),ut(),Y.props.animation?tt()&&function(t,e){mt(t,(function(){!Y.state.isVisible&&$.parentNode&&$.parentNode.contains($)&&e()}))}(r,Y.unmount):Y.unmount()},hideWithInteractivity:function(t){nt().addEventListener("mousemove",F),f(U,F),F(t)},enable:function(){Y.state.isEnabled=!0},disable:function(){Y.hide(),Y.state.isEnabled=!1},unmount:function(){Y.state.isVisible&&Y.hide();if(!Y.state.isMounted)return;Tt(),At().forEach((function(t){t._tippy.unmount()})),$.parentNode&&$.parentNode.removeChild($);_=_.filter((function(t){return t!==Y})),Y.state.isMounted=!1,at("onHidden",[Y])},destroy:function(){if(Y.state.isDestroyed)return;Y.clearDelayTimeouts(),Y.unmount(),bt(),delete e._tippy,Y.state.isDestroyed=!0,at("onDestroy",[Y])}};if(!P.render)return Y;var q=P.render(Y),$=q.popper,J=q.onUpdate;$.setAttribute("data-tippy-root",""),$.id="tippy-"+Y.id,Y.popper=$,e._tippy=Y,$._tippy=Y;var G=X.map((function(t){return t.fn(Y)})),K=e.hasAttribute("aria-expanded");return ht(),ut(),it(),at("onCreate",[Y]),P.showOnCreate&&Lt(),$.addEventListener("mouseenter",(function(){Y.props.interactive&&Y.state.isVisible&&Y.clearDelayTimeouts()})),$.addEventListener("mouseleave",(function(){Y.props.interactive&&Y.props.trigger.indexOf("mouseenter")>=0&&nt().addEventListener("mousemove",F)})),Y;function Q(){var t=Y.props.touch;return Array.isArray(t)?t:[t,0]}function Z(){return"hold"===Q()[0]}function tt(){var t;return!(null==(t=Y.props.render)||!t.$$tippy)}function et(){return D||e}function nt(){var t=et().parentNode;return t?E(t):document}function rt(){return B($)}function ot(t){return Y.state.isMounted&&!Y.state.isVisible||T.isTouch||y&&"focus"===y.type?0:i(Y.props.delay,t?0:1,R.delay)}function it(t){void 0===t&&(t=!1),$.style.pointerEvents=Y.props.interactive&&!t?"":"none",$.style.zIndex=""+Y.props.zIndex}function at(t,e,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[t]&&n[t].apply(n,e)})),n)&&(r=Y.props)[t].apply(r,e)}function st(){var t=Y.props.aria;if(t.content){var n="aria-"+t.content,r=$.id;c(Y.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(Y.state.isVisible)t.setAttribute(n,e?e+" "+r:r);else{var o=e&&e.replace(r,"").trim();o?t.setAttribute(n,o):t.removeAttribute(n)}}))}}function ut(){!K&&Y.props.aria.expanded&&c(Y.props.triggerTarget||e).forEach((function(t){Y.props.interactive?t.setAttribute("aria-expanded",Y.state.isVisible&&t===et()?"true":"false"):t.removeAttribute("aria-expanded")}))}function pt(){nt().removeEventListener("mousemove",F),U=U.filter((function(t){return t!==F}))}function ct(t){if(!T.isTouch||!S&&"mousedown"!==t.type){var n=t.composedPath&&t.composedPath()[0]||t.target;if(!Y.props.interactive||!C($,n)){if(c(Y.props.triggerTarget||e).some((function(t){return C(t,n)}))){if(T.isTouch)return;if(Y.state.isVisible&&Y.props.trigger.indexOf("click")>=0)return}else at("onClickOutside",[Y,t]);!0===Y.props.hideOnClick&&(Y.clearDelayTimeouts(),Y.hide(),I=!0,setTimeout((function(){I=!1})),Y.state.isMounted||vt())}}}function ft(){S=!0}function lt(){S=!1}function dt(){var t=nt();t.addEventListener("mousedown",ct,!0),t.addEventListener("touchend",ct,r),t.addEventListener("touchstart",lt,r),t.addEventListener("touchmove",ft,r)}function vt(){var t=nt();t.removeEventListener("mousedown",ct,!0),t.removeEventListener("touchend",ct,r),t.removeEventListener("touchstart",lt,r),t.removeEventListener("touchmove",ft,r)}function mt(t,e){var n=rt().box;function r(t){t.target===n&&(O(n,"remove",r),e())}if(0===t)return e();O(n,"remove",A),O(n,"add",r),A=r}function gt(t,n,r){void 0===r&&(r=!1),c(Y.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),z.push({node:e,eventType:t,handler:n,options:r})}))}function ht(){var t;Z()&&(gt("touchstart",yt,{passive:!0}),gt("touchend",xt,{passive:!0})),(t=Y.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(gt(t,yt),t){case"mouseenter":gt("mouseleave",xt);break;case"focus":gt(n?"focusout":"blur",Et);break;case"focusin":gt("focusout",Et)}}))}function bt(){z.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),z=[]}function yt(t){var e,n=!1;if(Y.state.isEnabled&&!Ot(t)&&!I){var r="focus"===(null==(e=y)?void 0:e.type);y=t,D=t.currentTarget,ut(),!Y.state.isVisible&&h(t)&&U.forEach((function(e){return e(t)})),"click"===t.type&&(Y.props.trigger.indexOf("mouseenter")<0||V)&&!1!==Y.props.hideOnClick&&Y.state.isVisible?n=!0:Lt(t),"click"===t.type&&(V=!n),n&&!r&&Dt(t)}}function wt(t){var e=t.target,n=et().contains(e)||$.contains(e);"mousemove"===t.type&&n||function(t,e){var n=e.clientX,r=e.clientY;return t.every((function(t){var e=t.popperRect,o=t.popperState,i=t.props.interactiveBorder,a=l(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,p="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-r+u>i,v=r-e.bottom-p>i,m=e.left-n+c>i,g=n-e.right-f>i;return d||v||m||g}))}(At().concat($).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:P}:null})).filter(Boolean),t)&&(pt(),Dt(t))}function xt(t){Ot(t)||Y.props.trigger.indexOf("click")>=0&&V||(Y.props.interactive?Y.hideWithInteractivity(t):Dt(t))}function Et(t){Y.props.trigger.indexOf("focusin")<0&&t.target!==et()||Y.props.interactive&&t.relatedTarget&&$.contains(t.relatedTarget)||Dt(t)}function Ot(t){return!!T.isTouch&&Z()!==t.type.indexOf("touch")>=0}function Ct(){Tt();var n=Y.props,r=n.popperOptions,o=n.placement,i=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,u=tt()?B($).arrow:null,p=a?{getBoundingClientRect:a,contextElement:a.contextElement||et()}:e,c=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(tt()){var n=rt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];tt()&&u&&c.push({name:"arrow",options:{element:u,padding:3}}),c.push.apply(c,(null==r?void 0:r.modifiers)||[]),Y.popperInstance=t.createPopper(p,$,Object.assign({},r,{placement:o,onFirstUpdate:L,modifiers:c}))}function Tt(){Y.popperInstance&&(Y.popperInstance.destroy(),Y.popperInstance=null)}function At(){return d($.querySelectorAll("[data-tippy-root]"))}function Lt(t){Y.clearDelayTimeouts(),t&&at("onTrigger",[Y,t]),dt();var e=ot(!0),n=Q(),r=n[0],o=n[1];T.isTouch&&"hold"===r&&o&&(e=o),e?p=setTimeout((function(){Y.show()}),e):Y.show()}function Dt(t){if(Y.clearDelayTimeouts(),at("onUntrigger",[Y,t]),Y.state.isVisible){if(!(Y.props.trigger.indexOf("mouseenter")>=0&&Y.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&V)){var e=ot(!1);e?g=setTimeout((function(){Y.state.isVisible&&Y.hide()}),e):b=requestAnimationFrame((function(){Y.hide()}))}}else vt()}}function F(t,e){void 0===e&&(e={});var n=R.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",L,r),window.addEventListener("blur",k);var o=Object.assign({},e,{plugins:n}),i=y(t).reduce((function(t,e){var n=e&&z(e,o);return n&&t.push(n),t}),[]);return g(t)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(t){Object.keys(t).forEach((function(e){R[e]=t[e]}))},F.currentInput=T;var W=Object.assign({},t.applyStyles,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(null==(e=t.props.render)||!e.$$tippy)return{};var n=B(t.popper),r=n.box,o=n.content,i=t.props.animateFill?function(){var t=m();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var t=r.style.transitionDuration,e=Number(t.replace("ms",""));o.style.transitionDelay=Math.round(e/10)+"ms",i.style.transitionDuration=t,x([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&x([i],"hidden")}}}};var q={clientX:0,clientY:0},$=[];function J(t){var e=t.clientX,n=t.clientY;q={clientX:e,clientY:n}}var G={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=E(t.props.triggerTarget||e),r=!1,o=!1,i=!0,a=t.props;function s(){return"initial"===t.props.followCursor&&t.state.isVisible}function u(){n.addEventListener("mousemove",f)}function p(){n.removeEventListener("mousemove",f)}function c(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||e.contains(n.target),o=t.props.followCursor,i=n.clientX,a=n.clientY,s=e.getBoundingClientRect(),u=i-s.left,p=a-s.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=t.left+u,r=t.top+p);var s="horizontal"===o?t.top:r,c="vertical"===o?t.right:n,f="horizontal"===o?t.bottom:r,l="vertical"===o?t.left:n;return{width:c-l,height:f-s,top:s,right:c,bottom:f,left:l}}})}function l(){t.props.followCursor&&($.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",J)}(n))}function d(){0===($=$.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",J)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!t.state.isMounted||o||s()||u()):(p(),c()))},onMount:function(){t.props.followCursor&&!o&&(i&&(f(q),i=!1),s()||u())},onTrigger:function(t,e){h(e)&&(q={clientX:e.clientX,clientY:e.clientY}),o="focus"===e.type},onHidden:function(){t.props.followCursor&&(c(),p(),i=!0)}}}};var K={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;t.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),e!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e;switch(t){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===t,s=o.top,u=i.bottom,p=a?o.left:i.left,c=a?o.right:i.right;return{top:s,bottom:u,left:p,right:c,width:c-p,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),r)}(a.placement)}})),e=a.placement)}};function s(){var e;o||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,a),o=!0,t.setProps(e),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(e,n){if(h(n)){var o=d(t.reference.getClientRects()),i=o.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var Q={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function r(e){return!0===t.props.sticky||t.props.sticky===e}var o=null,i=null;function a(){var s=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Z(o,s)||u&&Z(i,u))&&t.popperInstance&&t.popperInstance.update(),o=s,i=u,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function Z(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,r=document.querySelector("head>style,head>link");r?n.insertBefore(e,r):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),F.setDefaultProps({plugins:[Y,G,K,Q],render:N}),F.createSingleton=function(t,e){var n;void 0===e&&(e={});var r,o=t,i=[],a=[],s=e.overrides,u=[],f=!1;function l(){a=o.map((function(t){return c(t.props.triggerTarget||t.reference)})).reduce((function(t,e){return t.concat(e)}),[])}function d(){i=o.map((function(t){return t.reference}))}function v(t){o.forEach((function(e){t?e.enable():e.disable()}))}function g(t){return o.map((function(e){var n=e.setProps;return e.setProps=function(o){n(o),e.reference===r&&t.setProps(o)},function(){e.setProps=n}}))}function h(t,e){var n=a.indexOf(e);if(e!==r){r=e;var u=(s||[]).concat("content").reduce((function(t,e){return t[e]=o[n].props[e],t}),{});t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){var t;return null==(t=i[n])?void 0:t.getBoundingClientRect()}}))}}v(!1),d(),l();var b={fn:function(){return{onDestroy:function(){v(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!f&&(f=!0,h(t,i[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},y=F(m(),Object.assign({},p(e,["overrides"]),{plugins:[b].concat(e.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(t){if(w(),!r&&null==t)return h(y,i[0]);if(!r||null!=t){if("number"==typeof t)return i[t]&&h(y,i[t]);if(o.indexOf(t)>=0){var e=t.reference;return h(y,e)}return i.indexOf(t)>=0?h(y,t):void 0}},y.showNext=function(){var t=i[0];if(!r)return y.show(0);var e=i.indexOf(r);y.show(i[e+1]||t)},y.showPrevious=function(){var t=i[i.length-1];if(!r)return y.show(t);var e=i.indexOf(r),n=i[e-1]||t;y.show(n)};var x=y.setProps;return y.setProps=function(t){s=t.overrides||s,x(t)},y.setInstances=function(t){v(!0),u.forEach((function(t){return t()})),o=t,v(!1),d(),l(),u=g(y),y.setProps({triggerTarget:a})},u=g(y),y},F.delegate=function(t,e){var n=[],o=[],i=!1,a=e.target,s=p(e,["target"]),u=Object.assign({},s,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},s,{showOnCreate:!0}),l=F(t,u);function d(t){if(t.target&&!i){var n=t.target.closest(a);if(n){var r=n.getAttribute("data-tippy-trigger")||e.trigger||R.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof f.touch||"touchstart"!==t.type&&r.indexOf(X[t.type])<0)){var s=F(n,f);s&&(o=o.concat(s))}}}}function v(t,e,r,o){void 0===o&&(o=!1),t.addEventListener(e,r,o),n.push({node:t,eventType:e,handler:r,options:o})}return c(l).forEach((function(t){var e=t.destroy,a=t.enable,s=t.disable;t.destroy=function(t){void 0===t&&(t=!0),t&&o.forEach((function(t){t.destroy()})),o=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),n=[],e()},t.enable=function(){a(),o.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){s(),o.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference;v(e,"touchstart",d,r),v(e,"mouseover",d),v(e,"focusin",d),v(e,"click",d)}(t)})),l},F.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration;_.forEach((function(t){var e=!1;if(n&&(e=b(n)?t.reference===n:t.popper===n.popper),!e){var o=t.props.duration;t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:o})}}))},F.roundArrow='<svg width="16" height="6" xmlns="http://www.w3.org/2000/svg"><path d="M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z"></svg>',F}));
4585 4586/** 4587 * Selectize (v0.15.2) 4588 * https://selectize.dev 4589 */ 4590(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&typeof module.exports==="object"){module.exports=factory(require("jquery"))}else{root.EM_Selectize=factory(root.jQuery)}})(this,function($){"use strict";var highlight=function($element,pattern){if(typeof pattern==="string"&&!pattern.length)return;var regex=typeof pattern==="string"?new RegExp(pattern,"i"):pattern;var highlight=function(node){var skip=0;if(node.nodeType===3){var pos=node.data.search(regex);if(pos>=0&&node.data.length>0){var match=node.data.match(regex);var spannode=document.createElement("span");spannode.className="highlight";var middlebit=node.splitText(pos);var endbit=middlebit.splitText(match[0].length);var middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);skip=1}}else if(node.nodeType===1&&node.childNodes&&!/(script|style)/i.test(node.tagName)&&(node.className!=="highlight"||node.tagName!=="SPAN")){for(var i=0;i<node.childNodes.length;++i){i+=highlight(node.childNodes[i])}}return skip};return $element.each(function(){highlight(this)})};$.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){this.parentNode.firstChild.nodeName;var parent=this.parentNode;parent.replaceChild(this.firstChild,this);parent.normalize()}).end()};var MicroEvent=function(){};MicroEvent.prototype={on:function(event,fct){this._events=this._events||{};this._events[event]=this._events[event]||[];this._events[event].push(fct)},off:function(event,fct){var n=arguments.length;if(n===0)return delete this._events;if(n===1)return delete this._events[event];this._events=this._events||{};if(event in this._events===false)return;this._events[event].splice(this._events[event].indexOf(fct),1)},trigger:function(event){const events=this._events=this._events||{};if(event in events===false)return;for(var i=0;i<events[event].length;i++){events[event][i].apply(this,Array.prototype.slice.call(arguments,1))}}};MicroEvent.mixin=function(destObject){var props=["on","off","trigger"];for(var i=0;i<props.length;i++){destObject.prototype[props[i]]=MicroEvent.prototype[props[i]]}};var MicroPlugin={};MicroPlugin.mixin=function(Interface){Interface.plugins={};Interface.prototype.initializePlugins=function(plugins){var i,n,key;var self=this;var queue=[];self.plugins={names:[],settings:{},requested:{},loaded:{}};if(utils.isArray(plugins)){for(i=0,n=plugins.length;i<n;i++){if(typeof plugins[i]==="string"){queue.push(plugins[i])}else{self.plugins.settings[plugins[i].name]=plugins[i].options;queue.push(plugins[i].name)}}}else if(plugins){for(key in plugins){if(plugins.hasOwnProperty(key)){self.plugins.settings[key]=plugins[key];queue.push(key)}}}while(queue.length){self.require(queue.shift())}};Interface.prototype.loadPlugin=function(name){var self=this;var plugins=self.plugins;var plugin=Interface.plugins[name];if(!Interface.plugins.hasOwnProperty(name)){throw new Error('Unable to find "'+name+'" plugin')}plugins.requested[name]=true;plugins.loaded[name]=plugin.fn.apply(self,[self.plugins.settings[name]||{}]);plugins.names.push(name)};Interface.prototype.require=function(name){var self=this;var plugins=self.plugins;if(!self.plugins.loaded.hasOwnProperty(name)){if(plugins.requested[name]){throw new Error('Plugin has circular dependency ("'+name+'")')}self.loadPlugin(name)}return plugins.loaded[name]};Interface.define=function(name,fn){Interface.plugins[name]={name:name,fn:fn}}};var utils={isArray:Array.isArray||function(vArg){return Object.prototype.toString.call(vArg)==="[object Array]"}};var Sifter=function(items,settings){this.items=items;this.settings=settings||{diacritics:true}};Sifter.prototype.tokenize=function(query,respect_word_boundaries){query=trim(String(query||"").toLowerCase());if(!query||!query.length)return[];var i,n,regex,letter;var tokens=[];var words=query.split(/ +/);for(i=0,n=words.length;i<n;i++){regex=escape_regex(words[i]);if(this.settings.diacritics){for(letter in DIACRITICS){if(DIACRITICS.hasOwnProperty(letter)){regex=regex.replace(new RegExp(letter,"g"),DIACRITICS[letter])}}}if(respect_word_boundaries)regex="\\b"+regex;tokens.push({string:words[i],regex:new RegExp(regex,"i")})}return tokens}
4590;Sifter.prototype.iterator=function(object,callback){var iterator;if(is_array(object)){iterator=Array.prototype.forEach||function(callback){for(var i=0,n=this.length;i<n;i++){callback(this[i],i,this)}}}else{iterator=function(callback){for(var key in this){if(this.hasOwnProperty(key)){callback(this[key],key,this)}}}}iterator.apply(object,[callback])};Sifter.prototype.getScoreFunction=function(search,options){var self,fields,tokens,token_count,nesting;self=this;search=self.prepareSearch(search,options);tokens=search.tokens;fields=search.options.fields;token_count=tokens.length;nesting=search.options.nesting;var scoreValue=function(value,token){var score,pos;if(!value)return 0;value=String(value||"");pos=value.search(token.regex);if(pos===-1)return 0;score=token.string.length/value.length;if(pos===0)score+=.5;return score};var scoreObject=function(){var field_count=fields.length;if(!field_count){return function(){return 0}}if(field_count===1){return function(token,data){return scoreValue(getattr(data,fields[0],nesting),token)}}return function(token,data){for(var i=0,sum=0;i<field_count;i++){sum+=scoreValue(getattr(data,fields[i],nesting),token)}return sum/field_count}}();if(!token_count){return function(){return 0}}if(token_count===1){return function(data){return scoreObject(tokens[0],data)}}if(search.options.conjunction==="and"){return function(data){var score;for(var i=0,sum=0;i<token_count;i++){score=scoreObject(tokens[i],data);if(score<=0)return 0;sum+=score}return sum/token_count}}else{return function(data){for(var i=0,sum=0;i<token_count;i++){sum+=scoreObject(tokens[i],data)}return sum/token_count}}};Sifter.prototype.getSortFunction=function(search,options){var i,n,self,field,fields,fields_count,multiplier,multipliers,get_field,implicit_score,sort;self=this;search=self.prepareSearch(search,options);sort=!search.query&&options.sort_empty||options.sort;get_field=function(name,result){if(name==="$score")return result.score;return getattr(self.items[result.id],name,options.nesting)};fields=[];if(sort){for(i=0,n=sort.length;i<n;i++){if(search.query||sort[i].field!=="$score"){fields.push(sort[i])}}}if(search.query){implicit_score=true;for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){implicit_score=false;break}}if(implicit_score){fields.unshift({field:"$score",direction:"desc"})}}else{for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){fields.splice(i,1);break}}}multipliers=[];for(i=0,n=fields.length;i<n;i++){multipliers.push(fields[i].direction==="desc"?-1:1)}fields_count=fields.length;if(!fields_count){return null}else if(fields_count===1){field=fields[0].field;multiplier=multipliers[0];return function(a,b){return multiplier*cmp(get_field(field,a),get_field(field,b))}}else{return function(a,b){var i,result,a_value,b_value,field;for(i=0;i<fields_count;i++){field=fields[i].field;result=multipliers[i]*cmp(get_field(field,a),get_field(field,b));if(result)return result}return 0}}};Sifter.prototype.prepareSearch=function(query,options){if(typeof query==="object")return query;options=extend({},options);var option_fields=options.fields;var option_sort=options.sort;var option_sort_empty=options.sort_empty;if(option_fields&&!is_array(option_fields))options.fields=[option_fields];if(option_sort&&!is_array(option_sort))options.sort=[option_sort];if(option_sort_empty&&!is_array(option_sort_empty))options.sort_empty=[option_sort_empty];return{options:options,query:String(query||"").toLowerCase(),tokens:this.tokenize(query,options.respect_word_boundaries),total:0,items:[]}};Sifter.prototype.search=function(query,options){var self=this,value,score,search,calculateScore;var fn_sort;var fn_score;search=this.prepareSearch(query,options);options=search.options;query=search.query;fn_score=options.score||self.getScoreFunction(search);if(query.length){self.iterator(self.items,function(item,id){score=fn_score(item);if(options.filter===false||score>0){search.items.push({score:score,id:id})}})}else{self.iterator(self.items,function(item,id){search.items.push({score:1,id:id})})}fn_sort=self.getSortFunction(search,options);if(fn_sort)search.items.sort(fn_sort);search.total=search.items.length;if(typeof options.limit==="number"){search.items=search.items.slice(0,options.limit)}return search};var cmp=function(a,b){if(typeof a==="number"&&typeof b==="number"){return a>b?1:a<b?-1:0}a=asciifold(String(a||""));b=asciifold(String(b||""));if(a>b)return 1;if(b>a)return-1;return 0};var extend=function(a,b){var i,n,k,object;for(i=1,n=arguments.length;i<n;i++){object=arguments[i];if(!object)continue;for(k in object){if(object.hasOwnProperty(k)){a[k]=object[k]}}}return a};var getattr=function(obj,name,nesting){if(!obj||!name)return;if(!nesting)return obj[name];var names=name.split(".");while(names.length&&(obj=obj[names.shift()]));return obj};var trim=function(str){return(str+"").replace(/^\s+|\s+$|/g,"")};var escape_regex=function(str){return(str+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")};var is_array=Array.isArray||typeof $!=="undefined"&&$.isArray||function(object){return Object.prototype.toString.call(object)==="[object Array]"};var DIACRITICS={a:"[aá¸á¸ÄÄÃâÇÇȺⱥȦȧẠạÃäÃà ÃáÄÄÃãÃ
Ã¥Ä
ÄÃÄ
Ä]",b:"[bâ¢Î²ÎB฿ðá]",c:"[cÄÄÄÄÄÄÄÄCÌcÌÃçá¸á¸È»È¼ÆÆÉá´ï¼£ï½]",d:"[dÄÄá¸á¸á¸á¸á¸á¸á¸á¸á¸á¸ÄÄD̦d̦ÆÉÆÉÆÆáµá¶á¶È¡á´
Dï½Ã°]",e:"[eÃéÃèÃêá¸á¸ÄÄÄÄẼẽá¸á¸áººáº»ÄÄÃëÄÄȨȩÄÄá¶ÉÉÈÈ
Ếếá»á»á»á»
á»á»á¸á¸á¸á¸á¸á¸ÈÈẸẹá»á»â±¸á´ï¼¥ï½
ÉÇÆÆÎµ]",f:"[fÆÆá¸á¸]",g:"[gÉ¢â²Ç¤Ç¥ÄÄÄÄĢģÆÉ Ä Ä¡]",h:"[hĤĥĦħḨḩáºáºá¸¤á¸¥á¸¢á¸£É¦Ê°Ç¶Æ]",i:"[iÃÃÃìĬÄÃîÇÇÃïḮḯĨĩĮįĪīá»á»ÈÈÈÈá»á»á¸¬á¸ÆÉ¨É¨Ìáµ»á¶Ä°iIıɪIï½]",j:"[jȷĴĵÉÉÊÉʲ]",k:"[kÆÆêêḰḱǨǩḲḳḴḵκϰâ]",l:"[lÅÅĽľĻļĹĺḶḷḸḹḼḽḺḻĿÅȽÆâ± ⱡⱢɫɬá¶
ÉÈ´ÊLï½]",n:"[nÅÅǸǹÅÅÃñá¹á¹
Å
Åá¹á¹á¹á¹á¹á¹NÌnÌÆÉ²È Æáµ°á¶É³ÈµÉ´ï¼®ï½ÅÅ]",o:"[oÃøÃöÃóÃòÃôÇÇÅÅÅÅȮȯá»á»ÆÉµÆ Æ¡á»á»ÅÅ
4590ÃõǪǫÈÈÕÖ
]",p:"[pá¹á¹á¹á¹â±£áµ½Æ¤Æ¥áµ±]",q:"[qêêÊ ÉÉêêqÌ]",r:"[rÅÅÉÉÅÅÅÅá¹á¹ÈÈÈÈá¹á¹â±¤É½]",s:"[sÅÅṠṡṢṣê¨ê©ÅÅÅ Å¡ÅÅÈÈSÌsÌ]",t:"[tÅ¤Å¥á¹ªá¹«Å¢Å£á¹¬á¹Æ®ÊÈÈṰṱṮṯƬÆ]",u:"[uŬÅÉÊỤụÃüÃúÃùÃûÇÇŰűŬů¯Æ°á»¦á»§ÅªÅ«Å¨Å©Å²Å³ÈÈâª]",v:"[vṼṽṾṿƲÊêêâ±±Ê]",w:"[wáºáºáºáºÅ´Åµáºáº
áºáºáºáº]",x:"[xáºáºáºáºÏ]",y:"[yÃýỲỳŶŷŸÿỸỹáºáºá»´á»µÉÉÆ³Æ´]",z:"[zŹźáºáºÅ½Å¾Å»Å¼áºáºáºáºÆµÆ¶]"};var asciifold=function(){var i,n,k,chunk;var foreignletters="";var lookup={};for(k in DIACRITICS){if(DIACRITICS.hasOwnProperty(k)){chunk=DIACRITICS[k].substring(2,DIACRITICS[k].length-1);foreignletters+=chunk;for(i=0,n=chunk.length;i<n;i++){lookup[chunk.charAt(i)]=k}}}var regexp=new RegExp("["+foreignletters+"]","g");return function(str){return str.replace(regexp,function(foreignletter){return lookup[foreignletter]}).toLowerCase()}}();function uaDetect(platform,re){if(navigator.userAgentData){return platform===navigator.userAgentData.platform}return re.test(navigator.userAgent)}var IS_MAC=uaDetect("macOS",/Mac/);var KEY_A=65;var KEY_COMMA=188;var KEY_RETURN=13;var KEY_ESC=27;var KEY_LEFT=37;var KEY_UP=38;var KEY_P=80;var KEY_RIGHT=39;var KEY_DOWN=40;var KEY_N=78;var KEY_BACKSPACE=8;var KEY_DELETE=46;var KEY_SHIFT=16;var KEY_CMD=IS_MAC?91:17;var KEY_CTRL=IS_MAC?18:17;var KEY_TAB=9;var TAG_SELECT=1;var TAG_INPUT=2;var SUPPORTS_VALIDITY_API=!uaDetect("Android",/android/i)&&!!document.createElement("input").validity;var isset=function(object){return typeof object!=="undefined"};var hash_key=function(value){if(typeof value==="undefined"||value===null)return null;if(typeof value==="boolean")return value?"1":"0";return value+""};var escape_html=function(str){return(str+"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")};var escape_replace=function(str){return(str+"").replace(/\$/g,"$$$$")};var hook={};hook.before=function(self,method,fn){var original=self[method];self[method]=function(){fn.apply(self,arguments);return original.apply(self,arguments)}};hook.after=function(self,method,fn){var original=self[method];self[method]=function(){var result=original.apply(self,arguments);fn.apply(self,arguments);return result}};var once=function(fn){var called=false;return function(){if(called)return;called=true;fn.apply(this,arguments)}};var debounce=function(fn,delay){var timeout;return function(){var self=this;var args=arguments;window.clearTimeout(timeout);timeout=window.setTimeout(function(){fn.apply(self,args)},delay)}};var debounce_events=function(self,types,fn){var type;var trigger=self.trigger;var event_args={};self.trigger=function(){var type=arguments[0];if(types.indexOf(type)!==-1){event_args[type]=arguments}else{return trigger.apply(self,arguments)}};fn.apply(self,[]);self.trigger=trigger;for(type in event_args){if(event_args.hasOwnProperty(type)){trigger.apply(self,event_args[type])}}};var watchChildEvent=function($parent,event,selector,fn){$parent.on(event,selector,function(e){var child=e.target;while(child&&child.parentNode!==$parent[0]){child=child.parentNode}e.currentTarget=child;return fn.apply(this,[e])})};var getInputSelection=function(input){var result={};if(input===undefined){console.warn("WARN getInputSelection cannot locate input control");return result}if("selectionStart"in input){result.start=input.selectionStart;result.length=input.selectionEnd-result.start}else if(document.selection){input.focus();var sel=document.selection.createRange();var selLen=document.selection.createRange().text.length;sel.moveStart("character",-input.value.length);result.start=sel.text.length-selLen;result.length=selLen}return result};var transferStyles=function($from,$to,properties){var i,n,styles={};if(properties){for(i=0,n=properties.length;i<n;i++){styles[properties[i]]=$from.css(properties[i])}}else{styles=$from.css()}$to.css(styles)};var measureString=function(str,$parent){if(!str){return 0}if(!Selectize.$testInput){Selectize.$testInput=$("<span />").css({position:"absolute",width:"auto",padding:0,whiteSpace:"pre"});$("<div />").css({position:"absolute",width:0,height:0,overflow:"hidden"}).append(Selectize.$testInput).appendTo("body")}Selectize.$testInput.text(str);transferStyles($parent,Selectize.$testInput,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);return Selectize.$testInput.width()};var autoGrow=function($input){var currentWidth=null;var update=function(e,options){var value,keyCode,printable,width;var placeholder,placeholderWidth;var shift,character,selection;e=e||window.event||{};options=options||{};if(e.metaKey||e.altKey)return;if(!options.force&&$input.data("grow")===false)return;value=$input.val();if(e.type&&e.type.toLowerCase()==="keydown"){keyCode=e.keyCode;printable=keyCode>=48&&keyCode<=57||keyCode>=65&&keyCode<=90||keyCode>=96&&keyCode<=111||keyCode>=186&&keyCode<=222||keyCode===32;if(keyCode===KEY_DELETE||keyCode===KEY_BACKSPACE){selection=getInputSelection($input[0]);if(selection.length){value=value.substring(0,selection.start)+value.substring(selection.start+selection.length)}else if(keyCode===KEY_BACKSPACE&&selection.start){value=value.substring(0,selection.start-1)+value.substring(selection.start+1)}else if(keyCode===KEY_DELETE&&typeof selection.start!=="undefined"){value=value.substring(0,selection.start)+value.substring(selection.start+1)}}else if(printable){shift=e.shiftKey;character=String.fromCharCode(e.keyCode);if(shift)character=character.toUpperCase();else character=character.toLowerCase();value+=character}}placeholder=$input.attr("placeholder");if(placeholder){placeholderWidth=measureString(placeholder,$input)+4}else{placeholderWidth=0}width=Math.max(measureString(value,$input),placeholderWidth)+4;if(width!==currentWidth){currentWidth=width;$input.width(width);$input.triggerHandler("resize")}};
4590$input.on("keydown keyup update blur",update);update()};var domToString=function(d){var tmp=document.createElement("div");tmp.appendChild(d.cloneNode(true));return tmp.innerHTML};var logError=function(message,options){if(!options)options={};var component="Selectize";console.error(component+": "+message);if(options.explanation){if(console.group)console.group();console.error(options.explanation);if(console.group)console.groupEnd()}};var isJSON=function(data){try{JSON.parse(str)}catch(e){return false}return true};var Selectize=function($input,settings){var key,i,n,dir,input,self=this;input=$input[0];input.selectize=self;var computedStyle=window.getComputedStyle&&window.getComputedStyle(input,null);dir=computedStyle?computedStyle.getPropertyValue("direction"):input.currentStyle&&input.currentStyle.direction;dir=dir||$input.parents("[dir]:first").attr("dir")||"";$.extend(self,{order:0,settings:settings,$input:$input,tabIndex:$input.attr("tabindex")||"",tagType:input.tagName.toLowerCase()==="select"?TAG_SELECT:TAG_INPUT,rtl:/rtl/i.test(dir),eventNS:".selectize"+ ++Selectize.count,highlightedValue:null,isBlurring:false,isOpen:false,isDisabled:false,isRequired:$input.is("[required]"),isInvalid:false,isLocked:false,isFocused:false,isInputHidden:false,isSetup:false,isShiftDown:false,isCmdDown:false,isCtrlDown:false,ignoreFocus:false,ignoreBlur:false,ignoreHover:false,hasOptions:false,currentResults:null,lastValue:"",lastValidValue:"",lastOpenTarget:false,caretPos:0,loading:0,loadedSearches:{},isDropdownClosing:false,$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:settings.loadThrottle===null?self.onSearchChange:debounce(self.onSearchChange,settings.loadThrottle)});self.sifter=new Sifter(this.options,{diacritics:settings.diacritics});if(self.settings.options){for(i=0,n=self.settings.options.length;i<n;i++){self.registerOption(self.settings.options[i])}delete self.settings.options}if(self.settings.optgroups){for(i=0,n=self.settings.optgroups.length;i<n;i++){self.registerOptionGroup(self.settings.optgroups[i])}delete self.settings.optgroups}self.settings.mode=self.settings.mode||(self.settings.maxItems===1?"single":"multi");if(typeof self.settings.hideSelected!=="boolean"){self.settings.hideSelected=self.settings.mode==="multi"}self.initializePlugins(self.settings.plugins);self.setupCallbacks();self.setupTemplates();self.setup()};MicroEvent.mixin(Selectize);MicroPlugin.mixin(Selectize);$.extend(Selectize.prototype,{setup:function(){var self=this;var settings=self.settings;var eventNS=self.eventNS;var $window=$(window);var $document=$(document);var $input=self.$input;var $wrapper;var $control;var $control_input;var $dropdown;var $dropdown_content;var $dropdown_parent;var inputMode;var timeout_blur;var timeout_focus;var classes;var classes_plugins;var inputId;inputMode=self.settings.mode;classes=$input.attr("class")||"";$wrapper=$("<div>
4590").addClass(settings.wrapperClass).addClass(classes+" selectize-control").addClass(inputMode);$control=$("<div>").addClass(settings.inputClass+" selectize-input items").appendTo($wrapper);$control_input=$('<input type="select-one" autocomplete="new-password" autofill="no" />').appendTo($control).attr("tabindex",$input.is(":disabled")?"-1":self.tabIndex);$dropdown_parent=$(settings.dropdownParent||$wrapper);$dropdown=$("<div>").addClass(settings.dropdownClass).addClass(inputMode+" selectize-dropdown").hide().appendTo($dropdown_parent);$dropdown_content=$("<div>").addClass(settings.dropdownContentClass+" selectize-dropdown-content").attr("tabindex","-1").appendTo($dropdown);if(inputId=$input.attr("id")){$control_input.attr("id",inputId+"-selectized");$("label[for='"+inputId+"']").attr("for",inputId+"-selectized")}if(self.settings.copyClassesToDropdown){$dropdown.addClass(classes)}$wrapper.css({width:$input[0].style.width});if(self.plugins.names.length){classes_plugins="plugin-"+self.plugins.names.join(" plugin-");
4590$wrapper.addClass(classes_plugins);$dropdown.addClass(classes_plugins)}if((settings.maxItems===null||settings.maxItems>1)&&self.tagType===TAG_SELECT){$input.attr("multiple","multiple")}if(self.settings.placeholder){$control_input.attr("placeholder",settings.placeholder)}if(!self.settings.search){$control_input.attr("readonly",true);$control_input.attr("inputmode","none");$control.css("cursor","pointer")}if(!self.settings.splitOn&&self.settings.delimiter){var delimiterEscaped=self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");self.settings.splitOn=new RegExp("\\s*"+delimiterEscaped+"+\\s*")}if($input.attr("autocorrect")){$control_input.attr("autocorrect",$input.attr("autocorrect"))}if($input.attr("autocapitalize")){$control_input.attr("autocapitalize",$input.attr("autocapitalize"))}if($input.is("input")){$control_input[0].type=$input[0].type}self.$wrapper=$wrapper;self.$control=$control;self.$control_input=$control_input;self.$dropdown=$dropdown;self.$dropdown_content=$dropdown_content;$dropdown.on("mouseenter mousedown mouseup click","[data-disabled]>[data-selectable]",function(e){e.stopImmediatePropagation()});$dropdown.on("mouseenter","[data-selectable]",function(){return self.onOptionHover.apply(self,arguments)});$dropdown.on("mouseup click","[data-selectable]",function(){return self.onOptionSelect.apply(self,arguments)});watchChildEvent($control,"mouseup","*:not(input)",function(){return self.onItemSelect.apply(self,arguments)});autoGrow($control_input);$control.on({mousedown:function(){return self.onMouseDown.apply(self,arguments)},click:function(){return self.onClick.apply(self,arguments)}});$control_input.on({mousedown:function(e){if(self.$control_input.val()!==""||self.settings.openOnFocus){e.stopPropagation()}},keydown:function(){return self.onKeyDown.apply(self,arguments)},keypress:function(){return self.onKeyPress.apply(self,arguments)},input:function(){return self.onInput.apply(self,arguments)},resize:function(){self.positionDropdown.apply(self,[])},focus:function(){self.ignoreBlur=false;return self.onFocus.apply(self,arguments)},paste:function(){return self.onPaste.apply(self,arguments)}});$document.on("keydown"+eventNS,function(e){self.isCmdDown=e[IS_MAC?"metaKey":"ctrlKey"];self.isCtrlDown=e[IS_MAC?"altKey":"ctrlKey"];self.isShiftDown=e.shiftKey});$document.on("keyup"+eventNS,function(e){if(e.keyCode===KEY_CTRL)self.isCtrlDown=false;if(e.keyCode===KEY_SHIFT)self.isShiftDown=false;if(e.keyCode===KEY_CMD)self.isCmdDown=false});$document.on("mousedown"+eventNS,function(e){if(self.isFocused){if(e.target===self.$dropdown[0]||e.target.parentNode===self.$dropdown[0]){return false}if(!self.$dropdown.has(e.target).length&&e.target!==self.$control[0]){self.blur(e.target)}}});$window.on(["scroll"+eventNS,"resize"+eventNS].join(" "),function(){if(self.isOpen){self.positionDropdown.apply(self,arguments)}});$window.on("mousemove"+eventNS,function(){self.ignoreHover=self.settings.ignoreHover});var inputPlaceholder=$("<div></div>");var inputChildren=$input.children().detach();$input.replaceWith(inputPlaceholder);inputPlaceholder.replaceWith($input);this.revertSettings={$children:inputChildren,tabindex:$input.attr("tabindex")};$input.attr("tabindex",-1).hide().after(self.$wrapper);if(Array.isArray(settings.items)){self.lastValidValue=settings.items;self.setValue(settings.items);delete settings.items}if(SUPPORTS_VALIDITY_API){$input.on("invalid"+eventNS,function(e){e.preventDefault();self.isInvalid=true;self.refreshState()})}self.updateOriginalInput();self.refreshItems();self.refreshState();self.updatePlaceholder();self.isSetup=true;if($input.is(":disabled")){self.disable()}self.on("change",this.onChange);$input.data("selectize",self);$input.addClass("selectized");self.trigger("initialize");if(settings.preload===true){self.onSearchChange("")}},setupTemplates:function(){var self=this;var field_label=self.settings.labelField;var field_value=self.settings.valueField;var field_optgroup=self.settings.optgroupLabelField;var templates={optgroup:function(data){return'<div class="optgroup">'+data.html+"</div>"},optgroup_header:function(data,escape){return'<div class="optgroup-header">'+escape(data[field_optgroup])+"</div>"},option:function(data,escape){var classes=data.classes?" "+data.classes:"";classes+=data[field_value]===""?" selectize-dropdown-emptyoptionlabel":"";var styles=data.styles?' style="'+data.styles+'"':"";return"<div"+styles+' class="option'+classes+'">'+escape(data[field_label])+"</div>"},item:function(data,escape){return'<div class="item">'+escape(data[field_label])+"</div>"},option_create:function(data,escape){return'<div class="create">Add <strong>'+escape(data.input)+"</strong>…</div>"}};self.settings.render=$.extend({},templates,self.settings.render)},setupCallbacks:function(){var key,fn,callbacks={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur",dropdown_item_activate:"onDropdownItemActivate",dropdown_item_deactivate:"onDropdownItemDeactivate"};for(key in callbacks){if(callbacks.hasOwnProperty(key)){fn=this.settings[callbacks[key]];if(fn)this.on(key,fn)}}},onClick:function(e){var self=this;if(self.isDropdownClosing){return}if(!self.isFocused||!self.isOpen){self.focus();e.preventDefault()}},onMouseDown:function(e){var self=this;var defaultPrevented=e.isDefaultPrevented();var $target=$(e.target);if(!self.isFocused){if(!defaultPrevented){window.setTimeout(function(){self.focus()},0)}}if(e.target!==self.$control_input[0]||self.$control_input.val()===""){if(self.settings.mode==="single"){self.isOpen?self.close():self.open()}else{if(!defaultPrevented){self.setActiveItem(null)}if(!self.settings.openOnFocus){if(self.isOpen&&e.target===self.lastOpenTarget){self.close();self.lastOpenTarget=false}else if(!self.isOpen){self.refreshOptions();self.open();self.lastOpenTarget=e.target}else{self.lastOpenTarget=e.target}}}return false}},onChange:function(){var self=this;if(self.getValue()!==""){self.lastValidValue=self.getValue()}this.$input.trigger("input");this.$input.trigger("change")},onPaste:function(e){var self=this;if(self.isFull()||self.isInputHidden||self.isLocked){e.preventDefault();return}if(self.settings.splitOn){setTimeout(function(){var pastedText=self.$control_input.val();if(!pastedText.match(self.settings.splitOn)){return}var splitInput=pastedText.trim().split(self.settings.splitOn);for(var i=0,n=splitInput.length;i<n;i++){self.createItem(splitInput[i])}},0)}},onKeyPress:function(e){if(this.isLocked)return e&&e.preventDefault();var character=String.fromCharCode(e.keyCode||e.which);if(this.settings.create&&this.settings.mode==="multi"&&character===this.settings.delimiter){this.createItem();e.preventDefault();return false}},onKeyDown:function(e){var isInput=e.target===this.$control_input[0];var self=this;if(self.isLocked){if(e.keyCode!==KEY_TAB){e.preventDefault()}return}switch(e.keyCode){case KEY_A:if(self.isCmdDown){self.selectAll();return}break;case KEY_ESC:if(self.isOpen){e.preventDefault();e.stopPropagation();self.close()}return;case KEY_N:if(!e.ctrlKey||e.altKey)break;case KEY_DOWN:if(!self.isOpen&&self.hasOptions){self.open()}else if(self.$activeOption){self.ignoreHover=true;var $next=self.getAdjacentOption(self.$activeOption,1);if($next.length)self.setActiveOption($next,true,true)}e.preventDefault();return;case KEY_P:if(!e.ctrlKey||e.altKey)break;case KEY_UP:if(self.$activeOption){self.ignoreHover=true;var $prev=self.getAdjacentOption(self.$activeOption,-1);if($prev.length)self.setActiveOption($prev,true,true)}e.preventDefault();return;case KEY_RETURN:if(self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});e.preventDefault()}return;case KEY_LEFT:self.advanceSelection(-1,e);return;case KEY_RIGHT:self.advanceSelection(1,e);return;case KEY_TAB:if(self.settings.selectOnTab&&self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});if(!self.isFull()){e.preventDefault()}}if(self.settings.create&&self.createItem()&&self.settings.showAddOptionOnCreate){e.preventDefault()}return;case KEY_BACKSPACE:case KEY_DELETE:self.deleteSelection(e);return}if((self.isFull()||self.isInputHidden)&&!(IS_MAC?e.metaKey:e.ctrlKey)){e.preventDefault();return}},onInput:function(e){var self=this;var value=self.$control_input.val()||"";if(self.lastValue!==value){self.lastValue=value;self.onSearchChange(value);self.refreshOptions();self.trigger("type",value)}},onSearchChange:function(value){var self=this;var fn=self.settings.load;if(!fn)return;if(self.loadedSearches.hasOwnProperty(value))return;self.loadedSearches[value]=true;self.load(function(callback){fn.apply(self,[value,callback])})},onFocus:function(e){var self=this;var wasFocused=self.isFocused;if(self.isDisabled){self.blur();e&&e.preventDefault();return false}if(self.ignoreFocus)return;self.isFocused=true;if(self.settings.preload==="focus")self.onSearchChange("");
4590if(!wasFocused)self.trigger("focus");if(!self.$activeItems.length){self.showInput();self.setActiveItem(null);self.refreshOptions(!!self.settings.openOnFocus)}self.refreshState()},onBlur:function(e,dest){var self=this;if(!self.isFocused)return;self.isFocused=false;if(self.ignoreFocus){return}var deactivate=function(){self.close();self.setTextboxValue("");self.setActiveItem(null);self.setActiveOption(null);self.setCaret(self.items.length);self.refreshState();dest&&dest.focus&&dest.focus();self.isBlurring=false;self.ignoreFocus=false;self.trigger("blur")};self.isBlurring=true;self.ignoreFocus=true;if(self.settings.create&&self.settings.createOnBlur){self.createItem(null,false,deactivate)}else{deactivate()}},onOptionHover:function(e){if(this.ignoreHover)return;this.setActiveOption(e.currentTarget,false)},onOptionSelect:function(e){var value,$target,$option,self=this;if(e.preventDefault){e.preventDefault();e.stopPropagation()}$target=$(e.currentTarget);if($target.hasClass("create")){self.createItem(null,function(){if(self.settings.closeAfterSelect){self.close()}})}else{value=$target.attr("data-value");if(typeof value!=="undefined"){self.lastQuery=null;self.setTextboxValue("");self.addItem(value);if(self.settings.closeAfterSelect){self.close()}else if(!self.settings.hideSelected&&e.type&&/mouse/.test(e.type)){self.setActiveOption(self.getOption(value))}}}},onItemSelect:function(e){var self=this;if(self.isLocked)return;if(self.settings.mode==="multi"){e.preventDefault();self.setActiveItem(e.currentTarget,e)}},load:function(fn){var self=this;var $wrapper=self.$wrapper.addClass(self.settings.loadingClass);self.loading++;fn.apply(self,[function(results){self.loading=Math.max(self.loading-1,0);if(results&&results.length){self.addOption(results);self.refreshOptions(self.isFocused&&!self.isInputHidden)}if(!self.loading){$wrapper.removeClass(self.settings.loadingClass)}self.trigger("load",results)}])},getTextboxValue:function(){var $input=this.$control_input;return $input.val()},setTextboxValue:function(value){var $input=this.$control_input;var changed=$input.val()!==value;if(changed){$input.val(value).triggerHandler("update");this.lastValue=value}},getValue:function(){if(this.tagType===TAG_SELECT&&this.$input.attr("multiple")){return this.items}else{return this.items.join(this.settings.delimiter)}},setValue:function(value,silent){const items=Array.isArray(value)?value:[value];if(items.join("")===this.items.join("")){return}var events=silent?[]:["change"];debounce_events(this,events,function(){this.clear(silent);this.addItems(value,silent)})},setMaxItems:function(value){if(value===0)value=null;this.settings.maxItems=value;this.settings.mode=this.settings.mode||(this.settings.maxItems===1?"single":"multi");this.refreshState()},setActiveItem:function($item,e){var self=this;var eventName;var i,idx,begin,end,item,swap;var $last;if(self.settings.mode==="single")return;$item=$($item);if(!$item.length){$(self.$activeItems).removeClass("active");self.$activeItems=[];if(self.isFocused){self.showInput()}return}eventName=e&&e.type.toLowerCase();if(eventName==="mousedown"&&self.isShiftDown&&self.$activeItems.length){$last=self.$control.children(".active:last");begin=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$last[0]]);end=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$item[0]]);if(begin>end){swap=begin;begin=end;end=swap}for(i=begin;i<=end;i++){item=self.$control[0].childNodes[i];if(self.$activeItems.indexOf(item)===-1){$(item).addClass("active");self.$activeItems.push(item)}}e.preventDefault()}else if(eventName==="mousedown"&&self.isCtrlDown||eventName==="keydown"&&this.isShiftDown){if($item.hasClass("active")){idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}else{self.$activeItems.push($item.addClass("active")[0])}}else{$(self.$activeItems).removeClass("active");self.$activeItems=[$item.addClass("active")[0]]}self.hideInput();if(!this.isFocused){self.focus()}},setActiveOption:function($option,scroll,animate){var height_menu,height_item,y;var scroll_top,scroll_bottom;var self=this;if(self.$activeOption){self.$activeOption.removeClass("active");self.trigger("dropdown_item_deactivate",self.$activeOption.attr("data-value"))}self.$activeOption=null;$option=$($option);if(!$option.length)return;self.$activeOption=$option.addClass("active");if(self.isOpen)self.trigger("dropdown_item_activate",self.$activeOption.attr("data-value"));if(scroll||!isset(scroll)){height_menu=self.$dropdown_content.height();height_item=self.$activeOption.outerHeight(true);scroll=self.$dropdown_content.scrollTop()||0;y=self.$activeOption.offset().top-self.$dropdown_content.offset().top+scroll;scroll_top=y;scroll_bottom=y-height_menu+height_item;if(y+height_item>height_menu+scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_bottom},animate?self.settings.scrollDuration:0)}else if(y<scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_top},animate?self.settings.scrollDuration:0)}}},selectAll:function(){var self=this;if(self.settings.mode==="single")return;self.$activeItems=Array.prototype.slice.apply(self.$control.children(":not(input)").addClass("active"));if(self.$activeItems.length){self.hideInput();self.close()}self.focus()},hideInput:function(){var self=this;self.setTextboxValue("");self.$control_input.css({opacity:0,position:"absolute",left:self.rtl?1e4:0});self.isInputHidden=true},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0});this.isInputHidden=false},focus:function(){var self=this;if(self.isDisabled)return self;self.ignoreFocus=true;self.$control_input[0].focus();window.setTimeout(function(){self.ignoreFocus=false;self.onFocus()},0);return self},blur:function(dest){this.$control_input[0].blur();this.onBlur(null,dest);return this},getScoreFunction:function(query){return this.sifter.getScoreFunction(query,this.get
4590SearchOptions())},getSearchOptions:function(){var settings=this.settings;var sort=settings.sortField;if(typeof sort==="string"){sort=[{field:sort}]}return{fields:settings.searchField,conjunction:settings.searchConjunction,sort:sort,nesting:settings.nesting,filter:settings.filter,respect_word_boundaries:settings.respect_word_boundaries}},search:function(query){var i,value,score,result,calculateScore;var self=this;var settings=self.settings;var options=this.getSearchOptions();if(settings.score){calculateScore=self.settings.score.apply(this,[query]);if(typeof calculateScore!=="function"){throw new Error('Selectize "score" setting must be a function that returns a function')}}if(query!==self.lastQuery){if(settings.normalize)query=query.normalize("NFD").replace(/[\u0300-\u036f]/g,"");self.lastQuery=query;result=self.sifter.search(query,$.extend(options,{score:calculateScore}));self.currentResults=result}else{result=$.extend(true,{},self.currentResults)}if(settings.hideSelected){for(i=result.items.length-1;i>=0;i--){if(self.items.indexOf(hash_key(result.items[i].id))!==-1){result.items.splice(i,1)}}}return result},refreshOptions:function(triggerDropdown){var i,j,k,n,groups,groups_order,option,option_html,optgroup,optgroups,html,html_children,has_create_option;var $active,$active_before,$create;if(typeof triggerDropdown==="undefined"){triggerDropdown=true}var self=this;var query=self.$control_input.val().trim();var results=self.search(query);var $dropdown_content=self.$dropdown_content;var active_before=self.$activeOption&&hash_key(self.$activeOption.attr("data-value"));n=results.items.length;if(typeof self.settings.maxOptions==="number"){n=Math.min(n,self.settings.maxOptions)}groups={};groups_order=[];for(i=0;i<n;i++){option=self.options[results.items[i].id];option_html=self.render("option",option);optgroup=option[self.settings.optgroupField]||"";optgroups=Array.isArray(optgroup)?optgroup:[optgroup];for(j=0,k=optgroups&&optgroups.length;j<k;j++){optgroup=optgroups[j];if(!self.optgroups.hasOwnProperty(optgroup)&&typeof self.settings.optionGroupRegister==="function"){var regGroup;if(regGroup=self.settings.optionGroupRegister.apply(self,[optgroup])){self.registerOptionGroup(regGroup)}}if(!self.optgroups.hasOwnProperty(optgroup)){optgroup=""}if(!groups.hasOwnProperty(optgroup)){groups[optgroup]=document.createDocumentFragment();groups_order.push(optgroup)}groups[optgroup].appendChild(option_html)}}if(this.settings.lockOptgroupOrder){groups_order.sort(function(a,b){var a_order=self.optgroups[a]&&self.optgroups[a].$order||0;var b_order=self.optgroups[b]&&self.optgroups[b].$order||0;return a_order-b_order})}html=document.createDocumentFragment();for(i=0,n=groups_order.length;i<n;i++){optgroup=groups_order[i];if(self.optgroups.hasOwnProperty(optgroup)&&groups[optgroup].childNodes.length){html_children=document.createDocumentFragment();html_children.appendChild(self.render("optgroup_header",self.optgroups[optgroup]));html_children.appendChild(groups[optgroup]);html.appendChild(self.render("optgroup",$.extend({},self.optgroups[optgroup],{html:domToString(html_children),dom:html_children})))}else{html.appendChild(groups[optgroup])}}$dropdown_content.html(html);if(self.settings.highlight){$dropdown_content.removeHighlight();if(results.query.length&&results.tokens.length){for(i=0,n=results.tokens.length;i<n;i++){highlight($dropdown_content,results.tokens[i].regex)}}}if(!self.settings.hideSelected){self.$dropdown.find(".selected").removeClass("selected");for(i=0,n=self.items.length;i<n;i++){self.getOption(self.items[i]).addClass("selected")}}if(self.settings.dropdownSize.sizeType!=="auto"&&self.isOpen){self.setupDropdownHeight()}has_create_option=self.canCreate(query);if(has_create_option){if(self.settings.showAddOptionOnCreate){$dropdown_content.prepend(self.render("option_create",{input:query}));$create=$($dropdown_content[0].childNodes[0])}}self.hasOptions=results.items.length>0||has_create_option&&self.settings.showAddOptionOnCreate||self.settings.setFirstOptionActive;if(self.hasOptions){if(results.items.length>0){$active_before=active_before&&self.getOption(active_before);if(results.query!==""&&self.settings.setFirstOptionActive){$active=$dropdown_content.find("[data-selectable]:first")}else if(results.query!==""&&$active_before&&$active_before.length){$active=$active_before}else if(self.settings.mode==="single"&&self.items.length){$active=self.getOption(self.items[0])}if(!$active||!$active.length){if($create&&!self.settings.addPrecedence){$active=self.getAdjacentOption($create,1)}else{$active=$dropdown_content.find("[data-selectable]:first")}}}else{$active=$create}self.setActiveOption($active);if(triggerDropdown&&!self.isOpen){self.open()}}else{self.setActiveOption(null);if(triggerDropdown&&self.isOpen){self.close()}}},addOption:function(data){var i,n,value,self=this;if(Array.isArray(data)){for(i=0,n=data.length;i<n;i++){self.addOption(data[i])}return}if(value=self.registerOption(data)){self.userOptions[value]=true;self.lastQuery=null;self.trigger("option_add",value,data)}},registerOption:function(data){var key=hash_key(data[this.settings.valueField]);if(typeof key==="undefined"||key===null||this.options.hasOwnProperty(key))return false;data.$order=data.$order||++this.order;this.options[key]=data;return key},registerOptionGroup:function(data){var key=hash_key(data[this.settings.optgroupValueField]);if(!key)return false;data.$order=data.$order||++this.order;this.optgroups[key]=data;return key},addOptionGroup:function(id,data){data[this.settings.optgroupValueField]=id;if(id=this.registerOptionGroup(data)){this.trigger("optgroup_add",id,data)}},removeOptionGroup:function(id){if(this.optgroups.hasOwnProperty(id)){delete this.optgroups[id];this.renderCache={};this.trigger("optgroup_remove",id)}},clearOptionGroups:function(){this.optgroups={};this.renderCache={};this.trigger("optgroup_clear")},updateOption:function(value,data){var self=this;var $item,$item_new;var value_new,index_item,cache_items,cache_options,order_old;value=hash_key(value);value_new=hash_key(data[self.settings.valueField]);if(value===null)return;if(!self.options.hasOwnProperty(value))return;if(typeof value_new!=="string")throw new Error("Value must be set in option data");order_old=self.options[value].$order;if(value_new!==value){delete self.options[value];index_item=self.items.indexOf(value);if(index_item!==-1){self.items.splice(index_item,1,value_new)}}data.$order=data.$order||order_old;self.options[value_new]=data;cache_items=self.renderCache["item"];cache_options=self.renderCache["option"];if(cache_items){delete cache_items[value];delete cache_items[value_new]}if(cache_options){delete cache_options[value];delete cache_options[value_new]}if(self.items.indexOf(value_new)!==-1){$item=self.getItem(value);$item_new=$(self.render("item",data));if($item.hasClass("active"))$item_new.addClass("active");$item.replaceWith($item_new)}self.lastQuery=null;if(self.isOpen){self.refreshOptions(false)}},removeOption:function(value,silent){var self=this;value=hash_key(value);var cache_items=self.renderCache["item"];var cache_options=self.renderCache["option"];if(cache_items)delete cache_items[value];if(cache_options)delete cache_options[value];delete self.userOptions[value];delete self.options[value];self.lastQuery=null;self.trigger("option_remove",value);self.removeItem(value,silent)},clearOptions:function(silent){var self=this;self.loadedSearches={};self.userOptions={};self.renderCache={};var options=self.options;$.each(self.options,function(key,value){if(self.items.indexOf(key)==-1){delete options[key]}});self.options=self.sifter.items=options;self.lastQuery=null;self.trigger("option_clear");self.clear(silent)},getOption:function(value){return this.getElementWithValue(value,this.$dropdown_content.find("[data-selectable]"))},getFirstOption:function(){var $options=this.$dropdown.find("[data-selectable]");return $options.length>0?$options.eq(0):$()},getAdjacentOption:function($option,direction){var $options=this.$dropdown.find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()},getElementWithValue:function(value,$els){value=hash_key(value);if(typeof value!=="undefined"&&value!==null){for(var i=0,n=$els.length;i<n;i++){if($els[i].getAttribute("data-value")===value){return $($els[i])}}}return $()},getElementWithTextContent:function(textContent,ignoreCase,$els){textContent=hash_key(textContent);if(typeof textContent!=="undefined"&&textContent!==null){for(var i=0,n=$els.length;i<n;i++){var eleTextContent=$els[i].textContent;if(ignoreCase==true){eleTextContent=eleTextContent!==null?eleTextContent.toLowerCase():null;textContent=textContent.toLowerCase()}if(eleTextContent===textContent){return $($els[i])}}}return $()},getItem:function(value){return this.getElementWithValue(value,this.$control.children())},getFirstItemMatchedByTextContent:function(textContent,ignoreCase){ignoreCase=ignoreCase!==null&&ignoreCase===true?true:false;return this.getElementWithTextContent(textContent,ignoreCase,this.$dropdown_content.find("[data-selectable]"))},addItems:function(values,silent){this.buffer=document.createDocumentFragment();var childNodes=this.$control[0].childNodes;for(var i=0;i<childNodes.length;i++){this.buffer.appendChild(childNodes[i])}var items=Array.isArray(values)?values:[values];for(var i=0,n=items.length;i<n;i++){this.isPending=i<n-1;this.addItem(items[i],silent)}var control=this.$control[0];control.insertBefore(this.buffer,control.firstChild);this.buffer=null},addItem:function(value,silent){var events=silent?[]:["change"];debounce_events(this,events,function(){var $item,$option,$options;var self=this;var inputMode=self.settings.mode;var i,active,value_next,wasFull;value=hash_key(value);if(self.items.indexOf(value)!==-1){if(inputMode==="single")self.close();return}if(!self.options.hasOwnProperty(value))return;if(inputMode==="single")self.clear(silent);if(inputMode==="multi"&&self.isFull())return;$item=$(self.render("item",self.options[value]));wasFull=self.isFull();self.items.splice(self.caretPos,0,value);self.insertAtCaret($item);if(!self.isPending||!wasFull&&self.isFull()){self.refreshState()}if(self.isSetup){$options=self.$dropdown_content.find("[data-selectable]");if(!self.isPending){$option=self.getOption(value);value_next=self.getAdjacentOption($option,1).attr("data-value");self.refreshOptions(self.isFocused&&inputMode!=="single");if(value_next){self.setActiveOption(self.getOption(value_next))}}if(!$options.length||self.isFull()){self.close()}else if(!self.isPending){self.positionDropdown()}self.updatePlaceholder();self.trigger("item_add",value,$item);if(!self.isPending){self.updateOriginalInput({silent:silent})}}})},removeItem:function(value,silent){var self=this;var $item,i,idx;$item=value instanceof $?value:self.getItem(value);value=hash_key($item.attr("data-value"));i=self.items.indexOf(value);if(i!==-1){self.trigger("item_before_remove",value,$item);
4590$item.remove();if($item.hasClass("active")){$item.removeClass("active");idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}self.items.splice(i,1);self.lastQuery=null;if(!self.settings.persist&&self.userOptions.hasOwnProperty(value)){self.removeOption(value,silent)}if(i<self.caretPos){self.setCaret(self.caretPos-1)}self.refreshState();self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.positionDropdown();self.trigger("item_remove",value,$item)}},createItem:function(input,triggerDropdown){var self=this;var caret=self.caretPos;input=input||(self.$control_input.val()||"").trim();var callback=arguments[arguments.length-1];if(typeof callback!=="function")callback=function(){};if(typeof triggerDropdown!=="boolean"){triggerDropdown=true}if(!self.canCreate(input)){callback();return false}self.lock();var setup=typeof self.settings.create==="function"?this.settings.create:function(input){var data={};data[self.settings.labelField]=input;var key=input;if(self.settings.formatValueToKey&&typeof self.settings.formatValueToKey==="function"){key=self.settings.formatValueToKey.apply(this,[key]);if(key===null||typeof key==="undefined"||typeof key==="object"||typeof key==="function"){throw new Error('Selectize "formatValueToKey" setting must be a function that returns a value other than object or function.')}}data[self.settings.valueField]=key;return data};var create=once(function(data){self.unlock();if(!data||typeof data!=="object")return callback();var value=hash_key(data[self.settings.valueField]);if(typeof value!=="string")return callback();self.setTextboxValue("");self.addOption(data);self.setCaret(caret);self.addItem(value);self.refreshOptions(triggerDropdown&&self.settings.mode!=="single");callback(data)});var output=setup.apply(this,[input,create]);if(typeof output!=="undefined"){create(output)}return true},refreshItems:function(silent){this.lastQuery=null;if(this.isSetup){this.addItem(this.items,silent)}this.refreshState();this.updateOriginalInput({silent:silent})},refreshState:function(){this.refreshValidityState();this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return false;var invalid=!this.items.length;this.isInvalid=invalid;this.$control_input.prop("required",invalid);this.$input.prop("required",!invalid)},refreshClasses:function(){var self=this;var isFull=self.isFull();var isLocked=self.isLocked;self.$wrapper.toggleClass("rtl",self.rtl);self.$control.toggleClass("focus",self.isFocused).toggleClass("disabled",self.isDisabled).toggleClass("required",self.isRequired).toggleClass("invalid",self.isInvalid).toggleClass("locked",isLocked).toggleClass("full",isFull).toggleClass("not-full",!isFull).toggleClass("input-active",self.isFocused&&!self.isInputHidden).toggleClass("dropdown-active",self.isOpen).toggleClass("has-options",!$.isEmptyObject(self.options)).toggleClass("has-items",self.items.length>0);self.$control_input.data("grow",!isFull&&!isLocked)},isFull:function(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(opts){var i,n,existing,fresh,old,$options,label,value,values,self=this;opts=opts||{};if(self.tagType===TAG_SELECT){$options=self.$input.find("option");existing=[];fresh=[];old=[];values=[];$options.get().forEach(function(option){existing.push(option.value)});self.items.forEach(function(item){label=self.options[item][self.settings.labelField]||"";values.push(item);if(existing.indexOf(item)!=-1){return}fresh.push('<option value="'+escape_html(item)+'" selected="selected">'+escape_html(label)+"</option>")});old=existing.filter(function(value){return values.indexOf(value)<0}).map(function(value){return'option[value="'+value+'"]'});if(existing.length-old.length+fresh.length===0&&!self.$input.attr("multiple")){fresh.push('<option value="" selected="selected"></option>')}self.$input.find(old.join(", ")).remove();self.$input.append(fresh.join(""))}else{self.$input.val(self.getValue());self.$input.attr("value",self.$input.val())}if(self.isSetup){if(!opts.silent){self.trigger("change",self.$input.val())}}},updatePlaceholder:function(){if(!this.settings.placeholder)return;var $input=this.$control_input;if(this.items.length){$input.removeAttr("placeholder")}else{$input.attr("placeholder",this.settings.placeholder)}$input.triggerHandler("update",{force:true})},open:function(){var self=this;if(self.isLocked||self.isOpen||self.settings.mode==="multi"&&self.isFull())return;self.focus();self.isOpen=true;self.refreshState();self.$dropdown.css({visibility:"hidden",display:"block"});self.setupDropdownHeight();self.positionDropdown();self.$dropdown.css({visibility:"visible"});self.trigger("dropdown_open",self.$dropdown)},close:function(){var self=this;var trigger=self.isOpen;if(self.settings.mode==="single"&&self.items.length){self.hideInput();if(self.isBlurring){self.$control_input[0].blur()}}self.isOpen=false;self.$dropdown.hide();self.setActiveOption(null);self.refreshState();if(trigger)self.trigger("dropdown_close",self.$dropdown)},positionDropdown:function(){var $control=this.$control;var offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);var w=$control[0].getBoundingClientRect().width;if(this.settings.minWidth&&this.settings.minWidth>w){w=this.settings.minWidth}
4590this.$dropdown.css({width:w,top:offset.top,left:offset.left})},setupDropdownHeight:function(){if(typeof this.settings.dropdownSize==="object"&&this.settings.dropdownSize.sizeType!=="auto"){var height=this.settings.dropdownSize.sizeValue;if(this.settings.dropdownSize.sizeType==="numberItems"){var $items=this.$dropdown_content.find("*").not(".optgroup, .highlight").not(this.settings.ignoreOnDropwdownHeight);var totalHeight=0;var marginTop=0;var marginBottom=0;var separatorHeight=0;for(var i=0;i<height;i++){var $item=$($items[i]);if($item.length===0){break}totalHeight+=$item.outerHeight(true);if(typeof $item.data("selectable")=="undefined"){if($item.hasClass("optgroup-header")){var styles=window.getComputedStyle($item.parent()[0],":before");if(styles){marginTop=styles.marginTop?Number(styles.marginTop.replace(/\W*(\w)\w*/g,"$1")):0;marginBottom=styles.marginBottom?Number(styles.marginBottom.replace(/\W*(\w)\w*/g,"$1")):0;separatorHeight=styles.borderTopWidth?Number(styles.borderTopWidth.replace(/\W*(\w)\w*/g,"$1")):0}}height++}}var paddingTop=this.$dropdown_content.css("padding-top")?Number(this.$dropdown_content.css("padding-top").replace(/\W*(\w)\w*/g,"$1")):0;var paddingBottom=this.$dropdown_content.css("padding-bottom")?Number(this.$dropdown_content.css("padding-bottom").replace(/\W*(\w)\w*/g,"$1")):0;height=totalHeight+paddingTop+paddingBottom+marginTop+marginBottom+separatorHeight+"px"}else if(this.settings.dropdownSize.sizeType!=="fixedHeight"){console.warn('Selectize.js - Value of "sizeType" must be "fixedHeight" or "numberItems');return}this.$dropdown_content.css({height:height,maxHeight:"none"})}},clear:function(silent){var self=this;if(!self.items.length)return;self.$control.children(":not(input)").remove();self.items=[];self.lastQuery=null;self.setCaret(0);self.setActiveItem(null);self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.refreshState();self.showInput();self.trigger("clear")},insertAtCaret:function($el){var caret=Math.min(this.caretPos,this.items.length);var el=$el[0];var target=this.buffer||this.$control[0];if(caret===0){target.insertBefore(el,target.firstChild)}else{target.insertBefore(el,target.childNodes[caret])}this.setCaret(caret+1)},deleteSelection:function(e){var i,n,direction,selection,values,caret,option_select,$option_select,$tail;var self=this;direction=e&&e.keyCode===KEY_BACKSPACE?-1:1;selection=getInputSelection(self.$control_input[0]);if(self.$activeOption&&!self.settings.hideSelected){if(typeof self.settings.deselectBehavior==="string"&&self.settings.deselectBehavior==="top"){option_select=self.getFirstOption().attr("data-value")}else{option_select=self.getAdjacentOption(self.$activeOption,-1).attr("data-value")}}values=[];if(self.$activeItems.length){$tail=self.$control.children(".active:"+(direction>0?"last":"first"));caret=self.$control.children(":not(input)").index($tail);if(direction>0){caret++}for(i=0,n=self.$activeItems.length;i<n;i++){values.push($(self.$activeItems[i]).attr("data-value"))}if(e){e.preventDefault();e.stopPropagation()}}else if((self.isFocused||self.settings.mode==="single")&&self.items.length){if(direction<0&&selection.start===0&&selection.length===0){values.push(self.items[self.caretPos-1])}else if(direction>0&&selection.start===self.$control_input.val().length){values.push(self.items[self.caretPos])}}if(!values.length||typeof self.settings.onDelete==="function"&&self.settings.onDelete.apply(self,[values])===false){return false}if(typeof caret!=="undefined"){self.setCaret(caret)}while(values.length){self.removeItem(values.pop())}self.showInput();self.positionDropdown();self.refreshOptions(true);if(option_select){$option_select=self.getOption(option_select);if($option_select.length){self.setActiveOption($option_select)}}return true},advanceSelection:function(direction,e){var tail,selection,idx,valueLength,cursorAtEdge,$tail;var self=this;if(direction===0)return;if(self.rtl)direction*=-1;tail=direction>0?"last":"first";selection=getInputSelection(self.$control_input[0]);if(self.isFocused&&!self.isInputHidden){valueLength=self.$control_input.val().length;cursorAtEdge=direction<0?selection.start===0&&selection.length===0:selection.start===valueLength;if(cursorAtEdge&&!valueLength){self.advanceCaret(direction,e)}}else{$tail=self.$control.children(".active:"+tail);if($tail.length){idx=self.$control.children(":not(input)").index($tail);self.setActiveItem(null);self.setCaret(direction>0?idx+1:idx)}}},advanceCaret:function(direction,e){var self=this,fn,$adj;if(direction===0)return;fn=direction>0?"next":"prev";if(self.isShiftDown){$adj=self.$control_input[fn]();if($adj.length){self.hideInput();self.setActiveItem($adj);e&&e.preventDefault()}}else{self.setCaret(self.caretPos+direction)}},setCaret:function(i){var self=this;if(self.settings.mode==="single"){i=self.items.length}else{i=Math.max(0,Math.min(self.items.length,i))}if(!self.isPending){var j,n,fn,$children,$child;$children=self.$control.children(":not(input)");for(j=0,n=$children.length;j<n;
4590j++){$child=$($children[j]).detach();if(j<i){self.$control_input.before($child)}else{self.$control.append($child)}}}self.caretPos=i},lock:function(){this.close();this.isLocked=true;this.refreshState()},unlock:function(){this.isLocked=false;this.refreshState()},disable:function(){var self=this;self.$input.prop("disabled",true);self.$control_input.prop("disabled",true).prop("tabindex",-1);self.isDisabled=true;self.lock()},enable:function(){var self=this;self.$input.prop("disabled",false);self.$control_input.prop("disabled",false).prop("tabindex",self.tabIndex);self.isDisabled=false;self.unlock()},destroy:function(){var self=this;var eventNS=self.eventNS;var revertSettings=self.revertSettings;self.trigger("destroy");self.off();self.$wrapper.remove();self.$dropdown.remove();self.$input.html("").append(revertSettings.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:revertSettings.tabindex}).show();self.$control_input.removeData("grow");self.$input.removeData("selectize");if(--Selectize.count==0&&Selectize.$testInput){Selectize.$testInput.remove();Selectize.$testInput=undefined}$(window).off(eventNS);$(document).off(eventNS);$(document.body).off(eventNS);delete self.$input[0].selectize},render:function(templateName,data){var value,id,label;var html="";var cache=false;var self=this;var regex_tag=/^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;if(templateName==="option"||templateName==="item"){value=hash_key(data[self.settings.valueField]);cache=!!value}if(cache){if(!isset(self.renderCache[templateName])){self.renderCache[templateName]={}}if(self.renderCache[templateName].hasOwnProperty(value)){return self.renderCache[templateName][value]}}html=$(self.settings.render[templateName].apply(this,[data,escape_html]));if(templateName==="option"||templateName==="option_create"){if(!data[self.settings.disabledField]){html.attr("data-selectable","")}}else if(templateName==="optgroup"){id=data[self.settings.optgroupValueField]||"";html.attr("data-group",id);if(data[self.settings.disabledField]){html.attr("data-disabled","")}}if(templateName==="option"||templateName==="item"){html.attr("data-value",value||"")}if(cache){self.renderCache[templateName][value]=html[0]}return html[0]},clearCache:function(templateName){var self=this;if(typeof templateName==="undefined"){self.renderCache={}}else{delete self.renderCache[templateName]}},canCreate:function(input){var self=this;if(!self.settings.create)return false;var filter=self.settings.createFilter;return input.length&&(typeof filter!=="function"||filter.apply(self,[input]))&&(typeof filter!=="string"||new RegExp(filter).test(input))&&(!(filter instanceof RegExp)||filter.test(input))}});Selectize.count=0;Selectize.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:true,diacritics:true,create:false,showAddOptionOnCreate:true,createOnBlur:false,createFilter:null,highlight:true,openOnFocus:true,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:false,selectOnTab:true,preload:false,allowEmptyOption:false,showEmptyOptionInDropdown:false,emptyOptionLabel:"--",setFirstOptionActive:false,closeAfterSelect:false,closeDropdownThreshold:250,scrollDuration:60,deselectBehavior:"previous",loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:false,sortField:"$order",searchField:["text"],searchConjunction:"and",respect_word_boundaries:true,mode:null,wrapperClass:"",inputClass:"",dropdownClass:"",dropdownContentClass:"",dropdownParent:null,copyClassesToDropdown:true,dropdownSize:{sizeType:"auto",sizeValue:"auto"},normalize:false,ignoreOnDropwdownHeight:"img, i",search:true,render:{}};$.fn.em_selectize=function(settings_user){var defaults=$.fn.em_selectize.defaults;var settings=$.extend({},defaults,settings_user);var attr_data=settings.dataAttr;var field_label=settings.labelField;var field_value=settings.valueField;var field_disabled=settings.disabledField;var field_optgroup=settings.optgroupField;var field_optgroup_label=settings.optgroupLabelField;var field_optgroup_value=settings.optgroupValueField;var init_textbox=function($input,settings_element){var i,n,values,option;var data_raw=$input.attr(attr_data);if(!data_raw){var value=($input.val()||"").trim();if(!settings.allowEmptyOption&&!value.length)return;values=value.split(settings.delimiter);for(i=0,n=values.length;i<n;i++){option={};option[field_label]=values[i];option[field_value]=values[i];settings_element.options.push(option)}settings_element.items=values}else{settings_element.options=JSON.parse(data_raw);for(i=0,n=settings_element.options.length;i<n;i++){settings_element.items.push(settings_element.options[i][field_value])}}};var init_select=function($input,settings_element){var i,n,tagName,$children,order=0;var options=settings_element.options;var optionsMap={};var readData=function($el){var data=attr_data&&$el.attr(attr_data);var allData=$el.data();var obj={};if(typeof data==="string"&&data.length){if(isJSON(data)){Object.assign(obj,JSON.parse(data))}else{obj[data]=data}
4590}Object.assign(obj,allData);return obj||null};var addOption=function($option,group){$option=$($option);var value=hash_key($option.val());if(!value&&!settings.allowEmptyOption)return;if(optionsMap.hasOwnProperty(value)){if(group){var arr=optionsMap[value][field_optgroup];if(!arr){optionsMap[value][field_optgroup]=group}else if(!Array.isArray(arr)){optionsMap[value][field_optgroup]=[arr,group]}else{arr.push(group)}}return}var option=readData($option)||{};option[field_label]=option[field_label]||$option.text();option[field_value]=option[field_value]||value;option[field_disabled]=option[field_disabled]||$option.prop("disabled");option[field_optgroup]=option[field_optgroup]||group;option.styles=$option.attr("style")||"";option.classes=$option.attr("class")||"";optionsMap[value]=option;options.push(option);if($option.is(":selected")){settings_element.items.push(value)}};var addGroup=function($optgroup){var i,n,id,optgroup,$options;$optgroup=$($optgroup);id=$optgroup.attr("label");if(id){optgroup=readData($optgroup)||{};optgroup[field_optgroup_label]=id;optgroup[field_optgroup_value]=id;optgroup[field_disabled]=$optgroup.prop("disabled");settings_element.optgroups.push(optgroup)}$options=$("option",$optgroup);for(i=0,n=$options.length;i<n;i++){addOption($options[i],id)}};settings_element.maxItems=$input.attr("multiple")?null:1;$children=$input.children();for(i=0,n=$children.length;i<n;i++){tagName=$children[i].tagName.toLowerCase();if(tagName==="optgroup"){addGroup($children[i])}else if(tagName==="option"){addOption($children[i])}}};return this.each(function(){if(this.selectize)return;var instance;var $input=$(this);var tag_name=this.tagName.toLowerCase();var placeholder=$input.attr("placeholder")||$input.attr("data-placeholder");if(!placeholder&&!settings.allowEmptyOption){placeholder=$input.children('option[value=""]').text()}if(settings.allowEmptyOption&&settings.showEmptyOptionInDropdown&&!$input.children('option[value=""]').length){var input_html=$input.html();var label=escape_html(settings.emptyOptionLabel||"--");$input.html('<option value="">'+label+"</option>"+input_html)}var settings_element={placeholder:placeholder,options:[],optgroups:[],items:[]};if(tag_name==="select"){init_select($input,settings_element)}else{init_textbox($input,settings_element)}instance=new Selectize($input,$.extend(true,{},defaults,settings_element,settings_user));instance.settings_user=settings_user})};$.fn.em_selectize.defaults=Selectize.defaults;$.fn.em_selectize.support={validity:SUPPORTS_VALIDITY_API};Selectize.define("auto_position",function(){var self=this;const POSITION={top:"top",bottom:"bottom"};self.positionDropdown=function(){return function(){const $control=this.$control;const offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);const dropdownHeight=this.$dropdown.prop("scrollHeight")+5;const controlPosTop=this.$control.get(0).getBoundingClientRect().top;const wrapperHeight=this.$wrapper.height();const position=controlPosTop+dropdownHeight+wrapperHeight>window.innerHeight?POSITION.top:POSITION.bottom;const styles={width:$control.outerWidth(),left:offset.left};if(position===POSITION.top){const styleToAdd={bottom:offset.top,top:"unset"};if(this.settings.dropdownParent==="body"){styleToAdd.top=offset.top-this.$dropdown.outerHeight(true)-$control.outerHeight(true);styleToAdd.bottom="unset"}Object.assign(styles,styleToAdd);this.$dropdown.addClass("selectize-position-top");this.$control.addClass("selectize-position-top")}else{Object.assign(styles,{top:offset.top,bottom:"unset"});this.$dropdown.removeClass("selectize-position-top");this.$control.removeClass("selectize-position-top")}this.$dropdown.css(styles)}}()});Selectize.define("auto_select_on_type",function(options){var self=this;self.onBlur=function(){var originalBlur=self.onBlur;return function(e){var $matchedItem=self.getFirstItemMatchedByTextContent(self.lastValue,true);if(typeof $matchedItem.attr("data-value")!=="undefined"&&self.getValue()!==$matchedItem.attr("data-value")){self.setValue($matchedItem.attr("data-value"))}return originalBlur.apply(this,arguments)}}()});Selectize.define("autofill_disable",function(options){var self=this;self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$control_input.attr({autocomplete:"new-password",autofill:"no"})}}()});Selectize.define("clear_button",function(options){var self=this;options=$.extend({title:"Clear",className:"clear",label:"Ã",html:function(data){return'<a class="'+data.className+'" title="'+data.title+'"> '+data.label+"</a>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$button_clear=$(options.html(options));if(self.settings.mode==="single")self.$wrapper.addClass("single");self.$wrapper.append(self.$button_clear);if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}self.on("change",function(){if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}else{self.$wrapper.find("."+options.className).css("display","")}});self.$wrapper.on("click","."+options.className,function(e){e.preventDefault();e.stopImmediatePropagation();e.stopPropagation();if(self.isLocked)return;self.clear();self.$wrapper.find("."+options.className).css("display","none")})}}()});Selectize.define("drag_drop",function(options){if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');if(this.settings.mode!=="multi")return;var self=this;self.lock=function(){var original=self.lock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.disable();return original.apply(self,arguments)}}();self.unlock=function(){var original=self.unlock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.enable();return original.apply(self,arguments)}}();self.setup=function(){var original=self.setup;return function(){original.apply(this,arguments);
4590var $control=self.$control.sortable({items:"[data-value]",forcePlaceholderSize:true,disabled:self.isLocked,start:function(e,ui){ui.placeholder.css("width",ui.helper.css("width"));$control.addClass("dragging")},stop:function(){$control.removeClass("dragging");var active=self.$activeItems?self.$activeItems.slice():null;var values=[];$control.children("[data-value]").each(function(){values.push($(this).attr("data-value"))});self.isFocused=false;self.setValue(values);self.isFocused=true;self.setActiveItem(active);self.positionDropdown()}})}}()});Selectize.define("dropdown_header",function(options){var self=this;options=$.extend({title:"Untitled",headerClass:"selectize-dropdown-header",titleRowClass:"selectize-dropdown-header-title",labelClass:"selectize-dropdown-header-label",closeClass:"selectize-dropdown-header-close",html:function(data){return'<div class="'+data.headerClass+'">'+'<div class="'+data.titleRowClass+'">'+'<span class="'+data.labelClass+'">'+data.title+"</span>"+'<a href="javascript:void(0)" class="'+data.closeClass+'">×</a>'+"</div>"+"</div>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$dropdown_header=$(options.html(options));self.$dropdown.prepend(self.$dropdown_header);self.$dropdown_header.find("."+options.closeClass).on("click",function(){self.close()})}}()});Selectize.define("optgroup_columns",function(options){var self=this;options=$.extend({equalizeWidth:true,equalizeHeight:true},options);this.getAdjacentOption=function($option,direction){var $options=$option.closest("[data-group]").find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,$option,$options,$optgroup;if(this.isOpen&&(e.keyCode===KEY_LEFT||e.keyCode===KEY_RIGHT)){self.ignoreHover=true;$optgroup=this.$activeOption.closest("[data-group]");index=$optgroup.find("[data-selectable]").index(this.$activeOption);if(e.keyCode===KEY_LEFT){$optgroup=$optgroup.prev("[data-group]")}else{$optgroup=$optgroup.next("[data-group]")}$options=$optgroup.find("[data-selectable]");$option=$options.eq(Math.min($options.length-1,index));if($option.length){this.setActiveOption($option)}return}return original.apply(this,arguments)}}();var getScrollbarWidth=function(){var div;var width=getScrollbarWidth.width;var doc=document;if(typeof width==="undefined"){div=doc.createElement("div");div.innerHTML='<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>';div=div.firstChild;doc.body.appendChild(div);width=getScrollbarWidth.width=div.offsetWidth-div.clientWidth;doc.body.removeChild(div)}return width};var equalizeSizes=function(){var i,n,height_max,width,width_last,width_parent,$optgroups;$optgroups=$("[data-group]",self.$dropdown_content);n=$optgroups.length;if(!n||!self.$dropdown_content.width())return;if(options.equalizeHeight){height_max=0;for(i=0;i<n;i++){height_max=Math.max(height_max,$optgroups.eq(i).height())}$optgroups.css({height:height_max})}if(options.equalizeWidth){width_parent=self.$dropdown_content.innerWidth()-getScrollbarWidth();width=Math.round(width_parent/n);$optgroups.css({width:width});if(n>1){width_last=width_parent-width*(n-1);$optgroups.eq(n-1).css({width:width_last})}}};if(options.equalizeHeight||options.equalizeWidth){hook.after(this,"positionDropdown",equalizeSizes);hook.after(this,"refreshOptions",equalizeSizes)}});Selectize.define("remove_button",function(options){if(this.settings.mode==="single")return;options=$.extend({label:"×",title:"Remove",className:"remove",append:true},options);var multiClose=function(thisRef,options){var self=thisRef;var html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";var append=function(html_container,html_element){var pos=html_container.search(/(<\/[^>]+>\s*)$/);return html_container.substring(0,pos)+html_element+html_container.substring(pos)};thisRef.setup=function(){var original=self.setup;return function(){if(options.append){var render_item=self.settings.render.item;self.settings.render.item=function(data){return append(render_item.apply(thisRef,arguments),html)}}original.apply(thisRef,arguments);thisRef.$control.on("click","."+options.className,function(e){e.preventDefault();if(self.isLocked)return;var $item=$(e.currentTarget).parent();self.setActiveItem($item);if(self.deleteSelection()){self.setCaret(self.items.length)}return false})}}()};multiClose(this,options)});Selectize.define("restore_on_backspace",function(options){var self=this;options.text=options.text||function(option){return option[this.settings.labelField]};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,option;if(e.keyCode===KEY_BACKSPACE&&this.$control_input.val()===""&&!this.$activeItems.length){index=this.caretPos-1;if(index>=0&&index<this.items.length){option=this.options[this.items[index]];if(this.deleteSelection(e)){this.setTextboxValue(options.text.apply(this,[option]));this.refreshOptions(true)}e.preventDefault();return}}return original.apply(this,arguments)}}()});Selectize.define("select_on_focus",function(options){var self=this;self.on("focus",function(){var originalFocus=self.onFocus;return function(e){var value=self.getItem(self.getValue()).text();self.clear();self.setTextboxValue(value);self.$control_input.select();setTimeout(function(){if(self.settings.selectOnTab){self.setActiveOption(self.getFirstItemMatchedByTextContent(value))}self.settings.score=null},0);return originalFocus.apply(this,arguments)}}());self.onBlur=function(){var originalBlur=self.onBlur;return function(e){if(self.getValue()===""&&self.lastValidValue!==self.getValue()){self.setValue(self.lastValidValue)}setTimeout(function(){self.settings.score=function(){return function(){return 1}}},0);return originalBlur.apply(this,arguments)}}();self.settings.score=function(){return function(){return 1}}});Selectize.define("tag_limit",function(options){const self=this;options.tagLimit=options.tagLimit;this.onBlur=function(e){const original=self.onBlur;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;
4590const $items=$control.find(".item");const limit=options.tagLimit;if(limit===undefined||$items.length<=limit)return;$items.toArray().forEach(function(item,index){if(index<limit)return;$(item).hide()});$control.append("<span><b>"+($items.length-limit)+"</b></span>")}}();this.onFocus=function(e){const original=self.onFocus;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;const $items=$control.find(".item");$items.show();$control.find("span").remove()}}()});return Selectize}); 4591/*! 4592 * selectize click2deselect (custom) 4593 */ 4594/* Selectize deselect function */ 4595EM_Selectize.define("click2deselect",function(options){var self=this;var setup=self.setup;this.setup=function(){setup.apply(self,arguments);let just_added;self.$dropdown.each(function(){this.addEventListener("click",function(e){let target=e.target.matches(".selected[data-selectable]")?e.target:e.target.closest(".selected[data-selectable]");if(target!==null){let value=target.getAttribute("data-value");if(value!==just_added){self.removeItem(value);self.refreshItems();self.refreshOptions()}}just_added=false;return false})});self.on("item_remove",function(value){self.getOption(value).removeClass("selected")});self.on("item_add",function(value){just_added=value})}}); 4596 4597/*! 4598 * jQuery UI Touch Punch 0.2.3 4599 * 4600 * Copyright 2011â2014, Dave Furfero 4601 * Dual licensed under the MIT or GPL Version 2 licenses. 4602 * 4603 * Depends: 4604 * jquery.ui.widget.js 4605 * jquery.ui.mouse.js 4606 */ 4607!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); 4608 4609/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */ 4610!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?e(Object(i),!0).forEach(function(t){var e,n;e=o,t=i[n=t],n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)):e(Object(i)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(i,t))})}return o}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,o=arguments[e];for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}function i(t,e){if(null==t)return{};var n,o=function(t,e){if(null==t)return{};for(var n,o={},i=Object.keys(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols)for(var i=Object.getOwnPropertySymbols(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n]);return o}function r(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(n="Object"===n&&t.constructor?t.constructor.name:n)||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function t(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var y=t(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),w=t(/Edge/i),s=t(/firefox/i),u=t(
vendor: 4,328 bytes, line 4610
4610/safari/i)&&!t(/chrome/i)&&!t(/android/i),n=t(/iP(ad|od|hone)/i),c=t(/chrome/i)&&t(/android/i),d={capture:!1,passive:!1};function h(t,e,n){t.addEventListener(e,n,!y&&d)}function f(t,e,n){t.removeEventListener(e,n,!y&&d)}function p(t,e){if(e&&(">"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function O(){var t=document.scrollingElement;return t||document.documentElement}function X(t,e,n,o,i){if(t.getBoundingClientRect||t===window){var r,a,l,s,c,u,d=t!==window&&t.parentNode&&t!==O()?(a=(r=t.getBoundingClientRect()).top,l=r.left,s=r.bottom,c=r.right,u=r.height,r.width):(l=a=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,window.innerWidth);if((e||n)&&t!==window&&(i=i||t.parentNode,!y))do{if(i&&i.getBoundingClientRect&&("none"!==R(i,"transform")||n&&"static"!==R(i,"position"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(R(i,"border-top-width")),l-=h.left+parseInt(R(i,"border-left-width")),s=a+r.height,c=l+r.width;break}}while(i=i.parentNode);return o&&t!==window&&(o=(e=v(i||t))&&e.a,t=e&&e.d,e&&(s=(a/=t)+(u/=t),c=(l/=o)+(d/=o))),{top:a,left:l,bottom:s,right:c,width:d,height:u}}}function Y(t,e,n){for(var o=M(t,!0),i=X(t)[e];o;){var r=X(o)[n];if(!("top"===n||"left"===n?r<=i:i<=r))return o;if(o===O())break;o=M(o,!1)}return!1}function B(t,e,n,o){for(var i=0,r=0,a=t.children;r<a.length;){if("none"!==a[r].style.display&&a[r]!==Ft.ghost&&(o||a[r]!==Ft.dragged)&&P(a[r],n.draggable,t,!1)){if(i===e)return a[r];i++}r++}return null}function F(t,e){for(var n=t.lastElementChild;n&&(n===Ft.ghost||"none"===R(n,"display")||e&&!p(n,e));)n=n.previousElementSibling;return n||null}function j(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t=t.previousElementSibling;)"TEMPLATE"===t.nodeName.toUpperCase()||t===Ft.clone||e&&!p(t,e)||n++;return n}function E(t){var e=0,n=0,o=O();if(t)do{var i=v(t),r=i.a,i=i.d}while(e+=t.scrollLeft*r,n+=t.scrollTop*i,t!==o&&(t=t.parentNode));return[e,n]}function M(t,e){if(!t||!t.getBoundingClientRect)return O();var n=t,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=R(n);if(n.clientWidth<n.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!n.getBoundingClientRect||n===document.body)return O();if(o||e)return n;o=!0}}}while(n=n.parentNode);return O()}function D(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round(t.left)===Math.round(e.left)&&Math.round(t.height)===Math.round(e.height)&&Math.round(t.width)===Math.round(e.width)}function S(e,n){return function(){var t;g||(1===(t=arguments).length?e.call(this,t[0]):e.apply(this,t),g=setTimeout(function(){g=void 0},n))}}function H(t,e,n){t.scrollLeft+=e,t.scrollTop+=n}function _(t){var e=window.Polymer,n=window.jQuery||window.Zepto;return e&&e.dom?e.dom(t).cloneNode(!0):n?n(t).clone(!0)[0]:t.cloneNode(!0)}function C(t,e){R(t,"position","absolute"),R(t,"top",e.top),R(t,"left",e.left),R(t,"width",e.width),R(t,"height",e.height)}function T(t){R(t,"position",""),R(t,"top",""),R(t,"left",""),R(t,"width",""),R(t,"height","")}function L(n,o,i){var r={};
vendor: 5,625 bytes, line 4610
4610return Array.from(n.children).forEach(function(t){var e;P(t,o.draggable,n,!1)&&!t.animated&&t!==i&&(e=X(t),r.left=Math.min(null!==(t=r.left)&&void 0!==t?t:1/0,e.left),r.top=Math.min(null!==(t=r.top)&&void 0!==t?t:1/0,e.top),r.right=Math.max(null!==(t=r.right)&&void 0!==t?t:-1/0,e.right),r.bottom=Math.max(null!==(t=r.bottom)&&void 0!==t?t:-1/0,e.bottom))}),r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}var K="Sortable"+(new Date).getTime();function x(){var e,o=[];return{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(t){var e,n;"none"!==R(t,"display")&&t!==Ft.ghost&&(o.push({target:t,rect:X(t)}),e=I({},o[o.length-1].rect),!t.thisAnimationDuration||(n=v(t,!0))&&(e.top-=n.f,e.left-=n.e),t.fromRect=e)})},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var c=this;if(!this.options.animation)return clearTimeout(e),void("function"==typeof t&&t());var u=!1,d=0;o.forEach(function(t){var e=0,n=t.target,o=n.fromRect,i=X(n),r=n.prevFromRect,a=n.prevToRect,l=t.rect,s=v(n,!0);s&&(i.top-=s.f,i.left-=s.e),n.toRect=i,n.thisAnimationDuration&&D(r,i)&&!D(o,i)&&(l.top-i.top)/(l.left-i.left)==(o.top-i.top)/(o.left-i.left)&&(t=l,s=r,r=a,a=c.options,e=Math.sqrt(Math.pow(s.top-t.top,2)+Math.pow(s.left-t.left,2))/Math.sqrt(Math.pow(s.top-r.top,2)+Math.pow(s.left-r.left,2))*a.animation),D(i,o)||(n.prevFromRect=o,n.prevToRect=i,e=e||c.options.animation,c.animate(n,l,i,e)),e&&(u=!0,d=Math.max(d,e),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},e),n.thisAnimationDuration=e)}),clearTimeout(e),u?e=setTimeout(function(){"function"==typeof t&&t()},d):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){var i,r;o&&(R(t,"transition",""),R(t,"transform",""),i=(r=v(this.el))&&r.a,r=r&&r.d,i=(e.left-n.left)/(i||1),r=(e.top-n.top)/(r||1),t.animatingX=!!i,t.animatingY=!!r,R(t,"transform","translate3d("+i+"px,"+r+"px,0)"),this.forRepaintDummy=t.offsetWidth,R(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),R(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout(function(){R(t,"transition",""),R(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1},o))}}}var A=[],N={initializeByDefault:!0},W={mount:function(e){for(var t in N)!N.hasOwnProperty(t)||t in e||(e[t]=N[t]);A.forEach(function(t){if(t.pluginName===e.pluginName)throw"Sortable: Cannot mount plugin ".concat(e.pluginName," more than once")}),A.push(e)},pluginEvent:function(e,n,o){var t=this;this.eventCanceled=!1,o.cancel=function(){t.eventCanceled=!0};var i=e+"Global";A.forEach(function(t){n[t.pluginName]&&(n[t.pluginName][i]&&n[t.pluginName][i](I({sortable:n},o)),n.options[t.pluginName]&&n[t.pluginName][e]&&n[t.pluginName][e](I({sortable:n},o)))})},initializePlugins:function(n,o,i,t){for(var e in A.forEach(function(t){var e=t.pluginName;(n.options[e]||t.initializeByDefault)&&((t=new t(n,o,n.options)).sortable=n,t.options=n.options,n[e]=t,a(i,t.defaults))}),n.options){var r;n.options.hasOwnProperty(e)&&(void 0!==(r=this.modifyOption(n,e,n.options[e]))&&(n.options[e]=r))}},getEventProperties:function(e,n){var o={};return A.forEach(function(t){"function"==typeof t.eventProperties&&a(o,t.eventProperties.call(n[t.pluginName],e))}),o},modifyOption:function(e,n,o){var i;return A.forEach(function(t){e[t.pluginName]&&t.optionListeners&&"function"==typeof t.optionListeners[n]&&(i=t.optionListeners[n].call(e[t.pluginName],o))}),i}};function z(t){var e=t.sortable,n=t.rootEl,o=t.name,i=t.targetEl,r=t.cloneEl,a=t.toEl,l=t.fromEl,s=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,h=t.originalEvent,f=t.putSortable,p=t.extraEventProperties;if(e=e||n&&n[K]){var g,m=e.options,t="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||y||w?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=a||n,g.from=l||n,g.item=i||n,g.clone=r,g.oldIndex=s,g.newIndex=c,g.oldDraggableIndex=u,g.newDraggableIndex=d,g.originalEvent=h,g.pullMode=f?f.lastPutMode:void 0;var v,b=I(I({},p),W.getEventProperties(o,e));for(v in b)g[v]=b[v];n&&n.dispatchEvent(g),m[t]&&m[t].call(e,g)}}function G(t,e){var n=(o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).evt,o=i(o,U);W.pluginEvent.bind(Ft)(t,e,I({dragEl:V,parentEl:Z,ghostEl:$,rootEl:Q,nextEl:J,lastDownEl:tt,cloneEl:et,cloneHidden:nt,dragStarted:gt,putSortable:st,activeSortable:Ft.active,originalEvent:n,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at,hideGhostForTarget:Rt,unhideGhostForTarget:Xt,cloneNowHidden:function(){nt=!0},cloneNowShown:function(){nt=!1},dispatchSortableEvent:function(t){q({sortable:e,name:t,originalEvent:n})}},o))}var U=["evt"];function q(t){z(I({putSortable:st,cloneEl:et,targetEl:V,rootEl:Q,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at},t))}var V,Z,$,Q,J,tt,et,nt,ot,it,rt,at,lt,st,ct,ut,dt,ht,ft,pt,gt,mt,vt,bt,yt,wt=!1,Et=!1,Dt=[],St=!1,_t=!1,Ct=[],Tt=!1,xt=[],Ot="undefined"!=typeof document,Mt=n,At=w||y?"cssFloat":"float",Nt=Ot&&!c&&!n&&"draggable"in document.createElement("div"),It=function(){if(Ot){if(y)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}
vendor: 11,250 bytes, line 4610
4610(),Pt=function(t,e){var n=R(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=B(t,0,e),r=B(t,1,e),a=i&&R(i),l=r&&R(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+X(i).width,t=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+X(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){e="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==e?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||o<=s&&"none"===n[At]||r&&"none"===n[At]&&o<s+t)?"vertical":"horizontal"},kt=function(t){function l(r,a){return function(t,e,n,o){var i=t.options.group.name&&e.options.group.name&&t.options.group.name===e.options.group.name;if(null==r&&(a||i))return!0;if(null==r||!1===r)return!1;if(a&&"clone"===r)return r;if("function"==typeof r)return l(r(t,e,n,o),a)(t,e,n,o);e=(a?t:e).options.group.name;return!0===r||"string"==typeof r&&r===e||r.join&&-1<r.indexOf(e)}}var e={},n=t.group;n&&"object"==o(n)||(n={name:n}),e.name=n.name,e.checkPull=l(n.pull,!0),e.checkPut=l(n.put),e.revertClone=n.revertClone,t.group=e},Rt=function(){!It&&$&&R($,"display","none")},Xt=function(){!It&&$&&R($,"display","")};Ot&&!c&&document.addEventListener("click",function(t){if(Et)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Et=!1},!0);function Yt(t){if(V){t=t.touches?t.touches[0]:t;var e=(i=t.clientX,r=t.clientY,Dt.some(function(t){var e=t[K].options.emptyInsertThreshold;if(e&&!F(t)){var n=X(t),o=i>=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Bt(t){V&&V.parentNode[K]._isOutsideThisEl(t.target)}function Ft(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Pt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ft.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in W.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in kt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Nt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Dt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function jt(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Ht(t){t.draggable=!1}function Lt(){Tt=!1}function Kt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Ft.prototype={constructor:Ft,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,V):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){xt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&xt.push(o)}}(o),!V&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||tt===l)){if(ot=j(l),rt=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return q({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),G("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return q({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),G("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!V&&n.parentNode===r&&(o=X(n),Q=r,Z=(V=n).parentNode,J=V.nextSibling,tt=n,lt=a.group,ct={target:Ft.dragged=V,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ct.clientX-o.left,pt=ct.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,V.style["will-change"]="all",o=function(){G("delayEnded",i,{evt:t}),Ft.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(V.draggable=!0),i._triggerDragStart(t,e),q({sortable:i,name:"choose",originalEvent:t}),k(V,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(V,t.trim(),Ht)}),h(l,"dragover",Yt),h(l,"mousemove",Yt),h(l,"touchmove",Yt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Ft.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&Ht(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(V,"dragend",this),h(Q,"dragstart",this._onDragStart));try{document.selection?Kt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;wt=!1,Q&&V?(G("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Bt),n=this.options,t||k(V,n.dragClass,!1),k(V,n.ghostClass,!0),Ft.active=this,t&&this._appendGhost(),q({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ut){this._lastX=ut.clientX,this._lastY=ut.clientY,Rt();for(var t=document.elementFromPoint(ut.clientX,ut.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ut.clientX,ut.clientY))!==e;)e=t;if(V.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:ut.clientX,clientY:ut.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Xt()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=$&&v($,!0),a=$&&r&&r.a,l=$&&r&&r.d,e=Mt&&yt&&E(yt),a=(i.clientX-ct.clientX+o.x)/(a||1)+(e?e[0]-Ct[0]:0)/(a||1),l=(i.clientY-ct.clientY+o.y)/(l||1)+(e?e[1]-Ct[1]:0)/(l||1);if(!Ft.active&&!wt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}$&&(r?(r.e+=a-(dt||0),r.f+=l-(ht||0)):r={a:1,b:0,c:0,d:1,e:a,f:l},r="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")"),R($,"webkitTransform",r),R($,"mozTransform",r),R($,"msTransform",r),R($,"transform",r),dt=a,ht=l,ut=i),t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!$){var t=this.options.fallbackOnBody?document.body:Q,e=X(V,!0,Mt,!0,t),n=this.options;if(Mt){for(yt=t;"static"===R(yt,"position")&&"none"===R(yt,"transform")&&yt!==document;)yt=yt.parentNode;yt!==document.body&&yt!==document.documentElement?(yt===document&&(yt=O()),e.top+=yt.scrollTop,e.left+=yt.scrollLeft):yt=O(),Ct=E(yt)}k($=V.cloneNode(!0),n.ghostClass,!1),k($,n.fallbackClass,!0),k($,n.dragClass,!0),R($,"transition",""),R($,"transform",""),R($,"box-sizing","border-box"),R($,"margin",0),R($,"top",e.top),R($,"left",e.left),R($,"width",e.width),R($,"height",e.height),R($,"opacity","0.8"),R($,"position",Mt?"absolute":"fixed"),R($,"zIndex","100000"),R($,"pointerEvents","none"),Ft.ghost=$,t.appendChild($),R($,"transform-origin",ft/parseInt($.style.width)*100+"% "+pt/parseInt($.style.height)*100+"%")}},_onDragStart:function(t,e){var n=this,o=t.dataTransfer,i=n.options;G("dragStart",this,{evt:t}),Ft.eventCanceled?this._onDrop():(G("setupClone",this),Ft.eventCanceled||((et=_(V)).removeAttribute("id"),et.draggable=!1,et.style["will-change"]="",this._hideClone(),k(et,this.options.chosenClass,!1),Ft.clone=et),n.cloneId=Kt(function(){G("clone",n),Ft.eventCanceled||(n.options.removeCloneOnHide||Q.insertBefore(et,V),n._hideClone(),q({sortable:n,name:"clone"}))}),e||k(V,i.dragClass,!0),e?(Et=!0,n._loopId=setInterval(n._emulateDragOver,50)):(f(document,"mouseup",n._onDrop),f(document,"touchend",n._onDrop),f(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",i.setData&&i.setData.call(n,o,V)),h(document,"drop",n),R(V,"transform","translateZ(0)")),wt=!0,n._dragStartId=Kt(n._dragStarted.bind(n,e,t)),h(document,"selectstart",n),gt=!0,u&&R(document.body,"user-select","none"))},_onDragOver:function(n){var o,i,r,t,e,a=this.el,l=n.target,s=this.options,c=s.group,u=Ft.active,d=lt===c,h=s.sort,f=st||u,p=this,g=!1;
vendor: 5,131 bytes, line 4610
4610if(!Tt){if(void 0!==n.preventDefault&&n.cancelable&&n.preventDefault(),l=P(l,s.draggable,a,!0),O("dragOver"),Ft.eventCanceled)return g;if(V.contains(n.target)||l.animated&&l.animatingX&&l.animatingY||p._ignoreWhileAnimating===l)return A(!1);if(Et=!1,u&&!s.disabled&&(d?h||(i=Z!==Q):st===this||(this.lastPutMode=lt.checkPull(this,u,V,n))&&c.checkPut(this,u,V,n))){if(r="vertical"===this._getDirection(n,l),o=X(V),O("dragOverValid"),Ft.eventCanceled)return g;if(i)return Z=Q,M(),this._hideClone(),O("revert"),Ft.eventCanceled||(J?Q.insertBefore(V,J):Q.appendChild(V)),A(!0);var m=F(a,s.draggable);if(m&&(S=n,c=r,x=X(F((D=this).el,D.options.draggable)),D=L(D.el,D.options,$),!(c?S.clientX>D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,$),e?t.clientX<_.left-10||t.clientY<C.top&&t.clientX<C.right:t.clientY<_.top-10||t.clientY<C.bottom&&t.clientX<C.left)){var v=B(a,0,s,!0);if(v===V)return A(!1);if(E=X(l=v),!1!==jt(Q,a,V,o,l,E,n,!1))return M(),a.insertBefore(V,v),Z=a,N(),A(!0)}else if(l.parentNode===a){var b,y,w,E=X(l),D=V.parentNode!==a,S=(S=V.animated&&V.toRect||o,x=l.animated&&l.toRect||E,_=(e=r)?S.left:S.top,t=e?S.right:S.bottom,C=e?S.width:S.height,v=e?x.left:x.top,S=e?x.right:x.bottom,x=e?x.width:x.height,!(_===v||t===S||_+C/2===v+x/2)),_=r?"top":"left",C=Y(l,"top","top")||Y(V,"top","top"),v=C?C.scrollTop:void 0;if(mt!==l&&(y=E[_],St=!1,_t=!S&&s.invertSwap||D),0!==(b=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,t=o?n.top:n.left,o=o?n.bottom:n.right,n=!1;if(!a)if(l&&bt<c*i){if(St=!St&&(1===vt?t+c*r/2<s:s<o-c*r/2)?!0:St)n=!0;else if(1===vt?s<t+bt:o-bt<s)return-vt}else if(t+c*(1-i)/2<s&&s<o-c*(1-i)/2)return function(t){return j(V)<j(t)?1:-1}(e);if((n=n||a)&&(s<t+c*r/2||o-c*r/2<s))return t+c/2<s?1:-1;return 0}(n,l,E,r,S?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,_t,mt===l)))for(var T=j(V);(w=Z.children[T-=b])&&("none"===R(w,"display")||w===$););if(0===b||w===l)return A(!1);vt=b;var x=(mt=l).nextElementSibling,D=!1,S=jt(Q,a,V,o,l,E,n,D=1===b);if(!1!==S)return 1!==S&&-1!==S||(D=1===S),Tt=!0,setTimeout(Lt,30),M(),D&&!x?a.appendChild(V):l.parentNode.insertBefore(V,D?x:l),C&&H(C,0,v-C.scrollTop),Z=V.parentNode,void 0===y||_t||(bt=Math.abs(y-X(l)[_])),N(),A(!0)}}else{if(m===V)return A(!1);if((l=m&&a===n.target?m:l)&&(E=X(l)),!1!==jt(Q,a,V,o,l,E,n,!!l))return M(),m&&m.nextSibling?a.insertBefore(V,m.nextSibling):a.appendChild(V),Z=a,N(),A(!0)}if(a.contains(V))return A(!1)}return!1}function O(t,e){G(t,p,I({evt:n,isOwner:d,axis:r?"vertical":"horizontal",revert:i,dragRect:o,targetRect:E,canSort:h,fromSortable:f,target:l,completed:A,onMove:function(t,e){return jt(Q,a,V,o,t,X(t),n,e)},changed:N},e))}function M(){O("dragOverAnimationCapture"),p.captureAnimationState(),p!==f&&f.captureAnimationState()}function A(t){return O("dragOverCompleted",{insertion:t}),t&&(d?u._hideClone():u._showClone(p),p!==f&&(k(V,(st||u).options.ghostClass,!1),k(V,s.ghostClass,!0)),st!==p&&p!==Ft.active?st=p:p===Ft.active&&st&&(st=null),f===p&&(p._ignoreWhileAnimating=l),p.animateAll(function(){O("dragOverAnimationComplete"),p._ignoreWhileAnimating=null}),p!==f&&(f.animateAll(),f._ignoreWhileAnimating=null)),(l===V&&!V.animated||l===a&&!l.animated)&&(mt=null),s.dragoverBubble||n.rootEl||l===document||(V.parentNode[K]._isOutsideThisEl(n.target),t||Yt(n)),!s.dragoverBubble&&n.stopPropagation&&n.stopPropagation(),g=!0}function N(){it=j(V),at=j(V,s.draggable),q({sortable:p,name:"change",toEl:a,newIndex:it,newDraggableIndex:at,originalEvent:n})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,"mousemove",this._onTouchMove),f(document,"touchmove",this._onTouchMove),f(document,"pointermove",this._onTouchMove),f(document,"dragover",Yt),f(document,"mousemove",Yt),f(document,"touchmove",Yt)},_offUpEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._onDrop),f(t,"touchend",this._onDrop),f(t,"pointerup",this._onDrop),f(t,"touchcancel",this._onDrop),f(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;it=j(V),at=j(V,n.draggable),G("drop",this,{evt:t}),Z=V&&V.parentNode,it=j(V),at=j(V,n.draggable),Ft.eventCanceled||(St=_t=wt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Wt(this.cloneId),Wt(this._dragStartId),this.nativeDraggable&&(f(document,"drop",this),f(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),u&&R(document.body,"user-select",""),R(V,"transform",""),t&&(gt&&(t.cancelable&&t.preventDefault(),n.dropBubble||t.stopPropagation()),$&&$.parentNode&&$.parentNode.removeChild($),(Q===Z||st&&"clone"!==st.lastPutMode)&&et&&et.parentNode&&et.parentNode.removeChild(et),V&&(this.nativeDraggable&&f(V,"dragend",this),Ht(V),V.style["will-change"]="",gt&&!wt&&k(V,(st||this).options.ghostClass,!1),k(V,this.options.chosenClass,!1),q({sortable:this,name:"unchoose",toEl:Z,newIndex:null,newDraggableIndex:null,originalEvent:t}),Q!==Z?(0<=it&&(q({rootEl:Z,name:"add",toEl:Z,fromEl:Q,originalEvent:t}
vendor: 13,984 bytes, line 4610
4610),q({sortable:this,name:"remove",toEl:Z,originalEvent:t}),q({rootEl:Z,name:"sort",toEl:Z,fromEl:Q,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),st&&st.save()):it!==ot&&0<=it&&(q({sortable:this,name:"update",toEl:Z,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),Ft.active&&(null!=it&&-1!==it||(it=ot,at=rt),q({sortable:this,name:"end",toEl:Z,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){G("nulling",this),Q=V=Z=$=J=et=tt=nt=ct=ut=gt=it=at=ot=rt=mt=vt=st=lt=Ft.dragged=Ft.ghost=Ft.clone=Ft.active=null,xt.forEach(function(t){t.checked=!0}),xt.length=dt=ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":V&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)P(t=n[o],r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||function(t){var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;for(;n--;)o+=e.charCodeAt(n);return o.toString(36)}(t));return e},sort:function(t,e){var n={},o=this.el;this.toArray().forEach(function(t,e){e=o.children[e];P(e,this.options.draggable,o,!1)&&(n[t]=e)},this),e&&this.captureAnimationState(),t.forEach(function(t){n[t]&&(o.removeChild(n[t]),o.appendChild(n[t]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return P(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];var o=W.modifyOption(this,t,e);n[t]=void 0!==o?o:e,"group"===t&&kt(n)},destroy:function(){G("destroy",this);var t=this.el;t[K]=null,f(t,"mousedown",this._onTapStart),f(t,"touchstart",this._onTapStart),f(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(f(t,"dragover",this),f(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Dt.splice(Dt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){nt||(G("hideClone",this),Ft.eventCanceled||(R(et,"display","none"),this.options.removeCloneOnHide&&et.parentNode&&et.parentNode.removeChild(et),nt=!0))},_showClone:function(t){"clone"===t.lastPutMode?nt&&(G("showClone",this),Ft.eventCanceled||(V.parentNode!=Q||this.options.group.revertClone?J?Q.insertBefore(et,J):Q.appendChild(et):Q.insertBefore(et,V),this.options.group.revertClone&&this.animate(V,et),R(et,"display",""),nt=!1)):this._hideClone()}},Ot&&h(document,"touchmove",function(t){(Ft.active||wt)&&t.cancelable&&t.preventDefault()}),Ft.utils={on:h,off:f,css:R,find:b,is:function(t,e){return!!P(t,e,t,!1)},extend:function(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},throttle:S,closest:P,toggleClass:k,clone:_,index:j,nextTick:Kt,cancelNextTick:Wt,detectDirection:Pt,getChild:B},Ft.get=function(t){return t[K]},Ft.mount=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];(e=e[0].constructor===Array?e[0]:e).forEach(function(t){if(!t.prototype||!t.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(t));t.utils&&(Ft.utils=I(I({},Ft.utils),t.utils)),W.mount(t)})},Ft.create=function(t,e){return new Ft(t,e)};var zt,Gt,Ut,qt,Vt,Zt,$t=[],Qt=!(Ft.version="1.15.2");function Jt(){$t.forEach(function(t){clearInterval(t.pid)}),$t=[]}function te(){clearInterval(Zt)}var ee,ne=S(function(n,t,e,o){if(t.scroll){var i,r=(n.touches?n.touches[0]:n).clientX,a=(n.touches?n.touches[0]:n).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,c=O(),u=!1;Gt!==e&&(Gt=e,Jt(),zt=t.scroll,i=t.scrollFn,!0===zt&&(zt=M(e,!0)));var d=0,h=zt;do{var f=h,p=X(f),g=p.top,m=p.bottom,v=p.left,b=p.right,y=p.width,w=p.height,E=void 0,D=void 0,S=f.scrollWidth,_=f.scrollHeight,C=R(f),T=f.scrollLeft,p=f.scrollTop,D=f===c?(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX||"visible"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY||"visible"===C.overflowY)):(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY)),T=E&&(Math.abs(b-r)<=l&&T+y<S)-(Math.abs(v-r)<=l&&!!T),p=D&&(Math.abs(m-a)<=l&&p+w<_)-(Math.abs(g-a)<=l&&!!p);if(!$t[d])for(var x=0;x<=d;x++)$t[x]||($t[x]={});$t[d].vx==T&&$t[d].vy==p&&$t[d].el===f||($t[d].el=f,$t[d].vx=T,$t[d].vy=p,clearInterval($t[d].pid),0==T&&0==p||(u=!0,$t[d].pid=setInterval(function(){o&&0===this.layer&&Ft.active._onTouchMove(Vt);var t=$t[this.layer].vy?$t[this.layer].vy*s:0,e=$t[this.layer].vx?$t[this.layer].vx*s:0;"function"==typeof i&&"continue"!==i.call(Ft.dragged.parentNode[K],e,t,n,Vt,$t[this.layer].el)||H($t[this.layer].el,e,t)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&h!==c&&(h=M(h,!1)));Qt=u}},30),c=function(t){var e=t.originalEvent,n=t.putSortable,o=t.dragEl,i=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,t=t.unhideGhostForTarget;e&&(i=n||i,a(),e=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,e=document.elementFromPoint(e.clientX,e.clientY),t(),i&&!i.el.contains(e)&&(r("spill"),this.onSpill({dragEl:o,putSortable:n})))};function oe(){}function ie(){}oe.prototype={startIndex:null,dragStart:function(t){t=t.oldDraggableIndex;this.startIndex=t},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();t=B(this.sortable.el,this.startIndex,this.options);t?this.sortable.el.insertBefore(e,t):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:c},a(oe,{pluginName:"revertOnSpill"}),ie.prototype={onSpill:function(t){var e=t.dragEl,t=t.putSortable||this.sortable;t.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),t.animateAll()},drop:c},a(ie,{pluginName:"removeOnSpill"});var re,ae,le,se,ce,ue=[],de=[],he=!1,fe=!1,pe=!1;function ge(n,o){de.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)})}function me(){ue.forEach(function(t){t!==le&&t.parentNode&&t.parentNode.removeChild(t)})}return Ft.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){t=t.originalEvent;this.sortable.nativeDraggable?h(document,"dragover",this._handleAutoScroll):this.options.supportPointer?h(document,"pointermove",this._handleFallbackAutoScroll):t.touches?h(document,"touchmove",this._handleFallbackAutoScroll):h(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){t=t.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,"dragover",this._handleAutoScroll):(f(document,"pointermove",this._handleFallbackAutoScroll),f(document,"touchmove",this._handleFallbackAutoScroll),f(document,"mousemove",this._handleFallbackAutoScroll)),te(),Jt(),clearTimeout(g),g=void 0},nulling:function(){Vt=Gt=zt=Qt=Zt=Ut=qt=null,$t.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(e,n){var o,i=this,r=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,t=document.elementFromPoint(r,a);Vt=e,n||this.options.forceAutoScrollFallback||w||y||u?(ne(e,this.options,t,n),o=M(t,!0),!Qt||Zt&&r===Ut&&a===qt||(Zt&&te(),Zt=setInterval(function(){var t=M(document.elementFromPoint(r,a),!0);t!==o&&(o=t,Jt()),ne(e,i.options,t,n)},10),Ut=r,qt=a)):this.options.bubbleScroll&&M(t,!0)!==O()?ne(e,this.options,M(t,!1),!1):Jt()}},a(t,{pluginName:"scroll",initializeByDefault:!0})}),Ft.mount(ie,oe),Ft.mount(new function(){function t(){this.defaults={swapClass:"sortable-swap-highlight"}}return t.prototype={dragStart:function(t){t=t.dragEl;ee=t},dragOverValid:function(t){var e=t.completed,n=t.target,o=t.onMove,i=t.activeSortable,r=t.changed,a=t.cancel;i.options.swap&&(t=this.sortable.el,i=this.options,n&&n!==t&&(t=ee,ee=!1!==o(n)?(k(n,i.swapClass,!0),n):null,t&&t!==ee&&k(t,i.swapClass,!1)),r(),e(!0),a())},drop:function(t){var e,n,o=t.activeSortable,i=t.putSortable,r=t.dragEl,a=i||this.sortable,l=this.options;ee&&k(ee,l.swapClass,!1),ee&&(l.swap||i&&i.options.swap)&&r!==ee&&(a.captureAnimationState(),a!==o&&o.captureAnimationState(),n=ee,t=(e=r).parentNode,l=n.parentNode,t&&l&&!t.isEqualNode(n)&&!l.isEqualNode(e)&&(i=j(e),r=j(n),t.isEqualNode(l)&&i<r&&r++,t.insertBefore(n,t.children[i]),l.insertBefore(e,l.children[r])),a.animateAll(),a!==o&&o.animateAll())},nulling:function(){ee=null}},a(t,{pluginName:"swap",eventProperties:function(){return{swapItem:ee}}})}),Ft.mount(new function(){function t(o){for(var t in this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this));o.options.avoidImplicitDeselect||(o.options.supportPointer?h(document,"pointerup",this._deselectMultiDrag):(h(document,"mouseup",this._deselectMultiDrag),h(document,"touchend",this._deselectMultiDrag))),h(document,"keydown",this._checkKeyDown),h(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(t,e){var n="";ue.length&&ae===o?ue.forEach(function(t,e){n+=(e?", ":"")+t.textContent}):n=e.textContent,t.setData("Text",n)}}}return t.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(t){t=t.dragEl;le=t},delayEnded:function(){this.isMultiDrag=~ue.indexOf(le)},setupClone:function(t){var e=t.sortable,t=t.cancel;if(this.isMultiDrag){for(var n=0;n<ue.length;n++)de.push(_(ue[n])),de[n].sortableIndex=ue[n].sortableIndex,de[n].draggable=!1,de[n].style["will-change"]="",k(de[n],this.options.selectedClass,!1),ue[n]===le&&k(de[n],this.options.chosenClass,!1);e._hideClone(),t()}},clone:function(t){var e=t.sortable,n=t.rootEl,o=t.dispatchSortableEvent,t=t.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||ue.length&&ae===e&&(ge(!0,n),o("clone"),t()))},showClone:function(t){var e=t.cloneNowShown,n=t.rootEl,t=t.cancel;this.isMultiDrag&&(ge(!1,n),de.forEach(function(t){R(t,"display","")}),e(),ce=!1,t())},hideClone:function(t){var e=this,n=(t.sortable,t.cloneNowHidden),t=t.cancel;this.isMultiDrag&&(de.forEach(function(t){R(t,"display","none"),e.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),n(),ce=!0,t())},dragStartGlobal:function(t){t.sortable;!this.isMultiDrag&&ae&&ae.multiDrag._deselectMultiDrag(),ue.forEach(function(t){t.sortableIndex=j(t)}),ue=ue.sort(function(t,e){return t.sortableIndex-e.sortableIndex}),pe=!0},dragStarted:function(t){var e,n=this,t=t.sortable;this.isMultiDrag&&(this.options.sort&&(t.captureAnimationState(),this.options.animation&&(ue.forEach(function(t){t!==le&&R(t,"position","absolute")}),e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&C(t,e)}),he=fe=!0)),t.animateAll(function(){he=fe=!1,n.options.animation&&ue.forEach(function(t){T(t)}),n.options.sort&&me()}))},dragOver:function(t){var e=t.target,n=t.completed,t=t.cancel;fe&&~ue.indexOf(e)&&(n(!1),t())},revert:function(t){var n,o,e=t.fromSortable,i=t.rootEl,r=t.sortable,a=t.dragRect;1<ue.length&&(ue.forEach(function(t){r.addAnimationState({target:t,rect:fe?X(t):a}),T(t),t.fromRect=a,e.removeAnimationState(t)}),fe=!1,n=!this.options.removeCloneOnHide,o=i,ue.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)}))},dragOverCompleted:function(t){var e,n=t.sortable,o=t.isOwner,i=t.insertion,r=t.activeSortable,a=t.parentEl,l=t.putSortable,t=this.options;i&&(o&&r._hideClone(),he=!1,t.animation&&1<ue.length&&(fe||!o&&!r.options.sort&&!l)&&(e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&(C(t,e),a.appendChild(t))}),fe=!0),o||(fe||me(),1<ue.length?(o=ce,r._showClone(n),r.options.animation&&!ce&&o&&de.forEach(function(t){r.addAnimationState({target:t,rect:se}),t.fromRect=se,t.thisAnimationDuration=null})):r._showClone(n)))},dragOverAnimationCapture:function(t){var e=t.dragRect,n=t.isOwner,t=t.activeSortable;ue.forEach(function(t){t.thisAnimationDuration=null}),t.options.animation&&!n&&t.multiDrag.isMultiDrag&&(se=a({},e),e=v(le,!0),se.top-=e.f,se.left-=e.e)},dragOverAnimationComplete:function(){fe&&(fe=!1,me())},drop:function(t){var e=t.originalEvent,n=t.rootEl,o=t.parentEl,i=t.sortable,r=t.dispatchSortableEvent,a=t.oldIndex,l=t.putSortable,s=l||this.sortable;if(e){var c,u,d,h=this.options,f=o.children;if(!pe)if(h.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),k(le,h.selectedClass,!~ue.indexOf(le)),~ue.indexOf(le))ue.splice(ue.indexOf(le),1),re=null,z({sortable:i,rootEl:n,name:"deselect",targetEl:le,originalEvent:e});else{if(ue.push(le),z({sortable:i,rootEl:n,name:"select",targetEl:le,originalEvent:e}),e.shiftKey&&re&&i.el.contains(re)){var p=j(re),t=j(le);if(~p&&~t&&p!==t)for(var g,m=p<t?(g=p,t):(g=t,p+1);g<m;g++)~ue.indexOf(f[g])||(k(f[g],h.selectedClass,!0),ue.push(f[g]),z({sortable:i,rootEl:n,name:"select",targetEl:f[g],originalEvent:e}))}else re=le;ae=s}pe&&this.isMultiDrag&&(fe=!1,(o[K].options.sort||o!==n)&&1<ue.length&&(c=X(le),u=j(le,":not(."+this.options.selectedClass+")"),!he&&h.animation&&(le.thisAnimationDuration=null),s.captureAnimationState(),he||(h.animation&&(le.fromRect=c,ue.forEach(function(t){var e;t.thisAnimationDuration=null,t!==le&&(e=fe?X(t):c,t.fromRect=e,s.addAnimationState({target:t,rect:e}))})),me(),ue.forEach(function(t){f[u]?o.insertBefore(t,f[u]):o.appendChild(t),u++}),a===j(le)&&(d=!1,ue.forEach(function(t){t.sortableIndex!==j(t)&&(d=!0)}),d&&(r("update"),r("sort")))),ue.forEach(function(t){T(t)}),s.animateAll()),ae=s),(n===o||l&&"clone"!==l.lastPutMode)&&de.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal:function(){this.isMultiDrag=pe=!1,de.length=0}
vendor: 1,750 bytes, lines 4610-4614
4610,destroyGlobal:function(){this._deselectMultiDrag(),f(document,"pointerup",this._deselectMultiDrag),f(document,"mouseup",this._deselectMultiDrag),f(document,"touchend",this._deselectMultiDrag),f(document,"keydown",this._checkKeyDown),f(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(void 0!==pe&&pe||ae!==this.sortable||t&&P(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;ue.length;){var e=ue[0];k(e,this.options.selectedClass,!1),ue.shift(),z({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvent:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},a(t,{pluginName:"multiDrag",utils:{select:function(t){var e=t.parentNode[K];e&&e.options.multiDrag&&!~ue.indexOf(t)&&(ae&&ae!==e&&(ae.multiDrag._deselectMultiDrag(),ae=e),k(t,e.options.selectedClass,!0),ue.push(t))},deselect:function(t){var e=t.parentNode[K],n=ue.indexOf(t);e&&e.options.multiDrag&&~n&&(k(t,e.options.selectedClass,!1),ue.splice(n,1))}},eventProperties:function(){var n=this,o=[],i=[];return ue.forEach(function(t){var e;o.push({multiDragElement:t,index:t.sortableIndex}),e=fe&&t!==le?-1:fe?j(t,":not(."+n.options.selectedClass+")"):j(t),i.push({multiDragElement:t,index:e})}),{items:r(ue),clones:[].concat(de),oldIndicies:o,newIndicies:i}},optionListeners:{multiDragKey:function(t){return"ctrl"===(t=t.toLowerCase())?t="Control":1<t.length&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}),Ft}); 4611 4612// final JS calls after everything has been loaded 4613document.dispatchEvent( new CustomEvent('events_manager_js_loaded') ); 4614//# sourceMappingURL=events-manager.js.map
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.