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 // Add click handler for recurrence conversion links 340 document.querySelectorAll( '.em-convert-recurrence-link' ).forEach( link => { 341 link.addEventListener( 'click', function ( e ) { 342 if ( !confirm( EM.convert_recurring_warning ) ) { 343 e.preventDefault(); 344 return false; 345 } 346 let nonce = this.getAttribute( 'data-nonce' ); 347 if ( nonce ) { 348 this.href = this.href.replace( 'nonce=x', 'nonce=' + nonce ); 349 } 350 } ); 351 } ); 352 353 // trigger selectize loader 354 em_setup_ui_elements(document); 355 356 /* Done! */ 357 $(document).triggerHandler('em_javascript_loaded'); 358}); 359 360/** 361 * 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.. 362 * @param jQuery|DOMElement container 363 */ 364function em_setup_ui_elements ( $container ) { 365 let container = ( $container instanceof jQuery ) ? $container[0] : $container; 366 // Selectize 367 em_setup_selectize( $container ); 368 // Tippy 369 em_setup_tippy( $container ); 370 // Moment JS 371 em_setup_moment_times( $container ); 372 // Date & Time Pickers 373 if( container.querySelector('.em-datepicker') ){ 374 em_setup_datepicker( container ); 375 } 376 if( container.querySelector(".em-time-input") ){ 377 em_setup_timepicker( container ); 378 } 379 // Phone numbers 380 em_setup_phone_inputs( container ); 381 // let other things hook in 382 document.dispatchEvent( new CustomEvent( 'em_setup_ui_elements', { detail: { container : container } } ) ); 383} 384 385/** 386 * Unsetup containers with UI elements, primarily useful if intending on duplicating an element which would require re-setup. 387 * @param $container 388 */ 389function em_unsetup_ui_elements( $container ) { 390 let container = $container instanceof jQuery ? $container[0] : $container; 391 em_unsetup_selectize( container ); 392 em_unsetup_tippy( container ); 393 em_unsetup_datepicker( container ); 394 em_unsetup_timepicker( container ); 395 em_unsetup_phone_inputs( container ); 396 // let other things hook in 397 document.dispatchEvent( new CustomEvent( 'em_unsetup_ui_elements', { detail: { container : container } } ) ); 398} 399 400/* Local JS Timezone related placeholders */ 401/* Moment JS Timzeone PH */ 402function em_setup_moment_times( container_element ) { 403 container = jQuery(container_element); 404 if( window.moment ){ 405 var replace_specials = function( day, string ){ 406 // replace things not supported by moment 407 string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone); 408 string = string.replace(/#T/g, "GMT"+day.format('Z')); 409 string = string.replace(/###t/g, day.utcOffset()*-60); 410 string = string.replace(/##t/g, day.isDST()); 411 string = string.replace(/#t/g, day.daysInMonth()); 412 return string; 413 }; 414 container.find('.em-date-momentjs').each( function(){ 415 // Start Date 416 var el = jQuery(this); 417 var day_start = moment.unix(el.data('date-start')); 418 var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format'))); 419 if( el.data('date-start') !== el.data('date-end') ){ 420 // End Date 421 var day_end = moment.unix(el.data('date-end')); 422 var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format'))); 423 // Output 424 var date_string = date_start_string + el.data('date-separator') + day_end_string; 425 }else{ 426 var date_string = date_start_string; 427 } 428 el.text(date_string); 429 }); 430 var get_date_string = function(ts, format){ 431 let date = new Date(ts * 1000); 432 let minutes = date.getMinutes(); 433 if( format == 24 ){ 434 let hours = date.getHours(); 435 hours = hours < 10 ? '0' + hours : hours; 436 minutes = minutes < 10 ? '0' + minutes : minutes; 437 return hours + ':' + minutes; 438 }else{ 439 let hours = date.getHours() % 12; 440 let ampm = hours >= 12 ? 'PM' : 'AM'; 441 if( hours === 0 ) hours = 12; // the hour '0' should be '12' 442 minutes = minutes < 10 ? '0'+minutes : minutes; 443 return hours + ':' + minutes + ' ' + ampm; 444 } 445 } 446 container.find('.em-time-localjs').each( function(){ 447 var el = jQuery(this); 448 var strTime = get_date_string( el.data('time'), el.data('time-format') ); 449 if( el.data('time-end') ){ 450 var separator = el.data('time-separator') ? el.data('time-separator') : ' - '; 451 strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') ); 452 } 453 el.text(strTime); 454 }); 455 } 456}; 457 458function em_load_jquery_css( wrapper = false ){ 459 if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){ 460 var script = document.createElement("link"); 461 script.id = 'jquery-ui-em-css'; 462 script.rel = "stylesheet"; 463 script.href = EM.ui_css; 464 document.body.appendChild(script); 465 if( wrapper ){ 466 em_setup_jquery_ui_wrapper(); 467 } 468 } 469} 470 471function em_setup_jquery_ui_wrapper(){ 472 if( jQuery('#em-jquery-ui').length === 0 ){ 473 jQuery('body').append('<div id="em-jquery-ui" class="em">'); 474 } 475} 476 477/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */ 478var em_ajaxify = function(url){ 479 if ( url.search('em_ajax=0') != -1){ 480 url = url.replace('em_ajax=0','em_ajax=1'); 481 }else if( url.search(/\?/) != -1 ){ 482 url = url + "&em_ajax=1"; 483 }else{ 484 url = url + "?em_ajax=1"; 485 } 486 return url; 487}; 488 489// load externals after DOM load, supplied by EM.assets, only if selector matches 490var em_setup_scripts = function( $container = false ) { 491 let container = $container || document; 492 if( EM && 'assets' in EM ) { 493 let baseURL = EM.url + '/includes/external/'; 494 for ( const [selector, assets] of Object.entries(EM.assets) ) { 495 // load scripts if one element exists for selector 496 if ( container.querySelector(selector) ) {
497 if ('css' in assets) { 498 // Iterate through assets.css object and add stylesheet to head 499 for (const [id, value] of Object.entries(assets.css)) { 500 // Check if the stylesheet with the given ID already exists 501 if (!document.getElementById( id + '-css' )) { 502 // Create a new link element for the stylesheet 503 const link = document.createElement('link'); 504 link.id = id + '-css'; 505 link.rel = 'stylesheet'; 506 link.href = value.match(/^http/) ? value : baseURL + value; 507 508 // Append the stylesheet to the document head 509 document.head.appendChild(link); 510 } 511 } 512 } 513 if ('js' in assets) { 514 // add a tracking of all assets to load, and execute loaded hooks after all assets are loaded and in order of dependence 515 let loaded = {}; 516 let loadedListener = function( id ) { 517 loaded[id] = false; 518 if ( Object.entries( loaded ).length === Object.entries( assets.js ).length ) { 519 // all items for this asset loaded, so we go through all the entries and fire their events 520 for ( id of Object.keys( loaded ) ) { 521 loadAsset( id ) 522 } 523 } 524 }; 525 let loadAsset = function( id ) { 526 if ( !loaded[id] ) { 527 let asset = assets.js[id]; 528 if ( typeof asset === 'object' && 'event' in asset ) { 529 if ( asset?.requires) { 530 loadAsset( asset.requires ); 531 } 532 document.dispatchEvent( new CustomEvent( asset.event, { 533 detail: { 534 container: container, 535 } 536 } ) ); 537 } 538 loaded[id] = true; 539 } 540 }; 541 // Iterate through assets.js object and add script to head 542 for ( const [ id, value ] of Object.entries(assets.js)) { 543 // Check if the script with the given ID already exists 544 if ( !document.getElementById( id + '-js' ) ) { 545 // Create a new script element for the JavaScript file 546 const script = document.createElement('script'); 547 script.id = id + '-js'; 548 script.async = true; 549 if ( typeof value === 'object' ) { 550 // add locale data 551 if ( 'locale' in value && value.locale ) { 552 script.dataset.locale = value.locale; 553 } 554 script.src = value.url.match(/^http/g) ? value.url : baseURL + value.url; 555 } else { 556 script.src = value.match(/^http/g) ? value : baseURL + value; 557 } 558 // listen for loads so we execute the real onload hooks once all files are loaded (or errorred out) 559 script.onload = () => loadedListener(id); 560 script.onerror = () => loadedListener(id); 561 // Append the script to the document head 562 document.head.appendChild(script); 563 } 564 } 565 } 566 } 567 } 568 } 569} 570document.addEventListener('DOMContentLoaded', () => em_setup_scripts( document )); 571 572// WP List Tables front-end stuff 573const setupListTable = function( listTable ) { 574 // handle checks of multiple items using shift 575 const checkboxes = listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]' ); 576 const listTableForm = listTable.querySelector('form.em-list-table-form'); 577 let lastChecked; 578 579 //Pagination link clicks 580 listTable.querySelectorAll('.tablenav-pages a').forEach( el => { 581 el.addEventListener('click', function ( e ) { 582 e.preventDefault(); 583 //get page no from url, change page, submit form 584 let match = el.href.match(/#[0-9]+/); 585 if ( match != null && match.length > 0 ) { 586 let pno = match[0].replace('#', ''); 587 listTableForm.querySelector('input[name=pno]').val(pno); 588 } else { 589 // new way 590 let url = new URL(el.href); 591 if ( url.searchParams.has('paged') ) { 592 listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = url.searchParams.get('paged') ); 593 } else { 594 listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = 1 ); 595 } 596 } 597 listTableForm.requestSubmit(); 598 return false; 599 }); 600 }); 601 // Pagination - Input page number 602 listTable.querySelectorAll('.tablenav-pages input[name=paged]').forEach( function ( input ){ 603 input.addEventListener('change', function (e) { 604 e.preventDefault(); 605 let last = listTableForm.querySelector('.tablenav-pages a.last-page'); 606 if ( last ) { 607 // check val isn't more than last page 608 let url = new URL(last.href); 609 if ( url.searchParams.has('paged') ) { 610 let lastPage = parseInt(url.searchParams.get('paged')); 611 if ( parseInt(input.value) > lastPage ) { 612 input.value = lastPage; 613 } 614 } 615 } else { 616 // make sure it's less than current page, we're on last page already 617 let lastPage = listTableForm.querySelector('input[name=pno]'); 618 if (lastPage && lastPage.value && parseInt(input.value) > parseInt(lastPage.value)) { 619 input.value = lastPage.value; 620 e.preventDefault(); 621 return false;
622 } 623 } 624 listTableForm.querySelectorAll('input[name=pno]').forEach( el => el.value = input.value ); 625 listTableForm.requestSubmit(); 626 return false; 627 }); 628 }); 629 630 // handle checkboxes 631 listTable.addEventListener('click', function(e){ 632 // handle selecting all checkboxes 633 if( e.target.matches('.manage-column.column-cb input') ){ 634 listTable.querySelectorAll('.check-column input').forEach( function( checkbox ){ 635 checkbox.checked = e.target.checked; 636 checkbox.closest('tr').classList.toggle('selected', e.target.checked); 637 // enable/disable bulk actions filter 638 listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){ 639 e.target.checked ? el.removeAttribute('disabled') : el.setAttribute('disabled', true); 640 e.target.checked ? el.classList.remove('disabled') : el.classList.add('disabled', true); 641 }); 642 }); 643 } else if ( e.target.matches('tbody .check-column input[type="checkbox"]') ) { 644 // handle multiple checks 645 let inBetween = false; 646 if ( e.shiftKey ) { 647 checkboxes.forEach(checkbox => { 648 if ( checkbox === e.target || checkbox === lastChecked ) { 649 inBetween = !inBetween; 650 } 651 if ( inBetween || checkbox === lastChecked ) { 652 checkbox.checked = lastChecked.checked; 653 } 654 checkbox.closest('tr').classList.toggle('selected', checkbox.checked); 655 }); 656 } else { 657 e.target.closest('tr').classList.toggle('selected', e.target.checked); 658 } 659 // enable/disable bulk actions filter 660 let somethingSelected = e.target.checked || listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]:checked' ).length > 0; 661 listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){ 662 somethingSelected ? el.removeAttribute('disabled') : el.setAttribute('disabled', true); 663 somethingSelected ? el.classList.remove('disabled') : el.classList.add('disabled', true); 664 }); 665 lastChecked = e.target; 666 } else if ( e.target.closest('tbody td.column-primary') ) { 667 // handle row expand/collapse 668 if ( e.target.matches('a[href],button:not(.toggle-row)') ) return true; // allow links to pass 669 e.preventDefault(); 670 let rowExpandTrigger = e.target.closest('td.column-primary'); 671 let row = rowExpandTrigger.closest('tr'); 672 if( row.classList.contains('expanded') ) { 673 row.classList.remove('expanded'); 674 row.classList.add('collapsed'); 675 rowExpandTrigger.querySelector('button.toggle-row').classList.remove('expanded'); 676 } else { 677 row.classList.add('expanded'); 678 row.classList.remove('collapsed'); 679 rowExpandTrigger.querySelector('button.toggle-row').classList.add('expanded'); 680 } 681 } 682 }); 683 // disable filter since no checkboxes initially selected 684 listTable.querySelectorAll('.tablenav .bulkactions-input').forEach( (el) => { 685 el.querySelectorAll('input,select,button').forEach(function (el) { 686 el.setAttribute('disabled', true); 687 el.classList.add('disabled', true); 688 }) 689 }); 690 691 // Sorting by headers 692 listTable.querySelector('thead').addEventListener('click', function( e ) { 693 // get th element 694 let th = e.target.tagName.toLowerCase() === 'th' ? e.target : e.target.closest('th'); 695 if( th && (th.classList.contains('sorted') || th.classList.contains('sortable')) ) { 696 e.preventDefault(); 697 // add args to form and submit it 698 let params = ( new URL( th.querySelector('a').href) ).searchParams; 699 if ( params.get('orderby') ) { 700 listTableForm.querySelector('input[name="orderby"]').value = params.get('orderby'); 701 let order = params.get('order') ? params.get('order') : 'asc'; 702 listTableForm.querySelector('input[name="order"]').value = order; 703 listTableForm.requestSubmit(); 704 } 705 } 706 }); 707 708 // show/hide filters trigger 709 let filterTrigger = listTable.querySelector('button.filters-trigger'); 710 if( filterTrigger ) { 711 filterTrigger.addEventListener('click', function(e){ 712 e.preventDefault(); 713 if( filterTrigger.classList.contains('hidden') ) { 714 listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.remove('hidden') ); 715 filterTrigger.classList.remove('hidden'); 716 filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelHide); 717 if( '_tippy' in filterTrigger ){ 718 filterTrigger._tippy.setContent( filterTrigger.dataset.labelHide ); 719 } 720 } else { 721 listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.add('hidden') ); 722 filterTrigger.classList.add('hidden'); 723 filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelShow); 724 if( '_tippy' in filterTrigger ){ 725 filterTrigger._tippy.setContent( filterTrigger.dataset.labelShow ); 726 } 727 } 728 }); 729 listTable.addEventListener('em_resize', function(){ 730 if( listTable.classList.contains('size-small') ) { 731 filterTrigger.classList.remove('hidden'); // force hide click 732 filterTrigger.click(); 733 } 734 }); 735 } 736 737 // EXPAND/COLLAPSE - RESPONSIVE 738 // handle expand/collapse in responsive mode when clicking the expand/collapse (all) 739 let expandTrigger = listTable.querySelector('button.small-expand-trigger'); 740 if( expandTrigger ) { 741 // detect click and add expand class to table, expanded class to trigger 742 expandTrigger.addEventListener('click', function(e){ 743 e.preventDefault(); 744 if( expandTrigger.classList.contains('expanded') ) { 745 listTable.querySelectorAll('tbody tr.expanded, tbody button.toggle-row.expanded').forEach( el => el.classList.remove('expanded') ); 746 listTable.classList.remove('expanded'); 747 expandTrigger.classList.remove('expanded'); 748 } else { 749 listTable.querySelectorAll('tbody tr, tbody button.toggle-row').forEach( el => { 750 el.classList.add('expanded'); 751 el.classList.remove('collapsed'); 752 }); 753 listTable.classList.add('expanded'); 754 expandTrigger.classList.add('expanded'); 755 } 756 }); 757 } 758 759 // handle filters when pressing enter, submitting a search 760 listTable.querySelectorAll('.tablenav .actions input[type="text"]').forEach( function (input) { 761 input.addEventListener('keypress', function (e) { 762 let keycode = (e.keyCode ? e.keyCode : e.which); 763 if (keycode === 13) { 764 e.preventDefault(); 765 listTableForm.requestSubmit(); 766 } 767 }); 768 }); 769 770 // handle size breakpoints 771 let breakpoints = { 772 'xsmall' : 465, 773 'small' : 640, 774 'medium' : 930, 775 'large' : false, 776 } 777 // submissions 778 EM_ResizeObserver( breakpoints, [ listTable ] ); 779 780 //Widgets and filter submissions 781 listTableForm.addEventListener('submit', function (e) { 782 e.preventDefault(); 783 //append loading spinner 784 listTable.classList.add('em-working'); 785 let loadingDiv = document.createElement('div'); 786 loadingDiv.id = 'em-loading'; 787 listTable.append(loadingDiv); 788 listTable.querySelectorAll('.em-list-table-error-notice').forEach( el => el.remove() ); 789 //ajax call 790 fetch( EM.ajaxurl, { method: 'POST', body: new FormData(listTableForm) } ).then( function( response ) { 791 if ( response.ok ) { 792 return response.text(); 793 } else { 794 throw new Error('Network Response ' + response.status); 795 } 796 }).then( function( data ) { 797 if ( !data ) { 798 throw new Error('Empty string received'); 799 } 800 if (!listTable.classList.contains('frontend')) { 801 // remove modals as they are supplied again on the backend 802 listTableForm.querySelectorAll('.em-list-table-trigger').forEach(function ( trigger ) { 803 let modal = document.querySelector(trigger.rel); 804 if( modal ) { 805 modal.remove(); 806 } 807 }); 808 } 809 // get new data as DOM object 810 let wrapper = document.createElement('div'); 811 wrapper.innerHTML = data; 812 let newListTable = wrapper.firstElementChild; 813 // replace old table with new table 814 listTable.replaceWith( newListTable ); 815 // 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! 816 document.dispatchEvent( new CustomEvent('em_list_table_filtered', { detail: { prevListTable: listTable, listTable: newListTable, form: newListTable.firstElementChild, data: data } }) ); 817 }).catch( function( error ) { 818 let div = document.createElement('div'); 819 div.innerHTML = '<p>There was an unexpected error retrieving table data with error <code>' + error.message + '</code>
819, please try again or contact an administrator.</p>'; 820 div.setAttribute('class', 'em-warning error em-list-table-error-notice'); 821 listTable.querySelector('.table-wrap').before(div); 822 loadingDiv.remove(); 823 listTable.classList.remove('em-working'); 824 }); 825 return false; 826 }); 827 828 //Settings & Export Modal 829 830 /** 831 * Handle trigger of settings and export modals. 832 */ 833 listTable.querySelectorAll('.em-list-table-trigger').forEach( trigger => { 834 trigger.addEventListener('click', function (e) { 835 e.preventDefault(); 836 let modal = document.querySelector( trigger.getAttribute('rel') ); 837 openModal(modal); 838 }); 839 }); 840 841 /** 842 * Handle submission of settings forms, by copying over hidden input values such as cols and limit to main form. 843 */ 844 listTable.querySelectorAll('.em-list-table-settings form').forEach( form => { 845 form.addEventListener('submit', function (e) { 846 e.preventDefault(); 847 //we know we'll deal with cols, so wipe hidden value from main 848 let modal = form.closest('.em-modal'); 849 let match = listTableForm.querySelector("[name=cols]"); 850 match.value = ''; 851 let tableCols = form.querySelectorAll('.em-list-table-cols-selected .item'); 852 tableCols.forEach( function (item_match) { 853 if (!item_match.classList.contains('hidden')) { 854 if (match.value !== '') { 855 match.value = match.value + ',' + item_match.getAttribute('data-value'); 856 } else { 857 match.value = item_match.getAttribute('data-value'); 858 } 859 } 860 }); 861 // sync row count 862 let limit = form.querySelector('select[name="limit"]'); 863 if( limit ) { 864 listTableForm.querySelector('[name="limit"]').value = limit.value; 865 } 866 // sync custom inputs 867 form.querySelectorAll('[data-setting]').forEach( function( input ) { 868 listTableForm.querySelectorAll('[name="'+input.name+'"]').forEach( el => el.remove() ); 869 let persisted = input.cloneNode(true); 870 persisted.classList.add('hidden') 871 listTableForm.appendChild( persisted ); 872 }); 873 closeModal(modal); 874 // send events out 875 modal.dispatchEvent( new CustomEvent('submitted') ); 876 listTable.dispatchEvent( new CustomEvent( 'em_list_table_settings_submitted', { 877 detail: { 878 listTableForm: listTableForm, 879 form: form, 880 modal: modal 881 }, 882 bubbles: true 883 }) ); 884 // submit main form 885 listTableForm.requestSubmit(); 886 }); 887 }); 888 889 /** 890 * Handle submission of export forms, by copying over filters and hidden inputs with the data-persist attribute from main list table form. 891 */ 892 listTable.querySelectorAll('.em-list-table-export > form').forEach( function( exportForm ) { 893 exportForm.addEventListener('submit', function(e) { 894 var formFilters = this.querySelector('.em-list-table-filters'); 895 if ( formFilters ) { 896 // get all filter inputs in main list table form and copy over so export inherits all filters to output right results 897 let filters = listTableForm.querySelectorAll('.em-list-table-filters [name]'); 898 formFilters.innerHTML = ''; // Empty the filters, none to copy over 899 if( filters ) { 900 filters.forEach( function( filter ) { 901 formFilters.appendChild( filter.cloneNode(true) ); 902 }); 903 } 904 let peristentData = listTableForm.querySelectorAll('[data-persist]'); 905 if( peristentData ) { 906 peristentData.forEach( function( filter ) { 907 formFilters.appendChild( filter.cloneNode(true) ); 908 }); 909 } 910 } 911 }); 912 }); 913 914 // sortables 915 listTable.querySelectorAll(".em-list-table-cols-sortable").forEach( function(sortable) { 916 Sortable.create( sortable ); 917 }); 918 919 // add trigger 920 document.dispatchEvent( new CustomEvent('em_list_table_setup', { detail: { listTable: listTable, listTableForm: listTableForm } }) ); 921 922 // add extra listeners that we might want to block such as in bulk actions and row actions 923 924 /* ----------------- Row/Bulk Action Handlers ----------------- */ 925 926 const actionMessages = JSON.parse( listTableForm.dataset.actionMessages ); 927 let isBulkAction = false; 928 929 listTable.addEventListener('click', function( e ) { 930 if( e.target.matches('a[data-row_action]') ) { 931 e.preventDefault(); 932 let el = e.target; 933 let tr = el.closest('tr'); 934 935 if( !isBulkAction ) { 936 let confirmation = [] 937 // check if we need to confirm something specific 938 if ( el.dataset.confirmation && el.dataset.confirmation in actionMessages ) { 939 confirmation.push( actionMessages[el.dataset.confirmation] ); 940 } 941 // check context of action and warn then propagate if upstream 942 if ( el.dataset.row_action in actionMessages ) { 943 confirmation.push( actionMessages[el.dataset.row_action] ); 944 } 945 946 if ( confirmation.length > 0 ) { 947 if ( !confirm( confirmation.join("\n\n") ) ) { 948 return false;
949 } 950 } 951 } 952 953 // close dropdown if applicable 954 let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content'); 955 if ( dropdown ) { 956 if ( '_tippy' in dropdown ) { 957 dropdown._tippy.hide(); 958 } 959 } 960 961 // 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 962 if( el.dataset.upstream ) { 963 // block any same upstream_id row so it's loading already pending refresh 964 listTable.querySelectorAll('tr[data-id="' + tr.dataset.id + '"]').forEach( tr => tr.classList.add('loading') ); 965 } 966 967 // prep and fetch/refresh 968 let formData = new FormData( listTableForm ); 969 for( const [key, value] of Object.entries(el.dataset) ) { 970 formData.set(key, value); 971 } 972 formData.set('view', listTable.dataset.view); 973 formData.set('action', listTable.dataset.basename + '_row'); 974 listTableRowAction( tr, formData ); 975 976 return false; // stop propagation 977 } 978 }); 979 980 // Action links (approve/reject etc.) - circumvent if a warning is required 981 listTable.addEventListener( 'click', function( e ) { 982 if( e.target.matches('a[data-row_action]') ) { 983 e.preventDefault(); 984 } 985 }); 986 987 listTable.querySelectorAll('button.em-list-table-bulk-action').forEach( function( button ) { 988 button.addEventListener('click', function (e) { 989 e.preventDefault(); // override default 990 let actionSelector = listTableForm.querySelector('select.bulk-action-selector'); 991 let action = actionSelector.options[actionSelector.selectedIndex]; 992 993 // check if we need to confirm 994 if ( action.dataset.confirm ) { 995 if ( !confirm( action.dataset.confirm ) ) { 996 isBulkAction = false; // just in case 997 return false; 998 } 999 } 1000 1001 isBulkAction = true; 1002 // 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) 1003 let rows = listTableForm.querySelectorAll('tbody .check-column input:checked'); 1004 rows.forEach( function ( checkbox ) { 1005 let actionTrigger = checkbox.parentElement.querySelector('[data-row_action="' + action.value + '"]'); 1006 // check if sibling has the relevant action 1007 if( actionTrigger ) { 1008 let tr = checkbox.closest('tr'); 1009 if ( actionTrigger.dataset.upstream ) { 1010 // check if not already in an upstream process, proceed if not 1011 if ( !tr.classList.contains('loading') ) { // if loading, already in upstream from another row 1012 // trigger the first booking id row in this table, it'll handle upstream stuff 1013 actionTrigger.click(); 1014 } 1015 } else { 1016 // regular action, just click it 1017 actionTrigger.click(); 1018 } 1019 } 1020 }); 1021 isBulkAction = false; 1022 }); 1023 }); 1024 1025 1026 // add a listener to refresh related booking rows if upstream 1027 listTable.addEventListener('em_list_table_row_action_complete', function(e){ 1028 if ( e.detail.upstream ) { 1029 // find any rows other than the current one and trigger a refresh 1030 let currentRow = e.detail.currentRow; 1031 let formData = e.detail.formData; 1032 if( formData.get('row_action') === 'delete' ) { 1033 let feedback = currentRow.querySelector('.column-primary span.em-icon-trash.em-tooltip'); 1034 if ( feedback ) { 1035 listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) { 1036 // apply to all rows of same booking_id except the one we just updated 1037 if ( tr !== currentRow ) { 1038 let td = tr.querySelector('.column-primary'); 1039 td.prepend(feedback.cloneNode(true)); 1040 em_setup_tippy(td); 1041 } 1042 tr.classList.remove('faded-out'); 1043 tr.classList.remove('loading'); 1044 }); 1045 } 1046 } else if( formData.get('row_action') !== 'refresh' ) { 1047 let feedback = currentRow.querySelector('.column-primary span.em-icon.em-tooltip').getAttribute('aria-label'); 1048 formData.set('row_action', 'refresh'); // this is a special action that just refreshes the row 1049 formData.set('feedback', feedback); 1050 listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) { 1051 // apply to all rows of same booking_id except the one we just updated 1052 if( tr !== currentRow ) { 1053 listTableRowAction(tr, formData); 1054 // delete current booking_id and reset isUpstreamAction if we're done 1055 delete isUpstreamAction[e.detail.booking_id]; 1056 if (Object.keys(isUpstreamAction).length) { 1057 isUpstreamAction = false;
1058 } 1059 } 1060 }); 1061 } 1062 } 1063 }); 1064 1065 // setup rows with actions if there are any 1066 listTable.querySelectorAll('td.column-actions a').forEach( (action) => { 1067 action.classList.add('em-tooltip'); 1068 action.setAttribute('aria-label', action.innerText); 1069 }); 1070} 1071 1072let listTableRowAction = function( tr, formData, upstream = false ){ 1073 let listTable = tr.closest('.em-list-table'); 1074 tr.classList.add('loading'); 1075 formData.set('row_id', tr.dataset.id ); 1076 fetch( EM.ajaxurl, { method: 'post', body : formData } ).then( function( response ) { 1077 return response.text(); 1078 }).then( function( html ) { 1079 tr.classList.add('faded-out'); 1080 if ( formData.get('row_action') === 'delete' ) { 1081 // the text provided is the icon, nothing else 1082 tr.querySelectorAll('th.check-column input[type="checkbox"], .em-list-table-actions').forEach( el => el.remove() ); 1083 let td = tr.querySelector('.column-primary'); 1084 let wrapper = document.createElement('div'); 1085 wrapper.innerHTML = html; 1086 let icon = wrapper.firstElementChild; 1087 em_setup_tippy(wrapper); // no actions to set up 1088 td.prepend(icon); 1089 } else { 1090 tr.innerHTML = html 1091 setupListTableExtras(tr); 1092 } 1093 tr.classList.remove('faded-out'); 1094 tr.classList.remove('loading'); 1095 listTable.dispatchEvent( new CustomEvent('em_list_table_row_action_complete', { detail: { currentRow: tr, formData: formData, upstream: upstream } } ) ); 1096 }); 1097} 1098 1099const setupListTableExtras = function( listTable ) { 1100 // setup rows with actions if there are any 1101 listTable.querySelectorAll('td.column-actions a').forEach( (action) => { 1102 action.classList.add('em-tooltip'); 1103 action.setAttribute('aria-label', action.innerText); 1104 }); 1105 // remove tooltips within tooltips in cell tooltips 1106 listTable.querySelectorAll('td .em-list-table-col-tooltip .em-list-table-col-tooltip').forEach( (subtip) => { 1107 subtip.querySelectorAll('.em-tooltip').forEach( el => el.remove() ); 1108 subtip.querySelectorAll('.em-tooltip-content').forEach( el => el.classList.remove('hidden') ); 1109 }); 1110 // set up tippy, selectize etc. 1111 em_setup_tippy( listTable ); 1112 em_setup_selectize( listTable ); 1113} 1114 1115document.addEventListener('em_list_table_filtered', function(e){ 1116 setupListTable( e.detail.listTable ); 1117 // re-setup tippy, selectize etc. 1118 setupListTableExtras( e.detail.listTable ); 1119}); 1120 1121// init 1122document.addEventListener('DOMContentLoaded', function() { 1123 // add back-compat stuff 1124 document.querySelectorAll('.em_obj div.tablenav').forEach( function( tablenav ){ 1125 let em_obj = tablenav.closest('.em_obj'); 1126 em_obj.classList.add('em-list-table','legacy', 'frontend'); 1127 em_obj.querySelector('& > form').classList.add('em-list-table-form'); 1128 }); 1129 // find tables 1130 document.querySelectorAll('.em-list-table').forEach( listTable => setupListTable(listTable) ); 1131}); 1132 1133// add extra setup to bookings list table 1134document.addEventListener('em_list_table_setup' , function(e){ 1135 let listTable = e.detail.listTable; 1136 let listTableForm = e.detail.listTableForm; 1137 if( listTable.classList.contains('em-bookings-table') ) { 1138 1139 // handle submitting the settings modal form with booking-speficic extras 1140 listTable.addEventListener('em_list_table_settings_submitted', function(e){ 1141 let form = e.detail.form; 1142 let listTableForm = e.detail.listTableForm; 1143 // get the views ddm and sync it to the table filter 1144 let views_select = form.querySelector('select[name="view"]'); 1145 if ( views_select ) { 1146 let view_radio = listTableForm.querySelector('[name="view"][value="' + views_select.value + '"]'); 1147 if( view_radio ) { 1148 view_radio.checked = true; // this doesn't trigger an event as we don't want that 1149 } 1150 let view_option = listTableForm.querySelector('button.em-bookings-table-view-option[data-view]'); 1151 if ( view_option ) { 1152 view_option.setAttribute('data-view', views_select.value); 1153 view_option.innerText = views_select.options[views_select.selectedIndex].innerText; 1154 } 1155 } 1156 }); 1157 1158 // setup views dropdown to switch between different booking table views 1159 let views_ddm_options = { 1160 theme : 'light-border', 1161 allowHTML : true, 1162 interactive : true, 1163 trigger : 'manual', 1164 placement : 'bottom', 1165 zIndex : 1000000, 1166 touch: true, 1167 }; 1168 let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; 1169 1170 // TODO unify this with the search view dropdown JS to remove redundant code 1171 listTable.querySelectorAll('.em-bookings-table-views-trigger').forEach( function( trigger ){ 1172 tooltip_vars.content = trigger.parentElement.getAttribute('aria-label'); 1173 let views_tooltip = tippy(trigger.parentElement, tooltip_vars); 1174 let views_content = trigger.parentElement.querySelector('.em-bookings-table-views-options'); 1175 let views_content_parent = views_content.parentElement; 1176 let tippy_content = document.createElement('div'); 1177 views_ddm_options.content = tippy_content; 1178 let views_ddm = tippy(trigger, views_ddm_options); 1179 views_ddm.setProps({ 1180 onShow(instance){ 1181 views_tooltip.disable(); 1182 tippy_content.append(views_content); 1183 }, 1184 onShown(instance){ // keyboard support 1185 views_content.querySelector('input:checked').focus(); 1186 }, 1187 onHidden(instance){ 1188 views_tooltip.enable(); 1189 if( views_content.parentElement !== views_content_parent ) { 1190 views_content_parent.append(views_content); 1191 } 1192 } 1193 }); 1194 let tippy_listener = function(e){ 1195 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1196 e.preventDefault(); 1197 e.stopPropagation(); 1198 trigger._tippy.show(); 1199 views_tooltip.hide(); 1200 } 1201 trigger.addEventListener('click', tippy_listener); 1202 trigger.addEventListener('keydown', tippy_listener); 1203 trigger.firstElementChild.addEventListener('focus', function(e){ 1204 views_ddm.hide(); 1205 views_tooltip.enable(); 1206 views_tooltip.show(); 1207 }); 1208 trigger.firstElementChild.addEventListener('blur', function(){ 1209 views_tooltip.hide(); 1210 }); 1211 1212 // 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. 1213 let $ = jQuery; 1214 $views = $(listTable).find('.em-bookings-table-views'); 1215 $views.on('focus blur', '.em-bookings-table-views-options input', function(){ 1216 if( document.activeElement === this ){ 1217 this.parentElement.classList.add('focused'); 1218 }else{ 1219 this.parentElement.classList.remove('focused'); 1220 } 1221 }); 1222 1223 $views.on('keydown click', '.em-bookings-table-views-options input', function( e ){ 1224 // get relevant vars 1225 if( e.type === 'keydown' && e.which !== 13 ){ 1226 if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { 1227 if (e.which === 38) { 1228 if (this.parentElement.previousElementSibling) { 1229 this.parentElement.previousElementSibling.focus(); 1230 } 1231 } else if (e.which === 40) { 1232 if (this.parentElement.nextElementSibling) { 1233 this.parentElement.nextElementSibling.focus(); 1234 } 1235 } 1236 return false; 1237 } else if ( e.which === 9 ) { 1238 // focus out 1239 views_ddm.hide(); 1240 } 1241 return true; 1242 } 1243 this.checked = true; 1244 let input = $(this); 1245 // mark label selected 1246 input.closest('fieldset').find('label').removeClass('checked'); 1247 input.parent().addClass('checked'); 1248 // get other reference elements we need 1249 let views_wrapper = $(this).closest('.em-bookings-table-views'); 1250 let view_type = this.value; 1251 let trigger = views_wrapper.children('.em-bookings-table-views-trigger'); 1252 let trigger_option = trigger.children('.em-search-view-option'); 1253 // change view, if different 1254 if( view_type !== trigger_option.attr('data-view') ){ 1255 trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); 1256 // remove cols value if it's just a switch in view, so we get default cols (if there is one) 1257 listTableForm.querySelector('input[name="cols"][type="hidden"]').value = ''; 1258 // set the view type and trigger a form submit 1259 listTableForm.requestSubmit(); 1260 } 1261 views_ddm.hide(); 1262 }); 1263 }); 1264 } 1265}); 1266 1267// backcompat for em_bookings_filtered jQuery trigger 1268document.addEventListener('em_list_table_filtered', function( e ){ 1269 if( e.detail.listTable.classList.contains('em-bookings-table') && window.jQuery ) { 1270 jQuery(document).triggerHandler('em_bookings_filtered', [jQuery(e.detail.data), e.detail.listTable, jQuery(e.detail.form)]); // backwards compatibility 1271 } 1272}) 1273 1274function em_setup_datepicker( container ){ 1275 wrap = jQuery(container); 1276 1277 //apply datepickers - jQuery UI (backcompat) 1278 let dateDivs = wrap.find('.em-date-single, .em-date-range'); 1279 if( dateDivs.length > 0 ){ 1280 //default picker vals 1281 var datepicker_vals = { 1282 dateFormat: "yy-mm-dd", 1283 changeMonth: true, 1284 changeYear: true, 1285 firstDay : EM.firstDay, 1286 yearRange:'c-100:c+15', 1287 beforeShow : function( el, inst ){ 1288 em_setup_jquery_ui_wrapper(); 1289 inst.dpDiv.appendTo('#em-jquery-ui'); 1290 } 1291 }; 1292 if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat; 1293 if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange; 1294 jQuery(document).triggerHandler('em_datepicker', datepicker_vals); 1295 //apply datepickers to elements 1296 dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){ 1297 //init the datepicker 1298 var dateInput = jQuery(dateInput); 1299 var dateValue = dateInput.nextAll('input.em-date-input').first(); 1300 var dateValue_value = dateValue.val(); 1301 dateInput.datepicker(datepicker_vals); 1302 dateInput.datepicker('option', 'altField', dateValue); 1303 //now set the value 1304 if( dateValue_value ){ 1305 var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) ); 1306 dateInput.val(this_date_formatted); 1307 dateValue.val(dateValue_value); 1308 } 1309 //add logic for texts 1310 dateInput.on('change', function(){ 1311 if( jQuery(this).val() == '' ){ 1312 jQuery(this).nextAll('.em-date-input').first().val(''); 1313 } 1314 }); 1315 }); 1316 //deal with date ranges 1317 dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){ 1318 //finally, apply start/end logic to this field 1319 dateInput = jQuery(dateInput); 1320 if( dateInput.hasClass('em-date-start') ){ 1321 dateInput.datepicker('option','onSelect', function( selectedDate ) { 1322 //get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element 1323 var startDate = jQuery(this); 1324 var endDate = startDate.parents('.em-date-range').find('.em-date-end').first(); 1325 var startValue = startDate.nextAll('input.em-date-input').first().val(); 1326 var endValue = endDate.nextAll('input.em-date-input').first().val(); 1327 startDate.trigger('em_datepicker_change'); 1328 if( startValue > endValue && endValue != '' ){ 1329 endDate.datepicker( "setDate" , selectedDate ); 1330 endDate.trigger('change').trigger('em_datepicker_change'); 1331 } 1332 endDate.datepicker( "option", 'minDate', selectedDate ); 1333 }); 1334 }else if( dateInput.hasClass('em-date-end') ){ 1335 var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first(); 1336 if( startInput.val() != '' ){ 1337 dateInput.datepicker('option', 'minDate', startInput.val()); 1338 } 1339 } 1340 }); 1341 } 1342 1343 // datpicker - new format 1344 let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range'); 1345 if( datePickerDivs.length > 0 ){ 1346 // wrappers and locale 1347 let datepicker_wrapper = jQuery('#em-flatpickr'); 1348 if( datepicker_wrapper.length === 0 ){ 1349 datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body'); 1350 } 1351 // locale 1352 if( 'locale' in EM.datepicker ){ 1353 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 1354 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 1355 } 1356 //default picker vals 1357 let datepicker_onChanging; 1358 let datepicker_options = { 1359 appendTo : datepicker_wrapper[0], 1360 dateFormat: "Y-m-d", 1361 disableMoble : "true", 1362 allowInput : true, 1363 onChange : [function( selectedDates, dateStr, instance ){ 1364 if ( datepicker_onChanging !== selectedDates) { 1365 let wrapper = jQuery(instance.input).closest('.em-datepicker'); 1366 let data_wrapper = wrapper.find('.em-datepicker-data'); 1367 let inputs = data_wrapper.find('input'); 1368 let dateFormat = function(d) { 1369 let month = '' + (d.getMonth() + 1), 1370 day = '' + d.getDate(), 1371 year = d.getFullYear(); 1372 if (month.length < 2) month = '0' + month; 1373 if (day.length < 2) day = '0' + day; 1374 return [year, month, day].join('-'); 1375 } 1376 if ( selectedDates.length === 0 ){ 1377 if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ) { 1378 let input = instance.input.classList.contains('em-date-input-start') ? inputs[0] : input
1378s[1]; 1379 input.setAttribute('value', ''); 1380 if ( inputs.filter(input => input.value !== '').length === 0 ) { 1381 wrapper.removeClass('has-value'); 1382 } 1383 } else { 1384 wrapper.removeClass('has-value'); 1385 inputs.attr('value', ''); 1386 if( instance.config.mode === 'multiple' ) { 1387 // empty pill selection 1388 let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates'); 1389 if (datesEl) { 1390 datesEl.querySelectorAll('.item:not(.clear-all)').forEach( el => el.remove() ); 1391 datesEl.classList.remove('has-value'); 1392 } 1393 } 1394 } 1395 } else { 1396 wrapper.addClass('has-value'); 1397 if ( instance.config.mode === 'range' && selectedDates[1] !== undefined ) { 1398 // deal with end date 1399 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1400 inputs[1].setAttribute('value', dateFormat(selectedDates[1])); 1401 } else if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){ 1402 if( instance.input.classList.contains('em-date-input-start') ){ 1403 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1404 // set min-date of other datepicker 1405 let fp; 1406 if( wrapper.attr('data-until-id') ){ 1407 let fp_inputData = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end'); 1408 fp = fp_inputData[0]._flatpickr; 1409 }else { 1410 fp = wrapper.find('.em-date-input-end')[0]._flatpickr; 1411 } 1412 if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){ 1413 fp.setDate(selectedDates[0], false); 1414 inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0])); 1415 } 1416 fp.set('minDate', selectedDates[0]); 1417 }else{ 1418 inputs[1].setAttribute('value', dateFormat(selectedDates[0])); 1419 } 1420 } else if ( instance.config.mode === 'multiple' ){ 1421 inputs[0].setAttribute('value', dateStr); 1422 // Sort the selected dates chronologically 1423 selectedDates.sort(function(a, b) { return a - b; }); 1424 // Build pill selection for multiple dates 1425 let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates'); 1426 datesEl.classList.add('has-value'); 1427 if ( datesEl ) { 1428 // Remove existing date pills but preserve the clear-all button 1429 datesEl.querySelectorAll('.item:not(.clear-all)').forEach(el => el.remove()); 1430 1431 // Sort dates chronologically 1432 selectedDates.sort((a, b) => a - b); 1433 1434 // Group sequential dates into ranges 1435 let groups = [], currentGroup = []; 1436 selectedDates.forEach((date, i) => { 1437 if (currentGroup.length === 0) { 1438 currentGroup.push(date); 1439 } else { 1440 let lastDate = currentGroup[currentGroup.length - 1]; 1441 let diffDays = (date - lastDate) / (1000 * 3600 * 24); 1442 if (diffDays === 1) { 1443 currentGroup.push(date); 1444 } else { 1445 groups.push(currentGroup); 1446 currentGroup = [date]; 1447 } 1448 } 1449 if (i === selectedDates.length - 1) groups.push(currentGroup); 1450 }); 1451 1452 // Insert pills and maintain date values 1453 groups.forEach(group => { 1454 let div = document.createElement('div'); 1455 div.className = 'item'; 1456 let formattedDates = group.map(date => instance.formatDate(date, 'Y-m-d')); 1457 div.dataset.date = formattedDates.join(','); 1458 let startText = instance.formatDate(group[0], instance.config.altFormat); 1459 let endText = instance.formatDate(group[group.length - 1], instance.config.altFormat); 1460 div.innerHTML = `<span>${group.length > 1 ? startText + ' - ' + endText : startText}</span><a href="#" class="remove" tabindex="-1" title="Remove">Ã</a>`; 1461 datesEl.insertBefore(div, datesEl.querySelector('.clear-all')); 1462 }); 1463 } 1464 } else { 1465 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1466 } 1467 } 1468 inputs.trigger('change');
1469 let current_date = data_wrapper.attr('date-value'); 1470 data_wrapper.attr('data-value', inputs.toArray().map(input => input.value).filter(value => value !== '').join(',')); 1471 if( current_date === dateStr ) data_wrapper.trigger('change'); 1472 wrapper[0].dispatchEvent( new CustomEvent('datepicker-onChange', { detail: { selectedDates : selectedDates, dateStr: dateStr, instance: instance } }) ); 1473 } 1474 datepicker_onChanging = null; // reset regardless, since it's to prevent onClose firing this twice 1475 }], 1476 onClose : function( selectedDates, dateStr, instance ){ 1477 // deal with single date choice and clicking out 1478 if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){ 1479 if(selectedDates.length === 1){ 1480 instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection 1481 } 1482 } else { 1483 // trigger an onChange 1484 datepicker_options.onChange[0](selectedDates, dateStr, instance); 1485 datepicker_onChanging = selectedDates; // set flag to prevent onChange firing twice 1486 } 1487 }, 1488 locale : {}, 1489 }; 1490 if( EM.datepicker.format !== datepicker_options.dateFormat ){ 1491 datepicker_options.altFormat = EM.datepicker.format; 1492 datepicker_options.altInput = true; 1493 } 1494 jQuery(document).triggerHandler('em_datepicker_options', datepicker_options); 1495 //apply datepickers to elements 1496 datePickerDivs.each( function(i,datePickerDiv) { 1497 // hide fallback fields, show range or single 1498 datePickerDiv = jQuery(datePickerDiv); 1499 datePickerDiv.find('.em-datepicker-data').addClass('hidden'); 1500 let isRange = datePickerDiv.hasClass('em-datepicker-range'); 1501 let altOptions = {}; 1502 if( datePickerDiv.attr('data-datepicker') ){ 1503 altOptions = JSON.parse(datePickerDiv.attr('data-datepicker')); 1504 if( typeof altOptions !== 'object' ){ 1505 altOptions = {}; 1506 } 1507 } 1508 let otherOptions = {}; 1509 if( datePickerDiv.find('script.datepicker-options').length > 0 ){ 1510 otherOptions = JSON.parse( datePickerDiv.find('script.datepicker-options').text() ); 1511 if( typeof altOptions !== 'object' ){ 1512 otherOptions = {}; 1513 } 1514 } 1515 let options = Object.assign({}, datepicker_options, altOptions, otherOptions); // clone, mainly shallow concern for 'mode' 1516 options.mode = isRange ? 'range' : 'single'; 1517 if ( datePickerDiv.hasClass('em-datepicker-multiple') ) { 1518 options.mode = 'multiple'; 1519 } 1520 if( isRange && 'onClose' in options ){ 1521 options.onClose = [function( selectedDates, dateStr, instance ){ 1522 if(selectedDates.length === 1){ // deal with single date choice and clicking out 1523 instance.setDate([selectedDates[0],selectedDates[0]], true); 1524 } 1525 }]; 1526 } 1527 if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator'); 1528 if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format'); 1529 let FPs = datePickerDiv.find('.em-date-input'); 1530 //if ( FPs.hasClass(flatpickr-input) ) return; // already initialized 1531 if ( FPs[0].tagName.toLowerCase() === 'input' ) { 1532 FPs.attr('type', 'text'); 1533 } else { 1534 options.wrap = true; 1535 FPs.find('input[type="hidden"]').attr('type', 'text'); 1536 } 1537 FPs.flatpickr(options); 1538 }); 1539 em_setup_datepicker_dates( datePickerDivs ); 1540 // fire trigger 1541 jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]); 1542 container.dispatchEvent( new CustomEvent('em_datepicker_loaded', { bubbles: true, detail: { container: wrap, datepickers: datePickerDivs } } ) ); 1543 } 1544} 1545 1546function em_setup_datepicker_dates( container ) { 1547 let datePickerContainer = jQuery(container); 1548 let datePickerDivs = datePickerContainer.first().hasClass('em-datepicker') ? datePickerContainer : datePickerContainer.find('.em-datepicker, .em-datepicker-range') ; 1549 // add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs 1550 datePickerDivs.each( function(i,datePickerDiv) { 1551 datePickerDiv = jQuery(datePickerDiv); 1552 let FPs = datePickerDiv.find('.em-date-input'); 1553 //if ( FPs.hasClass(flatpickr-input) ) return; 1554 let inputs = datePickerDiv.find('.em-datepicker-data input'); 1555 inputs.attr('type', 'hidden'); // hide so not tabbable 1556 if( datePickerDiv.hasClass('em-datepicker-until') ){ 1557 let start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr; 1558 let end_fp; 1559 if( datePickerDiv.attr('data-until-id') ){ 1560 end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr; 1561 }else{ 1562 end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1563 if( inputs[1] && inputs[1].value ) { 1564 end_fp.setDate(inputs[1].value, false, 'Y-m-d'); 1565 } 1566 } 1567 if( inputs[0] && inputs[0].value ){ 1568 start_fp.setDate(inputs[0].value, false, 'Y-m-d'); 1569 end_fp.set('minDate', inputs[0].value); 1570 } 1571 start_fp._inputData = inputs[0] ? [inputs[0]] : []; 1572 end_fp._inputData = inputs[1] ? [inputs[1]] : []; 1573 }else if( datePickerDiv.hasClass('em-datepicker-multiple') ){ 1574 // handle multiple pre-loaded dates 1575 if( inputs[0] && inputs[0].value ){ 1576 let datesArray = inputs[0].value.split(','); 1577 FPs[0]._flatpickr.setDate(datesArray, true, 'Y-m-d'); 1578 } 1579 FPs[0]._flatpickr._inputData = [ inputs[0] ]; 1580 }else{ 1581 let dates = []; 1582 FPs[0]._flatpickr._inputData = []; 1583 inputs.each( function( i, input ){ 1584 if( input.value ){ 1585 dates.push(input.value); 1586 FPs[0]._flatpickr._inputData.push(input); 1587 } 1588 }); 1589 FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d'); 1590 } 1591 }); 1592} 1593 1594/** 1595 * Deregister the datepicker 1596 * @param wrap 1597 */ 1598function em_unsetup_datepicker( wrap ) { 1599 wrap.querySelectorAll(".em-datepicker .em-date-input.flatpickr-input").forEach( function( el ){ 1600 if( '_flatpickr' in el ){ 1601 el._flatpickr.destroy(); 1602 } 1603 }); 1604} 1605 1606/** 1607 * Handle the remove button for each date selection pill 1608 */ 1609document.addEventListener('click', function(e) { 1610 if ( !e.target.closest('.em-datepicker-dates .item:not(.clear-all) .remove') ) return; 1611 1612 e.preventDefault(); 1613 const pill = e.target.closest('.item'); 1614 const datesContainer = pill.closest('.em-datepicker-dates'); 1615 const datepickerContainer = datesContainer.closest('.em-datepicker'); 1616 const dateInput = datepickerContainer.querySelector('.em-date-input'); 1617 1618 // Remove pill 1619 pill.remove(); 1620 1621 // Rebuild dates array from remaining pills 1622 const newDates = []; 1623 datesContainer.querySelectorAll('.item:not(.clear-all)').forEach(item => { 1624 const dates = item.dataset.date.split(','); 1625 dates.forEach(date => newDates.push(date)); 1626 }); 1627 1628 // Update Flatpickr instance 1629 const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr; 1630 if (fp) fp.setDate(newDates, true, 'Y-m-d'); 1631 1632 // Update hidden input 1633 const altInput = datepickerContainer.querySelector('.em-datepicker-data input'); 1634 if (altInput) { 1635 altInput.value = newDates.join(','); 1636 altInput.dispatchEvent(new Event('change')); 1637 } 1638}); 1639 1640/** 1641 * Handle the Clear All button 1642 */ 1643document.addEventListener('click', function(e) { 1644 if ( !e.target.closest('.em-datepicker-dates .clear-all') ) return; 1645 1646 e.preventDefault(); 1647 const datesContainer = e.target.closest('.em-datepicker-dates'); 1648 const datepickerContainer = datesContainer.closest('.em-datepicker'); 1649 const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr; 1650 1651 // Remove all pills 1652 datesContainer.querySelectorAll('.item:not(.clear-all)').forEach( item => item.remove() ); 1653 1654 // Clear Flatpickr instance 1655 if (fp) fp.clear(); 1656 1657 // Update hidden input 1658 const altInput = datepickerContainer.querySelector('.em-datepicker-data input'); 1659 if (altInput) { 1660 altInput.value = ''; 1661 altInput.dispatchEvent(new Event('change')); 1662 } 1663}); 1664 1665 1666 1667function em_setup_timepicker( container ){ 1668 wrap = jQuery(container); 1669 var timepicker_options = { 1670 step:15 1671 } 1672 timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A'; 1673 jQuery(document).triggerHandler('em_timepicker_options', timepicker_options); 1674 wrap.find(".em-time-input").em_timepicker(timepicker_options).each( function(i, el){ 1675 this.dataset.seconds = this.value ? jQuery(this).em_timepicker('getSecondsFromMidnight') : ''; 1676 }); 1677 1678 /** 1679 * A function that retargets an the change event to the .em-time-range enclosing div whilst maintinaing the originally triggered target. 1680 * This is done because the em_timepicker short-circuits the bubbling. 1681 * 1682 * @param {Event} e - The original event to be retargeted. 1683 */ 1684 let retargetEvent = function(e) { 1685 e.stopPropagation(); 1686 const customEvent = new CustomEvent('change', { 1687 bubbles: true, 1688 cancelable: true, 1689 detail: { target: e.target } 1690 }); 1691 1692 // Override the target getter to return the original element 1693 Object.defineProperty(customEvent, 'target', {
1694 configurable: true, 1695 get: () => e.target, 1696 }); 1697 e.target.closest('.em-time-range').dispatchEvent( customEvent ); 1698 }; 1699 1700 // Keep the duration between the two inputs. 1701 wrap.find(".em-time-range input.em-time-start").each( function(i, el){ 1702 var time = jQuery(el); 1703 time.data('oldTime', time.em_timepicker('getSecondsFromMidnight')); 1704 }).on('change', function( e ) { 1705 var start = jQuery(this); 1706 var wrapper = start.closest('.em-time-range'); 1707 var end = wrapper.find('.em-time-end').first(); 1708 if ( end.val() ) { // Only update when second input has a value. 1709 // Calculate duration. 1710 var oldTime = start.data('oldTime'); 1711 var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000; 1712 var time = start.em_timepicker('getSecondsFromMidnight'); 1713 if( this.value && end.em_timepicker('getSecondsFromMidnight') >= oldTime ){ 1714 // Calculate and update the time in the second input. 1715 end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration)); 1716 } 1717 start.data('oldTime', time); 1718 } 1719 if ( start.val() || end.val() ) { 1720 wrapper.find('.em-time-all-day').prop('checked', false).prop('indeterminate', false); 1721 } 1722 this.dataset.seconds = start.val() ? start.em_timepicker('getSecondsFromMidnight') : ''; 1723 retargetEvent(e); 1724 }); 1725 // Validate. 1726 container.querySelectorAll('.em-time-range').forEach( el => el.addEventListener('change', function (e) { 1727 if ( e.target.matches('input.em-time-end') ) { 1728 let end = jQuery(e.target); 1729 e.target.dataset.seconds = end.val() ? end.em_timepicker('getSecondsFromMidnight') : ''; 1730 let start = end.prevAll('.em-time-start'); 1731 let wrapper = e.target.closest('.event-form-when, .em-time-range'); 1732 let start_date_element = wrapper.querySelector('.em-date-end'); 1733 let end_date_element = wrapper.querySelector('.em-date-start'); 1734 let start_date = start_date_element ? start_date_element.value : ''; 1735 let end_date = end_date_element ? end_date_element.value : ''; 1736 if ( start.val() ) { 1737 let hasError = start.em_timepicker('getTime') > end.em_timepicker('getTime') && (!end_date || start_date === end_date); 1738 e.target.classList.toggle('error', hasError); 1739 } 1740 if (end_date_element) { 1741 wrapper.querySelectorAll('.em-time-all-day').forEach(function (checkbox) { 1742 checkbox.checked = false; 1743 checkbox.indeterminate = false; 1744 }); 1745 } 1746 } else if ( e.target.matches('.em-date-end') ) { 1747 jQuery(e.target.closest('.event-form-when')).find('.em-time-end').trigger('change'); 1748 } else if ( e.target.matches('input.em-time-all-day') ) { 1749 e.currentTarget.querySelectorAll('.em-time-input').forEach(function (input) { 1750 input.readOnly = e.target.checked; 1751 }); 1752 if ( e.target.checked ) { 1753 // set 12am and 11:59pm for start/end times 1754 e.currentTarget.querySelectorAll('.em-time-start').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 00:00:00') ) ); 1755 e.currentTarget.querySelectorAll('.em-time-end').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 23:59:59') ) ); 1756 } 1757 } 1758 }) ); 1759 // listen to and dispatch the event 1760 wrap.find(".em-time-range input.em-time-end").on('change', retargetEvent ); 1761} 1762 1763function em_unsetup_timepicker( container ) { 1764 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 1765} 1766 1767let em_close_other_selectized = function(){ 1768 // find all other selectized items and close them 1769 let control = this.classList.contains('selectize-control') ? this.closest('.em-selectize.selectize-control') : this; 1770 document.querySelectorAll('.em-selectize.dropdown-active').forEach( function( el ){ 1771 if( el !== control && 'selectize' in el.previousElementSibling) { 1772 el.previousElementSibling.selectize.close(); 1773 } 1774 }); 1775} 1776 1777document.addEventListener('events_manager_js_loaded', function(){ 1778 EM_Selectize.define('multidropdown', function( options ) { 1779 if( !this.$input.hasClass('multidropdown') ) return; 1780 let s = this; 1781 let s_setup = s.setup; 1782 let s_refreshOptions = s.refreshOptions; 1783 let s_open = s.open; 1784 let s_close = s.close; 1785 let placeholder; 1786 let placeholder_text 1787 let placeholder_default; 1788 let placeholder_label; 1789 let counter; 1790 let isClosing = false;
1791 this.changeFunction = function() { 1792 let items = s.getValue(); 1793 let selected_text = this.$input.attr('data-selected-text') ? this.$input.attr('data-selected-text') : '%d Selected'; 1794 counter.children('span.selected-text').text(selected_text.replace('%d', items.length)); 1795 if( items.length > 0 ) { 1796 counter.removeClass('hidden'); 1797 placeholder_text.text( placeholder_label ); 1798 s.$control_input.attr('placeholder', s.$input.attr('placeholder')); 1799 } else { 1800 counter.addClass('hidden'); 1801 placeholder_text.text( placeholder_default ); 1802 } 1803 } 1804 this.setup = function() { 1805 s_setup.apply(s); 1806 s.isDropdownClosingPlaceholder = false; 1807 // add section to top of selection to show the dropdown text 1808 placeholder = jQuery('<div class="em-selectize-placeholder"></div>').prependTo(s.$wrapper); 1809 let clear_text = this.$input.attr('data-clear-text') ? this.$input.attr('data-clear-text') : 'Clear Selection'; 1810 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); 1811 placeholder_text = jQuery('<span class="placeholder-text"></span>').appendTo(placeholder); 1812 placeholder_default = s.$input.attr('data-default') ? s.$input.attr('data-default') : s.$input.attr('placeholder'); 1813 placeholder_label = s.$input.attr('data-label') ? s.$input.attr('data-label') : s.$input.attr('placeholder'); 1814 placeholder_text.text( placeholder_default ); 1815 s.$dropdown.prepend(s.$control_input.parent()); 1816 s.on('dropdown_close', function() { 1817 s.$wrapper.removeClass('dropdown-active'); 1818 }); 1819 s.on('dropdown_open', function() { 1820 s.$wrapper.addClass('dropdown-active'); 1821 s.$control_input.val(''); 1822 }); 1823 s.on('change', this.changeFunction); 1824 placeholder.on('focus blur click', function (e) { 1825 // only if we're clicking on the placeholder 1826 if( this.matches('.em-selectize-placeholder') ) { 1827 if ( !s.isOpen && e.type !== 'blur' ){ 1828 s.open(); 1829 } else if ( s.isOpen && e.type !== 'focus' ) { 1830 s.close(); 1831 } 1832 } 1833 }).on('focus blur click mousedown mouseup', function( e ){ 1834 if( this.matches('.em-selectize-placeholder') ) { 1835 // stope selectize doing anything to our own open/close actions 1836 e.stopPropagation(); 1837 e.preventDefault(); 1838 if( e.type === 'click' ) { 1839 em_close_other_selectized.call( this.closest('.selectize-control') ); 1840 if ( s.isOpen && s.$control_input.val() && !this.matches('.placeholder-count') && !this.closest('.placeholder-count') ) { 1841 isClosing = true; 1842 s.close(); 1843 } 1844 } else { 1845 isClosing = false; 1846 } 1847 return false; 1848 } 1849 }); 1850 counter.on( 'click' , function( e ){ 1851 e.preventDefault(); 1852 e.stopPropagation(); 1853 s.clear(); 1854 if( s.isOpen ) s.refreshOptions(); 1855 }); 1856 this.changeFunction(); 1857 } 1858 1859 // prevent dropdown from closing when no options are found, because the search input shows within the dropdown in multidropdown 1860 this.refreshOptions = function ( ...args ) { 1861 s_refreshOptions.apply(s, args); 1862 if ( !this.hasOptions && this.lastQuery ) { 1863 // intervene on closing only if not in a closing process caused by our own listeners 1864 if( isClosing === false ) { 1865 this.$wrapper.addClass("dropdown-active"); 1866 s.isOpen = true; 1867 } 1868 this.$wrapper.addClass("no-options"); 1869 isClosing = false; 1870 } else { 1871 this.$wrapper.removeClass("no-options"); 1872 } 1873 }; 1874 }); 1875}); 1876 1877function em_setup_selectize( container_element ){ 1878 container = jQuery(container_element); // in case we were given a dom object 1879 1880 container.find('.em-selectize.selectize-control').on( 'click', em_close_other_selectized ); 1881 1882 let optionRender = function (item, escape) { 1883 let html = '<div class="option"'; 1884 if( 'data' in item ){ 1885 // 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 1886 Object.entries(item.data).forEach( function( item_data ){ 1887 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1888 }); 1889 } 1890 html += '>'; 1891 if( this.$input.hasClass('checkboxes') ){ 1892 html += item.text.replace(/^(\s+)?/i, '$1<span></span> '); 1893 }else{ 1894 html += item.text; 1895 } 1896 html += '</div>'; 1897 return html; 1898 }; 1899 1900 // Selectize General 1901 container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').em_selectize({ 1902 selectOnTab : false, 1903 render: { 1904 option: optionRender, 1905 }, 1906 }).on('change', ( e ) => { 1907 e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) ) 1908 }); 1909 container.find('select[multiple].em-selectize, .em-selectize select[multiple]').em_selectize({ 1910 selectOnTab : false, 1911 hideSelected : false, 1912 plugins: ["remove_button", 'click2deselect','multidropdown'], 1913 diacritics : true, 1914 render: { 1915 item: function (item, escape) { 1916 return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>'; 1917 }, 1918 option : optionRender, 1919 optgroup : function (item, escape) { 1920 let html = '<div class="optgroup" data-group="' + escape(item.label) + '"'; 1921 if( 'data' in item ){ 1922 // 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
1923 Object.entries(item.data).forEach( function( item_data ){ 1924 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1925 }); 1926 } 1927 html += '>'; 1928 return html + item.html + '</div>'; 1929 } 1930 1931 }, 1932 }).on('change', ( e ) => { 1933 e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) ) 1934 }); 1935 container.find('.em-selectize:not(.always-open)').each( function(){ 1936 if( 'selectize' in this ){ 1937 let s = this.selectize; 1938 this.selectize.$wrapper.on('keydown', function(e) { 1939 if( e.keyCode === 9 ) { 1940 s.blur(); 1941 } 1942 }); 1943 } 1944 }); 1945 container.find('.em-selectize.always-open').each( function(){ 1946 //extra behaviour for selectize "always open mode" 1947 if( 'selectize' in this ){ 1948 let s = this.selectize; 1949 s.open(); 1950 s.advanceSelection = function(){}; // remove odd item shuffling 1951 s.setActiveItem = function(){}; // remove odd item shuffling 1952 // add event listener to fix remove button issues due to above hacks 1953 this.selectize.$control.on('click', '.remove', function(e) { 1954 if ( s.isLocked ) return; 1955 var $item = jQuery(e.currentTarget).parent(); 1956 s.removeItem($item.attr('data-value')); 1957 s.refreshOptions(); 1958 return false; 1959 }); 1960 } 1961 }); 1962 1963 // Sortables - selectize and sorting columns, usually in list tables 1964 container.find('.em-list-table-modal .em-list-table-cols').each( function(){ 1965 let parent = jQuery(this); 1966 let sortables = jQuery(this).find('.em-list-table-cols-sortable'); 1967 parent.find('.em-selectize.always-open').each( function() { 1968 //extra behaviour for selectize column picker 1969 if ('selectize' in this) { 1970 let selectize = this.selectize; 1971 // add event listener to fix remove button issues due to above hacks 1972 selectize.on('item_add', function (value, item) { 1973 let col = item.clone(); 1974 let option = selectize.getOption(value); 1975 let type = option.attr('data-type'); 1976 col.appendTo(sortables); 1977 col.attr('data-type', type); 1978 if( option.attr('data-header') ) { 1979 col.children('span:first-child').text( option.attr('data-header') ); 1980 } 1981 jQuery('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col); 1982 }); 1983 selectize.on('item_remove', function (value) { 1984 parent.find('.item[data-value="'+ value +'"]').remove(); 1985 }); 1986 parent.on('click', '.em-list-table-cols-selected .item .remove', function(){ 1987 let value = this.parentElement.getAttribute('data-value'); 1988 selectize.removeItem(value, true); 1989 }); 1990 } 1991 }); 1992 }); 1993} 1994 1995function em_unsetup_selectize( container ) { 1996 container.querySelectorAll('.em-selectize').forEach( function( el ) { 1997 //extra behaviour for selectize "always open mode" 1998 if ( 'selectize' in el ) { 1999 el.selectize.destroy(); 2000 } 2001 }); 2002} 2003 2004function em_setup_tippy( container_element ){ 2005 let container = jQuery(container_element); 2006 var tooltip_vars = { 2007 theme : 'light-border', 2008 appendTo : 'parent', 2009 content(reference) { 2010 if( reference.dataset.content ){ 2011 try { 2012 let content = container[0].querySelector(reference.dataset.content); 2013 if (content) { 2014 content.classList.remove('hidden'); 2015 return content; 2016 } 2017 } catch ( error ) { 2018 console.log('Invlid tooltip selector in %o : %o', reference, error); 2019 } 2020 }; 2021 return reference.getAttribute('aria-label') ?? reference.title ?? ''; 2022 }, 2023 'touch' : ['hold', 300], 2024 allowHTML : true, 2025 }; 2026 jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]); 2027 container.find('.em-tooltip').each( ( i, tooltip ) => tippy( tooltip, tooltip_vars ) ); 2028 // Set up Tippy DDMs 2029 let tippy_ddm_options = { 2030 theme : 'light-border', 2031 arrow : false, 2032 allowHTML : true, 2033 interactive : true, 2034 trigger : 'manual', 2035 placement : 'bottom', 2036 zIndex : 1000000, 2037 touch : true, 2038 }; 2039 jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]); 2040 container.find('.em-tooltip-ddm').each( function(){ 2041 let ddm_content, ddm_content_sibling; 2042 if( this.getAttribute('data-content') ){ 2043 ddm_content = document.getElementById(this.getAttribute('data-content')) 2044 ddm_content_sibling = ddm_content.previousElementSibling; 2045 }else{ 2046 ddm_content = this.nextElementSibling; 2047 ddm_content_sibling = ddm_content.previousElementSibling; 2048 } 2049 let tippy_content = document.createElement('div'); 2050 // allow for custom width 2051 let button_width = this.getAttribute('data-button-width'); 2052 if( button_width ){ 2053 if( button_width == 'match' ){ 2054 tippy_ddm_options.maxWidth = this.clientWidth; 2055 ddm_content.style.width = this.clientWidth + 'px'; 2056 }else{ 2057 tippy_ddm_options.maxWidth = this.getAttribute('data-button-width'); 2058 } 2059 } 2060 tippy_ddm_options.content = tippy_content; 2061 let tippy_ddm = tippy(this, tippy_ddm_options); 2062 tippy_ddm.props.distance = 50; 2063 tippy_ddm.setProps({ 2064 onShow(instance){ 2065 if( instance.reference.getAttribute('data-tooltip-class') ) { 2066 instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') ); 2067 } 2068 instance.popper.classList.add( 'em-tooltip-ddm-display' ); 2069 tippy_content.append(ddm_content); 2070 ddm_content.classList.remove('em-tooltip-ddm-content'); 2071 }, 2072 onShown(instance){ // keyboard support 2073 ddm_content.firstElementChild.focus(); 2074 }, 2075 onHidden(instance){
2076 if( ddm_content.previousElementSibling !== ddm_content_sibling ) { 2077 ddm_content_sibling.after(ddm_content); 2078 ddm_content.classList.add('em-tooltip-ddm-content'); 2079 } 2080 }, 2081 }); 2082 let tippy_listener = function(e){ 2083 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false; 2084 e.preventDefault(); 2085 e.stopPropagation(); 2086 this._tippy.show(); 2087 } 2088 this.addEventListener('click', tippy_listener); 2089 this.addEventListener('keydown', tippy_listener); 2090 tippy_content.addEventListener('blur', function(){ 2091 tippy_content.hide(); 2092 }); 2093 tippy_content.addEventListener('mouseover', function(){ 2094 ddm_content.firstElementChild.blur(); 2095 }); 2096 }); 2097} 2098 2099function em_unsetup_tippy( container ) { 2100 container.querySelectorAll('.em-tooltip-ddm').forEach( function( el ){ 2101 if ( '_tippy' in el ) { 2102 el._tippy.destroy(); 2103 } 2104 }); 2105} 2106 2107/* 2108 * MAP FUNCTIONS 2109 */ 2110var em_maps_loaded = false; 2111var maps = {}; 2112var maps_markers = {}; 2113var maps_infoWindows = {}; 2114var content 2115//loads maps script if not already loaded and executes EM maps script 2116function em_maps_load(){ 2117 if( !em_maps_loaded ){ 2118 if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){ 2119 let script = document.createElement("script"); 2120 script.type = "text/javascript"; 2121 script.id = "google-maps"; 2122 script.async = true; 2123 let proto = (EM.is_ssl) ? 'https:' : 'http:'; 2124 if( typeof EM.google_maps_api !== 'undefined' ){ 2125 script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api; 2126 }else{ 2127 script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps'; 2128 } 2129 document.body.appendChild(script); 2130 }else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){ 2131 em_maps(); 2132 }else if( jQuery('script#google-maps').length > 0 ){ 2133 jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources 2134 } 2135 } 2136} 2137jQuery(document).on('em_view_loaded_map', function( e, view, form ){ 2138 if( !em_maps_loaded ){ 2139 em_maps_load(); 2140 }else{ 2141 let map = view.find('div.em-locations-map'); 2142 em_maps_load_locations( map[0] ); 2143 } 2144}); 2145//re-usable function to load global location maps 2146async function em_maps_load_locations( element ){ 2147 const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); 2148 let el = element; 2149 let map_id = el.getAttribute('id').replace('em-locations-map-',''); 2150 let em_data; 2151 if ( document.getElementById('em-locations-map-coords-'+map_id) ) { 2152 em_data = JSON.parse( document.getElementById('em-locations-map-coords-'+map_id).text ); 2153 } else { 2154 let coords_data = el.parentElement.querySelector('.em-locations-map-coords'); 2155 if ( coords_data ) { 2156 em_data = JSON.parse( coords_data.text ); 2157 } else { 2158 em_data = {}; 2159 } 2160 } 2161 jQuery.getJSON(document.URL, em_data , function( data ) { 2162 if( data.length > 0 ){ 2163 //define default options and allow option for extension via event triggers 2164 let map_options = { 2165 mapTypeId: google.maps.MapTypeId.ROADMAP, 2166 mapId: 'em-locations-map-' + map_id 2167 }; 2168 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]; } 2169 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2170 jQuery(document).triggerHandler('em_maps_locations_map_options', map_options); 2171 let marker_options = {}; 2172 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 2173 2174 maps[map_id] = new google.maps.Map(el, map_options); 2175 maps_markers[map_id] = []; 2176 2177 let bounds = new google.maps.LatLngBounds(); 2178 2179 jQuery.map( data, function( location, i ){ 2180 if( !(location.location_latitude == 0 && location.location_longitude == 0) ){ 2181 let latitude = parseFloat( location.location_latitude ); 2182 let longitude = parseFloat( location.location_longitude ); 2183 let location_position = new google.maps.LatLng( latitude, longitude ); 2184 //extend the default marker options 2185 jQuery.extend(marker_options, { 2186 position: location_position, 2187 map: maps[map_id] 2188 }) 2189 let marker = new AdvancedMarkerElement(marker_options); 2190 maps_markers[map_id] = marker; 2191 em_map_InfoWindow ( location.location_name, location.location_balloon, marker ); 2192 //extend bounds 2193 bounds.extend(new google.maps.LatLng(latitude,longitude)) 2194 } 2195 }); 2196 // Zoom in to the bounds 2197 maps[map_id].fitBounds(bounds); 2198 2199 //Call a hook if exists 2200 if( jQuery ) { 2201 jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]); 2202 } 2203 document.dispatchEvent( new CustomEvent('em_maps_locations_hook', { 2204 detail: { 2205 map : maps[map_id], 2206 data : data, 2207 id : map_id, 2208 markers : maps_markers[map_id], 2209 el : el, 2210 }, 2211 cancellable : true, 2212 })); 2213 } else {
2214 el.firstElementChild.innerHTML = 'No locations found'; 2215 if( jQuery ) { 2216 jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [ jQuery(el) ]); 2217 } 2218 document.dispatchEvent( new CustomEvent('em_maps_locations_hook_not_found', { 2219 detail: { 2220 id : map_id, 2221 el : el 2222 }, 2223 cancellable : true, 2224 })); 2225 } 2226 }); 2227} 2228async function em_maps_load_location(el){ 2229 el = jQuery(el); 2230 const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); 2231 let mapId = el.attr('id'); 2232 let map_id = mapId.replace('em-location-map-',''); 2233 let map_title = el.attr('title'); 2234 let em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text()); 2235 //extend map and markers via event triggers 2236 let map_options = { 2237 zoom: 14, 2238 center: em_LatLng, 2239 mapTypeId: google.maps.MapTypeId.ROADMAP, 2240 mapTypeControl: false, 2241 gestureHandling: 'cooperative', 2242 mapId: mapId, 2243 }; 2244 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]; } 2245 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2246 jQuery(document).triggerHandler('em_maps_location_map_options', map_options); 2247 maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options); 2248 let marker_options = { 2249 position: em_LatLng, 2250 map: maps[map_id], 2251 title: map_title, 2252 }; 2253 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 2254 let marker = new AdvancedMarkerElement(marker_options); 2255 maps_markers[map_id] = marker; 2256 let content = jQuery('#em-location-map-info-'+map_id + ' .em-map-balloon-content').get(0); 2257 em_map_InfoWindow( map_title, content, marker, true ); 2258 2259 //JS Hook for handling map after instantiation 2260 //Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} ); 2261 jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]); 2262 //map resize listener 2263 jQuery(window).on('resize', function(e) { 2264 google.maps.event.trigger(maps[map_id], "resize"); 2265 maps[map_id].setCenter(maps_markers[map_id].position); 2266 maps[map_id].panBy(40,-70); 2267 }); 2268} 2269jQuery(document).on('em_search_ajax', function(e, vars, wrapper){ 2270 if( em_maps_loaded ){ 2271 wrapper.find('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 2272 wrapper.find('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); }); 2273 } 2274}); 2275//Load single maps (each map is treated as a seperate map). 2276async function em_maps() { 2277 /** 2278 * InfoWindow object - Location info bubble on map, showing the current map 2279 */ 2280 let infoWindow; 2281 //Find all the maps on this page and load them 2282 jQuery('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 2283 jQuery('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } ); 2284 2285 //Location stuff - only needed if inputs for location exist 2286 if( jQuery('select#location-select-id, input#location-address').length > 0 ){ 2287 const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); 2288 let map 2289 let marker; 2290 2291 // refresh map with current location info 2292 let refresh_map_location = function(){ 2293 let location_latitude = jQuery('#location-latitude').val(); 2294 let location_longitude = jQuery('#location-longitude').val(); 2295 let hasCoords = location_latitude != 0 || location_longitude != 0; 2296 if( hasCoords ){ 2297 let position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords 2298 marker.position = position; 2299 let mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val(); 2300 mapTitle = em_esc_attr(mapTitle); 2301 marker.title = mapTitle ; 2302 marker.gmpDraggable = true; 2303 jQuery('#em-map').show(); 2304 jQuery('#em-map-404').hide(); 2305 google.maps.event.trigger(map, 'resize'); 2306 map.setCenter(position); 2307 map.panBy(40,-55); 2308 infoWindow?.close(); 2309 infoWindow = em_map_InfoWindow( mapTitle, em_esc_attr(jQuery('#location-address').val()) + '<br>' + em_esc_attr(jQuery('#location-town').val()), marker, true ); 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 } 2315 }; 2316 2317 // Add listeners for changes to address or location ID 2318 2319 // get or refresh the map by location id 2320 let get_map_by_id = function(id){ 2321 if(jQuery('#em-map').length > 0){ 2322 jQuery('#em-map-404 .em-loading-maps').show(); 2323 jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){ 2324 let hasCoords = data.location_latitude != 0 && data.location_longitude != 0; 2325 if( hasCoords ){ 2326 loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude); 2327 marker.position = loc_latlng; 2328 marker.title = data.location_name; 2329 marker.gmpDraggable = false;
2330 jQuery('#em-map').show(); 2331 jQuery('#em-map-404').hide(); 2332 jQuery('#em-map-404 .em-loading-maps').hide(); 2333 map.setCenter(loc_latlng); 2334 map.panBy(40,-55); 2335 infoWindow?.close(); 2336 infoWindow = em_map_InfoWindow( data.location_name, data.location_balloon, marker, true ); 2337 google.maps.event.trigger(map, 'resize'); 2338 jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]); 2339 }else{ 2340 jQuery('#em-map').hide(); 2341 jQuery('#em-map-404').show(); 2342 jQuery('#em-map-404 .em-loading-maps').hide(); 2343 } 2344 }); 2345 } 2346 }; 2347 jQuery('#location-select-id, input#location-id').on('change', function() { get_map_by_id( jQuery(this).val() ); } ); 2348 2349 // detect changes to address fields and build a coordinate from geocoding 2350 jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){ 2351 //build address 2352 if( jQuery(this).prop('readonly') === true ) return; 2353 let addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ]; 2354 let address = ''; 2355 jQuery.each( addresses, function(i, val){ 2356 if( val != '' ){ 2357 address = ( address == '' ) ? address+val:address+', '+val; 2358 } 2359 }); 2360 if( address == '' ){ //in case only name is entered, no address 2361 jQuery('#em-map').hide(); 2362 jQuery('#em-map-404').show(); 2363 return false; 2364 } 2365 //do country last, as it's using the text version 2366 if( jQuery('#location-country option:selected').val() != 0 ){ 2367 address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text(); 2368 } 2369 //add working indcator whilst we search 2370 jQuery('#em-map-404 .em-loading-maps').show(); 2371 //search! 2372 if( address != '' && jQuery('#em-map').length > 0 ){ 2373 let geocoder = new google.maps.Geocoder(); 2374 geocoder.geocode( { 'address': address }, function(results, status) { 2375 if (status == google.maps.GeocoderStatus.OK) { 2376 jQuery('#location-latitude').val(results[0].geometry.location.lat()); 2377 jQuery('#location-longitude').val(results[0].geometry.location.lng()); 2378 } 2379 refresh_map_location(); 2380 }); 2381 } 2382 }); 2383 2384 // Check if we are on a location editing page, and if address was previously entered, if so we check location coords 2385 let location_latitude = jQuery('#location-latitude').val(); 2386 let location_longitude = jQuery('#location-longitude').val(); 2387 let hasCoords = location_latitude != 0 || location_longitude != 0; 2388 if ( !hasCoords ) { 2389 // check if there's any address items that were added previously 2390 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 != '' ) ) { 2391 // trigger a change so we reload the address and coords 2392 jQuery('#location-address').trigger('change'); 2393 if ( 'google_maps_resave_location' in EM ) { 2394 alert(EM.google_maps_resave_location); 2395 } 2396 } 2397 } 2398 2399 // Load map initially 2400 if(jQuery('#em-map').length > 0){ 2401 let em_LatLng = new google.maps.LatLng(0, 0); 2402 let map_options = { 2403 zoom: 14, 2404 center: em_LatLng, 2405 mapTypeId: google.maps.MapTypeId.ROADMAP, 2406 mapTypeControl: false, 2407 gestureHandling: 'cooperative', 2408 mapId: 'em-map', 2409 }; 2410 if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 2411 map = new google.maps.Map( document.getElementById('em-map'), map_options); 2412 marker = new AdvancedMarkerElement({ 2413 position: em_LatLng, 2414 map: map, 2415 gmpDraggable: true, 2416 }); 2417 google.maps.event.addListener(marker, 'dragend', function() { 2418 let position = marker.position; 2419 jQuery('#location-latitude').val(position.lat); 2420 jQuery('#location-longitude').val(position.lng); 2421 map.setCenter(position); 2422 map.panBy(40,-55); 2423 }); 2424 if( jQuery('#location-select-id').length > 0 ){ 2425 jQuery('#location-select-id').trigger('change'); 2426 }else{ 2427 refresh_map_location(); 2428 } 2429 jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]); 2430 } 2431 //map resize listener 2432 jQuery(window).on('resize', function(e) { 2433 google.maps.event.trigger(map, "resize"); 2434 map.setCenter(marker.position); 2435 map.panBy(40,-55); 2436 }); 2437 } 2438 em_maps_loaded = true; //maps have been loaded 2439 jQuery(document).triggerHandler('em_maps_loaded'); 2440} 2441 2442function em_map_InfoWindow( title, content, marker, open = false ) { 2443 let title_content = document.createElement("div"); 2444 let map_id = marker.map.mapId.replace(/em-location-maps?-/,''); 2445 title_content.className = "em-map-balloon-title"; 2446 title_content.innerHTML = title; 2447 if ( typeof content === 'string' ) { 2448 let wrapper = document.createElement("div"); 2449 wrapper.innerHTML = content; 2450 content = wrapper; 2451 } 2452 // wrap content in div with class if not already done 2453 content.classList.add('em-map-balloon-content'); 2454 let infoWindow = new google.maps.InfoWindow( { 2455 content: content, 2456 headerContent: title_content, 2457 } ); 2458 infoWindow.addListener('domready', function() { 2459 marker.map.panBy(40,-70); 2460 }); 2461 if ( !( map_id in maps_infoWindows ) ) { 2462 maps_infoWindows[ map_id ] = []; 2463 } 2464 maps_infoWindows[ map_id ].push( infoWindow ); 2465 let open_options = { 2466 shouldFocus: false, 2467 anchor: marker, 2468 map: marker.map, 2469 }; 2470 marker.addListener("gmp-click", () => { 2471 maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() ); 2472 infoWindow.open( open_options ); 2473 }); 2474 if ( open ) { 2475 maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() ); 2476 infoWindow.open( open_options ); 2477 } 2478 return infoWindow; 2479} 2480 2481/** 2482 * @deprecated use em_map_infowindow instead 2483 * @param marker 2484 * @param message 2485 * @param map 2486 */ 2487function em_map_infobox(marker, message, map) { 2488 let iw = new google.maps.InfoWindow({ content: message }); 2489 google.maps.event.addListener(marker, 'click', function() { 2490 if( infoWindow ) infoWindow.close(); 2491 infoWindow = iw; 2492 iw.open(map,marker); 2493 }); 2494} 2495 2496function em_esc_attr( str ){ 2497 if( typeof str !== 'string' ) return ''; 2498 return str.replace(/</gi,'<').replace(/>/gi,'>'); 2499} 2500 2501// Modal Open/Close 2502let openModal = function( modal, onOpen = null ){ 2503 modal = jQuery(modal); 2504 modal.appendTo(document.body); 2505 setTimeout( function(){ 2506 modal.addClass('active').find('.em-modal-popup').addClass('active'); 2507 jQuery(document).triggerHandler('em_modal_open', [modal]); 2508 document.dispatchEvent( new CustomEvent('em_modal_open', { detail: { modal: modal } }) ); 2509 if( typeof onOpen === 'function' ){ 2510 setTimeout( onOpen, 200); // timeout allows css transition 2511 } 2512 }, 100); // timeout allows css transition 2513}; 2514let closeModal = function( modal, onClose = null ){ 2515 modal = jQuery(modal); 2516 modal.removeClass('active').find('.em-modal-popup').removeClass('active'); 2517 setTimeout( function(){ 2518 if( modal.attr('data-parent') ){ 2519 let wrapper = jQuery('#' + modal.attr('data-parent') ); 2520 if( wrapper.length ) { 2521 modal.appendTo(wrapper); 2522 } 2523 } 2524 modal[0].dispatchEvent( new CustomEvent('em_modal_close', { bubbles: true, detail: { modal: modal } } ) ); 2525 if( typeof onClose === 'function' ){ 2526 onClose(); 2527 } 2528 }, 500); // timeout allows css transition 2529} 2530jQuery(document).on('click', '.em-modal .em-close-modal', function(e){ 2531 let modal = jQuery(this).closest('.em-modal'); 2532 if( !modal.attr('data-prevent-close') ) { 2533 closeModal(modal); 2534 } 2535}); 2536jQuery(document).on('click', '.em-modal', function(e){ 2537 var target = jQuery(e.target); 2538 if( target.hasClass('em-modal') ) { 2539 let modal = jQuery(this); 2540 if( !modal.attr('data-prevent-close') ){ 2541 closeModal(modal); 2542 } 2543 } 2544}); 2545 2546function EM_Alert( content ){ 2547 // find the alert modal, create if not 2548 let modal = document.getElementById('em-alert-modal'); 2549 if( modal === null ){ 2550 modal = document.createElement('div'); 2551 modal.setAttribute('class', "em pixelbones em-modal"); 2552 modal.id = 'em-alert-modal'; 2553 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>'; 2554 document.body.append(modal); 2555 } 2556 document.getElementById('em-alert-modal-content').innerHTML = content; 2557 openModal(modal); 2558}; 2559 2560//Events Search 2561jQuery(document).ready( function($){ 2562 // handle the views tip/ddm 2563 let views_ddm_options = { 2564 theme : 'light-border', 2565 allowHTML : true, 2566 interactive : true, 2567 trigger : 'manual', 2568 placement : 'bottom', 2569 zIndex : 1000000, 2570 touch: true, 2571 }; 2572 $(document).trigger('em-search-views-trigger-vars',[views_ddm_options]); 2573 let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; 2574 $(document).trigger('em-tippy-vars',[tooltip_vars]); 2575 2576 // sync main search texts to advanced search 2577 let search_forms = $('.em-search:not(.em-search-advanced)'); 2578 search_forms.each( function(){ 2579 /* 2580 * Important references we'll reuse in scope 2581 */ 2582 let search = $(this); 2583 let search_id = search.attr('id').replace('em-search-', ''); 2584 let search_form = search.find('.em-search-form').first(); 2585 let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway 2586 2587 /* 2588 * Counter functions 2589 */ 2590 const update_input_count = function( input, qty = 1 ){ 2591 let el = jQuery(input); 2592 let total = qty > 0 ? qty : null; 2593 el.attr('data-advanced-total-input', total); 2594 update_search_totals(); 2595 }; 2596 2597 const update_search_totals = function( applied = false ){ 2598 // set everything to 0, recount 2599 search.find('span.total-count').remove(); 2600 // find all fields with total attributes and sum them up 2601 let total = 0; 2602 search_advanced.find('[data-advanced-total-input]').each( function(){ 2603 let total_input = this.getAttribute('data-advanced-total-input'); 2604 total += Math.abs( total_input ); 2605 }); 2606 search.attr('data-advanced-total', total); 2607 update_trigger_count( applied ); 2608 // find all sections with totals and display them (added above) 2609 search_advanced.find('.em-search-advanced-section').each( function(){ 2610 let section = $(this); 2611 let section_total = 0; 2612 section.attr('data-advanced-total', 0); 2613 // go through all set qtys and calculate 2614 section.find('[data-advanced-total-input]').each( function(){ 2615 let total_input = this.getAttribute('data-advanced-total-input'); 2616 section_total += Math.abs( total_input ); 2617 }); 2618 section.attr('data-advanced-total', section_total); 2619 update_section_count(section); 2620 }); 2621 // update triggers, search, clear button etc. 2622 if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){ 2623 update_submit_buttons( true ); 2624 } 2625 update_clear_button_count(); 2626 } 2627 2628 const update_trigger_count = function( applied = false ){ 2629 let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers 2630 triggers.find('span.total-count').remove(); 2631 let total = search.attr('data-advanced-total'); 2632 if( total > 0 ){ 2633 let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers); 2634 if( !applied ){ 2635 trigger_count.addClass('tentative'); 2636 } 2637 } 2638 }; 2639 2640 const update_submit_buttons = function( enabled = false ){ 2641 // update the clear link 2642 let submit_button = search_advanced.find('button[type="submit"]'); 2643 let main_submit_button = search.find('.em-search-main-bar button[type="submit"]'); 2644 let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs 2645 if( enabled ){ 2646 submit_buttons.removeClass('disabled').attr('aria-disabled', 'false'); 2647 }else{ 2648 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 2649 } 2650 }; 2651 2652 const update_section_count = function( section ){ 2653 let section_total = section.attr('data-advanced-total'); 2654 section.find('header span.total-count').remove(); 2655 if( section_total > 0 ){ 2656 $('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') ); 2657 } 2658 }; 2659 2660 const update_clear_button_count = function(){ 2661 // update the clear link 2662 let clear_link = search_advanced.find('button[type="reset"]'); 2663 if( !clear_link.attr('data-placeholder') ){ 2664 clear_link.attr('data-placeholder', clear_link.text()); 2665 } 2666 let total = search.attr('data-advanced-total'); 2667 if( total > 0 ){ 2668 clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false); 2669 clear_link.removeClass('disabled').attr('aria-disabled', 'false'); 2670 }else{ 2671 clear_link.text( clear_link.attr('data-placeholder') ); 2672 clear_link.addClass('disabled').attr('aria-disabled', 'true'); 2673 } 2674 }; 2675 2676 /* 2677 * Triggers 2678 */ 2679 search.find('.em-search-views-trigger').each( function(){ 2680 tooltip_vars.content = this.parentElement.getAttribute('aria-label'); 2681 let views_tooltip = tippy(this.parentElement, tooltip_vars); 2682 let views_content = this.parentElement.querySelector('.em-search-views-options'); 2683 let views_content_parent = views_content.parentElement; 2684 let tippy_content = document.createElement('div'); 2685 views_ddm_options.content = tippy_content; 2686 let views_ddm = tippy(this, views_ddm_options); 2687 views_ddm.setProps({ 2688 onShow(instance){ 2689 views_tooltip.disable(); 2690 tippy_content.append(views_content); 2691 }, 2692 onShown(instance){ // keyboard support 2693 views_content.querySelector('input:checked').focus(); 2694 }, 2695 onHidden(instance){ 2696 views_tooltip.enable(); 2697 if( views_content.parentElement !== views_content_parent ) { 2698 views_content_parent.append(views_content); 2699 } 2700 } 2701 }); 2702 let tippy_listener = function(e){ 2703 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2704 e.preventDefault(); 2705 e.stopPropagation(); 2706 this._tippy.show(); 2707 views_tooltip.hide(); 2708 } 2709 this.addEventListener('click', tippy_listener); 2710 this.addEventListener('keydown', tippy_listener); 2711 this.firstElementChild.addEventListener('focus', function(e){ 2712 views_ddm.hide(); 2713 views_tooltip.enable(); 2714 views_tooltip.show(); 2715 }); 2716 this.firstElementChild.addEventListener('blur', function(){ 2717 views_tooltip.hide(); 2718 }); 2719 2720 search.on('focus blur', '.em-search-views-options input', function(){ 2721 if( document.activeElement === this ){ 2722 this.parentElement.classList.add('focused'); 2723 }else{ 2724 this.parentElement.classList.remove('focused'); 2725 } 2726 }); 2727 2728 search[0].addEventListener('change', function(){ 2729 update_submit_buttons(true); 2730 }); 2731 2732 search.on('keydown click', '.em-search-views-options input', function( e ){ 2733 // get relevant vars 2734 if( e.type === 'keydown' && e.which !== 13 ){ 2735 if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { 2736 if (e.which === 38) { 2737 if (this.parentElement.previousElementSibling) { 2738 this.parentElement.previousElementSibling.focus(); 2739 } 2740 } else if (e.which === 40) { 2741 if (this.parentElement.nextElementSibling) { 2742 this.parentElement.nextElementSibling.focus(); 2743 } 2744 } 2745 return false; 2746 } else if ( e.which === 9 ) { 2747 // focus out 2748 views_ddm.hide(); 2749 } 2750 return true; 2751 } 2752 this.checked = true; 2753 let input = $(this); 2754 // mark label selected 2755 input.closest('fieldset').find('label').removeClass('checked'); 2756 input.parent().addClass('checked'); 2757 // get other reference elements we need 2758 let views_wrapper = $(this).closest('.em-search-views'); 2759 let view_type = this.value; 2760 let trigger = views_wrapper.children('.em-search-views-trigger'); 2761 let trigger_option = trigger.children('.em-search-view-option'); 2762 // change view, if different 2763 if( view_type !== trigger_option.attr('data-view') ){ 2764 trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); 2765 // remove custom search vals from current view so it's not used into another view 2766 $('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove(); 2767 // trigger custom event in case form disabled due to no search vals 2768 search_form.find('button[type="submit"]').focus(); 2769 search_form.trigger('forcesubmit'); 2770 } 2771 views_ddm.hide(); 2772 }); 2773 }); 2774 2775 search.find('.em-search-sort-trigger').each( function(){ 2776 tooltip_vars.content = this.parentElement.getAttribute('aria-label'); 2777 let views_tooltip = tippy(this.parentElement, tooltip_vars); 2778 search.on('keydown click', '.em-search-sort-option', function( e ){ 2779 // get other reference elements we need 2780 let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC'; 2781 this.setAttribute('data-sort', order); 2782 this.parentElement.querySelector('input[name="order"]').value = order; 2783 // trigger custom event in case form disabled due to no search vals 2784 search_form.find('button[type="submit"]').focus(); 2785 search_form.trigger('forcesubmit'); 2786 }); 2787 }); 2788 2789 // add trigger logic for advanced popup modal 2790 let search_advanced_trigger_click = function( e ){ 2791 if( search.hasClass('advanced-mode-inline') ){ 2792 // inline 2793 if( !search_advanced.hasClass('visible') ){ 2794 search_advanced.slideDown().addClass('visible'); 2795 if( '_tippy' in this ){ 2796 this._tippy.setContent(this.getAttribute('data-label-hide')); 2797 } 2798 }else{ 2799 search_advanced.slideUp().removeClass('visible'); 2800 if( '_tippy' in this ){ 2801 this._tippy.setContent(this.getAttribute('data-label-show')); 2802 } 2803 } 2804 }else{ 2805 // wrap modal popup element in a form, so taht it's 'accessible' with keyboard 2806 if( !search_advanced.hasClass('active') ) { 2807 let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>'); 2808 form_wrapper.appendTo(search_advanced); 2809 search_advanced.find('.em-modal-popup').appendTo(form_wrapper); 2810 // open modal 2811 let button = this; 2812 openModal(search_advanced, function () { 2813 // Do this instead 2814 button.blur(); 2815 search_advanced.find('input.em-search-text').focus(); 2816 }); 2817 } 2818 } 2819 }; 2820 search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click); 2821 search_form.on('search_advanced_trigger', search_advanced_trigger_click); 2822 2823 search_advanced.on('em_modal_close', function(){ 2824 search_advanced.find('.em-modal-popup').appendTo(search_advanced); 2825 search_advanced.children('form').remove(); 2826 let trigger = search.find('button.em-search-advanced-trigger').focus(); 2827 if( trigger.length > 0 && '_tippy' in trigger[0] ){ 2828 trigger[0]._tippy.hide(); 2829 } 2830 }); 2831 2832 // add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal 2833 search_advanced.find('.em-search-advanced-section > header').on('click', function(){ 2834 let header = $(this); 2835 let section = header.closest('section'); 2836 let content = header.siblings('.em-search-section-content'); 2837 if( section.hasClass('active') ){ 2838 content.slideUp(); 2839 section.removeClass('active'); 2840 }else{ 2841 content.slideDown(); 2842 section.addClass('active'); 2843 } 2844 }); 2845 2846 /* 2847 * Advanced Search Field Listeners - Main Search Form 2848 */ 2849
2850 let search_form_advanced_calculate_totals_inputs = function( input ){ 2851 // for textboxes we only need to add or remove 1 advanced 2852 let el = $(input); 2853 let qty = el.val() !== '' ? 1:0; 2854 update_input_count( el, qty ); 2855 }; 2856 2857 // These are for the main search bar, syncing information back into the advanced form 2858 search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){ 2859 // sync advanced input field with same text 2860 let advanced_search_input = search_advanced.find('input.em-search-text'); 2861 if ( advanced_search_input.length === 0 ) { 2862 search_form_advanced_calculate_totals_inputs(this); 2863 } else { 2864 advanced_search_input.val( this.value ); 2865 // recalculate totals from here 2866 search_form_advanced_calculate_totals_inputs(advanced_search_input[0]); 2867 } 2868 // any change without advanced form should show the search form still 2869 update_submit_buttons( true); 2870 }); 2871 search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){ 2872 let el = $(this); 2873 let advanced_geo = search_advanced.find('div.em-search-geo'); 2874 // copy over value and class names 2875 let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords'); 2876 if( advanced_geo_coords.length > 0 ) { 2877 advanced_geo_coords.val(el.val()).attr('class', el.attr('class')); 2878 let geo_text = el.siblings('input.em-search-geo').first(); 2879 advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2880 // calculate totals from here 2881 search_form_advanced_calculate_totals_inputs(advanced_geo_coords); 2882 } else { 2883 // calculate totals from here 2884 search_form_advanced_calculate_totals_inputs(this); 2885 } 2886 }); 2887 search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2888 if( !('_flatpickr' in this) ) return; 2889 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2890 // any change without advanced form should show the search form 2891 let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); 2892 if( advanced_datepicker.length === 0 ) { 2893 // update counter 2894 let qty = dateStr ? 1:0; 2895 update_input_count(instance.input, qty); 2896 } else { 2897 // update advanced search form datepicker values, trigger a close for it to handle the rest 2898 advanced_datepicker[0]._flatpickr.setDate( selectedDates, true ); 2899 advanced_datepicker[0]._flatpickr.close(); 2900 } 2901 }); 2902 }); 2903 2904 search.find('select.em-selectize').each(function () { 2905 if( 'selectize' in this ) { 2906 this.selectize.on('change', function () { 2907 search_advanced_selectize_change(this); 2908 }); 2909 } 2910 }); 2911 2912 /* 2913 * Advanced Search Field Listeners - Advanced Search Form 2914 */ 2915 2916 // regular text advanced or hidden inputs that represent another ui 2917 search_advanced.on('change input', 'input.em-search-text', function( e ){ 2918 if( e.type === 'change' ){ 2919 // copy over place info on change only, not on each keystroke 2920 search.find('.em-search-main input.em-search-text').val( this.value ); 2921 } 2922 search_form_advanced_calculate_totals_inputs(this); 2923 }); 2924 search_advanced.on('change', 'input.em-search-geo-coords', function( e ){ 2925 search_form_advanced_calculate_totals_inputs(this); 2926 //update values in main search 2927 let el = $(this); 2928 let main = search.find('.em-search-main div.em-search-geo'); 2929 if( main.length > 0 ){ 2930 // copy over value and class names 2931 main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class')); 2932 let geo_text = el.siblings('input.em-search-geo'); 2933 main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2934 } 2935 }); 2936 search_advanced.on('clear_search', function(){ 2937 let text = $(this).find('input.em-search-text'); 2938 if( text.length === 0 ) { 2939 // select geo from main if it exists, so we keep counts synced 2940 text = search.find('input.em-search-text'); 2941 } 2942 text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more) 2943 }); 2944 /* Not sure we should be calculating this... since it's always set to something. 2945 search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2946 // combine both values into parent, if value set then it's a toggle 2947 let el = jQuery(this); 2948 let qty = el.val() ? 1 : null; 2949 el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty); 2950 update_search_totals(); 2951 }); 2952 */ 2953 search_advanced.on('change', 'input[type="checkbox"]', function( e ){ 2954 let el = $(this); 2955 let qty = el.prop('checked') ? 1:0; 2956 update_input_count( el, qty ); 2957 }); 2958 search_advanced.on('calculate_totals', function(){ 2959 search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){ 2960 search_form_advanced_calculate_totals_inputs(this); 2961 }); 2962 search_advanced.find('input[type="checkbox"]').trigger('change'); 2963 }); 2964 search_advanced.on('clear_search', function(){ 2965 let geo = $(this).find('input.em-search-geo'); 2966 if( geo.length === 0 ) { 2967 // select geo from main if it exists, so we keep counts synced 2968 geo = search.find('input.em-search-geo'); 2969 } 2970 geo.removeClass('off').removeClass('on').val(''); 2971 geo.siblings('input.em-search-geo-coords').val('').trigger('change'); 2972 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 2973 }); 2974 2975 // datepicker advanced logic 2976 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2977 if( !('_flatpickr' in this) ) return; 2978 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2979 // check previous value against current value, no change, no go 2980 let previous_value = instance.input.getAttribute('data-previous-value'); 2981 if( previous_value !== dateStr ){ 2982 // update counter 2983 let qty = dateStr ? 1:0; 2984 update_input_count(instance.input, qty); 2985 // update main search form datepicker values 2986 let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input'); 2987 if( main_datepicker.length > 0 ) { 2988 main_datepicker[0]._flatpickr.setDate(selectedDates, true); 2989 } 2990 // set for next time 2991 instance.input.setAttribute('data-previous-value', dateStr); 2992 } 2993 }); 2994 }); 2995 search_advanced.on('calculate_totals', function(){ 2996 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){ 2997 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 2998 update_input_count(this, qty); 2999 }); 3000 }); 3001 search_advanced.on('clear_search', function(){ 3002 let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); 3003 if( datepickers.length === 0 ) { 3004 // find datepickers on main form so syncing is sent up 3005 datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input'); 3006 } 3007 datepickers.each(function () { 3008 this._flatpickr.clear(); 3009 update_input_count(this, 0); 3010 }); 3011 }); 3012 // clear the date total for calendars, before anything is done 3013 let scope_calendar_check = function(){ 3014 search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 3015 if( search.attr('data-view') == 'calendar' ){ 3016 this.setAttribute('data-advanced-total-input', 0); 3017 this._flatpickr.input.disabled = true; 3018 }else{ 3019 this._flatpickr.input.disabled = false; 3020 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 3021 this.setAttribute('data-advanced-total-input', qty); 3022 } 3023 }); 3024 }; 3025 $(document).on('em_search_loaded', scope_calendar_check); 3026 scope_calendar_check(); 3027 3028 // selectize advanced 3029 let search_advanced_selectize_change = function( selectize ){ 3030 let qty = selectize.items.length; 3031 // handle 'all' default values 3032 if( qty == 1 && !selectize.items[0] ){ 3033 qty = 0; 3034 } 3035 if ( selectize.$input.closest('.em-search-advanced').length === 0 ) { 3036 // sync advanced input field with same text 3037 let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim(); 3038 let advanced_search_input = search_advanced.find( classSearch ); 3039 if ( advanced_search_input.length > 0 ) { 3040 // copy over values 3041 advanced_search_input[0].selectize.setValue( selectize.items ); 3042 // recalculate totals from here 3043 search_advanced_selectize_change(advanced_search_input[0].selectize); 3044 } 3045 } 3046 update_input_count( selectize.$input, qty ); 3047 }; 3048 3049 search_advanced.find('select.em-selectize').each(function () { 3050 if( 'selectize' in this ) { 3051 this.selectize.on('change', function () { 3052 search_advanced_selectize_change(this); 3053 }); 3054 } 3055 }); 3056 search_advanced.on('calculate_totals', function(){ 3057 $(this).find('select.em-selectize').each( function(){ 3058 search_advanced_selectize_change(this.selectize); 3059 }); 3060 }); 3061 search_advanced.on('clear_search', function(){ 3062 let clearSearch = function(){ 3063 this.selectize.clear(); 3064 this.selectize.refreshItems(); 3065 this.selectize.refreshOptions(false); 3066 this.selectize.blur(); 3067 }; 3068 search_advanced.find('select.em-selectize').each( clearSearch ); 3069 search.find('.em-search-main-bar select.em-selectize').each( clearSearch ); 3070 }); 3071 3072 // location-specific stuff for dropdowns (powered by selectize) 3073 let locations_selectize_load_complete = function(){ 3074 if( 'selectize' in this ) { 3075 this.selectize.settings.placeholder = this.selectize.settings.original_placeholder; 3076 this.selectize.updatePlaceholder(); 3077 // get options from select again 3078 let options = []; 3079 this.selectize.$input.find('option').each( function(){ 3080 let value = this.value !== null ? this.value : this.innerHTML; 3081 options.push({ value : value, text: this.innerHTML}); 3082 }); 3083 this.selectize.addOption(options); 3084 this.selectize.refreshOptions(false); 3085 } 3086 }; 3087 let locations_selectize_load_start = function(){ 3088 if( 'selectize' in this ){ 3089 this.selectize.clearOptions(); 3090 if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder; 3091 this.selectize.settings.placeholder = EM.txt_loading; 3092 this.selectize.updatePlaceholder(); 3093 } 3094 }; 3095 $('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){ 3096 var el = $(this); 3097 let wrapper = el.closest('.em-search-location'); 3098 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 3099 wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>'); 3100 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 3101 wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start ); 3102 if( el.val() != '' ){ 3103 wrapper.find('.em-search-location-meta').slideDown(); 3104 var data = { 3105 action : 'search_states', 3106 country : el.val(), 3107 return_html : true, 3108 }; 3109 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3110 data.action = 'search_regions'; 3111 wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3112 data.action = 'search_towns'; 3113 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3114 }else{
3115 wrapper.find('.em-search-location-meta').slideUp(); 3116 } 3117 }); 3118 $('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){ 3119 var el = $(this); 3120 let wrapper = el.closest('.em-search-location'); 3121 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 3122 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 3123 wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start ); 3124 var data = { 3125 action : 'search_states', 3126 region : el.val(), 3127 country : wrapper.find('select[name=country]').val(), 3128 return_html : true 3129 }; 3130 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3131 data.action = 'search_towns'; 3132 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3133 }); 3134 $('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){ 3135 var el = $(this); 3136 let wrapper = el.closest('.em-search-location'); 3137 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start ); 3138 var data = { 3139 action : 'search_towns', 3140 state : el.val(), 3141 region : wrapper.find('select[name=region]').val(), 3142 country : wrapper.find('select[name=country]').val(), 3143 return_html : true 3144 }; 3145 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 3146 }); 3147 3148 /* 3149 * Clear & Search Actions 3150 */ 3151 // handle clear link for advanced 3152 search_advanced.on( 'click', 'button[type="reset"]', function(){ 3153 // clear text search advanced, run clear hook for other parts to hook into 3154 if( search.attr('data-advanced-total') == 0 ) return; 3155 // search text and geo search 3156 search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change'); 3157 // other implementations hook here and do what you need 3158 search.trigger('clear_search'); 3159 search_advanced.trigger('clear_search'); 3160 // remove counters, set data counters to 0, hide section and submit form without search settings 3161 update_search_totals(true); // in theory, this is 0 and removes everything 3162 if( search_advanced.hasClass('em-modal') ) { 3163 search_advanced_trigger_click(); 3164 } 3165 search_advanced.append('<input name="clear_search" type="hidden" value="1">'); 3166 search_advanced.find('button[type="submit"]').trigger('forceclick'); 3167 update_clear_button_count(); 3168 }).each( function(){ 3169 search_advanced.trigger('calculate_totals'); 3170 update_search_totals(true); 3171 }); 3172 const on_update_trigger_count = function(e, applied = true){ 3173 update_trigger_count( applied ); 3174 }; 3175 search.on('update_trigger_count', on_update_trigger_count); 3176 search_advanced.on('update_trigger_count', on_update_trigger_count); 3177 3178 // handle submission for advanced 3179 search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){ 3180 e.preventDefault(); 3181 if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false; 3182 // close attach back to search form 3183 if( search_advanced.hasClass('em-modal') ) { 3184 closeModal(search_advanced, function () { 3185 // submit for search 3186 search_form.submit(); 3187 }); 3188 }else{ 3189 search_form.submit(); 3190 } 3191 return false; // we handled it 3192 }); 3193 3194 search.on('submit forcesubmit', '.em-search-form', function(e){ 3195 if ( search.hasClass('no-ajax') ) { 3196 return true; 3197 } 3198 e.preventDefault(); 3199 let form = $(this); 3200 let submit_buttons = form.find('button[type="submit"]'); 3201 if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false; 3202 let wrapper = form.closest('.em-search'); 3203 if( wrapper.hasClass('em-search-legacy') ){ 3204 em_submit_legacy_search_form(form); 3205 }else{ 3206 let view = $('#em-view-'+search_id); 3207 let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val(); 3208 if( Array.isArray(view_type) ) view_type = view_type.shift(); 3209 // copy over custom view information, remove it further down 3210 let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
3211 let custom_view_data_container = $('<div class="em-view-custom-data"></div>'); 3212 custom_view_data.children().appendTo(custom_view_data_container); 3213 custom_view_data.remove(); 3214 custom_view_data_container.appendTo(form); 3215 // add loading stuff 3216 view.append('<div class="em-loading"></div>'); 3217 submit_buttons.each( function(){ 3218 if( EM.txt_searching !== this.innerHTML ) { 3219 this.setAttribute('data-button-text', this.innerHTML); 3220 this.innerHTML = EM.txt_searching; 3221 } 3222 }); 3223 var vars = form.serialize(); 3224 $.ajax( EM.ajaxurl, { 3225 type : 'POST', 3226 dataType : 'html', 3227 data : vars, 3228 success : function(responseText){ 3229 submit_buttons.each( function(){ 3230 this.innerHTML = this.getAttribute('data-button-text'); 3231 }); 3232 view = EM_View_Updater( view, responseText ); 3233 // update view definitions 3234 view.attr('data-view', view_type); 3235 search.attr('data-view', view_type); 3236 search_advanced.attr('data-view', view_type); 3237 jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]); 3238 jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results 3239 jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above 3240 wrapper.find('.count.tentative').removeClass('tentative'); 3241 // deactivate submit button until changes are made again 3242 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 3243 // update search totals 3244 update_search_totals(true); 3245 search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search 3246 update_submit_buttons(false); 3247 custom_view_data_container.remove(); // remove data so it's reloaded again later 3248 search.find('input[name="clear_search"]').remove(); 3249 } 3250 }); 3251 } 3252 return false; 3253 }); 3254 3255 // observe resizing 3256 EM_ResizeObserver( EM.search.breakpoints, [search[0]]); 3257 }); 3258 3259 // handle external triggers, e.g. a calendar shortcut for a hidden search form 3260 $(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){ 3261 if( this.getAttribute('data-search-advanced-id') ){ 3262 // trigger the search form by parent 3263 let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') ); 3264 if( search_advanced_form ){ 3265 let search_form = search_advanced_form.closest('form.em-search-form'); 3266 if( search_form ){ 3267 search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') ); 3268 return; 3269 } 3270 } 3271 } else if( this.getAttribute('data-parent-trigger') ) { 3272 let trigger = document.getElementById(this.getAttribute('data-parent-trigger')); 3273 if ( trigger ) { 3274 trigger.click(); 3275 return; 3276 } 3277 } 3278 console.log('Cannot locate a valid advanced search form trigger for %o', this); 3279 }); 3280 3281 $(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){ 3282 let a = $(this); 3283 let view = a.closest('.em-view-container'); 3284 let href = a.attr('href'); 3285 //add data-em-ajax att if it exists 3286 let data = a.closest('.em-pagination').attr('data-em-ajax'); 3287 if( data ){ 3288 href += href.includes('?') ? '&' : '?'; 3289 href += data; 3290 } 3291 // build querystring from url 3292 let url_params = new URL(href, window.location.origin).searchParams; 3293 if( view.attr('data-view') ) { 3294 url_params.set('view', view.attr('data-view')); 3295 } 3296 // start ajax 3297 view.append('<div class="loading" id="em-loading"></div>'); 3298 $.ajax( EM.ajaxurl, { 3299 type : 'POST', 3300 dataType : 'html', 3301 data : url_params.toString(), 3302 success : function(responseText) { 3303 view = EM_View_Updater( view, responseText ); 3304 view.find('.em-pagination').each( function(){ 3305 paginationObserver.observe(this); 3306 }); 3307 jQuery(document).triggerHandler('em_page_loaded', [view]); 3308 view[0].scrollIntoView({ behavior: "smooth" }); 3309 } 3310 }); 3311 e.preventDefault(); 3312 return false; 3313 }); 3314 3315 const paginationObserver = new ResizeObserver( function( entries ){
3316 for (let entry of entries) { 3317 let el = entry.target; 3318 if( !el.classList.contains('observing') ) { 3319 el.classList.add('observing'); // prevent endless loop on resizing within this check 3320 // check if any pagination parts are overflowing 3321 let overflowing = false; 3322 el.classList.remove('overflowing'); 3323 for ( const item of el.querySelectorAll('.not-current')) { 3324 if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){ 3325 overflowing = true; 3326 break; // break if one has overflown 3327 } 3328 }; 3329 // add or remove overflow classes 3330 if( overflowing ){ 3331 el.classList.add('overflowing') 3332 } 3333 el.classList.remove('observing'); 3334 } 3335 } 3336 }); 3337 $('.em-pagination').each( function(){ 3338 paginationObserver.observe(this); 3339 }); 3340 3341 /* START Legacy */ 3342 // deprecated - hide/show the advanced search advanced link - relevant for old template overrides 3343 $(document).on('click change', '.em-search-legacy .em-toggle', function(e){ 3344 e.preventDefault(); 3345 //show or hide advanced search, hidden by default 3346 var el = $(this); 3347 var rel = el.attr('rel').split(':'); 3348 if( el.hasClass('show-search') ){ 3349 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); } 3350 else{ $(rel[0]).slideUp(); } 3351 el.find('.show, .show-advanced').show(); 3352 el.find('.hide, .hide-advanced').hide(); 3353 el.removeClass('show-search'); 3354 }else{ 3355 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); } 3356 else{ $(rel[0]).slideDown(); } 3357 el.find('.show, .show-advanced').hide(); 3358 el.find('.hide, .hide-advanced').show(); 3359 el.addClass('show-search'); 3360 } 3361 }); 3362 // handle search form submission 3363 let em_submit_legacy_search_form = function( form ){ 3364 if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; } 3365 var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 3366 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 3367 if( results_wrapper.length > 0 ){ 3368 results_wrapper.append('<div class="loading" id="em-loading"></div>'); 3369 var submitButton = form.find('.em-search-submit button'); 3370 submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching); 3371 var img = submitButton.children('img'); 3372 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif')); 3373 var vars = form.serialize(); 3374 $.ajax( EM.ajaxurl, { 3375 type : 'POST', 3376 dataType : 'html', 3377 data : vars, 3378 success : function(responseText){ 3379 submitButton.val(submitButton.attr('data-button-text')); 3380 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png')); 3381 results_wrapper.replaceWith(responseText); 3382 if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); } 3383 //reload results_wrapper 3384 results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 3385 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 3386 jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results 3387 } 3388 }); 3389 e.preventDefault(); 3390 return false; 3391 } 3392 }; 3393 if( $('.em-search-ajax').length > 0 ){ 3394 $(document).on('click', '.em-search-ajax a.page-numbers', function(e){ 3395 var a = $(this); 3396 var data = a.closest('.em-pagination').attr('data-em-ajax'); 3397 var wrapper = a.closest('.em-search-ajax'); 3398 var wrapper_parent = wrapper.parent(); 3399 var qvars = a.attr('href').split('?'); 3400 var vars = qvars[1]; 3401 //add data-em-ajax att if it exists 3402 if( data != '' ){ 3403 vars = vars != '' ? vars+'&'+data : data; 3404 } 3405 vars += '&legacy=1'; 3406 wrapper.append('<div class="loading" id="em-loading"></div>'); 3407 $.ajax( EM.ajaxurl, { 3408 type : 'POST', 3409 dataType : 'html', 3410 data : vars, 3411 success : function(responseText) { 3412 wrapper.replaceWith(responseText); 3413 wrapper = wrapper_parent.find('.em-search-ajax'); 3414 jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results 3415 } 3416 }); 3417 e.preventDefault(); 3418 return false;
3419 }); 3420 } 3421 /* END Legacy */ 3422}); 3423 3424/* 3425* CALENDAR 3426*/ 3427jQuery(document).ready( function($){ 3428 3429 const em_calendar_init = function( calendar ){ 3430 calendar = $(calendar); 3431 if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9]+$/) ){ 3432 calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates 3433 } 3434 calendar.find('a').off("click"); 3435 calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){ 3436 e.preventDefault(); 3437 const el = $(this); 3438 if( el.attr('href') === '') return; // do nothing if disabled or no link provided 3439 el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>'); 3440 let url = el.attr('href'); 3441 const view_id = el.closest('[data-view-id]').data('view-id'); 3442 const custom_data = $('form#em-view-custom-data-calendar-'+ view_id); 3443 let form_data = new FormData(); 3444 if( custom_data.length > 0 ){ 3445 form_data = new FormData(custom_data[0]); 3446 let $URL = new URL(url, window.location.origin); 3447 let url_params = $URL.searchParams; 3448 for (const [key, value] of url_params.entries()) { 3449 if( key === 'mo' ) { 3450 form_data.set('month', value); 3451 } else if ( key === 'yr' ) { 3452 form_data.set('year', value); 3453 } else { 3454 form_data.set(key, value); 3455 } 3456 } 3457 // remove mo and yr from URL 3458 $URL.searchParams.delete('mo'); 3459 $URL.searchParams.delete('yr'); 3460 url = $URL.toString(); 3461 } 3462 if ( calendar.attr('data-timezone') ) { 3463 form_data.set('calendar_timezone', calendar.attr('data-timezone') ); 3464 } 3465 form_data.set('id', view_id); 3466 form_data.set('ajaxCalendar', 1); // AJAX trigger 3467 form_data.set('em_ajax', 1); // AJAX trigger 3468 // check advanced trigger 3469 if( calendar.hasClass('with-advanced') ){ 3470 form_data.set('has_advanced_trigger', 1); 3471 } 3472 $.ajax({ 3473 url: url, 3474 data: form_data, 3475 processData: false, 3476 contentType: false, 3477 method: 'POST', 3478 success: function( data ){ 3479 let view = EM_View_Updater( calendar, data ); 3480 if( view.hasClass('em-view-container') ){ 3481 calendar = view.find('.em-calendar'); 3482 }else{ 3483 calendar = view; 3484 } 3485 calendar[0].dispatchEvent( new CustomEvent( 'em_calendar_load', { bubbles: true } ) ); 3486 }, 3487 dataType: 'html' 3488 }); 3489 } ); 3490 calendar[0].addEventListener('reload', () => { 3491 calendar_trigger_ajax( calendar, calendar.attr('data-year'), calendar.attr('data-month') ); 3492 }); 3493 let calendar_trigger_ajax = function( calendar, year, month ){ 3494 let link = calendar.find('.em-calnav-next'); 3495 let url = new URL(link.attr('href'), window.location.origin); 3496 url.searchParams.set('mo', month); 3497 url.searchParams.set('yr', year); 3498 link.attr('href', url.toString()).trigger('click'); 3499 }; 3500 let calendar_resize_monthpicker = function( instance, text ){ 3501 let span = $('<span class="marker">'+ text +'</span>'); 3502 span.insertAfter(instance); 3503 let width = span.width() + 40; 3504 span.remove(); 3505 instance.style.setProperty('width', width+'px', 'important'); 3506 } 3507 let calendar_month_init = function(){ 3508 let month_form = calendar.find('.month form'); 3509 calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){ 3510 e.preventDefault(); 3511 if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) { 3512 let link = this.getAttribute('data-event-url'); 3513 if (link !== null) { 3514 window.location.href = link; 3515 } 3516 } 3517 // select this date, all others no 3518 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3519 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3520 }); 3521 if( month_form.length > 0 ){ 3522 month_form.find('input[type="submit"]').hide(); 3523 let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form); 3524 let option = $('<option></option>').appendTo(select); 3525 let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val(); 3526 let month = calendar.find('select[name="month"]'); 3527 let year = calendar.find('select[name="year"]'); 3528 let monthpicker = calendar.find('.em-month-picker'); 3529 let month_value = monthpicker.data('month-value'); 3530 monthpicker.prop('type', 'text').prop('value', month_value); 3531 calendar_resize_monthpicker( monthpicker[0], month_value ); 3532 let monthpicker_wrapper = $('#em-flatpickr'); 3533 if( monthpicker_wrapper.length === 0 ) {
3534 monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body'); 3535 } 3536 let minDate = null; 3537 if( calendar.data('scope') === 'future' ){ 3538 minDate = new Date(); 3539 minDate.setMonth(minDate.getMonth()-1); 3540 } 3541 // locale 3542 if( 'locale' in EM.datepicker ){ 3543 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 3544 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 3545 } 3546 let fp = monthpicker.flatpickr({ 3547 appendTo : monthpicker_wrapper[0], 3548 dateFormat : EM?.calendar?.month_format, 3549 minDate : minDate, 3550 disableMobile: "true", 3551 plugins: [ 3552 new monthSelectPlugin({ 3553 shorthand: true, 3554 dateFormat: EM?.calendar?.month_format || 'F Y', 3555 altFormat: EM?.calendar?.month_format || 'F Y', 3556 }) 3557 ], 3558 onChange: function(selectedDates, dateStr, instance) { 3559 calendar_resize_monthpicker( instance.input, dateStr ); 3560 calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1); 3561 }, 3562 }); 3563 // this bit fixes issues if the supplied text value has a mismatch with the real text value due to localization differences between WP and flatpickr 3564 let month_real_value = monthpicker.val() + '-01'; 3565 fp.setDate( new Date( month_real_value ) ); 3566 // add classes to month picker 3567 monthpicker.addClass('select-toggle'); 3568 } 3569 if( calendar.hasClass('preview-tooltips') ){ 3570 let tooltip_vars = { 3571 theme : 'light-border', 3572 allowHTML : true, 3573 interactive : true, 3574 trigger : 'mouseenter focus click', 3575 content(reference) { 3576 return document.createElement('div'); 3577 }, 3578 onShow( instance ){ 3579 const id = instance.reference.getAttribute('data-event-id'); 3580 const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 3581 instance.props.content.append(template.first().clone()[0]); 3582 }, 3583 onHide( instance ){ 3584 instance.props.content.innerHTML = ''; 3585 } 3586 }; 3587 if( calendar.data('preview-tooltips-trigger') ) { 3588 tooltip_vars.trigger = calendar.data('preview-tooltips-trigger'); 3589 } 3590 $(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]); 3591 tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars); 3592 }else if( calendar.hasClass('preview-modal') ){ 3593 // Modal 3594 calendar.find('.em-cal-event').on('click', function( e ){ 3595 const id = this.getAttribute('data-event-id'); 3596 const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 3597 modal.attr('data-calendar-id', calendar.attr('id')); 3598 openModal(modal); 3599 // select this date, all others no 3600 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3601 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3602 }); 3603 } 3604 // responsive mobile view for date clicks 3605 if( calendar.hasClass('responsive-dateclick-modal') ){ 3606 calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){ 3607 //if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){ 3608 e.preventDefault(); 3609 const id = this.getAttribute('data-timestamp'); 3610 const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"], .em-cal-date-content[data-timestamp="'+id+'"]'); 3611 modal.attr('data-calendar-id', calendar.attr('id')); 3612 openModal(modal); 3613 // select this date, all others no 3614 e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') ); 3615 e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected'); 3616 }); 3617 } 3618 // observe resizing if not fixed 3619 if( !calendar.hasClass('size-fixed') ){ 3620 EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]); 3621 } 3622 // even aspect, because aspect ratio can screw up widths vs row template heights 3623 let calendar_body = calendar.find('.em-cal-body'); 3624 if( calendar_body.hasClass('even-aspect') ) { 3625 let ro_function = function (el) { 3626 let width = el.firstElementChild.getBoundingClientRect().width; 3627 if (width > 0) { 3628 el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)'); 3629 } 3630 } 3631 let ro = new ResizeObserver(function (entries) {
3632 for (let entry of entries) { 3633 ro_function(entry.target); 3634 } 3635 }); 3636 ro.observe(calendar_body[0]); 3637 ro_function(calendar_body[0]); 3638 } 3639 3640 // figure out colors 3641 calendar.find('.date-day-colors').each( function(){ 3642 let colors = JSON.parse(this.getAttribute('data-colors')); 3643 let day = $(this).siblings('.em-cal-day-date.colored'); 3644 let sides = { 3645 1 : { 1 : '--date-border-color', 'class' : 'one' }, 3646 2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' }, 3647 3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' }, 3648 4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' }, 3649 }; 3650 for (let i = 0; i < colors.length; i += 4) { 3651 const ring_colors = colors.slice(i, i + 4); 3652 // add a ring 3653 let outer_ring = day.children().first(); 3654 let new_ring = $('<div class="ring"></div>').prependTo(day); 3655 outer_ring.appendTo(new_ring); 3656 new_ring.addClass( sides[ring_colors.length].class ); 3657 for ( let it = 0; it < ring_colors.length; it++ ){ 3658 new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]); 3659 } 3660 } 3661 }); 3662 3663 if( calendar.hasClass('with-advanced') ){ 3664 const trigger = calendar.find('.em-search-advanced-trigger'); 3665 const search_advanced = $('#'+trigger.attr('data-search-advanced-id')); 3666 search_advanced.triggerHandler('update_trigger_count'); 3667 } 3668 } 3669 calendar_month_init(); 3670 $(document).triggerHandler('em_calendar_loaded', [calendar]); 3671 }; 3672 $('.em-calendar').each( function(){ 3673 let calendar = $(this); 3674 em_calendar_init( calendar ); 3675 }); 3676 $(document).on('em_calendar_load', '.em-calendar', function(){ 3677 em_calendar_init( this ); 3678 }); 3679 $(document).on('em_view_loaded_calendar', function( e, view, form ){ 3680 let calendar; 3681 if( view.hasClass('em-calendar') ){ 3682 calendar = view; 3683 }else { 3684 calendar = view.find('.em-calendar').first(); 3685 } 3686 em_calendar_init( calendar ); 3687 }); 3688}); 3689 3690let EM_View_Updater = function( element, html ){ 3691 let content = jQuery(html); 3692 let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container'); 3693 if( view.length > 0 ){ 3694 if( content.hasClass('em-view-container') ){ 3695 view.replaceWith(content); 3696 view = content; 3697 }else{ 3698 view.empty().append(content); 3699 } 3700 }else{ 3701 // create a view if possible 3702 if( content.hasClass('em-view-container') ){ 3703 element.replaceWith(content); 3704 view = content; 3705 }else if( content.attr('data-view-id') ){ 3706 let view = jQuery('<div class="em em-view-container"></div>'); 3707 let view_id = content.attr('data-view-id'); 3708 view.attr('data-view-id', view_id); 3709 view.attr('id', 'em-view-'+ view_id); 3710 view.attr('data-view-type', content.attr('data-view-type')); 3711 view.append(content); 3712 element.replaceWith(view); 3713 } 3714 } 3715 em_setup_ui_elements( view[0] ); 3716 return view; 3717} 3718 3719/** 3720 * 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. 3721 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met. 3722 * @param breakpoints 3723 * @param elements 3724 * @constructor 3725 */ 3726let EM_ResizeObserver = function( breakpoints, elements ){ 3727 const ro = new ResizeObserver( function( entries ){ 3728 for (let entry of entries) { 3729 let el = entry.target; 3730 if( !el.classList.contains('size-fixed') ) { 3731 for (const [name, breakpoint] of Object.entries(breakpoints)) { 3732 if (el.offsetWidth <= breakpoint || breakpoint === false) { 3733 for (let breakpoint_name of Object.keys(breakpoints)) { 3734 if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name); 3735 } 3736 // add class and trigger event only once 3737 if( !el.classList.contains('size-' + name) ) { 3738 el.classList.add('size-' + name); 3739 el.dispatchEvent( new CustomEvent('em_resize') ); 3740 } 3741 break; 3742 } 3743 } 3744 } 3745 } 3746 });
3747 elements.forEach( function( el ){ 3748 if( typeof el !== 'undefined' ){ 3749 ro.observe(el); 3750 } 3751 }); 3752 return ro; 3753}; 3754 3755// event list and event page (inc. some extra booking form logic) - todo/cleanup 3756jQuery(document).ready( function($){ 3757 // Events List 3758 let breakpoints = { 3759 'small' : 600, 3760 'large' : false, 3761 } 3762 const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() ); 3763 $(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){ 3764 let new_elements = view.find('.em-list').each( function(){ 3765 if( !this.classList.contains('size-fixed') ){ 3766 events_ro.observe( this ); 3767 } 3768 }); 3769 }); 3770 3771 $(document).on('click', '.em-grid .em-item[data-href]', function(e){ 3772 if( e.target.type !== 'a' ){ 3773 window.location.href = this.getAttribute('data-href'); 3774 } 3775 }); 3776 3777 // Single event area 3778 breakpoints = { 3779 'small' : 600, 3780 'medium' : 900, 3781 'large' : false, 3782 } 3783 const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() ); 3784 $(document).on('em_view_loaded', function( e, view ){ 3785 let new_elements = view.find('.em-event-single').each( function(){ 3786 if( !this.classList.contains('size-fixed') ){ 3787 event_ro.observe( this ); 3788 } 3789 }); 3790 }); 3791 // booking form area (WIP) 3792 $(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){ 3793 e.preventDefault(); 3794 var parent = $(this).closest('.em-event-booking-form'); 3795 parent.find('.em-login-trigger').hide(); 3796 parent.find('.em-login-content').fadeIn(); 3797 let login_form = parent.find('.em-login'); 3798 login_form[0].scrollIntoView({ 3799 behavior: 'smooth' 3800 }); 3801 login_form.first().find('input[name="log"]').focus(); 3802 3803 }); 3804 $(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){ 3805 e.preventDefault(); 3806 let parent = $(this).closest('.em-event-booking-form'); 3807 parent.find('.em-login-content').hide(); 3808 parent.find('.em-login-trigger').show(); 3809 }); 3810 EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray()); 3811 3812}); 3813 3814// handle generic ajax submission forms vanilla style 3815document.addEventListener('DOMContentLoaded', function () { 3816 document.querySelectorAll('form.em-ajax-form').forEach( function(el){ 3817 el.addEventListener('submit', function(e){ 3818 e.preventDefault(); 3819 let form = e.currentTarget; 3820 let formData = new FormData(form); 3821 let button = form.querySelector('button[type="submit"]'); 3822 let loader; 3823 3824 if( form.classList.contains('no-overlay-spinner') ){ 3825 form.classList.add('loading'); 3826 }else{ 3827 let loader = document.createElement('div'); 3828 loader.id = 'em-loading'; 3829 form.append(loader); 3830 } 3831 3832 var request = new XMLHttpRequest(); 3833 if( form.getAttribute('data-api-url') ){ 3834 request.open('POST', form.getAttribute('data-api-url'), true); 3835 request.setRequestHeader('X-WP-Nonce', EM.api_nonce); 3836 }else{ 3837 request.open('POST', EM.ajaxurl, true); 3838 } 3839 3840 request.onload = function() { 3841 if( loader ) loader.remove(); 3842 if (this.status >= 200 && this.status < 400) { 3843 // Success! 3844 try { 3845 let data = JSON.parse(this.response); 3846 let notice; 3847 if( !form.classList.contains('no-inline-notice') ){ 3848 notice = form.querySelector('.em-notice'); 3849 if( !notice ){ 3850 notice = document.createElement('div'); 3851 form.prepend(notice); 3852 if( formData.get('action') ){ 3853 form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), { 3854 detail : { 3855 form : form, 3856 notice : notice, 3857 response : data, 3858 } 3859 }) ); 3860 } 3861 } 3862 notice.innerHTML = ''; 3863 notice.setAttribute('class', 'em-notice'); 3864 } 3865 if( data.result ){ 3866 if( !form.classList.contains('no-inline-notice') ){ 3867 notice.classList.add('em-notice-success'); 3868 notice.innerHTML = data.message; 3869 form.replaceWith(notice); 3870 }else{ 3871 form.classList.add('load-successful'); 3872 form.classList.remove('loading'); 3873 if( data.message ){ 3874 EM_Alert(data.message); 3875 } 3876 } 3877 }else{ 3878 if( !form.classList.contains('no-inline-notice') ){ 3879 notice.classList.add('em-notice-error'); 3880 notice.innerHTML = data.errors; 3881 }else{ 3882 EM_Alert(data.errors); 3883 } 3884 } 3885 } catch(e) { 3886 alert( 'Error Encountered : ' + e); 3887 } 3888 } else { 3889 alert('Error encountered... please see debug logs or contact support.'); 3890 } 3891 form.classList.remove('loading'); 3892 }; 3893 3894 request.onerror = function() {
3895 alert('Connection error encountered... please see debug logs or contact support.'); 3896 }; 3897 3898 request.send( formData ); 3899 return false; 3900 }); 3901 }); 3902}); 3903 3904// phone numbers 3905let em_setup_phone_inputs = function( container ){}; 3906let em_unsetup_phone_inputs = function( container ){}; 3907if ( EM.phone ) { 3908 3909 let getCountry = function() { 3910 var timezones = { 3911 "Africa/Abidjan": { c : ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"] }, 3912 "Africa/Accra": { c : ["GH"] }, 3913 "Africa/Addis_Ababa": { c : ["ET"] }, 3914 "Africa/Algiers": { c : ["DZ"] }, 3915 "Africa/Asmara": { c : ["ER"] }, 3916 "Africa/Asmera": { c : ["ER"] }, 3917 "Africa/Bamako": { c : ["ML"] }, 3918 "Africa/Bangui": { c : ["CF"] }, 3919 "Africa/Banjul": { c : ["GM"] }, 3920 "Africa/Bissau": { c : ["GW"] }, 3921 "Africa/Blantyre": { c : ["MW"] }, 3922 "Africa/Brazzaville": { c : ["CG"] }, 3923 "Africa/Bujumbura": { c : ["BI"] }, 3924 "Africa/Cairo": { c : ["EG"] }, 3925 "Africa/Casablanca": { c : ["MA"] }, 3926 "Africa/Ceuta": { c : ["ES"] }, 3927 "Africa/Conakry": { c : ["GN"] }, 3928 "Africa/Dakar": { c : ["SN"] }, 3929 "Africa/Dar_es_Salaam": { c : ["TZ"] }, 3930 "Africa/Djibouti": { c : ["DJ"] }, 3931 "Africa/Douala": { c : ["CM"] }, 3932 "Africa/El_Aaiun": { c : ["EH"] }, 3933 "Africa/Freetown": { c : ["SL"] }, 3934 "Africa/Gaborone": { c : ["BW"] }, 3935 "Africa/Harare": { c : ["ZW"] }, 3936 "Africa/Johannesburg": { c : ["ZA", "LS", "SZ"] }, 3937 "Africa/Juba": { c : ["SS"] }, 3938 "Africa/Kampala": { c : ["UG"] }, 3939 "Africa/Khartoum": { c : ["SD"] }, 3940 "Africa/Kigali": { c : ["RW"] }, 3941 "Africa/Kinshasa": { c : ["CD"] }, 3942 "Africa/Lagos": { c : ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"] }, 3943 "Africa/Libreville": { c : ["GA"] }, 3944 "Africa/Lome": { c : ["TG"] }, 3945 "Africa/Luanda": { c : ["AO"] }, 3946 "Africa/Lubumbashi": { c : ["CD"] }, 3947 "Africa/Lusaka": { c : ["ZM"] }, 3948 "Africa/Malabo": { c : ["GQ"] }, 3949 "Africa/Maputo": { c : ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"] }, 3950 "Africa/Maseru": { c : ["LS"] }, 3951 "Africa/Mbabane": { c : ["SZ"] }, 3952 "Africa/Mogadishu": { c : ["SO"] }, 3953 "Africa/Monrovia": { c : ["LR"] }, 3954 "Africa/Nairobi": { c : ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"] }, 3955 "Africa/Ndjamena": { c : ["TD"] }, 3956 "Africa/Niamey": { c : ["NE"] }, 3957 "Africa/Nouakchott": { c : ["MR"] }, 3958 "Africa/Ouagadougou": { c : ["BF"] }, 3959 "Africa/Porto-Novo": { c : ["BJ"] }, 3960 "Africa/Sao_Tome": { c : ["ST"] }, 3961 "Africa/Timbuktu": { c : ["ML"] }, 3962 "Africa/Tripoli": { c : ["LY"] }, 3963 "Africa/Tunis": { c : ["TN"] }, 3964 "Africa/Windhoek": { c : ["NA"] }, 3965 "America/Adak": { c : ["US"] }, 3966 "America/Anchorage": { c : ["US"] }, 3967 "America/Anguilla": { c : ["AI"] }, 3968 "America/Antigua": { c : ["AG"] }, 3969 "America/Araguaina": { c : ["BR"] }, 3970 "America/Argentina/Buenos_Aires": { c : ["AR"] }, 3971 "America/Argentina/Catamarca": { c : ["AR"] }, 3972 "America/Argentina/ComodRivadavia": { c : ["AR"] }, 3973 "America/Argentina/Cordoba": { c : ["AR"] }, 3974 "America/Argentina/Jujuy": { c : ["AR"] }, 3975 "America/Argentina/La_Rioja": { c : ["AR"] }, 3976 "America/Argentina/Mendoza": { c : ["AR"] }, 3977 "America/Argentina/Rio_Gallegos": { c : ["AR"] }, 3978 "America/Argentina/Salta": { c : ["AR"] }, 3979 "America/Argentina/San_Juan": { c : ["AR"] }, 3980 "America/Argentina/San_Luis": { c : ["AR"] }, 3981 "America/Argentina/Tucuman": { c : ["AR"] }, 3982 "America/Argentina/Ushuaia": { c : ["AR"] }, 3983 "America/Aruba": { c : ["AW"] }, 3984 "America/Asuncion": { c : ["PY"] }, 3985 "America/Atikokan": { c : ["CA"] }, 3986 "America/Atka": {}, 3987 "America/Bahia": { c : ["BR"] }, 3988 "America/Bahia_Banderas": { c : ["MX"] }, 3989 "America/Barbados": { c : ["BB"] }, 3990 "America/Belem": { c : ["BR"] }, 3991 "America/Belize": { c : ["BZ"] }, 3992 "America/Blanc-Sablon": { c : ["CA"] }, 3993 "America/Boa_Vista": { c : ["BR"] }, 3994 "America/Bogota": { c : ["CO"] }, 3995 "America/Boise": { c : ["US"] }, 3996 "America/Buenos_Aires": { c : ["AR"] }, 3997 "America/Cambridge_Bay": { c : ["CA"] }, 3998 "America/Campo_Grande": { c : ["BR"] }, 3999 "America/Cancun": { c : ["MX"] }, 4000 "America/Caracas": { c : ["VE"] }, 4001 "America/Catamarca": {}, 4002 "America/Cayenne": { c : ["GF"] }, 4003 "America/Cayman": { c : ["KY"] }, 4004 "America/Chicago": { c : ["US"] }, 4005 "America/Chihuahua": { c : ["MX"] }, 4006 "America/Coral_Harbour": { c : ["CA"] }, 4007 "America/Cordoba": { c: ['AR'] }, 4008 "America/Costa_Rica": { c : ["CR"] },
4009 "America/Creston": { c : ["CA"] }, 4010 "America/Cuiaba": { c : ["BR"] }, 4011 "America/Curacao": { c : ["CW"] }, 4012 "America/Danmarkshavn": { c : ["GL"] }, 4013 "America/Dawson": { c : ["CA"] }, 4014 "America/Dawson_Creek": { c : ["CA"] }, 4015 "America/Denver": { c : ["US"] }, 4016 "America/Detroit": { c : ["US"] }, 4017 "America/Dominica": { c : ["DM"] }, 4018 "America/Edmonton": { c : ["CA"] }, 4019 "America/Eirunepe": { c : ["BR"] }, 4020 "America/El_Salvador": { c : ["SV"] }, 4021 "America/Ensenada": {}, 4022 "America/Fort_Nelson": { c : ["CA"] }, 4023 "America/Fort_Wayne": {}, 4024 "America/Fortaleza": { c : ["BR"] }, 4025 "America/Glace_Bay": { c : ["CA"] }, 4026 "America/Godthab": {}, 4027 "America/Goose_Bay": { c : ["CA"] }, 4028 "America/Grand_Turk": { c : ["TC"] }, 4029 "America/Grenada": { c : ["GD"] }, 4030 "America/Guadeloupe": { c : ["GP"] }, 4031 "America/Guatemala": { c : ["GT"] }, 4032 "America/Guayaquil": { c : ["EC"] }, 4033 "America/Guyana": { c : ["GY"] }, 4034 "America/Halifax": { c : ["CA"] }, 4035 "America/Havana": { c : ["CU"] }, 4036 "America/Hermosillo": { c : ["MX"] }, 4037 "America/Indiana/Indianapolis": { c : ["US"] }, 4038 "America/Indiana/Knox": { c : ["US"] }, 4039 "America/Indiana/Marengo": { c : ["US"] }, 4040 "America/Indiana/Petersburg": { c : ["US"] }, 4041 "America/Indiana/Tell_City": { c : ["US"] }, 4042 "America/Indiana/Vevay": { c : ["US"] }, 4043 "America/Indiana/Vincennes": { c : ["US"] }, 4044 "America/Indiana/Winamac": { c : ["US"] }, 4045 "America/Indianapolis": {}, 4046 "America/Inuvik": { c : ["CA"] }, 4047 "America/Iqaluit": { c : ["CA"] }, 4048 "America/Jamaica": { c : ["JM"] }, 4049 "America/Jujuy": {}, 4050 "America/Juneau": { c : ["US"] }, 4051 "America/Kentucky/Louisville": { c : ["US"] }, 4052 "America/Kentucky/Monticello": { c : ["US"] }, 4053 "America/Knox_IN": {}, 4054 "America/Kralendijk": { c : ["BQ"] }, 4055 "America/La_Paz": { c : ["BO"] }, 4056 "America/Lima": { c : ["PE"] }, 4057 "America/Los_Angeles": { c : ["US"] }, 4058 "America/Louisville": {}, 4059 "America/Lower_Princes": { c : ["SX"] }, 4060 "America/Maceio": { c : ["BR"] }, 4061 "America/Managua": { c : ["NI"] }, 4062 "America/Manaus": { c : ["BR"] }, 4063 "America/Marigot": { c : ["MF"] }, 4064 "America/Martinique": { c : ["MQ"] }, 4065 "America/Matamoros": { c : ["MX"] }, 4066 "America/Mazatlan": { c : ["MX"] }, 4067 "America/Mendoza": {}, 4068 "America/Menominee": { c : ["US"] }, 4069 "America/Merida": { c : ["MX"] }, 4070 "America/Metlakatla": { c : ["US"] }, 4071 "America/Mexico_City": { c : ["MX"] }, 4072 "America/Miquelon": { c : ["PM"] }, 4073 "America/Moncton": { c : ["CA"] }, 4074 "America/Monterrey": { c : ["MX"] }, 4075 "America/Montevideo": { c : ["UY"] }, 4076 "America/Montreal": { c : ["CA"] }, 4077 "America/Montserrat": { c : ["MS"] }, 4078 "America/Nassau": { c : ["BS"] }, 4079 "America/New_York": { c : ["US"] }, 4080 "America/Nipigon": { c : ["CA"] }, 4081 "America/Nome": { c : ["US"] }, 4082 "America/Noronha": { c : ["BR"] }, 4083 "America/North_Dakota/Beulah": { c : ["US"] }, 4084 "America/North_Dakota/Center": { c : ["US"] }, 4085 "America/North_Dakota/New_Salem": { c : ["US"] }, 4086 "America/Nuuk": { c : ["GL"] }, 4087 "America/Ojinaga": { c : ["MX"] }, 4088 "America/Panama": { c : ["PA", "CA", "KY"] }, 4089 "America/Pangnirtung": { c : ["CA"] }, 4090 "America/Paramaribo": { c : ["SR"] }, 4091 "America/Phoenix": { c : ["US", "CA"] }, 4092 "America/Port-au-Prince": { c : ["HT"] }, 4093 "America/Port_of_Spain": { c : ["TT"] }, 4094 "America/Porto_Acre": {}, 4095 "America/Porto_Velho": { c : ["BR"] }, 4096 "America/Puerto_Rico": { c : ["PR", "AG", "CA", "AI","AW","BL","BQ","CW","DM","GD","GP","KN","LC","MF","MS","SX","TT","VC","VG","VI"] }, 4097 "America/Punta_Arenas": { c : ["CL"] }, 4098 "America/Rainy_River": { c : ["CA"] }, 4099 "America/Rankin_Inlet": { c : ["CA"] }, 4100 "America/Recife": { c : ["BR"] }, 4101 "America/Regina": { c : ["CA"] }, 4102 "America/Resolute": { c : ["CA"] }, 4103 "America/Rio_Branco": { c : ["BR"] }, 4104 "America/Rosario": {}, 4105 "America/Santa_Isabel": {}, 4106 "America/Santarem": { c : ["BR"] }, 4107 "America/Santiago": { c : ["CL"] }, 4108 "America/Santo_Domingo": { c : ["DO"] }, 4109 "America/Sao_Paulo": { c : ["BR"] }, 4110 "America/Scoresbysund": { c : ["GL"] }, 4111 "America/Shiprock": {}, 4112 "America/Sitka": { c : ["US"] }, 4113 "America/St_Barthelemy": { c : ["BL"] }, 4114 "America/St_Johns": { c : ["CA"] }, 4115 "America/St_Kitts": { c : ["KN"] }, 4116 "America/St_Lucia": { c : ["LC"] }, 4117 "America/St_Thomas": { c : ["VI"] }, 4118 "America/St_Vincent": { c : ["VC"] }, 4119 "America/Swift_Current": { c : ["CA"] }, 4120 "America/Tegucigalpa": { c : ["HN"] }, 4121 "America/Thule": { c : ["GL"] }, 4122 "America/Thunder_Bay": { c : ["CA"] }, 4123 "America/Tijuana": { c : ["MX"] }, 4124 "America/Toronto": { c : ["CA", "BS"] }, 4125 "America/Tortola": { c : ["VG"] }, 4126 "America/Vancouver": { c : ["CA"] }, 4127 "America/Virgin": { c : ["VI"] }, 4128 "America/Whitehorse": { c : ["CA"] }, 4129 "America/Winnipeg": { c : ["CA"] }, 4130 "America/Yakutat": { c : ["US"] }, 4131 "America/Yellowknife": { c : ["CA"] }, 4132 "Antarctica/Casey": { c : ["AQ"] }, 4133 "Antarctica/Davis": { c : ["AQ"] }, 4134 "Antarctica/DumontDUrville": { c : ["AQ"] }, 4135 "Antarctica/Macquarie": { c : ["AU"] }, 4136 "Antarctica/Mawson": { c : ["AQ"] }, 4137 "Antarctica/McMurdo": { c : ["AQ"] }, 4138 "Antarctica/Palmer": { c : ["AQ"] }, 4139 "Antarctica/Rothera": { c : ["AQ"] }, 4140 "Antarctica/South_Pole": { c : ["AQ"] }, 4141 "Antarctica/Syowa": { c : ["AQ"] }, 4142 "Antarctica/Troll": { c : ["AQ"] }, 4143 "Antarctica/Vostok": { c : ["AQ"] }, 4144 "Arctic/Longyearbyen": { c : ["SJ"] }, 4145 "Asia/Aden": { c : ["YE"] }, 4146 "Asia/Almaty": { c : ["KZ"] }, 4147 "Asia/Amman": { c : ["JO"] }, 4148 "Asia/Anadyr": { c : ["RU"] }, 4149 "Asia/Aqtau": { c : ["KZ"] }, 4150 "Asia/Aqtobe": { c : ["KZ"] }, 4151 "Asia/Ashgabat": { c : ["TM"] }, 4152 "Asia/Ashkhabad": {}, 4153 "Asia/Atyrau": { c : ["KZ"] }, 4154 "Asia/Baghdad": { c : ["IQ"] },
4155 "Asia/Bahrain": { c : ["BH"] }, 4156 "Asia/Baku": { c : ["AZ"] }, 4157 "Asia/Bangkok": { c : ["TH", "KH", "LA", "VN"] }, 4158 "Asia/Barnaul": { c : ["RU"] }, 4159 "Asia/Beirut": { c : ["LB"] }, 4160 "Asia/Bishkek": { c : ["KG"] }, 4161 "Asia/Brunei": { c : ["BN"] }, 4162 "Asia/Calcutta": {}, 4163 "Asia/Chita": { c : ["RU"] }, 4164 "Asia/Choibalsan": { c : ["MN"] }, 4165 "Asia/Chongqing": {}, 4166 "Asia/Chungking": {}, 4167 "Asia/Colombo": { c : ["LK"] }, 4168 "Asia/Dacca": {}, 4169 "Asia/Damascus": { c : ["SY"] }, 4170 "Asia/Dhaka": { c : ["BD"] }, 4171 "Asia/Dili": { c : ["TL"] }, 4172 "Asia/Dubai": { c : ["AE", "OM"] }, 4173 "Asia/Dushanbe": { c : ["TJ"] }, 4174 "Asia/Famagusta": { c : ["CY"] }, 4175 "Asia/Gaza": { c : ["PS"] }, 4176 "Asia/Harbin": {}, 4177 "Asia/Hebron": { c : ["PS"] }, 4178 "Asia/Ho_Chi_Minh": { c : ["VN"] }, 4179 "Asia/Hong_Kong": { c : ["HK"] }, 4180 "Asia/Hovd": { c : ["MN"] }, 4181 "Asia/Irkutsk": { c : ["RU"] }, 4182 "Asia/Istanbul": {}, 4183 "Asia/Jakarta": { c : ["ID"] }, 4184 "Asia/Jayapura": { c : ["ID"] }, 4185 "Asia/Jerusalem": { c : ["IL"] }, 4186 "Asia/Kabul": { c : ["AF"] }, 4187 "Asia/Kamchatka": { c : ["RU"] }, 4188 "Asia/Karachi": { c : ["PK"] },
4189 "Asia/Kashgar": {}, 4190 "Asia/Kathmandu": { c : ["NP"] }, 4191 "Asia/Katmandu": {}, 4192 "Asia/Khandyga": { c : ["RU"] }, 4193 "Asia/Kolkata": { c : ["IN"] }, 4194 "Asia/Krasnoyarsk": { c : ["RU"] }, 4195 "Asia/Kuala_Lumpur": { c : ["MY"] }, 4196 "Asia/Kuching": { c : ["MY"] }, 4197 "Asia/Kuwait": { c : ["KW"] }, 4198 "Asia/Macao": {}, 4199 "Asia/Macau": { c : ["MO"] }, 4200 "Asia/Magadan": { c : ["RU"] }, 4201 "Asia/Makassar": { c : ["ID"] }, 4202 "Asia/Manila": { c : ["PH"] }, 4203 "Asia/Muscat": { c : ["OM"] }, 4204 "Asia/Nicosia": { c : ["CY"] }, 4205 "Asia/Novokuznetsk": { c : ["RU"] }, 4206 "Asia/Novosibirsk": { c : ["RU"] }, 4207 "Asia/Omsk": { c : ["RU"] }, 4208 "Asia/Oral": { c : ["KZ"] }, 4209 "Asia/Phnom_Penh": { c : ["KH"] }, 4210 "Asia/Pontianak": { c : ["ID"] }, 4211 "Asia/Pyongyang": { c : ["KP"] }, 4212 "Asia/Qatar": { c : ["QA", "BH"] }, 4213 "Asia/Qostanay": { c : ["KZ"] }, 4214 "Asia/Qyzylorda": { c : ["KZ"] }, 4215 "Asia/Rangoon": {}, 4216 "Asia/Riyadh": { c : ["SA", "AQ", "KW", "YE"] }, 4217 "Asia/Saigon": {}, 4218 "Asia/Sakhalin": { c : ["RU"] }, 4219 "Asia/Samarkand": { c : ["UZ"] }, 4220 "Asia/Seoul": { c : ["KR"] }, 4221 "Asia/Shanghai": { c : ["CN"] }, 4222 "Asia/Singapore": { c : ["SG", "MY"] }, 4223 "Asia/Srednekolymsk": { c : ["RU"] }, 4224 "Asia/Taipei": { c : ["TW"] }, 4225 "Asia/Tashkent": { c : ["UZ"] }, 4226 "Asia/Tbilisi": { c : ["GE"] }, 4227 "Asia/Tehran": { c : ["IR"] }, 4228 "Asia/Tel_Aviv": {}, 4229 "Asia/Thimbu": {}, 4230 "Asia/Thimphu": { c : ["BT"] }, 4231 "Asia/Tokyo": { c : ["JP"] }, 4232 "Asia/Tomsk": { c : ["RU"] }, 4233 "Asia/Ujung_Pandang": {}, 4234 "Asia/Ulaanbaatar": { c : ["MN"] }, 4235 "Asia/Ulan_Bator": {}, 4236 "Asia/Urumqi": { c : ["CN"] }, 4237 "Asia/Ust-Nera": { c : ["RU"] }, 4238 "Asia/Vientiane": { c : ["LA"] }, 4239 "Asia/Vladivostok": { c : ["RU"] }, 4240 "Asia/Yakutsk": { c : ["RU"] }, 4241 "Asia/Yangon": { c : ["MM"] }, 4242 "Asia/Yekaterinburg": { c : ["RU"] }, 4243 "Asia/Yerevan": { c : ["AM"] }, 4244 "Atlantic/Azores": { c : ["PT"] }, 4245 "Atlantic/Bermuda": { c : ["BM"] }, 4246 "Atlantic/Canary": { c : ["ES"] }, 4247 "Atlantic/Cape_Verde": { c : ["CV"] }, 4248 "Atlantic/Faeroe": {}, 4249 "Atlantic/Faroe": { c : ["FO"] }, 4250 "Atlantic/Jan_Mayen": { c : ["SJ"] }, 4251 "Atlantic/Madeira": { c : ["PT"] }, 4252 "Atlantic/Reykjavik": { c : ["IS"] }, 4253 "Atlantic/South_Georgia": { c : ["GS"] }, 4254 "Atlantic/St_Helena": { c : ["SH"] }, 4255 "Atlantic/Stanley": { c : ["FK"] }, 4256 "Australia/ACT": {}, 4257 "Australia/Adelaide": { c : ["AU"] }, 4258 "Australia/Brisbane": { c : ["AU"] }, 4259 "Australia/Broken_Hill": { c : ["AU"] }, 4260 "Australia/Canberra": {}, 4261 "Australia/Currie": {}, 4262 "Australia/Darwin": { c : ["AU"] }, 4263 "Australia/Eucla": { c : ["AU"] }, 4264 "Australia/Hobart": { c : ["AU"] }, 4265 "Australia/LHI": {}, 4266 "Australia/Lindeman": { c : ["AU"] }, 4267 "Australia/Lord_Howe": { c : ["AU"] }, 4268 "Australia/Melbourne": { c : ["AU"] }, 4269 "Australia/NSW": {}, 4270 "Australia/North": {}, 4271 "Australia/Perth": { c : ["AU"] }, 4272 "Australia/Queensland": {}, 4273 "Australia/South": {}, 4274 "Australia/Sydney": { c : ["AU"] }, 4275 "Australia/Tasmania": {}, 4276 "Australia/Victoria": {}, 4277 "Australia/West": {}, 4278 "Australia/Yancowinna": {}, 4279 "Brazil/Acre": {}, 4280 "Brazil/DeNoronha": {}, 4281 "Brazil/East": {}, 4282 "Brazil/West": {}, 4283 CET: { c : ["XK"] }, 4284 CST6CDT: {}, 4285 "Canada/Atlantic": {}, 4286 "Canada/Central": {}, 4287 "Canada/Eastern": { c : ["CA"] }, 4288 "Canada/Mountain": {}, 4289 "Canada/Newfoundland": {}, 4290 "Canada/Pacific": {}, 4291 "Canada/Saskatchewan": {}, 4292 "Canada/Yukon": {}, 4293 "Chile/Continental": {}, 4294 "Chile/EasterIsland": {}, 4295 Cuba: {}, 4296 EET: {}, 4297 EST: {}, 4298 EST5EDT: {}, 4299 Egypt: {}, 4300 Eire: {}, 4301 "Etc/GMT": { c : ["AC"] }, 4302 "Etc/GMT+0": {}, 4303 "Etc/GMT+1": {}, 4304 "Etc/GMT+10": {}, 4305 "Etc/GMT+11": {}, 4306 "Etc/GMT+12": {}, 4307 "Etc/GMT+2": {}, 4308 "Etc/GMT+3": {}, 4309 "Etc/GMT+4": {}, 4310 "Etc/GMT+5": {}, 4311 "Etc/GMT+6": {}, 4312 "Etc/GMT+7": {}, 4313 "Etc/GMT+8": {}, 4314 "Etc/GMT+9": {}, 4315 "Etc/GMT-0": {}, 4316 "Etc/GMT-1": {}, 4317 "Etc/GMT-10": {}, 4318 "Etc/GMT-11": {}, 4319 "Etc/GMT-12": {}, 4320 "Etc/GMT-13": {}, 4321 "Etc/GMT-14": {}, 4322 "Etc/GMT-2": {}, 4323 "Etc/GMT-3": {}, 4324 "Etc/GMT-4": {}, 4325 "Etc/GMT-5": {}, 4326 "Etc/GMT-6": {}, 4327 "Etc/GMT-7": {}, 4328 "Etc/GMT-8": {}, 4329 "Etc/GMT-9": {}, 4330 "Etc/GMT0": {}, 4331 "Etc/Greenwich": {}, 4332 "Etc/UCT": {}, 4333 "Etc/UTC": {}, 4334 "Etc/Universal": {}, 4335 "Etc/Zulu": {}, 4336 "Europe/Amsterdam": { c : ["NL"] }, 4337 "Europe/Andorra": { c : ["AD"] }, 4338 "Europe/Astrakhan": { c : ["RU"] }, 4339 "Europe/Athens": { c : ["GR"] }, 4340 "Europe/Belfast": { c : ["GB"] }, 4341 "Europe/Belgrade": { c : ["RS", "BA", "HR", "ME", "MK", "SI"] },
4342 "Europe/Berlin": { c : ["DE"] }, 4343 "Europe/Bratislava": { c : ["SK"] }, 4344 "Europe/Brussels": { c : ["BE"] }, 4345 "Europe/Bucharest": { c : ["RO"] }, 4346 "Europe/Budapest": { c : ["HU"] }, 4347 "Europe/Busingen": { c : ["DE"] }, 4348 "Europe/Chisinau": { c : ["MD"] }, 4349 "Europe/Copenhagen": { c : ["DK"] }, 4350 "Europe/Dublin": { c : ["IE"] }, 4351 "Europe/Gibraltar": { c : ["GI"] }, 4352 "Europe/Guernsey": { c : ["GG"] }, 4353 "Europe/Helsinki": { c : ["FI", "AX"] }, 4354 "Europe/Isle_of_Man": { c : ["IM"] }, 4355 "Europe/Istanbul": { c : ["TR"] }, 4356 "Europe/Jersey": { c : ["JE"] }, 4357 "Europe/Kaliningrad": { c : ["RU"] }, 4358 "Europe/Kiev": { c : ["UA"] }, 4359 "Europe/Kirov": { c : ["RU"] }, 4360 "Europe/Lisbon": { c : ["PT"] }, 4361 "Europe/Ljubljana": { c : ["SI"] }, 4362 "Europe/London": { c : ["GB", "GG", "IM", "JE"] }, 4363 "Europe/Luxembourg": { c : ["LU"] }, 4364 "Europe/Madrid": { c : ["ES"] }, 4365 "Europe/Malta": { c : ["MT"] }, 4366 "Europe/Mariehamn": { c : ["AX"] }, 4367 "Europe/Minsk": { c : ["BY"] }, 4368 "Europe/Monaco": { c : ["MC"] }, 4369 "Europe/Moscow": { c : ["RU"] }, 4370 "Europe/Nicosia": {}, 4371 "Europe/Oslo": { c : ["NO", "SJ", "BV"] }, 4372 "Europe/Paris": { c : ["FR"] }, 4373 "Europe/Podgorica": { c : ["ME"] }, 4374 "Europe/Prague": { c : ["CZ", "SK"] }, 4375 "Europe/Riga": { c : ["LV"] }, 4376 "Europe/Rome": { c : ["IT", "SM", "VA"] }, 4377 "Europe/Samara": { c : ["RU"] }, 4378 "Europe/San_Marino": { c : ["SM"] }, 4379 "Europe/Sarajevo": { c : ["BA"] }, 4380 "Europe/Saratov": { c : ["RU"] }, 4381 "Europe/Simferopol": { c : ["RU", "UA"] }, 4382 "Europe/Skopje": { c : ["MK"] }, 4383 "Europe/Sofia": { c : ["BG"] }, 4384 "Europe/Stockholm": { c : ["SE"] }, 4385 "Europe/Tallinn": { c : ["EE"] }, 4386 "Europe/Tirane": { c : ["AL"] }, 4387 "Europe/Tiraspol": {}, 4388 "Europe/Ulyanovsk": { c : ["RU"] }, 4389 "Europe/Uzhgorod": { c : ["UA"] }, 4390 "Europe/Vaduz": { c : ["LI"] }, 4391 "Europe/Vatican": { c : ["VA"] }, 4392 "Europe/Vienna": { c : ["AT"] }, 4393 "Europe/Vilnius": { c : ["LT"] }, 4394 "Europe/Volgograd": { c : ["RU"] }, 4395 "Europe/Warsaw": { c : ["PL"] }, 4396 "Europe/Zagreb": { c : ["HR"] }, 4397 "Europe/Zaporozhye": { c : ["UA"] }, 4398 "Europe/Zurich": { c : ["CH", "DE", "LI"] }, 4399 Factory: {}, 4400 GB: { c : ["GB"] }, 4401 "GB-Eire": { c : ["GB"] }, 4402 GMT: { c : ["AC"] }, 4403 "GMT+0": {}, 4404 "GMT-0": {}, 4405 GMT0: {}, 4406 Greenwich: {}, 4407 HST: {}, 4408 Hongkong: {}, 4409 Iceland: {}, 4410 "Indian/Antananarivo": { c : ["MG"] }, 4411 "Indian/Chagos": { c : ["IO"] }, 4412 "Indian/Christmas": { c : ["CX"] }, 4413 "Indian/Cocos": { c : ["CC"] }, 4414 "Indian/Comoro": { c : ["KM"] }, 4415 "Indian/Kerguelen": { c : ["TF", "HM"] }, 4416 "Indian/Mahe": { c : ["SC"] }, 4417 "Indian/Maldives": { c : ["MV"] }, 4418 "Indian/Mauritius": { c : ["MU"] }, 4419 "Indian/Mayotte": { c : ["YT"] }, 4420 "Indian/Reunion": { c : ["RE", "TF"] }, 4421 Iran: {}, 4422 Israel: {}, 4423 Jamaica: {}, 4424 Japan: {}, 4425 Kwajalein: {}, 4426 Libya: {}, 4427 MET: {}, 4428 MST: {}, 4429 MST7MDT: {}, 4430 "Mexico/BajaNorte": {}, 4431 "Mexico/BajaSur": {}, 4432 "Mexico/General": {}, 4433 NZ: { c : ["NZ"] }, 4434 "NZ-CHAT": {}, 4435 Navajo: {}, 4436 PRC: {}, 4437 PST8PDT: {}, 4438 "Pacific/Apia": { c : ["WS"] }, 4439 "Pacific/Auckland": { c : ["NZ", "AQ"] }, 4440 "Pacific/Bougainville": { c : ["PG"] }, 4441 "Pacific/Chatham": { c : ["NZ"] }, 4442 "Pacific/Chuuk": { c : ["FM"] }, 4443 "Pacific/Easter": { c : ["CL"] }, 4444 "Pacific/Efate": { c : ["VU"] }, 4445 "Pacific/Enderbury": {}, 4446 "Pacific/Fakaofo": { c : ["TK"] }, 4447 "Pacific/Fiji": { c : ["FJ"] }, 4448 "Pacific/Funafuti": { c : ["TV"] }, 4449 "Pacific/Galapagos": { c : ["EC"] }, 4450 "Pacific/Gambier": { c : ["PF"] }, 4451 "Pacific/Guadalcanal": { c : ["SB"] }, 4452 "Pacific/Guam": { c : ["GU", "MP"] }, 4453 "Pacific/Honolulu": { c : ["US", "UM"] }, 4454 "Pacific/Johnston": { c : ["UM"] }, 4455 "Pacific/Kanton": { c : ["KI"] }, 4456 "Pacific/Kiritimati": { c : ["KI"] }, 4457 "Pacific/Kosrae": { c : ["FM"] }, 4458 "Pacific/Kwajalein": { c : ["MH"] }, 4459 "Pacific/Majuro": { c : ["MH"] }, 4460 "Pacific/Marquesas": { c : ["PF"] }, 4461 "Pacific/Midway": { c : ["UM"] }, 4462 "Pacific/Nauru": { c : ["NR"] }, 4463 "Pacific/Niue": { c : ["NU"] }, 4464 "Pacific/Norfolk": { c : ["NF"] }, 4465 "Pacific/Noumea": { c : ["NC"] }, 4466 "Pacific/Pago_Pago": { c : ["AS", "UM"] },
4467 "Pacific/Palau": { c : ["PW"] }, 4468 "Pacific/Pitcairn": { c : ["PN"] }, 4469 "Pacific/Pohnpei": { c : ["FM"] }, 4470 "Pacific/Ponape": {}, 4471 "Pacific/Port_Moresby": { c : ["PG", "AQ"] }, 4472 "Pacific/Rarotonga": { c : ["CK"] }, 4473 "Pacific/Saipan": { c : ["MP"] }, 4474 "Pacific/Samoa": { c : ["WS"] }, 4475 "Pacific/Tahiti": { c : ["PF"] }, 4476 "Pacific/Tarawa": { c : ["KI"] }, 4477 "Pacific/Tongatapu": { c : ["TO"] }, 4478 "Pacific/Truk": {}, 4479 "Pacific/Wake": { c : ["UM"] }, 4480 "Pacific/Wallis": { c : ["WF"] }, 4481 "Pacific/Yap": {}, 4482 Poland: {}, 4483 Portugal: {}, 4484 ROC: {}, 4485 ROK: {}, 4486 Singapore: { c : ["SG"] }, 4487 Turkey: {}, 4488 UCT: {}, 4489 "US/Alaska": {}, 4490 "US/Aleutian": {}, 4491 "US/Arizona": { c : ["US"] }, 4492 "US/Central": {}, 4493 "US/East-Indiana": {}, 4494 "US/Eastern": {}, 4495 "US/Hawaii": { c : ["US"] }, 4496 "US/Indiana-Starke": {}, 4497 "US/Michigan": {}, 4498 "US/Mountain": {}, 4499 "US/Pacific": {}, 4500 "US/Samoa": { c : ["WS"] }, 4501 UTC: {}, 4502 Universal: {}, 4503 "W-SU": {}, 4504 WET: {}, 4505 Zulu: { 4506 } 4507 }; 4508 4509 const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; 4510 4511 if (timezone === "" || !timezone) { 4512 return null; 4513 } 4514 4515 return timezones[timezone].c[0]; 4516 } 4517 4518 let utilsScriptLoaded; 4519 4520 em_setup_phone_inputs = async function ( container, overriding_options = {} ) { 4521 if ( !EM.phone ) return false; 4522 if( !utilsScriptLoaded ) { 4523 import( EM.url + '/includes/external/intl-tel-input/js/intlTelInputWithUtils.js' ).then( () => { 4524 utilsScriptLoaded = true; 4525 em_setup_phone_inputs( container ); 4526 }); 4527 return false; 4528 } // on initial load, we wait for scripts to load 4529 container.querySelectorAll('input.em-phone-intl[type="tel"]').forEach( function(input){ 4530 // change name and allow a hidden field for submission 4531 let alt = document.createElement('input'); 4532 let name = input.name; 4533 if( name ) { 4534 // check if there's an ending ] in the name if so modify the name within the last brackets 4535 let lastBracket = name.lastIndexOf(']'); 4536 if( lastBracket > -1 ) { 4537 input.name = name.substring(0, lastBracket) + '_intl]'; 4538 } else { 4539 input.name = name + '_intl'; 4540 } 4541 alt.name = name; 4542 } 4543 input.classList.add('em-intl-tel'); 4544 // copy all classes and remove ones we know we don't want 4545 alt.setAttribute('class', input.getAttribute('class') + ' em-intl-tel-full'); 4546 alt.classList.remove('em-intl-tel'); 4547 alt.type = 'hidden'; 4548 if( input.id ) { 4549 alt.id = input.id + '-full' 4550 } 4551 alt.value = input.value; 4552 // add data-name to the full input if it exists, for use in dynamic input forms for JS submission within forms 4553 if( input.getAttribute('data-name') ) { 4554 alt.setAttribute('data-name', input.getAttribute('data-name')); 4555 input.removeAttribute('data-name'); 4556 } 4557 input.after(alt); 4558 4559 let default_options = Object.assign({ 4560 autoPlaceholder: 'aggressive', 4561 separateDialCode : true, 4562 }, EM.phone.options); 4563 let options = Object.assign( default_options, overriding_options ); 4564 4565 if( EM.phone.detectJS || options.detectJS ) { 4566 let country = getCountry(); 4567 if( country ) { 4568 options.initialCountry = country; 4569 } else if ( EM.phone.initialCountry ) { 4570 options.initialCountry = EM.phone.initialCountry; 4571 } 4572 } 4573 if( options.onlyCountries ) { 4574 if( Array.isArray(options.onlyCountries) && options.onlyCountries.length > 0 ) { 4575 // make sure initial country is not excluded 4576 if (!options.onlyCountries.includes(options.initialCountry && options.initialCountry)) { 4577 options.onlyCountries.push(options.initialCountry); 4578 } 4579 } else { 4580 options.onlyCountries = []; 4581 } 4582 } 4583 4584 let iti = EM.intlTelInput( input, options); 4585 if ( !input?.checkVisibility() ) { 4586 // if the input is hidden, we need some trickery to correctly obtain the padding by adding a clone of the minimum into the array 4587 // intl-tel-input does this, but because it's not wrapped in an em element the padding isn't correctly styled via CSS 4588 let body = document.body; 4589 let container = document.createElement('div'); 4590 container.style.visibility = "hidden"; 4591 container.classList.add('em'); 4592 body.appendChild( container ); 4593 let containerClone = input.parentNode.cloneNode( false ); 4594 container.appendChild( containerClone ); 4595 let countryContainerClone = iti.ui.countryContainer.cloneNode(); 4596 containerClone.appendChild( countryContainerClone ); 4597 let selectedCountryClone = iti.ui.selectedCountry.cloneNode( true ); 4598 countryContainerClone.appendChild( selectedCountryClone ); 4599 let width = selectedCountryClone.offsetWidth + 12; // add extra padding 4600 input.style.setProperty('padding-left', width + 'px', 'important' ); 4601 body.removeChild( container ); 4602 } 4603 //iti.countryContainer.querySelector('button')?.setAttribute('data-nostyle', ''); 4604 let pixels = parseInt( input.style.paddingLeft.replace('px', '') ); // pad this an extra px 4605 input.style.setProperty('padding-left', pixels + 'px', 'important' ); 4606
4607 // do some basic inline validation 4608 input.addEventListener('change', function( e ){ 4609 alt.value = iti.getNumber(); 4610 if ( input.value.trim() ) { 4611 let wrapper = input.closest('.iti') 4612 if ( iti.isValidNumber() ) { 4613 wrapper.classList.remove("invalid-number"); 4614 if ( wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error') ) { 4615 wrapper.nextElementSibling.remove(); 4616 } 4617 } else { 4618 wrapper.classList.add("invalid-number"); 4619 const errorCode = iti.getValidationError(); 4620 let errorMsg; 4621 if( !(wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error')) ) { 4622 // create a div em-form-error class name and append after input 4623 errorMsg = document.createElement('div'); 4624 errorMsg.classList.add('em-inline-error'); 4625 wrapper.after(errorMsg); 4626 } else { 4627 errorMsg = wrapper.nextElementSibling; 4628 } 4629 errorMsg.innerHTML = '<span class="em-icon"></span> ' + EM.phone.error; 4630 errorMsg.classList.remove("hide"); 4631 } 4632 } 4633 }); 4634 4635 // trigger changes 4636 input.addEventListener('countrychange', function( e ){ 4637 alt.value = iti.getNumber(); 4638 // check input padding inline style and set it to important 4639 if( input.getAttribute('style') ) { 4640 let pixels = parseInt(input.style.paddingLeft.replace('px', '')); // pad this an extra px 4641 input.style.setProperty('padding-left', pixels + 'px', 'important' ); 4642 } 4643 }); 4644 4645 input.addEventListener('open:countrydropdown', function( e ) { 4646 document.querySelectorAll('.iti.iti--container.iti--fullscreen-popup').forEach( function( el ) { 4647 if ( !el.closest('.em') ) { 4648 // wrap in an .em div 4649 let div = document.createElement('div'); 4650 div.classList.add('em'); 4651 el.parentNode.insertBefore(div, el); 4652 div.appendChild(el); 4653 el.querySelector('input.iti__search-input')?.focus(); 4654 } 4655 }); 4656 }); 4657 4658 }); 4659 }; 4660 4661 em_unsetup_phone_inputs = function( container ) { 4662 container.querySelectorAll( 'input.em-phone-intl[type="tel"]' ).forEach( function(el){ 4663 let iti = EM.intlTelInput?.getInstance(el); 4664 if ( iti ) { 4665 iti.destroy(); 4666 // remove alt field as well and unset the _intl suffix, which may have a trailing ] so needs a preg 4667 el.name = el.name.replace(/_intl]$/, ']').replace(/_intl$/, ''); 4668 el.parentElement.querySelector('input.em-intl-tel-full')?.remove(); 4669 } 4670 }); 4671 }; 4672} 4673 4674/*! 4675 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/ 4676 * Did a search/replace of timepicker to em_timepicker to prevent conflicts. 4677 */ 4678(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);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}
4678function _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)))}}
4678var 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
4678ings.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>
4678settings.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;
4678if(_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
4678))}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})})(); 4679 4680/*! 4681 * flatpickr v4.6.13,, @license MIT
vendor: 50,644 bytes, lines 4682-4683
4682 */ 4683!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 4683-4684
4683 4684(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;
4684index<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}); 4685 4686/*! 4687 * popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core 4688 */ 4689!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: 17,313 bytes, lines 4689-4693
4689wport||[],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];Object.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})})); 4690 4691/*! 4692 * tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs 4693 */
vendor: 25,668 bytes, line 4694
4694!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}));
4695 4696/** 4697 * Selectize (v0.15.2) 4698 * https://selectize.dev 4699 */ 4700(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}
4700;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ÃøÃöÃóÃòÃôÇÇÅÅÅÅȮȯá»á»ÆÉµÆ Æ¡á»á»ÅÅ
4700ÃõǪǫÈÈÕÖ
]",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")}};
4700$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>
4700").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-");
4700$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("");
4700if(!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
4700SearchOptions())},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);
4700$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}
4700this.$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;
4700j++){$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}
4700}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);
4700var $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;
4700const $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}); 4701/*! 4702 * selectize click2deselect (custom) 4703 */ 4704/* Selectize deselect function */ 4705EM_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})}}); 4706 4707/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */ 4708!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(/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);
vendor: 41,754 bytes, lines 4708-4712
4708if(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={};return 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}}(),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;if(!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}),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},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}); 4709 4710// final JS calls after everything has been loaded 4711document.dispatchEvent( new CustomEvent('events_manager_js_loaded') ); 4712//# 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.