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 17 var load_ui_css = false; //load jquery ui css? 18 /* Time Entry */ 19 $('#start-time').each(function(i, el){ 20 $(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range'); 21 }); 22 if( $(".em-time-input").length > 0 ){ 23 em_setup_timepicker('body'); 24 } 25 26 /* 27 * ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly) 28 */ 29 //Events List 30 //Approve/Reject Links 31 $('.events-table').on('click', '.em-event-delete', function(){ 32 if( !confirm("Are you sure you want to delete?") ){ return false; } 33 window.location.href = this.href; 34 }); 35 //Forms 36 $('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){ 37 var el = $(this); 38 if( el.is(':checked') ){ 39 el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide(); 40 }else{ 41 el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show(); 42 } 43 }); 44 //Event Editor 45 //Recurrence Date Patterns 46 $('.event-form-with-recurrence').each( function(){ 47 let recurring_form = $(this); 48 recurring_form.on('change', '.em-recurrence-checkbox', function(){ 49 if( this.checked ){ 50 recurring_form.find('.em-recurring-text').each( function(){ 51 this.style.removeProperty('display'); 52 }); 53 recurring_form.find('.em-event-text').each( function(){ 54 this.style.setProperty('display', 'none', 'important'); 55 }); 56 }else{ 57 recurring_form.find('.em-recurring-text').each( function(){ 58 this.style.setProperty('display', 'none', 'important'); 59 }); 60 recurring_form.find('.em-event-text').each( function(){ 61 this.style.removeProperty('display'); 62 }); 63 } 64 }); 65 }); 66 $('.event-form-with-recurrence .em-recurrence-checkbox').trigger('change'); 67 //Recurrence Warnings 68 $('#event-form.em-event-admin-recurring').on('submit', function(event){ 69 var form = $(this); 70 if( form.find('input[name="event_reschedule"]').first().val() == 1 ){ 71 var warning_text = EM.event_reschedule_warning; 72 }else if( form.find('input[name="event_recreate_tickets"]').first().val() == 1 ){ 73 var warning_text = EM.event_recurrence_bookings; 74 }else{ 75 var warning_text = EM.event_recurrence_overwrite; 76 } 77 confirmation = confirm(warning_text); 78 if( confirmation == false ){ 79 event.preventDefault(); 80 } 81 }); 82 //Buttons for recurrence warnings within event editor forms 83 $('.em-reschedule-trigger').on('click', function(e){ 84 e.preventDefault(); 85 var trigger = $(this); 86 trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).removeClass('reschedule-hidden'); 87 trigger.siblings('.em-reschedule-value').val(1); 88 trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden'); 89 }); 90 $('.em-reschedule-cancel').on('click', function(e){ 91 e.preventDefault(); 92 var trigger = $(this); 93 trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).addClass('reschedule-hidden'); 94 trigger.siblings('.em-reschedule-value').val(0); 95 trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden'); 96 }); 97 //Tickets & Bookings 98 if( $("#em-tickets-form").length > 0 ){ 99 //Enable/Disable Bookings 100 $('#event-rsvp').on('click', function(event){ 101 if( !this.checked ){ 102 confirmation = confirm(EM.disable_bookings_warning); 103 if( confirmation == false ){ 104 event.preventDefault(); 105 }else{ 106 $('#event-rsvp-options').hide(); 107 } 108 }else{ 109 $('#event-rsvp-options').fadeIn(); 110 } 111 }); 112 if($('input#event-rsvp').is(":checked")) { 113 $("div#rsvp-data").fadeIn(); 114 } else { 115 $("div#rsvp-data").hide(); 116 } 117 //Ticket(s) UI 118 var reset_ticket_forms = function(){ 119 $('#em-tickets-form table tbody tr.em-tickets-row').show(); 120 $('#em-tickets-form table tbody tr.em-tickets-row-form').hide(); 121 }; 122 //recurrences and cut-off logic for ticket availability 123 if( $('#em-recurrence-checkbox').length > 0 ){ 124 $('#em-recurrence-checkbox').on('change', function(){ 125 if( $('#em-recurrence-checkbox').is(':checked') ){ 126 $('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show(); 127 $('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide(); 128 }else{ 129 $('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal').show(); 130 $('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide(); 131 } 132 }).trigger('change'); 133 }else if( $('#em-form-recurrence').length > 0 ){ 134 $('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show(); 135 $('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide(); 136 }else{ 137 $('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide(); 138 } 139 //Add a new ticket 140 $("#em-tickets-add").on('click', function(e){
141 e.preventDefault(); 142 reset_ticket_forms(); 143 //create copy of template slot, insert so ready for population 144 var tickets = $('#em-tickets-form table tbody'); 145 tickets.first('.em-ticket-template').find('input.em-date-input.flatpickr-input').each(function(){ 146 if( '_flatpickr' in this ){ 147 this._flatpickr.destroy(); 148 } 149 }); //clear all datepickers, should be done first time only, next times it'd be ignored 150 var rowNo = tickets.length+1; 151 var slot = tickets.first('.em-ticket-template').clone(true).attr('id','em-ticket-'+ rowNo).removeClass('em-ticket-template').addClass('em-ticket').appendTo($('#em-tickets-form table')); 152 //change the index of the form element names 153 slot.find('*[name]').each( function(index,el){ 154 el = $(el); 155 el.attr('name', el.attr('name').replace('em_tickets[0]','em_tickets['+rowNo+']')); 156 }); 157 // sort out until datepicker ids 158 let start_datepicker = slot.find('.ticket-dates-from-normal').first(); 159 if( start_datepicker.attr('data-until-id') ){ 160 let until_id = start_datepicker.attr('data-until-id').replace('-0', '-'+ rowNo); 161 start_datepicker.attr('data-until-id', until_id); 162 slot.find('.ticket-dates-to-normal').attr('id', start_datepicker.attr('data-until-id')); 163 164 } 165 //show ticket and switch to editor 166 slot.show().find('.ticket-actions-edit').trigger('click'); 167 //refresh datepicker and values 168 slot.find('.em-time-input').off().each(function(index, el){ 169 if( typeof this.em_timepickerObj == 'object' ){ 170 this.em_timepicker('remove'); 171 } 172 }); //clear all em_timepickers - consequently, also other click/blur/change events, recreate the further down 173 em_setup_datepicker(slot); 174 em_setup_timepicker(slot); 175 $('html, body').animate({ scrollTop: slot.offset().top - 30 }); //sends user to form 176 check_ticket_sortability(); 177 }); 178 //Edit a Ticket 179 $(document).on('click', '.ticket-actions-edit', function(e){ 180 e.preventDefault(); 181 reset_ticket_forms(); 182 var tbody = $(this).closest('tbody'); 183 tbody.find('tr.em-tickets-row').hide(); 184 tbody.find('tr.em-tickets-row-form').fadeIn(); 185 return false; 186 }); 187 $(document).on('click', '.ticket-actions-edited', function(e){ 188 e.preventDefault(); 189 var tbody = $(this).closest('tbody'); 190 var rowNo = tbody.attr('id').replace('em-ticket-',''); 191 tbody.find('.em-tickets-row').fadeIn(); 192 tbody.find('.em-tickets-row-form').hide(); 193 tbody.find('*[name]').each(function(index,el){ 194 el = $(el); 195 if( el.attr('name') == 'ticket_start_pub'){ 196 tbody.find('span.ticket_start').text(el.val()); 197 }else if( el.attr('name') == 'ticket_end_pub' ){ 198 tbody.find('span.ticket_end').text(el.val()); 199 }else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_type]' ){ 200 if( el.find(':selected').val() == 'members' ){ 201 tbody.find('span.ticket_name').prepend('* '); 202 } 203 }else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_start_recurring_days]' ){ 204 var text = tbody.find('select.ticket-dates-from-recurring-when').val() == 'before' ? '-'+el.val():el.val(); 205 if( el.val() != '' ){ 206 tbody.find('span.ticket_start_recurring_days').text(text); 207 tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').show(); 208 }else{ 209 tbody.find('span.ticket_start_recurring_days').text(' - '); 210 tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').hide(); 211 } 212 }else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_end_recurring_days]' ){ 213 var text = tbody.find('select.ticket-dates-to-recurring-when').val() == 'before' ? '-'+el.val():el.val(); 214 if( el.val() != '' ){ 215 tbody.find('span.ticket_end_recurring_days').text(text); 216 tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').show(); 217 }else{ 218 tbody.find('span.ticket_end_recurring_days').text(' - '); 219 tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').hide(); 220 } 221 }else{ 222 var classname = el.attr('name').replace('em_tickets['+rowNo+'][','').replace(']','').replace('[]',''); 223 tbody.find('.em-tickets-row .'+classname).text(el.val()); 224 } 225 }); 226 //allow for others to hook into this 227 $(document).triggerHandler('em_maps_tickets_edit', [tbody, rowNo, true]); 228 $('html, body').animate({ scrollTop: tbody.parent().offset().top - 30 }); //sends user back to top of form 229 return false; 230 }); 231 $(document).on('change', '.em-ticket-form select.ticket_type', function(e){
232 //check if ticket is for all users or members, if members, show roles to limit the ticket to 233 var el = $(this); 234 if( el.find('option:selected').val() == 'members' ){ 235 el.closest('.em-ticket-form').find('.ticket-roles').fadeIn(); 236 }else{ 237 el.closest('.em-ticket-form').find('.ticket-roles').hide(); 238 } 239 }); 240 $(document).on('click', '.em-ticket-form .ticket-options-advanced', function(e){ 241 //show or hide advanced tickets, hidden by default 242 e.preventDefault(); 243 var el = $(this); 244 if( el.hasClass('show') ){ 245 el.closest('.em-ticket-form').find('.em-ticket-form-advanced').fadeIn(); 246 el.find('.show,.show-advanced').hide(); 247 el.find('.hide,.hide-advanced').show(); 248 }else{ 249 el.closest('.em-ticket-form').find('.em-ticket-form-advanced').hide(); 250 el.find('.show,.show-advanced').show(); 251 el.find('.hide,.hide-advanced').hide(); 252 } 253 el.toggleClass('show'); 254 }); 255 $('.em-ticket-form').each( function(){ 256 //check whether to show advanced options or not by default for each ticket 257 var show_advanced = false; 258 var el = $(this); 259 el.find('.em-ticket-form-advanced input[type="text"]').each(function(){ if(this.value != '') show_advanced = true; }); 260 if( el.find('.em-ticket-form-advanced input[type="checkbox"]:checked').length > 0 ){ show_advanced = true; } 261 el.find('.em-ticket-form-advanced option:selected').each(function(){ if(this.value != '') show_advanced = true; }); 262 if( show_advanced ) el.find('.ticket-options-advanced').trigger('click'); 263 }); 264 //Delete a ticket 265 $(document).on('click', '.ticket-actions-delete', function(e){ 266 e.preventDefault(); 267 var el = $(this); 268 var tbody = el.closest('tbody'); 269 if( tbody.find('input.ticket_id').val() > 0 ){ 270 //only will happen if no bookings made 271 el.text('Deleting...'); 272 $.getJSON( $(this).attr('href'), {'em_ajax_action':'delete_ticket', 'id':tbody.find('input.ticket_id').val()}, function(data){ 273 if(data.result){ 274 tbody.remove(); 275 }else{ 276 el.text('Delete'); 277 alert(data.error); 278 } 279 }); 280 }else{ 281 //not saved to db yet, so just remove 282 tbody.remove(); 283 } 284 check_ticket_sortability(); 285 return false; 286 }); 287 //Sort Tickets 288 $('#em-tickets-form.em-tickets-sortable table').sortable({ 289 items: '> tbody', 290 placeholder: "em-ticket-sortable-placeholder", 291 handle:'.ticket-status', 292 helper: function( event, el ){ 293 var helper = $(el).clone().addClass('em-ticket-sortable-helper'); 294 var tds = helper.find('.em-tickets-row td').length; 295 helper.children().remove(); 296 helper.append('<tr class="em-tickets-row"><td colspan="'+tds+'" style="text-align:left; padding-left:15px;"><span class="dashicons dashicons-tickets-alt"></span></td></tr>'); 297 return helper; 298 }, 299 }); 300 var check_ticket_sortability = function(){ 301 var em_tickets = $('#em-tickets-form table tbody.em-ticket'); 302 if( em_tickets.length == 1 ){ 303 em_tickets.find('.ticket-status').addClass('single'); 304 $('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", true ); 305 }else{ 306 em_tickets.find('.ticket-status').removeClass('single'); 307 $('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", false ); 308 } 309 }; 310 check_ticket_sortability(); 311 } 312 //Manageing Bookings 313 let bookings_tables = $('.em-bookings-table'); 314 if( bookings_tables.length > 0 ){ 315 load_ui_css = true; 316 //Pagination link clicks 317 $(document).on('click', '.em-bookings-table .tablenav-pages a', function(){ 318 var el = $(this); 319 var form = el.closest('.em-bookings-table form.bookings-filter'); 320 //get page no from url, change page, submit form 321 var match = el.attr('href').match(/#[0-9]+/); 322 if( match != null && match.length > 0){ 323 var pno = match[0].replace('#',''); 324 form.find('input[name=pno]').val(pno); 325 }else{ 326 // new way 327 let url = new URL(el.attr('href')); 328 if( url.searchParams.has('paged') ){ 329 form.find('input[name=pno]').val( url.searchParams.get('paged')); 330 form.find('input[name=paged]').val( url.searchParams.get('paged') ); 331 }else{ 332 form.find('input[name=pno]').val(1); 333 form.find('input[name=paged]').val(1); 334 } 335 } 336 form.trigger('submit'); 337 return false; 338 }); 339 $(document).on('change', '.em-bookings-table .tablenav-pages input[name=paged]', function(e){
340 var el = $(this); 341 var form = el.closest('.em-bookings-table form.bookings-filter'); 342 var last = form.find('.tablenav-pages a.last-page'); 343 if( last.length > 0 ){ 344 // check val isn't more than last page 345 let url = new URL(last.attr('href')); 346 if( url.searchParams.has('paged') ){ 347 let lastPage = parseInt(url.searchParams.get('paged')); 348 if( parseInt(this.value) > lastPage ){ 349 this.value = lastPage; 350 } 351 } 352 }else{ 353 // make sure it's less than current page, we're on last page already 354 let lastPage = form.find('input[name=pno]').val(); 355 if( lastPage && parseInt(this.value) > parseInt(lastPage) ){ 356 this.value = lastPage; 357 e.preventDefault(); 358 return false; 359 } 360 } 361 form.find('input[name=pno]').val(this.value); 362 form.trigger('submit'); 363 }); 364 365 //Settings & Export Modal 366 $(document).on('click', '.em-bookings-table-trigger', function(e){ 367 e.preventDefault(); 368 let modal = $(this.getAttribute('rel')); 369 modal.find('input[name=show_tickets]').each(check_tickets_columns_export); 370 openModal( modal ); 371 }); 372 $(document).on('submit', '.em-bookings-table-settings form', function(e){ 373 e.preventDefault(); 374 //we know we'll deal with cols, so wipe hidden value from main 375 let $form = $(this); 376 let modal = $form.closest('.em-modal'); 377 let form = $($form.attr('rel')); 378 let match = form.find("[name=cols]").val(''); 379 let booking_form_cols = $form.find('.em-bookings-cols-selected .item'); 380 $.each( booking_form_cols, function(i,item_match){ 381 //item_match = $(item_match); 382 if( !item_match.classList.contains('hidden') ){ 383 if( match.val() !== ''){ 384 match.val(match.val()+','+item_match.getAttribute('data-value')); 385 }else{ 386 match.val(item_match.getAttribute('data-value')); 387 } 388 } 389 }); 390 //sync row count 391 let limit = $form.find('select[name="limit"]').val(); 392 form.find('[name="limit"]').val(limit); 393 //submit main form 394 modal.trigger('submitted'); //hook into this with bind() 395 form.trigger('submit'); 396 closeModal(modal); 397 }); 398 $(document).on('submit', '.em-bookings-table-export form', function(e){ 399 let $table_form = $(this.getAttribute('rel')); 400 var $form_filters = $(this).find('.em-bookings-table-filters').empty(); 401 let filters = $table_form.find('.em-bookings-table-filter').clone(); 402 filters.appendTo($form_filters); 403 }); 404 let check_tickets_columns_export = function(){ 405 let $this = $(this); 406 let form = $this.closest('form'); 407 let ticket_data = form.find('[data-type="ticket"]'); 408 if( $this.is(':checked') ){ 409 ticket_data.show().find('input').val(1); 410 }else{ 411 ticket_data.hide().find('input').val(0); 412 } 413 } 414 $(document).on('click', '.em-bookings-table-export input[name=show_tickets]', check_tickets_columns_export); 415 416 // Sortables - selectize and sorting 417 $(document).on('em_selectize_loaded', function( e, container ){ 418 container.find('.em-bookings-table-modal .em-bookings-table-cols').each( function(){ 419 let parent = $(this); 420 let sortables = $(this).find('.em-bookings-cols-sortable'); 421 container.find('.em-selectize.always-open').each( function() { 422 //extra behaviour for selectize column picker 423 if ('selectize' in this) { 424 let selectize = this.selectize; 425 // add event listener to fix remove button issues due to above hacks 426 selectize.on('item_add', function (value, item) { 427 let col = item.clone(); 428 let option = selectize.getOption(value); 429 let type = option.attr('data-type'); 430 col.appendTo(sortables); 431 col.attr('data-type', type); 432 $('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col); 433 }); 434 selectize.on('item_remove', function (value) { 435 parent.find('.item[data-value="'+ value +'"]').remove(); 436 }); 437 parent.on('click', '.em-bookings-cols-selected .item .remove', function(){ 438 let value = this.parentElement.getAttribute('data-value'); 439 selectize.removeItem(value, true); 440 });
441 } 442 }); 443 }); 444 }); 445 446 $(document).on('keypress', '.em-bookings-table .tablenav .actions input[type="text"]', function(e){ 447 let keycode = (e.keyCode ? e.keyCode : e.which); 448 if( keycode === 13 ){ 449 $(this).closest('form').submit(); 450 } 451 }); 452 453 $(document).on('click', '.em-bookings-table button.em-bookings-table-bulk-action', function( e ){ 454 e.preventDefault(); 455 let $form = $(this).closest('form'); 456 let action = $form.find('select.bulk-action-selector').val(); 457 EM.bulk_action = true; 458 if( action === 'delete' ){ 459 if( !confirm(EM.booking_delete) ){ return false; } 460 } 461 let rows = $form.find('tbody .check-column input:checked'); 462 // find all checked items and perform action on them. future interations can check if action is available to row. 463 rows.each( function(){ 464 // check if sibling has the relevant action 465 let actions = $(this.parentElement).find('a.em-bookings-'+ action); 466 actions.trigger('click'); 467 }); 468 EM.bulk_action = false; 469 }) 470 471 // Sorting 472 $(document).on('click', '.em-bookings-table th[scope="col"].sortable a, .em-bookings-table th[scope="col"].sorted a', function(e){ 473 e.preventDefault(); 474 // add args to form and submit it 475 let params = (new URL(this.href)).searchParams; 476 let $form = $(this).closest('form'); 477 if( params.get('orderby') ){ 478 $form.find('input[name="orderby"]').val( params.get('orderby') ); 479 let order = params.get('order') ? params.get('order') : 'asc'; 480 $form.find('input[name="order"]').val( order ); 481 $form.submit(); 482 } 483 }); 484 485 // anything requiring extra setup 486 let resetup_bookings_table = function( table ){ 487 em_setup_tippy(table); 488 em_setup_selectize(table); 489 } 490 let setup_bookings_table = function( table ) { 491 table.find(".em-bookings-cols-sortable").sortable().disableSelection(); 492 let breakpoints = { 493 'small' : 600, 494 'large' : false, 495 } 496 const bookings_table_ro = EM_ResizeObserver( breakpoints, table.toArray() ); 497 } 498 499 bookings_tables.each( function(){ 500 setup_bookings_table( $(this) ); 501 }); 502 503 //Widgets and filter submissions 504 $(document).on('submit', '.em-bookings-table form.bookings-filter', function(e){ 505 var el = $(this); 506 //append loading spinner 507 let root = el.parents('.em-bookings-table').first(); 508 root.find('.table-wrap').first().append('<div id="em-loading" />'); 509 //ajax call 510 $.post( EM.ajaxurl, el.serializeArray(), function(data){ 511 let $data = $(data); 512 root.find('.em-bookings-table-trigger').each( function(){ 513 let modal = $(this.getAttribute('rel')); 514 modal.remove(); 515 }); 516 root.replaceWith($data); 517 // re-setup bookings table 518 setup_bookings_table($data); 519 resetup_bookings_table($data); 520 // fire hook 521 jQuery(document).triggerHandler('em_bookings_filtered', [$data, root, el]); 522 }); 523 return false; 524 }); 525 // Action links (approve/reject etc.) 526 $(document).on('click', '.em-bookings-approve,.em-bookings-reject,.em-bookings-unapprove,.em-bookings-delete,.em-bookings-ajax-action', function(){ 527 let el = $(this); 528 if( el.hasClass('em-bookings-delete') && (!('bulk_action' in EM) || !EM.bulk_action) ){ 529 if( !confirm(EM.booking_delete) ){ return false; } 530 } 531 let url = em_ajaxify( el.attr('href') ); 532 let td = el.parents('td').first(); 533 if( td.length > 0 && (td.hasClass('column-actions') || td.hasClass('em-bt-col-actions')) ){ 534 td.html(EM.txt_loading); 535 td.load( url ); 536 }else{ 537 // set up a custom url action to retrieve a row afterwards 538 let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content'); 539 if( dropdown.length > 0 ) { 540 if( '_tippy' in dropdown[0] ) { 541 dropdown[0]._tippy.hide(); 542 } 543 let tr = el.closest('tr'); 544 let params = (new URL(url)).searchParams; 545 let formData = new FormData(tr.closest('form')[0]); 546 formData.set('action', 'em_bookings_table_row'); 547 formData.set('row_action', params.get('action')); 548 formData.set('booking_id', params.get('booking_id'));
549 let cols = el.closest('form').find('[name="cols"]').val(); 550 tr.addClass('loading'); 551 $.ajax({ 552 url: EM.ajaxurl, 553 data: formData, 554 processData: false, 555 contentType: false, 556 type: 'POST', 557 success: function (data) { 558 let $data = $(data); 559 $data.addClass('faded-out'); 560 tr.replaceWith( $data ).delay(200); 561 resetup_bookings_table( $data ); 562 $data.fadeIn(); 563 $data.removeClass('faded-out'); 564 } 565 }); 566 } 567 } 568 return false; 569 }); 570 } 571 //Old Bookings Table - depreciating soon 572 if( $('.em_bookings_events_table').length > 0 ){ 573 //Widgets and filter submissions 574 $(document).on('submit', '.em_bookings_events_table form', function(e){ 575 var el = $(this); 576 var url = em_ajaxify( el.attr('action') ); 577 el.parents('.em_bookings_events_table').find('.table-wrap').first().append('<div id="em-loading" />'); 578 $.get( url, el.serializeArray(), function(data){ 579 el.parents('.em_bookings_events_table').first().replaceWith(data); 580 }); 581 return false; 582 }); 583 //Pagination link clicks 584 $(document).on('click', '.em_bookings_events_table .tablenav-pages a', function(){ 585 var el = $(this); 586 var url = em_ajaxify( el.attr('href') ); 587 el.parents('.em_bookings_events_table').find('.table-wrap').first().append('<div id="em-loading" />'); 588 $.get( url, function(data){ 589 el.parents('.em_bookings_events_table').first().replaceWith(data); 590 }); 591 592 return false; 593 }); 594 } 595 596 //Manual Booking 597 $(document).on('click', 'a.em-booking-button', function(e){ 598 e.preventDefault(); 599 var button = $(this); 600 if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){ 601 button.text(EM.bb_booking); 602 var button_data = button.attr('id').split('_'); 603 $.ajax({ 604 url: EM.ajaxurl, 605 dataType: 'jsonp', 606 data: { 607 event_id : button_data[1], 608 _wpnonce : button_data[2], 609 action : 'booking_add_one' 610 }, 611 success : function(response, statusText, xhr, $form) { 612 if(response.result){ 613 button.text(EM.bb_booked); 614 button.addClass('disabled'); 615 }else{ 616 button.text(EM.bb_error); 617 } 618 if(response.message != '') alert(response.message); 619 $(document).triggerHandler('em_booking_button_response', [response, button]); 620 }, 621 error : function(){ button.text(EM.bb_error); } 622 }); 623 } 624 return false; 625 }); 626 $(document).on('click', 'a.em-cancel-button', function(e){ 627 e.preventDefault(); 628 var button = $(this); 629 if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){ 630 button.text(EM.bb_canceling); 631 var button_data = button.attr('id').split('_'); 632 $.ajax({ 633 url: EM.ajaxurl, 634 dataType: 'jsonp', 635 data: { 636 booking_id : button_data[1], 637 _wpnonce : button_data[2], 638 action : 'booking_cancel' 639 }, 640 success : function(response, statusText, xhr, $form) { 641 if(response.result){ 642 button.text(EM.bb_cancelled); 643 button.addClass('disabled'); 644 }else{ 645 button.text(EM.bb_cancel_error); 646 } 647 }, 648 error : function(){ button.text(EM.bb_cancel_error); } 649 }); 650 } 651 return false; 652 }); 653 $(document).on('click', 'a.em-booking-button-action', function(e){ 654 e.preventDefault(); 655 var button = $(this); 656 var button_data = { 657 _wpnonce : button.attr('data-nonce'), 658 action : button.attr('data-action'), 659 } 660 if( button.attr('data-event-id') ) button_data.event_id = button.attr('data-event-id'); 661 if( button.attr('data-booking-id') ) button_data.booking_id = button.attr('data-booking-id'); 662 if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){ 663 if( button.attr('data-loading') ){ 664 button.text(button.attr('data-loading')); 665 }else{ 666 button.text(EM.bb_booking); 667 } 668 $.ajax({ 669 url: EM.ajaxurl, 670 dataType: 'jsonp', 671 data: button_data, 672 success : function(response, statusText, xhr, $form) { 673 if(response.result){ 674 if( button.attr('data-success') ){ 675 button.text(button.attr('data-success')); 676 }else{ 677 button.text(EM.bb_booked); 678 } 679 button.addClass('disabled'); 680 }else{ 681 if( button.attr('data-error') ){ 682 button.text(button.attr('data-error')); 683 }else{ 684 button.text(EM.bb_error); 685 } 686 } 687 if(response.message != '') alert(response.message); 688 $(document).triggerHandler('em_booking_button_action_response', [response, button]); 689 }, 690 error : function(){ 691 if( button.attr('data-error') ){ 692 button.text(button.attr('data-error')); 693 }else{ 694 button.text(EM.bb_error); 695 } 696 } 697 }); 698 } 699 return false; 700 }); 701 702 //Datepicker - legacy 703 if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){ 704 load_ui_css = true; 705 em_setup_datepicker('body'); 706 } 707 if( load_ui_css ) em_load_jquery_css(); 708 // Datepicker - new 709 if( $('.em-datepicker').length > 0 ){ 710 em_setup_datepicker('body'); 711 } 712 713 //previously in em-admin.php 714 $('#em-wrapper input.select-all').on('change', function(){ 715 if($(this).is(':checked')){ 716 $('input.row-selector').prop('checked', true); 717 $('input.select-all').prop('checked', true); 718 }else{ 719 $('input.row-selector').prop('checked', false); 720 $('input.select-all').prop('checked', false); 721 } 722 }); 723 724 725 // recurrence stuff 726 // recurrency descriptor 727 function updateIntervalDescriptor () { 728 $(".interval-desc").hide(); 729 var number = "-plural"; 730 if ($('input.em-recurrence-interval').val() == 1 || $('input.em-recurrence-interval').val() == "") number = "-singular"; 731 var descriptor = "span.interval-desc.interval-"+$("select.em-recurrence-frequency").val()+number; 732 $(descriptor).show(); 733 } 734 function updateIntervalSelectors () { 735 $('.alternate-selector').hide(); 736 $('.em-'+ $('select.em-recurrence-frequency').val() + "-selector").show(); 737 } 738 // recurrency elements 739 updateIntervalDescriptor(); 740 updateIntervalSelectors(); 741 $('input.em-recurrence-interval').on('keyup', updateIntervalDescriptor); 742 $('select.em-recurrence-frequency').on('change', updateIntervalDescriptor); 743 $('select.em-recurrence-frequency').on('change', updateIntervalSelectors); 744 745 /* Load any maps */ 746 if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){ 747 em_maps_load(); 748 } 749 750 /* Location Type Selection */ 751 $('.em-location-types .em-location-types-select').on('change', function(){ 752 let el = $(this); 753 if( el.val() == 0 ){ 754 $('.em-location-type').hide(); 755 }else{ 756 let location_type = el.find('option:selected').data('display-class'); 757 $('.em-location-type').hide(); 758 $('.em-location-type.'+location_type).show(); 759 if( location_type != 'em-location-type-place' ){ 760 jQuery('#em-location-reset a').trigger('click'); 761 } 762 } 763 if( el.data('active') !== '' && el.val() !== el.data('active') ){ 764 $('.em-location-type-delete-active-alert').hide(); 765 $('.em-location-type-delete-active-alert').show(); 766 }else{ 767 $('.em-location-type-delete-active-alert').hide(); 768 } 769 }).trigger('change'); 770 771 //Finally, add autocomplete here 772 if( jQuery( 'div.em-location-data [name="location_name"]' ).length > 0 ){ 773 $('div.em-location-data [name="location_name"]').selectize({ 774 plugins: ["restore_on_backspace"], 775 valueField: "id", 776 labelField: "label", 777 searchField: "label", 778 create:true, 779 createOnBlur: true, 780 maxItems:1, 781 persist: false, 782 addPrecedence : true, 783 selectOnTab : true, 784 diacritics : true, 785 render: { 786 item: function (item, escape) { 787 return "<div>" + item.label + "</div>"; 788 }, 789 option: function (item, escape) { 790 let meta = ''; 791 if( typeof(item.address) !== 'undefined' ) { 792 if (item.address !== '' && item.town !== '') { 793 meta = escape(item.address) + ', ' + escape(item.town); 794 } else if (item.address !== '') { 795 meta = escape(item.address); 796 } else if (item.town !== '') { 797 meta = escape(item.town); 798 } 799 } 800 return '<div class="em-locations-autocomplete-item">' + 801 '<div class="em-locations-autocomplete-label">' + escape(item.label) + '</div>' + 802 '<div style="font-size:11px; text-decoration:italic;">' + meta + '</div>' + 803 '</div>'; 804 805 }, 806 }, 807 load: function (query, callback) { 808 if (!query.length) return callback(); 809 $.ajax({
810 url: EM.locationajaxurl, 811 data: { 812 q : query, 813 method : 'selectize' 814 }, 815 dataType : 'json', 816 type: "POST", 817 error: function () { 818 callback(); 819 }, 820 success: function ( data ) { 821 callback( data ); 822 }, 823 }); 824 }, 825 onItemAdd : function (value, data) { 826 this.clearCache(); 827 var option = this.options[value]; 828 if( value === option.label ){ 829 jQuery('input#location-address').focus(); 830 return; 831 } 832 jQuery("input#location-name" ).val(option.value); 833 jQuery('input#location-address').val(option.address); 834 jQuery('input#location-town').val(option.town); 835 jQuery('input#location-state').val(option.state); 836 jQuery('input#location-region').val(option.region); 837 jQuery('input#location-postcode').val(option.postcode); 838 jQuery('input#location-latitude').val(option.latitude); 839 jQuery('input#location-longitude').val(option.longitude); 840 if( typeof(option.country) === 'undefined' || option.country === '' ){ 841 jQuery('select#location-country option:selected').removeAttr('selected'); 842 }else{ 843 jQuery('select#location-country option[value="'+option.country+'"]').attr('selected', 'selected'); 844 } 845 jQuery("input#location-id" ).val(option.id).trigger('change'); 846 jQuery('div.em-location-data input, div.em-location-data select').prop('readonly', true).css('opacity', '0.5'); 847 jQuery('#em-location-reset').show(); 848 jQuery('#em-location-search-tip').hide(); 849 // selectize stuff 850 this.disable(); 851 this.$control.blur(); 852 jQuery('div.em-location-data [class^="em-selectize"]').each( function(){ 853 this.selectize.disable(); 854 }) 855 // trigger hook 856 jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, option]); 857 } 858 }); 859 jQuery('#em-location-reset a').on('click', function(){ 860 jQuery('div.em-location-data input, div.em-location-data select').each( function(){ 861 this.style.removeProperty('opacity') 862 this.readOnly = false; 863 if( this.type == 'text' ) this.value = ''; 864 }); 865 jQuery('div.em-location-data option:selected').removeAttr('selected'); 866 jQuery('input#location-id').val(''); 867 jQuery('#em-location-reset').hide(); 868 jQuery('#em-location-search-tip').show(); 869 jQuery('#em-map').hide(); 870 jQuery('#em-map-404').show(); 871 if(typeof(marker) !== 'undefined'){ 872 marker.setPosition(new google.maps.LatLng(0, 0)); 873 infoWindow.close(); 874 marker.setDraggable(true); 875 } 876 // clear selectize autocompleter values, re-enable any selectize ddms 877 let $selectize = $("div.em-location-data input#location-name")[0].selectize; 878 $selectize.enable(); 879 $selectize.clear(true); 880 $selectize.clearOptions(); 881 jQuery('div.em-location-data select.em-selectize').each( function(){ 882 if( 'selectize' in this ){ 883 this.selectize.enable(); 884 this.selectize.clear(true); 885 } 886 }); 887 // return true 888 return false; 889 }); 890 if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){ 891 jQuery('div.em-location-data input, div.em-location-data select').each( function(){ 892 this.style.setProperty('opacity','0.5', 'important') 893 this.readOnly = true; 894 }); 895 jQuery('#em-location-reset').show(); 896 jQuery('#em-location-search-tip').hide(); 897 jQuery('div.em-location-data select.em-selectize, div.em-location-data input.em-selectize-autocomplete').each( function(){ 898 if( 'selectize' in this ) this.selectize.disable(); 899 }); 900 } 901 } 902 903 // trigger selectize loader 904 em_setup_selectize(document); 905 906 /* Local JS Timezone related placeholders */ 907 /* Moment JS Timzeone PH */ 908 if( window.moment ){ 909 var replace_specials = function( day, string ){ 910 // replace things not supported by moment 911 string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone); 912 string = string.replace(/#T/g, "GMT"+day.format('Z')); 913 string = string.replace(/###t/g, day.utcOffset()*-60); 914 string = string.replace(/##t/g, day.isDST()); 915 string = string.replace(/#t/g, day.daysInMonth()); 916 return string; 917 }; 918 $('.em-date-momentjs').each( function(){ 919 // Start Date 920 var el = $(this); 921 var day_start = moment.unix(el.data('date-start')); 922 var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format'))); 923 if( el.data('date-start') !== el.data('date-end') ){ 924 // End Date 925 var day_end = moment.unix(el.data('date-end')); 926 var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format'))); 927 // Output 928 var date_string = date_start_string + el.data('date-separator') + day_end_string; 929 }else{ 930 var date_string = date_start_string; 931 } 932 el.text(date_string); 933 }); 934 var get_date_string = function(ts, format){ 935 let date = new Date(ts * 1000); 936 let minutes = date.getMinutes(); 937 if( format == 24 ){ 938 let hours = date.getHours(); 939 hours = hours < 10 ? '0' + hours : hours; 940 minutes = minutes < 10 ? '0' + minutes : minutes; 941 return hours + ':' + minutes; 942 }else{ 943 let hours = date.getHours() % 12; 944 let ampm = hours >= 12 ? 'PM' : 'AM'; 945 if( hours === 0 ) hours = 12; // the hour '0' should be '12'
946 minutes = minutes < 10 ? '0'+minutes : minutes; 947 return hours + ':' + minutes + ' ' + ampm; 948 } 949 } 950 $('.em-time-localjs').each( function(){ 951 var el = $(this); 952 var strTime = get_date_string( el.data('time'), el.data('time-format') ); 953 if( el.data('time-end') ){ 954 var separator = el.data('time-separator') ? el.data('time-separator') : ' - '; 955 strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') ); 956 } 957 el.text(strTime); 958 }); 959 } 960 // Set up Tippy generic 961 let $document = jQuery(document); 962 em_setup_tippy($document); 963 964 /* Done! */ 965 $document.triggerHandler('em_javascript_loaded'); 966}); 967 968function em_load_jquery_css( wrapper = false ){ 969 if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){ 970 var script = document.createElement("link"); 971 script.id = 'jquery-ui-em-css'; 972 script.rel = "stylesheet"; 973 script.href = EM.ui_css; 974 document.body.appendChild(script); 975 if( wrapper ){ 976 em_setup_jquery_ui_wrapper(); 977 } 978 } 979} 980 981function em_setup_tippy( container ){ 982 var tooltip_vars = { 983 theme : 'light-border', 984 appendTo : 'parent', 985 content(reference) { 986 return reference.getAttribute('aria-label'); 987 }, 988 'touch' : ['hold', 300] 989 }; 990 jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]); 991 tippy('.em-tooltip', tooltip_vars); 992 // Set up Tippy DDMs 993 let tippy_ddm_options = { 994 theme : 'light-border', 995 arrow : false, 996 allowHTML : true, 997 interactive : true, 998 trigger : 'manual', 999 placement : 'bottom', 1000 zIndex : 1000000, 1001 touch : true, 1002 }; 1003 jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]); 1004 container.find('.em-tooltip-ddm').each( function(){ 1005 let ddm_content, ddm_content_sibling; 1006 if( this.getAttribute('data-content') ){ 1007 ddm_content = document.getElementById(this.getAttribute('data-content')) 1008 ddm_content_sibling = ddm_content.previousElementSibling; 1009 }else{ 1010 ddm_content = this.nextElementSibling; 1011 ddm_content_sibling = ddm_content.previousElementSibling; 1012 } 1013 let tippy_content = document.createElement('div'); 1014 // allow for custom width 1015 let button_width = this.getAttribute('data-button-width'); 1016 if( button_width ){ 1017 if( button_width == 'match' ){ 1018 tippy_ddm_options.maxWidth = this.clientWidth; 1019 }else{ 1020 tippy_ddm_options.maxWidth = this.getAttribute('data-button-width'); 1021 } 1022 } 1023 tippy_ddm_options.content = tippy_content; 1024 let tippy_ddm = tippy(this, tippy_ddm_options); 1025 tippy_ddm.props.distance = 50; 1026 tippy_ddm.setProps({ 1027 onShow(instance){ 1028 if( instance.reference.getAttribute('data-tooltip-class') ) { 1029 instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') ); 1030 } 1031 instance.popper.classList.add( 'em-tooltip-ddm-display' ); 1032 tippy_content.append(ddm_content); 1033 ddm_content.classList.remove('em-tooltip-ddm-content'); 1034 }, 1035 onShown(instance){ // keyboard support 1036 ddm_content.firstElementChild.focus(); 1037 }, 1038 onHidden(instance){ 1039 if( ddm_content.previousElementSibling !== ddm_content_sibling ) { 1040 ddm_content_sibling.after(ddm_content); 1041 ddm_content.classList.add('em-tooltip-ddm-content'); 1042 } 1043 }, 1044 }); 1045 let tippy_listener = function(e){ 1046 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false; 1047 e.preventDefault(); 1048 e.stopPropagation(); 1049 this._tippy.show(); 1050 } 1051 this.addEventListener('click', tippy_listener); 1052 this.addEventListener('keydown', tippy_listener); 1053 tippy_content.addEventListener('blur', function(){ 1054 tippy_content.hide(); 1055 }); 1056 tippy_content.addEventListener('mouseover', function(){ 1057 ddm_content.firstElementChild.blur(); 1058 }); 1059 }); 1060} 1061 1062function em_setup_selectize( container ){ 1063 container = jQuery(container); // in case we were given a dom object 1064 // Selectize General 1065 container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').selectize(); 1066 container.find('select[multiple].em-selectize, .em-selectize select[multiple]').selectize({ 1067 hideSelected : false, 1068 plugins: ["remove_button", 'click2deselect'], 1069 diacritics : true, 1070 render: { 1071 item: function (item, escape) { 1072 return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>'; 1073 }, 1074 option : function (item, escape) { 1075 let html = '<div class="option"'; 1076 if( 'data' in item ){ 1077 // 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
1078 Object.entries(item.data).forEach( function( item_data ){ 1079 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1080 }); 1081 } 1082 html += '>'; 1083 if( this.$input.hasClass('checkboxes') ){ 1084 html += item.text.replace(/^(\s+)?/i, '$1<span></span> '); 1085 }else{ 1086 html += item.text; 1087 } 1088 html += '</div>'; 1089 return html; 1090 }, 1091 optgroup : function (item, escape) { 1092 let html = '<div class="optgroup" data-group="' + escape(item.label) + '"'; 1093 if( 'data' in item ){ 1094 // 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 1095 Object.entries(item.data).forEach( function( item_data ){ 1096 html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"'; 1097 }); 1098 } 1099 html += '>'; 1100 return html + item.html + '</div>'; 1101 } 1102 1103 }, 1104 }); 1105 container.find('.em-selectize.always-open').each( function(){ 1106 //extra behaviour for selectize "always open mode" 1107 if( 'selectize' in this ){ 1108 let s = this.selectize; 1109 s.open(); 1110 s.advanceSelection = function(){}; // remove odd item shuffling 1111 s.setActiveItem = function(){}; // remove odd item shuffling 1112 // add event listener to fix remove button issues due to above hacks 1113 this.selectize.$control.on('click', '.remove', function(e) { 1114 e.preventDefault(); 1115 if (s.isLocked) return; 1116 var $item = jQuery(e.currentTarget).parent(); 1117 s.removeItem($item.attr('data-value')); 1118 s.refreshOptions(); 1119 return false; 1120 }); 1121 1122 } 1123 }); 1124 jQuery(document).triggerHandler('em_selectize_loaded', [container]); 1125} 1126 1127function em_setup_jquery_ui_wrapper(){ 1128 if( jQuery('#em-jquery-ui').length === 0 ){ 1129 jQuery('body').append('<div id="em-jquery-ui" class="em">'); 1130 } 1131} 1132 1133function em_setup_datepicker(wrap){ 1134 wrap = jQuery(wrap); 1135 1136 //apply datepickers - jQuery UI (backcompat) 1137 let dateDivs = wrap.find('.em-date-single, .em-date-range'); 1138 if( dateDivs.length > 0 ){ 1139 //default picker vals 1140 var datepicker_vals = { 1141 dateFormat: "yy-mm-dd", 1142 changeMonth: true, 1143 changeYear: true, 1144 firstDay : EM.firstDay, 1145 yearRange:'c-100:c+15', 1146 beforeShow : function( el, inst ){ 1147 em_setup_jquery_ui_wrapper(); 1148 inst.dpDiv.appendTo('#em-jquery-ui'); 1149 } 1150 }; 1151 if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat; 1152 if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange; 1153 jQuery(document).triggerHandler('em_datepicker', datepicker_vals); 1154 //apply datepickers to elements 1155 dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){ 1156 //init the datepicker 1157 var dateInput = jQuery(dateInput); 1158 var dateValue = dateInput.nextAll('input.em-date-input').first(); 1159 var dateValue_value = dateValue.val(); 1160 dateInput.datepicker(datepicker_vals); 1161 dateInput.datepicker('option', 'altField', dateValue); 1162 //now set the value 1163 if( dateValue_value ){ 1164 var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) ); 1165 dateInput.val(this_date_formatted); 1166 dateValue.val(dateValue_value); 1167 } 1168 //add logic for texts 1169 dateInput.on('change', function(){ 1170 if( jQuery(this).val() == '' ){ 1171 jQuery(this).nextAll('.em-date-input').first().val(''); 1172 } 1173 }); 1174 }); 1175 //deal with date ranges 1176 dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){ 1177 //finally, apply start/end logic to this field 1178 dateInput = jQuery(dateInput); 1179 if( dateInput.hasClass('em-date-start') ){ 1180 dateInput.datepicker('option','onSelect', function( selectedDate ) { 1181 //get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element 1182 var startDate = jQuery(this); 1183 var endDate = startDate.parents('.em-date-range').find('.em-date-end').first(); 1184 var startValue = startDate.nextAll('input.em-date-input').first().val(); 1185 var endValue = endDate.nextAll('input.em-date-input').first().val(); 1186 startDate.trigger('em_datepicker_change'); 1187 if( startValue > endValue && endValue != '' ){ 1188 endDate.datepicker( "setDate" , selectedDate ); 1189 endDate.trigger('change').trigger('em_datepicker_change'); 1190 } 1191 endDate.datepicker( "option", 'minDate', selectedDate ); 1192 }); 1193 }else if( dateInput.hasClass('em-date-end') ){ 1194 var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first(); 1195 if( startInput.val() != '' ){ 1196 dateInput.datepicker('option', 'minDate', startInput.val()); 1197 } 1198 } 1199 }); 1200 } 1201 1202 // datpicker - new format 1203 let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range'); 1204 if( datePickerDivs.length > 0 ){ 1205 // wrappers and locale 1206 let datepicker_wrapper = jQuery('#em-flatpickr'); 1207 if( datepicker_wrapper.length === 0 ){ 1208 datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body'); 1209 } 1210 // locale 1211 if( 'locale' in EM.datepicker ){ 1212 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 1213 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 1214 } 1215 //default picker vals 1216 let datepicker_options = { 1217 appendTo : datepicker_wrapper[0], 1218 dateFormat: "Y-m-d", 1219 disableMoble : "true", 1220 allowInput : true, 1221 onChange : [function( selectedDates, dateStr, instance ){ 1222 let wrapper = jQuery(instance.input).closest('.em-datepicker'); 1223 let data_wrapper = wrapper.find('.em-datepicker-data'); 1224 let inputs = data_wrapper.find('input'); 1225 let dateFormat = function(d) { 1226 let month = '' + (d.getMonth() + 1), 1227 day = '' + d.getDate(), 1228 year = d.getFullYear(); 1229 if (month.length < 2) month = '0' + month; 1230 if (day.length < 2) day = '0' + day; 1231 return [year, month, day].join('-'); 1232 } 1233 if( selectedDates.length === 0 ){ 1234 inputs.attr('value', ''); 1235 }else{ 1236 if( instance.config.mode === 'range' && selectedDates[1] !== undefined ) { 1237 // deal with end date 1238 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1239 inputs[1].setAttribute('value', dateFormat(selectedDates[1])); 1240 }else if( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){ 1241 if( instance.input.classList.contains('em-date-input-start') ){ 1242 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1243 // set min-date of other datepicker 1244 let fp; 1245 if( wrapper.attr('data-until-id') ){
1246 let fp_input = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end'); 1247 fp = fp_input[0]._flatpickr; 1248 }else { 1249 fp = wrapper.find('.em-date-input-end')[0]._flatpickr; 1250 } 1251 if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){ 1252 fp.setDate(selectedDates[0], false); 1253 inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0])); 1254 } 1255 fp.set('minDate', selectedDates[0]); 1256 }else{ 1257 inputs[1].setAttribute('value', dateFormat(selectedDates[0])); 1258 } 1259 }else{ 1260 inputs[0].setAttribute('value', dateFormat(selectedDates[0])); 1261 } 1262 } 1263 inputs.trigger('change'); 1264 let current_date = data_wrapper.attr('date-value'); 1265 data_wrapper.attr('data-value', dateStr); 1266 if( current_date === dateStr ) data_wrapper.trigger('change'); 1267 }], 1268 onClose : function( selectedDates, dateStr, instance ){ 1269 // deal with single date choice and clicking out 1270 if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){ 1271 if(selectedDates.length === 1){ 1272 instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection 1273 } 1274 } 1275 }, 1276 locale : {}, 1277 }; 1278 if( EM.datepicker.format !== datepicker_options.dateFormat ){ 1279 datepicker_options.altFormat = EM.datepicker.format; 1280 datepicker_options.altInput = true; 1281 } 1282 jQuery(document).triggerHandler('em_datepicker_options', datepicker_options); 1283 //apply datepickers to elements 1284 datePickerDivs.each( function(i,datePickerDiv) { 1285 // hide fallback fields, show range or single 1286 datePickerDiv = jQuery(datePickerDiv); 1287 datePickerDiv.find('.em-datepicker-data').addClass('hidden'); 1288 let isRange = datePickerDiv.hasClass('em-datepicker-range'); 1289 let altOptions = {}; 1290 if( datePickerDiv.attr('data-datepicker') ){ 1291 altOptions = JSON.parse(datePickerDiv.attr('data-datepicker')); 1292 if( typeof altOptions !== 'object' ){ 1293 altOptions = {}; 1294 } 1295 } 1296 let options = Object.assign({}, datepicker_options, altOptions); // clone, mainly shallow concern for 'mode' 1297 options.mode = isRange ? 'range' : 'single'; 1298 if( isRange && 'onClose' in options ){ 1299 options.onClose = [function( selectedDates, dateStr, instance ){ 1300 if(selectedDates.length === 1){ // deal with single date choice and clicking out 1301 instance.setDate([selectedDates[0],selectedDates[0]], true); 1302 } 1303 }]; 1304 } 1305 if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator'); 1306 if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format'); 1307 let FPs = datePickerDiv.find('.em-date-input'); 1308 FPs.attr('type', 'text').flatpickr(options); 1309 }); 1310 // add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs 1311 datePickerDivs.each( function(i,datePickerDiv) { 1312 datePickerDiv = jQuery(datePickerDiv); 1313 let FPs = datePickerDiv.find('.em-date-input'); 1314 let inputs = datePickerDiv.find('.em-datepicker-data input'); 1315 inputs.attr('type', 'hidden'); // hide so not tabbable 1316 if( datePickerDiv.hasClass('em-datepicker-until') ){ 1317 let start_fp, end_fp; 1318 if( datePickerDiv.attr('data-until-id') ){ 1319 end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr; 1320 }else{ 1321 end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr; 1322 if( inputs[1] && inputs[1].value ) { 1323 end_fp.setDate(inputs[1].value, false, 'Y-m-d'); 1324 } 1325 } 1326 if( inputs[0] && inputs[0].value ){ 1327 start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr; 1328 start_fp.setDate(inputs[0].value, false, 'Y-m-d'); 1329 end_fp.set('minDate', inputs[0].value); 1330 } 1331 }else{ 1332 let dates = []; 1333 inputs.each( function( i, input ){ 1334 if( input.value ){ 1335 dates.push(input.value); 1336 } 1337 }); 1338 FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d'); 1339 } 1340 }); 1341 // fire trigger 1342 jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]); 1343 } 1344} 1345function em_setup_timepicker(wrap){ 1346 wrap = jQuery(wrap); 1347 var timepicker_options = { 1348 step:15 1349 } 1350 timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A'; 1351 jQuery(document).triggerHandler('em_timepicker_options', timepicker_options); 1352 wrap.find(".em-time-input").em_timepicker(timepicker_options); 1353
1354 // Keep the duration between the two inputs. 1355 wrap.find(".em-time-range input.em-time-start").each( function(i, el){ 1356 var time = jQuery(el); 1357 time.data('oldTime', time.em_timepicker('getSecondsFromMidnight')); 1358 }).on('change', function() { 1359 var start = jQuery(this); 1360 var end = start.nextAll('.em-time-end'); 1361 if (end.val()) { // Only update when second input has a value. 1362 // Calculate duration. 1363 var oldTime = start.data('oldTime'); 1364 var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000; 1365 var time = start.em_timepicker('getSecondsFromMidnight'); 1366 if( end.em_timepicker('getSecondsFromMidnight') >= oldTime ){ 1367 // Calculate and update the time in the second input. 1368 end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration)); 1369 } 1370 start.data('oldTime', time); 1371 } 1372 }); 1373 // Validate. 1374 wrap.find(".event-form-when .em-time-range input.em-time-end").on('change', function() { 1375 var end = jQuery(this); 1376 var start = end.prevAll('.em-time-start'); 1377 var wrapper = end.closest('.event-form-when'); 1378 var start_date = wrapper.find('.em-date-end').val(); 1379 var end_date = wrapper.find('.em-date-start').val(); 1380 if( start.val() ){ 1381 if( start.em_timepicker('getTime') > end.em_timepicker('getTime') && ( end_date.length == 0 || start_date == end_date ) ) { end.addClass("error"); } 1382 else { end.removeClass("error"); } 1383 } 1384 }); 1385 wrap.find(".event-form-when .em-date-end").on('change', function(){ 1386 jQuery(this).closest('.event-form-when').find('.em-time-end').trigger('change'); 1387 }); 1388 //Sort out all day checkbox 1389 wrap.find('.em-time-range input.em-time-all-day').on('change', function(){ 1390 var allday = jQuery(this); 1391 if( allday.is(':checked') ){ 1392 allday.closest('.em-time-range').find('.em-time-input').each( function(){ 1393 this.style.setProperty('background-color','#ccc', 'important'); 1394 this.readOnly = true; 1395 }); 1396 }else{ 1397 allday.closest('.em-time-range').find('.em-time-input').each( function(){ 1398 this.style.removeProperty('background-color'); 1399 this.readOnly = false; 1400 }); 1401 } 1402 }).trigger('change'); 1403} 1404 1405/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */ 1406var em_ajaxify = function(url){ 1407 if ( url.search('em_ajax=0') != -1){ 1408 url = url.replace('em_ajax=0','em_ajax=1'); 1409 }else if( url.search(/\?/) != -1 ){ 1410 url = url + "&em_ajax=1"; 1411 }else{ 1412 url = url + "?em_ajax=1"; 1413 } 1414 return url; 1415}; 1416 1417/* 1418 * MAP FUNCTIONS 1419 */ 1420var em_maps_loaded = false; 1421var maps = {}; 1422var maps_markers = {}; 1423var infoWindow; 1424//loads maps script if not already loaded and executes EM maps script 1425function em_maps_load(){ 1426 if( !em_maps_loaded ){ 1427 if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){ 1428 var script = document.createElement("script"); 1429 script.type = "text/javascript"; 1430 script.id = "google-maps"; 1431 var proto = (EM.is_ssl) ? 'https:' : 'http:'; 1432 if( typeof EM.google_maps_api !== 'undefined' ){ 1433 script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api; 1434 }else{ 1435 script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps'; 1436 } 1437 document.body.appendChild(script); 1438 }else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){ 1439 em_maps(); 1440 }else if( jQuery('script#google-maps').length > 0 ){ 1441 jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources 1442 } 1443 } 1444} 1445jQuery(document).on('em_view_loaded_map', function( e, view, form ){ 1446 if( !em_maps_loaded ){ 1447 em_maps_load(); 1448 }else{ 1449 let map = view.find('.em-locations-map'); 1450 em_maps_load_locations( map ); 1451 } 1452}); 1453//re-usable function to load global location maps 1454function em_maps_load_locations(el){ 1455 var el = jQuery(el); 1456 var map_id = el.attr('id').replace('em-locations-map-',''); 1457 var em_data = jQuery.parseJSON( el.nextAll('.em-locations-map-coords').first().text() ); 1458 if( em_data == null ){ 1459 var em_data = jQuery.parseJSON( jQuery('#em-locations-map-coords-'+map_id).text() ); 1460 } 1461 jQuery.getJSON(document.URL, em_data , function(data){ 1462 if(data.length > 0){ 1463 //define default options and allow option for extension via event triggers 1464 var map_options = { mapTypeId: google.maps.MapTypeId.ROADMAP }; 1465 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]; } 1466 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 1467 jQuery(document).triggerHandler('em_maps_locations_map_options', map_options); 1468 var marker_options = {}; 1469 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 1470 1471 maps[map_id] = new google.maps.Map(el[0], map_options); 1472 maps_markers[map_id] = []; 1473 1474 var bounds = new google.maps.LatLngBounds(); 1475 1476 jQuery.map( data, function( location, i ){ 1477 if( !(location.location_latitude == 0 && location.location_longitude == 0) ){ 1478 var latitude = parseFloat( location.location_latitude ); 1479 var longitude = parseFloat( location.location_longitude ); 1480 var location_position = new google.maps.LatLng( latitude, longitude ); 1481 //extend the default marker options 1482 jQuery.extend(marker_options, { 1483 position: location_position, 1484 map: maps[map_id] 1485 }) 1486 var marker = new google.maps.Marker(marker_options); 1487 maps_markers[map_id].push(marker); 1488 marker.setTitle(location.location_name); 1489 var myContent = '<div class="em-map-balloon"><div id="em-map-balloon-'+map_id+'" class="em-map-balloon-content">'+ location.location_balloon +'</div></div>'; 1490 em_map_infobox(marker, myContent, maps[map_id]); 1491 //extend bounds 1492 bounds.extend(new google.maps.LatLng(latitude,longitude)) 1493 } 1494 }); 1495 // Zoom in to the bounds 1496 maps[map_id].fitBounds(bounds); 1497 1498 //Call a hook if exists 1499 jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]); 1500 }else{
1501 el.children().first().html('No locations found'); 1502 jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [el]); 1503 } 1504 }); 1505} 1506function em_maps_load_location(el){ 1507 el = jQuery(el); 1508 var map_id = el.attr('id').replace('em-location-map-',''); 1509 em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text()); 1510 //extend map and markers via event triggers 1511 var map_options = { 1512 zoom: 14, 1513 center: em_LatLng, 1514 mapTypeId: google.maps.MapTypeId.ROADMAP, 1515 mapTypeControl: false, 1516 gestureHandling: 'cooperative' 1517 }; 1518 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]; } 1519 else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 1520 jQuery(document).triggerHandler('em_maps_location_map_options', map_options); 1521 maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options); 1522 var marker_options = { 1523 position: em_LatLng, 1524 map: maps[map_id] 1525 }; 1526 jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options); 1527 maps_markers[map_id] = new google.maps.Marker(marker_options); 1528 infoWindow = new google.maps.InfoWindow({ content: jQuery('#em-location-map-info-'+map_id+' .em-map-balloon').get(0) }); 1529 infoWindow.open(maps[map_id],maps_markers[map_id]); 1530 maps[map_id].panBy(40,-70); 1531 1532 //JS Hook for handling map after instantiation 1533 //Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} ); 1534 jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]); 1535 //map resize listener 1536 jQuery(window).on('resize', function(e) { 1537 google.maps.event.trigger(maps[map_id], "resize"); 1538 maps[map_id].setCenter(maps_markers[map_id].getPosition()); 1539 maps[map_id].panBy(40,-70); 1540 }); 1541} 1542jQuery(document).on('em_search_ajax', function(e, vars, wrapper){ 1543 if( em_maps_loaded ){ 1544 wrapper.find('.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 1545 wrapper.find('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); }); 1546 } 1547}); 1548//Load single maps (each map is treated as a seperate map). 1549function em_maps() { 1550 //Find all the maps on this page and load them 1551 jQuery('.em-location-map').each( function(index, el){ em_maps_load_location(el); } ); 1552 jQuery('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } ); 1553 1554 //Location stuff - only needed if inputs for location exist 1555 if( jQuery('select#location-select-id, input#location-address').length > 0 ){ 1556 var map, marker; 1557 //load map info 1558 var refresh_map_location = function(){ 1559 var location_latitude = jQuery('#location-latitude').val(); 1560 var location_longitude = jQuery('#location-longitude').val(); 1561 if( !(location_latitude == 0 && location_longitude == 0) ){ 1562 var position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords 1563 marker.setPosition(position); 1564 var mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val(); 1565 mapTitle = em_esc_attr(mapTitle); 1566 marker.setTitle( mapTitle ); 1567 jQuery('#em-map').show(); 1568 jQuery('#em-map-404').hide(); 1569 google.maps.event.trigger(map, 'resize'); 1570 map.setCenter(position); 1571 map.panBy(40,-55); 1572 infoWindow.setContent( 1573 '<div id="location-balloon-content"><strong>' + mapTitle + '</strong><br>' + 1574 em_esc_attr(jQuery('#location-address').val()) + 1575 '<br>' + em_esc_attr(jQuery('#location-town').val()) + 1576 '</div>' 1577 ); 1578 infoWindow.open(map, marker); 1579 jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]); 1580 } else { 1581 jQuery('#em-map').hide(); 1582 jQuery('#em-map-404').show(); 1583 } 1584 }; 1585 1586 //Add listeners for changes to address 1587 var get_map_by_id = function(id){ 1588 if(jQuery('#em-map').length > 0){ 1589 jQuery('#em-map-404 .em-loading-maps').show(); 1590 jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){ 1591 if( data.location_latitude!=0 && data.location_longitude!=0 ){ 1592 loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude); 1593 marker.setPosition(loc_latlng); 1594 marker.setTitle( data.location_name ); 1595 marker.setDraggable(false); 1596 jQuery('#em-map').show(); 1597 jQuery('#em-map-404').hide(); 1598 jQuery('#em-map-404 .em-loading-maps').hide(); 1599 map.setCenter(loc_latlng); 1600 map.panBy(40,-55); 1601 infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>'); 1602 infoWindow.open(map, marker); 1603 google.maps.event.trigger(map, 'resize'); 1604 jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]); 1605 }else{ 1606 jQuery('#em-map').hide(); 1607 jQuery('#em-map-404').show(); 1608 jQuery('#em-map-404 .em-loading-maps').hide(); 1609 } 1610 }); 1611 } 1612 }; 1613 jQuery('#location-select-id, input#location-id').on('change', function(){get_map_by_id(jQuery(this).val());} ); 1614 jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){ 1615 //build address 1616 if( jQuery(this).prop('readonly') === true ) return; 1617 var addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ]; 1618 var address = ''; 1619 jQuery.each( addresses, function(i, val){ 1620 if( val != '' ){ 1621 address = ( address == '' ) ? address+val:address+', '+val; 1622 } 1623 }); 1624 if( address == '' ){ //in case only name is entered, no address 1625 jQuery('#em-map').hide(); 1626 jQuery('#em-map-404').show(); 1627 return false; 1628 } 1629 //do country last, as it's using the text version 1630 if( jQuery('#location-country option:selected').val() != 0 ){ 1631 address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text(); 1632 } 1633 //add working indcator whilst we search 1634 jQuery('#em-map-404 .em-loading-maps').show(); 1635 //search! 1636 if( address != '' && jQuery('#em-map').length > 0 ){ 1637 geocoder.geocode( { 'address': address }, function(results, status) { 1638 if (status == google.maps.GeocoderStatus.OK) { 1639 jQuery('#location-latitude').val(results[0].geometry.location.lat()); 1640 jQuery('#location-longitude').val(results[0].geometry.location.lng()); 1641 } 1642 refresh_map_location(); 1643 }); 1644 } 1645 }); 1646 1647 //Load map 1648 if(jQuery('#em-map').length > 0){ 1649 var em_LatLng = new google.maps.LatLng(0, 0); 1650 var map_options = { 1651 zoom: 14, 1652 center: em_LatLng, 1653 mapTypeId: google.maps.MapTypeId.ROADMAP, 1654 mapTypeControl: false, 1655 gestureHandling: 'cooperative' 1656 }; 1657 if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; } 1658 map = new google.maps.Map( document.getElementById('em-map'), map_options); 1659 var marker = new google.maps.Marker({ 1660 position: em_LatLng, 1661 map: map, 1662 draggable: true 1663 }); 1664 infoWindow = new google.maps.InfoWindow({ 1665 content: '' 1666 }); 1667 var geocoder = new google.maps.Geocoder(); 1668 google.maps.event.addListener(infoWindow, 'domready', function() { 1669 document.getElementById('location-balloon-content').parentNode.style.overflow=''; 1670 document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow=''; 1671 }); 1672 google.maps.event.addListener(marker, 'dragend', function() { 1673 var position = marker.getPosition(); 1674 jQuery('#location-latitude').val(position.lat()); 1675 jQuery('#location-longitude').val(position.lng()); 1676 map.setCenter(position); 1677 map.panBy(40,-55); 1678 }); 1679 if( jQuery('#location-select-id').length > 0 ){ 1680 jQuery('#location-select-id').trigger('change'); 1681 }else{ 1682 refresh_map_location(); 1683 } 1684 jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]); 1685 } 1686 //map resize listener 1687 jQuery(window).on('resize', function(e) { 1688 google.maps.event.trigger(map, "resize"); 1689 map.setCenter(marker.getPosition()); 1690 map.panBy(40,-55); 1691 }); 1692 } 1693 em_maps_loaded = true; //maps have been loaded 1694 jQuery(document).triggerHandler('em_maps_loaded'); 1695} 1696 1697function em_map_infobox(marker, message, map) { 1698 var iw = new google.maps.InfoWindow({ content: message });
1699 google.maps.event.addListener(marker, 'click', function() { 1700 if( infoWindow ) infoWindow.close(); 1701 infoWindow = iw; 1702 iw.open(map,marker); 1703 }); 1704} 1705 1706function em_esc_attr( str ){ 1707 if( typeof str !== 'string' ) return ''; 1708 return str.replace(/</gi,'<').replace(/>/gi,'>'); 1709} 1710 1711 1712// Modal Open/Close 1713let openModal = function( modal, onOpen = null ){ 1714 modal = jQuery(modal); 1715 modal.appendTo(document.body); 1716 setTimeout( function(){ 1717 modal.addClass('active').find('.em-modal-popup').addClass('active'); 1718 jQuery(document).triggerHandler('em_modal_open', [modal]); 1719 if( typeof onOpen === 'function' ){ 1720 setTimeout( onOpen, 200); // timeout allows css transition 1721 } 1722 }, 100); // timeout allows css transition 1723}; 1724let closeModal = function( modal, onClose = null ){ 1725 modal = jQuery(modal); 1726 modal.removeClass('active').find('.em-modal-popup').removeClass('active'); 1727 setTimeout( function(){ 1728 if( modal.attr('data-parent') ){ 1729 let wrapper = jQuery('#' + modal.attr('data-parent') ); 1730 if( wrapper.length ) { 1731 modal.appendTo(wrapper); 1732 } 1733 } 1734 modal.triggerHandler('em_modal_close'); 1735 if( typeof onClose === 'function' ){ 1736 onClose(); 1737 } 1738 }, 500); // timeout allows css transition 1739} 1740jQuery(document).on('click', '.em-modal .em-close-modal', function(e){ 1741 let modal = jQuery(this).closest('.em-modal'); 1742 if( !modal.attr('data-prevent-close') ) { 1743 closeModal(modal); 1744 } 1745}); 1746jQuery(document).on('click', '.em-modal', function(e){ 1747 var target = jQuery(e.target); 1748 if( target.hasClass('em-modal') ) { 1749 let modal = jQuery(this); 1750 if( !modal.attr('data-prevent-close') ){ 1751 closeModal(modal); 1752 } 1753 } 1754}); 1755 1756//Events Search 1757jQuery(document).ready( function($){ 1758 1759 // handle the views tip/ddm 1760 let views_ddm_options = { 1761 theme : 'light-border', 1762 allowHTML : true, 1763 interactive : true, 1764 trigger : 'manual', 1765 placement : 'bottom', 1766 zIndex : 1000000, 1767 touch: true, 1768 }; 1769 $(document).trigger('em-search-views-trigger-vars',[views_ddm_options]); 1770 let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, }; 1771 $(document).trigger('em-tippy-vars',[tooltip_vars]); 1772 1773 // sync main search texts to advanced search 1774 let search_forms = $('.em-search'); 1775 search_forms.each( function(){ 1776 /* 1777 * Important references we'll reuse in scope 1778 */ 1779 let search = $(this); 1780 let search_id = search.attr('id').replace('em-search-', ''); 1781 let search_form = search.find('.em-search-form').first(); 1782 let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway 1783 1784 /* 1785 * Counter functions 1786 */ 1787 const update_input_count = function( input, qty = 1 ){ 1788 let el = jQuery(input); 1789 let total = qty > 0 ? qty : null; 1790 el.attr('data-advanced-total-input', total); 1791 update_search_totals(); 1792 }; 1793 1794 const update_search_totals = function( applied = false ){ 1795 // set everything to 0, recount 1796 search.find('span.total-count').remove(); 1797 // find all fields with total attributes and sum them up 1798 let total = 0; 1799 search_advanced.find('[data-advanced-total-input]').each( function(){ 1800 let total_input = this.getAttribute('data-advanced-total-input'); 1801 total += Math.abs( total_input ); 1802 }); 1803 search.attr('data-advanced-total', total); 1804 update_trigger_count( applied ); 1805 // find all sections with totals and display them (added above) 1806 search_advanced.find('.em-search-advanced-section').each( function(){ 1807 let section = $(this); 1808 let section_total = 0; 1809 section.attr('data-advanced-total', 0); 1810 // go through all set qtys and calculate 1811 section.find('[data-advanced-total-input]').each( function(){ 1812 let total_input = this.getAttribute('data-advanced-total-input'); 1813 section_total += Math.abs( total_input ); 1814 }); 1815 section.attr('data-advanced-total', section_total); 1816 update_section_count(section); 1817 }); 1818 // update triggers, search, clear button etc. 1819 if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){ 1820 update_submit_buttons( true ); 1821 } 1822 update_clear_button_count(); 1823 } 1824 1825 const update_trigger_count = function( applied = false ){ 1826 let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers 1827 triggers.find('span.total-count').remove(); 1828 let total = search.attr('data-advanced-total'); 1829 if( total > 0 ){ 1830 let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers); 1831 if( !applied ){ 1832 trigger_count.addClass('tentative'); 1833 } 1834 } 1835 }; 1836 1837 const update_submit_buttons = function( disabled = false ){ 1838 // update the clear link 1839 let submit_button = search_advanced.find('button[type="submit"]'); 1840 let main_submit_button = search.find('.em-search-main-bar button[type="submit"]'); 1841 let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs 1842 if( disabled ){ 1843 submit_buttons.removeClass('disabled').attr('aria-disabled', 'false'); 1844 }else{ 1845 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 1846 } 1847 }; 1848 1849 const update_section_count = function( section ){
1850 let section_total = section.attr('data-advanced-total'); 1851 section.find('header span.total-count').remove(); 1852 if( section_total > 0 ){ 1853 $('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') ); 1854 } 1855 }; 1856 1857 const update_clear_button_count = function(){ 1858 // update the clear link 1859 let clear_link = search_advanced.find('button[type="reset"]'); 1860 if( !clear_link.attr('data-placeholder') ){ 1861 clear_link.attr('data-placeholder', clear_link.text()); 1862 } 1863 let total = search.attr('data-advanced-total'); 1864 if( total > 0 ){ 1865 clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false); 1866 clear_link.removeClass('disabled').attr('aria-disabled', 'false'); 1867 }else{ 1868 clear_link.text( clear_link.attr('data-placeholder') ); 1869 clear_link.addClass('disabled').attr('aria-disabled', 'true'); 1870 } 1871 }; 1872 1873 /* 1874 * Triggers 1875 */ 1876 search.find('.em-search-views-trigger').each( function(){ 1877 tooltip_vars.content = this.parentElement.getAttribute('aria-label'); 1878 let views_tooltip = tippy(this.parentElement, tooltip_vars); 1879 let views_content = this.parentElement.querySelector('.em-search-views-options'); 1880 let views_content_parent = views_content.parentElement; 1881 let tippy_content = document.createElement('div'); 1882 views_ddm_options.content = tippy_content; 1883 let views_ddm = tippy(this, views_ddm_options); 1884 views_ddm.setProps({ 1885 onShow(instance){ 1886 views_tooltip.disable(); 1887 tippy_content.append(views_content); 1888 }, 1889 onShown(instance){ // keyboard support 1890 views_content.querySelector('input:checked').focus(); 1891 }, 1892 onHidden(instance){ 1893 views_tooltip.enable(); 1894 if( views_content.parentElement !== views_content_parent ) { 1895 views_content_parent.append(views_content); 1896 } 1897 } 1898 }); 1899 let tippy_listener = function(e){ 1900 if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false; 1901 e.preventDefault(); 1902 e.stopPropagation(); 1903 this._tippy.show(); 1904 views_tooltip.hide(); 1905 } 1906 this.addEventListener('click', tippy_listener); 1907 this.addEventListener('keydown', tippy_listener); 1908 this.firstElementChild.addEventListener('focus', function(e){ 1909 views_ddm.hide(); 1910 views_tooltip.enable(); 1911 views_tooltip.show(); 1912 }); 1913 this.firstElementChild.addEventListener('blur', function(){ 1914 views_tooltip.hide(); 1915 }); 1916 1917 search.on('focus blur', '.em-search-views-options input', function(){ 1918 if( document.activeElement === this ){ 1919 this.parentElement.classList.add('focused'); 1920 }else{ 1921 this.parentElement.classList.remove('focused'); 1922 } 1923 }); 1924 1925 search.on('keydown click', '.em-search-views-options input', function( e ){ 1926 // get relevant vars 1927 if( e.type === 'keydown' && e.which !== 13 ){ 1928 if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) { 1929 if (e.which === 38) { 1930 if (this.parentElement.previousElementSibling) { 1931 this.parentElement.previousElementSibling.focus(); 1932 } 1933 } else if (e.which === 40) { 1934 if (this.parentElement.nextElementSibling) { 1935 this.parentElement.nextElementSibling.focus(); 1936 } 1937 } 1938 return false; 1939 } else if ( e.which === 9 ) { 1940 // focus out 1941 views_ddm.hide(); 1942 } 1943 return true; 1944 } 1945 this.checked = true; 1946 let input = $(this); 1947 // mark label selected 1948 input.closest('fieldset').find('label').removeClass('checked'); 1949 input.parent().addClass('checked'); 1950 // get other reference elements we need 1951 let views_wrapper = $(this).closest('.em-search-views'); 1952 let view_type = this.value; 1953 let trigger = views_wrapper.children('.em-search-views-trigger'); 1954 let trigger_option = trigger.children('.em-search-view-option'); 1955 // change view, if different 1956 if( view_type !== trigger_option.attr('data-view') ){ 1957 trigger_option.attr('data-view', this.value).text(this.parentElement.innerText); 1958 // remove custom search vals from current view so it's not used into another view 1959 $('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove(); 1960 // trigger custom event in case form disabled due to no search vals 1961 search_form.find('button[type="submit"]').focus(); 1962 search_form.trigger('forcesubmit'); 1963 } 1964 views_ddm.hide(); 1965 }); 1966 }); 1967 1968 // add trigger logic for advanced popup modal 1969 search.on('click', 'button.em-search-advanced-trigger', function(){ 1970 if( search.hasClass('advanced-mode-inline') ){ 1971 // inline 1972 if( !search_advanced.hasClass('visible') ){ 1973 search_advanced.slideDown().addClass('visible'); 1974 }else{ 1975 search_advanced.slideUp().removeClass('visible'); 1976 } 1977 }else{ 1978 // wrap modal popup element in a form, so taht it's 'accessible' with keyboard 1979 if( !search_advanced.hasClass('active') ) { 1980 let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>'); 1981 form_wrapper.appendTo(search_advanced); 1982 search_advanced.find('.em-modal-popup').appendTo(form_wrapper); 1983 // open modal 1984 let button = this; 1985 openModal(search_advanced, function () { 1986 // Do this instead 1987 button.blur(); 1988 search_advanced.find('input.em-search-text').focus(); 1989 });
1990 } 1991 } 1992 }); 1993 search_advanced.on('em_modal_close', function(){ 1994 search_advanced.find('.em-modal-popup').appendTo(search_advanced); 1995 search_advanced.children('form').remove(); 1996 let trigger = search.find('button.em-search-advanced-trigger').focus(); 1997 if( '_tippy' in trigger[0] ){ 1998 trigger[0]._tippy.hide(); 1999 } 2000 }); 2001 2002 // add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal 2003 search_advanced.find('.em-search-advanced-section > header').on('click', function(){ 2004 let header = $(this); 2005 let section = header.closest('section'); 2006 let content = header.siblings('.em-search-section-content'); 2007 if( section.hasClass('active') ){ 2008 content.slideUp(); 2009 section.removeClass('active'); 2010 }else{ 2011 content.slideDown(); 2012 section.addClass('active'); 2013 } 2014 }); 2015 2016 /* 2017 * Advanced Search Field Listeners - Main Search Form 2018 */ 2019 2020 let search_form_advanced_calculate_totals_inputs = function( input ){ 2021 // for textboxes we only need to add or remove 1 advanced 2022 let el = $(input); 2023 let qty = el.val() !== '' ? 1:0; 2024 update_input_count( el, qty ); 2025 }; 2026 2027 // These are for the main search bar, syncing information back into the advanced form 2028 search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){ 2029 // sync advanced input field with same text 2030 let advanced_search_input = search_advanced.find('input.em-search-text'); 2031 advanced_search_input.val( this.value ); 2032 // recalculate totals from here 2033 search_form_advanced_calculate_totals_inputs(advanced_search_input[0]); 2034 }); 2035 search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){ 2036 let el = $(this); 2037 let advanced_geo = search_advanced.find('div.em-search-geo'); 2038 // copy over value and class names 2039 let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords'); 2040 advanced_geo_coords.val( el.val() ).attr('class', el.attr('class')); 2041 let geo_text = el.siblings('input.em-search-geo').first(); 2042 advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2043 // calculate totals from here 2044 search_form_advanced_calculate_totals_inputs(advanced_geo_coords); 2045 }); 2046 search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2047 if( !('_flatpickr' in this) ) return; 2048 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2049 // update advanced search form datepicker values, trigger a close for it to handle the rest 2050 let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input'); 2051 advanced_datepicker[0]._flatpickr.setDate( selectedDates, true ); 2052 advanced_datepicker[0]._flatpickr.close(); 2053 }); 2054 }); 2055 2056 /* 2057 * Advanced Search Field Listeners - Advanced Search Form 2058 */ 2059 2060 // regular text advanced or hidden inputs that represent another ui 2061 search_advanced.on('change input', 'input.em-search-text', function( e ){ 2062 if( e.type === 'change' ){ 2063 // copy over place info on change only, not on each keystroke 2064 search.find('.em-search-main input.em-search-text').val( this.value ); 2065 }else{ 2066 search_form_advanced_calculate_totals_inputs(this); 2067 } 2068 }); 2069 search_advanced.on('change', 'input.em-search-geo-coords', function( e ){ 2070 search_form_advanced_calculate_totals_inputs(this); 2071 //update values in main search 2072 let el = $(this); 2073 let main = search.find('.em-search-main div.em-search-geo'); 2074 if( main.length > 0 ){ 2075 // copy over value and class names 2076 main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class')); 2077 let geo_text = el.siblings('input.em-search-geo'); 2078 main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class')); 2079 } 2080 }); 2081 /* Not sure we should be calculating this... since it's always set to something. 2082 search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2083 // combine both values into parent, if value set then it's a toggle 2084 let el = jQuery(this); 2085 let qty = el.val() ? 1 : null; 2086 el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty); 2087 update_search_totals(); 2088 }); 2089 */ 2090 search_advanced.on('change', 'input.em-search-eventful', function( e ){ 2091 let el = $(this); 2092 let qty = el.prop('checked') ? 1:0; 2093 update_input_count( el, qty ); 2094 }); 2095 search_advanced.on('calculate_totals', function(){ 2096 $(this).find('input.em-search-text, input.em-search-geo-coords').each( function(){ 2097 search_form_advanced_calculate_totals_inputs(this); 2098 }); 2099 $(this).find('input.em-search-eventful').trigger('change'); 2100 }); 2101 search_advanced.on('clear_search', function(){ 2102 $(this).find('input.em-search-geo').removeClass('off').removeClass('on').val(''); 2103 }); 2104 2105 // datepicker advanced logic 2106 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2107 if( !('_flatpickr' in this) ) return; 2108 this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) { 2109 // check previous value against current value, no change, no go 2110 let previous_value = instance.input.getAttribute('data-previous-value'); 2111 if( previous_value !== dateStr ){ 2112 // update counter 2113 let qty = dateStr ? 1:0; 2114 update_input_count(instance.input, qty); 2115 // update main search form datepicker values 2116 let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input'); 2117 main_datepicker[0]._flatpickr.setDate( selectedDates, true ); 2118 // set for next time 2119 instance.input.setAttribute('data-previous-value', dateStr); 2120 } 2121 }); 2122 }); 2123 search_advanced.on('calculate_totals', function(){ 2124 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){ 2125 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 2126 update_input_count(this, qty); 2127 }); 2128 }); 2129 search_advanced.on('clear_search', function(){ 2130 search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function() { 2131 this._flatpickr.clear(); 2132 update_input_count(this, 0); 2133 }); 2134 }); 2135 // clear the date total for calendars, before anything is done 2136 let scope_calendar_check = function(){ 2137 search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){ 2138 if( search.attr('data-view') == 'calendar' ){ 2139 this.setAttribute('data-advanced-total-input', 0); 2140 this._flatpickr.input.disabled = true; 2141 }else{ 2142 this._flatpickr.input.disabled = false; 2143 let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0; 2144 this.setAttribute('data-advanced-total-input', qty); 2145 } 2146 }); 2147 }; 2148 $(document).on('em_search_loaded', scope_calendar_check); 2149 scope_calendar_check(); 2150 2151 2152 // selectize advanced 2153 search_advanced.find('select.em-selectize').each(function () { 2154 this.selectize.on('change', function(){ 2155 search_advanced_selectize_change(this); 2156 }); 2157 }); 2158 search_advanced.on('calculate_totals', function(){ 2159 $(this).find('select.em-selectize').each( function(){ 2160 search_advanced_selectize_change(this.selectize); 2161 }); 2162 }); 2163 search_advanced.on('clear_search', function(){ 2164 search_advanced.find('select.em-selectize').each( function(){ 2165 this.selectize.clear(); 2166 this.selectize.refreshItems(); 2167 this.selectize.refreshOptions(); 2168 if( !this.classList.contains('always-open') ){ 2169 this.selectize.close(); 2170 this.selectize.$dropdown.hide(); 2171 } 2172 }); 2173 }); 2174 2175 let search_advanced_selectize_change = function( selectize ){ 2176 let qty = selectize.items.length; 2177 // handle 'all' default values 2178 if( qty == 1 && !selectize.items[0] ){ 2179 qty = 0; 2180 } 2181 update_input_count( selectize.$input, qty ); 2182 }; 2183 2184 // location-specific stuff for dropdowns (powered by selectize) 2185 let locations_selectize_load_complete = function(){ 2186 if( 'selectize' in this ) { 2187 this.selectize.settings.placeholder = this.selectize.settings.original_placeholder; 2188 this.selectize.updatePlaceholder(); 2189 // get options from select again 2190 let options = []; 2191 this.selectize.$input.find('option').each( function(){ 2192 let value = this.value !== null ? this.value : this.innerHTML; 2193 options.push({ value : value, text: this.innerHTML}); 2194 }); 2195 this.selectize.addOption(options); 2196 this.selectize.refreshOptions(false); 2197 } 2198 }; 2199 let locations_selectize_load_start = function(){ 2200 if( 'selectize' in this ){ 2201 this.selectize.clearOptions(); 2202 if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder; 2203 this.selectize.settings.placeholder = EM.txt_loading; 2204 this.selectize.updatePlaceholder(); 2205 } 2206 }; 2207 $('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){ 2208 var el = $(this); 2209 let wrapper = el.closest('.em-search-location'); 2210 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 2211 wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>'); 2212 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 2213 wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start ); 2214 if( el.val() != '' ){ 2215 wrapper.find('.em-search-location-meta').slideDown(); 2216 var data = { 2217 action : 'search_states', 2218 country : el.val(), 2219 return_html : true, 2220 }; 2221 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2222 data.action = 'search_regions'; 2223 wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2224 data.action = 'search_towns'; 2225 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2226 }else{
2227 wrapper.find('.em-search-location-meta').slideUp(); 2228 } 2229 }); 2230 $('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){ 2231 var el = $(this); 2232 let wrapper = el.closest('.em-search-location'); 2233 wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>'); 2234 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>'); 2235 wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start ); 2236 var data = { 2237 action : 'search_states', 2238 region : el.val(), 2239 country : wrapper.find('select[name=country]').val(), 2240 return_html : true 2241 }; 2242 wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2243 data.action = 'search_towns'; 2244 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2245 }); 2246 $('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){ 2247 var el = $(this); 2248 let wrapper = el.closest('.em-search-location'); 2249 wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start ); 2250 var data = { 2251 action : 'search_towns', 2252 state : el.val(), 2253 region : wrapper.find('select[name=region]').val(), 2254 country : wrapper.find('select[name=country]').val(), 2255 return_html : true 2256 }; 2257 wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete ); 2258 }); 2259 2260 /* 2261 * Clear & Search Actions 2262 */ 2263 // handle clear link for advanced 2264 search_advanced.on( 'click', 'button[type="reset"]', function(){ 2265 // clear text search advanced, run clear hook for other parts to hook into 2266 if( search.attr('data-advanced-total') == 0 ) return; 2267 // search text and geo search 2268 search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change'); 2269 // other implementations hook here and do what you need 2270 search.trigger('clear_search'); 2271 search_advanced.trigger('clear_search'); 2272 // remove counters, set data counters to 0, hide section and submit form without search settings 2273 update_search_totals(true); // in theory, this is 0 and removes everything 2274 search_advanced.find('.em-search-advanced-section').removeClass('active').children('.em-search-section-content').slideUp(); 2275 search_advanced.find('button[type="submit"]').trigger('forceclick'); 2276 update_clear_button_count(); 2277 }).each( function(){ 2278 search_advanced.trigger('calculate_totals'); 2279 update_search_totals(true); 2280 }); 2281 const on_update_trigger_count = function(e, applied = true){ 2282 update_trigger_count( applied ); 2283 }; 2284 search.on('update_trigger_count', on_update_trigger_count); 2285 search_advanced.on('update_trigger_count', on_update_trigger_count); 2286 2287 // handle submission for advanced 2288 search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){ 2289 e.preventDefault(); 2290 if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false; 2291 // close attach back to search form 2292 closeModal(search_advanced, function(){ 2293 // submit for search 2294 search_form.submit(); 2295 }); 2296 return false; // we handled it 2297 }); 2298 2299 search.on('submit forcesubmit', '.em-search-form', function(e){ 2300 e.preventDefault(); 2301 let form = $(this); 2302 let submit_buttons = form.find('button[type="submit"]'); 2303 if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false; 2304 let wrapper = form.closest('.em-search'); 2305 if( wrapper.hasClass('em-search-legacy') ){ 2306 em_submit_legacy_search_form(form); 2307 }else{ 2308 let view = $('#em-view-'+search_id); 2309 let view_type = form.find('[name="view"]:checked').val(); 2310 if( Array.isArray(view_type) ) view_type = view_type.shift(); 2311 // copy over custom view information, remove it further down 2312 let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
2313 let custom_view_data_container = $('<div class="em-view-custom-data"></div>'); 2314 custom_view_data.children().appendTo(custom_view_data_container); 2315 custom_view_data.remove(); 2316 custom_view_data_container.appendTo(form); 2317 // add loading stuff 2318 view.append('<div class="em-loading"></div>'); 2319 submit_buttons.each( function(){ 2320 if( EM.txt_searching !== this.innerHTML ) { 2321 this.setAttribute('data-button-text', this.innerHTML); 2322 this.innerHTML = EM.txt_searching; 2323 } 2324 }); 2325 var vars = form.serialize(); 2326 $.ajax( EM.ajaxurl, { 2327 type : 'POST', 2328 dataType : 'html', 2329 data : vars, 2330 success : function(responseText){ 2331 submit_buttons.each( function(){ 2332 this.innerHTML = this.getAttribute('data-button-text'); 2333 }); 2334 view = EM_View_Updater( view, responseText ); 2335 // update view definitions 2336 view.attr('data-view', view_type); 2337 search.attr('data-view', view_type); 2338 search_advanced.attr('data-view', view_type); 2339 jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]); 2340 jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results 2341 jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above 2342 wrapper.find('.count.tentative').removeClass('tentative'); 2343 // deactivate submit button until changes are made again 2344 submit_buttons.addClass('disabled').attr('aria-disabled', 'true'); 2345 // update search totals 2346 update_search_totals(true); 2347 search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search 2348 update_submit_buttons(false); 2349 custom_view_data_container.remove(); // remove data so it's reloaded again later 2350 } 2351 }); 2352 } 2353 return false; 2354 }); 2355 2356 // observe resizing 2357 EM_ResizeObserver( EM.search.breakpoints, [search[0]]); 2358 }); 2359 2360 // handle external triggers, e.g. a calendar shortcut for a hidden search form 2361 $(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id]', function(){ 2362 if( this.getAttribute('data-parent-trigger') ) { 2363 document.getElementById(this.getAttribute('data-parent-trigger')).click(); 2364 } 2365 }); 2366 2367 $(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){ 2368 let a = $(this); 2369 let view = a.closest('.em-view-container'); 2370 let href = a.attr('href'); 2371 //add data-em-ajax att if it exists 2372 let data = a.closest('.em-pagination').attr('data-em-ajax'); 2373 if( data ){ 2374 href += '&' + data; 2375 } 2376 // build querystring from url 2377 let url_params = new URL(href, window.location.origin).searchParams; 2378 if( view.attr('data-view') ) { 2379 url_params.set('view', view.attr('data-view')); 2380 } 2381 // start ajax 2382 view.append('<div class="loading" id="em-loading"></div>'); 2383 $.ajax( EM.ajaxurl, { 2384 type : 'POST', 2385 dataType : 'html', 2386 data : url_params.toString(), 2387 success : function(responseText) { 2388 view = EM_View_Updater( view, responseText ); 2389 view.find('.em-pagination').each( function(){ 2390 paginationObserver.observe(this); 2391 }); 2392 jQuery(document).triggerHandler('em_page_loaded', [view]); 2393 } 2394 }); 2395 e.preventDefault(); 2396 return false; 2397 }); 2398 2399 const paginationObserver = new ResizeObserver( function( entries ){ 2400 for (let entry of entries) { 2401 let el = entry.target; 2402 if( !el.classList.contains('observing') ) { 2403 el.classList.add('observing'); // prevent endless loop on resizing within this check 2404 // check if any pagination parts are overflowing 2405 let overflowing = false; 2406 el.classList.remove('overflowing'); 2407 for ( const item of el.querySelectorAll('.not-current')) { 2408 if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){ 2409 overflowing = true; 2410 break; // break if one has overflown 2411 } 2412 }; 2413 // add or remove overflow classes 2414 if( overflowing ){ 2415 el.classList.add('overflowing') 2416 } 2417 el.classList.remove('observing'); 2418 } 2419 } 2420 });
2421 $('.em-pagination').each( function(){ 2422 paginationObserver.observe(this); 2423 }); 2424 2425 /* START Legacy */ 2426 // deprecated - hide/show the advanced search advanced link - relevant for old template overrides 2427 $(document).on('click change', '.em-search-legacy .em-toggle', function(e){ 2428 e.preventDefault(); 2429 //show or hide advanced search, hidden by default 2430 var el = $(this); 2431 var rel = el.attr('rel').split(':'); 2432 if( el.hasClass('show-search') ){ 2433 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); } 2434 else{ $(rel[0]).slideUp(); } 2435 el.find('.show, .show-advanced').show(); 2436 el.find('.hide, .hide-advanced').hide(); 2437 el.removeClass('show-search'); 2438 }else{ 2439 if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); } 2440 else{ $(rel[0]).slideDown(); } 2441 el.find('.show, .show-advanced').hide(); 2442 el.find('.hide, .hide-advanced').show(); 2443 el.addClass('show-search'); 2444 } 2445 }); 2446 // handle search form submission 2447 let em_submit_legacy_search_form = function( form ){ 2448 if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; } 2449 var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 2450 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 2451 if( results_wrapper.length > 0 ){ 2452 results_wrapper.append('<div class="loading" id="em-loading"></div>'); 2453 var submitButton = form.find('.em-search-submit button'); 2454 submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching); 2455 var img = submitButton.children('img'); 2456 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif')); 2457 var vars = form.serialize(); 2458 $.ajax( EM.ajaxurl, { 2459 type : 'POST', 2460 dataType : 'html', 2461 data : vars, 2462 success : function(responseText){ 2463 submitButton.val(submitButton.attr('data-button-text')); 2464 if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
2465 results_wrapper.replaceWith(responseText); 2466 if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); } 2467 //reload results_wrapper 2468 results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax'); 2469 if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax'); 2470 jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results 2471 } 2472 }); 2473 e.preventDefault(); 2474 return false; 2475 } 2476 }; 2477 if( $('.em-search-ajax').length > 0 ){ 2478 $(document).on('click', '.em-search-ajax a.page-numbers', function(e){ 2479 var a = $(this); 2480 var data = a.closest('.em-pagination').attr('data-em-ajax'); 2481 var wrapper = a.closest('.em-search-ajax'); 2482 var wrapper_parent = wrapper.parent(); 2483 var qvars = a.attr('href').split('?'); 2484 var vars = qvars[1]; 2485 //add data-em-ajax att if it exists 2486 if( data != '' ){ 2487 vars = vars != '' ? vars+'&'+data : data; 2488 } 2489 vars += '&legacy=1'; 2490 wrapper.append('<div class="loading" id="em-loading"></div>'); 2491 $.ajax( EM.ajaxurl, { 2492 type : 'POST', 2493 dataType : 'html', 2494 data : vars, 2495 success : function(responseText) { 2496 wrapper.replaceWith(responseText); 2497 wrapper = wrapper_parent.find('.em-search-ajax'); 2498 jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results 2499 } 2500 }); 2501 e.preventDefault(); 2502 return false; 2503 }); 2504 } 2505 /* END Legacy */ 2506}); 2507 2508/* 2509* CALENDAR 2510*/ 2511jQuery(document).ready( function($){ 2512 2513 const em_calendar_init = function( calendar ){ 2514 calendar = $(calendar); 2515 if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9+]$/) ){ 2516 calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates 2517 }
2518 calendar.find('a').off("click"); 2519 calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){ 2520 e.preventDefault(); 2521 const el = $(this); 2522 if( el.data('disabled') == 1 || el.attr('href') === '') return; // do nothing if disabled or no link provided 2523 el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>'); 2524 let url = em_ajaxify(el.attr('href')); 2525 const calendar_id = calendar.attr('id').replace('em-calendar-', ''); 2526 const custom_data = $('form#em-view-custom-data-calendar-'+ calendar_id); 2527 let form_data = new FormData(); 2528 if( custom_data.length > 0 ){ 2529 form_data = new FormData(custom_data[0]); 2530 let url_params = new URL(url, window.location.origin).searchParams; 2531 for (const [key, value] of url_params.entries()) { 2532 form_data.set(key, value); 2533 } 2534 } 2535 // check advanced trigger 2536 if( calendar.hasClass('with-advanced') ){ 2537 form_data.set('has_advanced_trigger', 1); 2538 } 2539 $.ajax({ 2540 url: url, 2541 data: form_data, 2542 processData: false, 2543 contentType: false, 2544 method: 'POST', 2545 success: function( data ){ 2546 let view = EM_View_Updater( calendar, data ); 2547 if( view.hasClass('em-view-container') ){ 2548 calendar = view.find('.em-calendar'); 2549 }else{ 2550 calendar = view; 2551 } 2552 calendar.trigger('em_calendar_load'); 2553 }, 2554 dataType: 'html' 2555 }); 2556 } ); 2557 let calendar_trigger_ajax = function( calendar, year, month ){ 2558 let link = calendar.find('.em-calnav-next'); 2559 let url = new URL(link.attr('href'), window.location.origin); 2560 url.searchParams.set('mo', month); 2561 url.searchParams.set('yr', year); 2562 link.attr('href', url.toString()).trigger('click'); 2563 }; 2564 let calendar_resize_monthpicker = function( instance, text ){ 2565 let span = $('<span class="marker">'+ text +'</span>'); 2566 span.insertAfter(instance); 2567 let width = span.width() + 40; 2568 span.remove(); 2569 instance.style.setProperty('width', width+'px', 'important'); 2570 } 2571 let calendar_month_init = function(){ 2572 let month_form = calendar.find('.month form'); 2573 calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){ 2574 e.preventDefault(); 2575 if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) { 2576 let link = this.getAttribute('data-event-url'); 2577 if (link !== null) { 2578 //window.location.href = link; 2579 } 2580 } 2581 }); 2582 if( month_form.length > 0 ){ 2583 month_form.find('input[type="submit"]').hide(); 2584 let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form); 2585 let option = $('<option></option>').appendTo(select); 2586 let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val(); 2587 let month = calendar.find('select[name="month"]'); 2588 let year = calendar.find('select[name="year"]'); 2589 let monthpicker = calendar.find('.em-month-picker'); 2590 let month_value = monthpicker.data('month-value'); 2591 monthpicker.prop('type', 'text').prop('value', month_value); 2592 calendar_resize_monthpicker( monthpicker[0], month_value ); 2593 let monthpicker_wrapper = $('#em-flatpickr'); 2594 if( monthpicker_wrapper.length === 0 ) { 2595 monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body'); 2596 } 2597 let minDate = null; 2598 if( calendar.data('scope') === 'future' ){ 2599 minDate = new Date(); 2600 minDate.setMonth(minDate.getMonth()-1); 2601 } 2602 // locale 2603 if( 'locale' in EM.datepicker ){ 2604 flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]); 2605 flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay; 2606 } 2607 monthpicker.flatpickr({ 2608 appendTo : monthpicker_wrapper[0], 2609 dateFormat : 'F Y', 2610 minDate : minDate, 2611 disableMobile: "true", 2612 plugins: [ 2613 new monthSelectPlugin({ 2614 shorthand: true, //defaults to false 2615 dateFormat: "F Y", //defaults to "F Y" 2616 altFormat: "F Y", //defaults to "F Y" 2617 }) 2618 ], 2619 onChange: function(selectedDates, dateStr, instance) { 2620 calendar_resize_monthpicker( instance.input, dateStr ); 2621 calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1); 2622 }, 2623 }); 2624 monthpicker.addClass('select-toggle') 2625 /* Disabling native picker at the moment, too quriky cross-browser 2626 } 2627 */ 2628 } 2629 if( calendar.hasClass('preview-tooltips') ){ 2630 var tooltip_vars = { 2631 theme : 'light-border', 2632 allowHTML : true, 2633 interactive : true, 2634 trigger : 'mouseenter focus click', 2635 content(reference) { 2636 return document.createElement('div'); 2637 }, 2638 onShow( instance ){ 2639 const id = instance.reference.getAttribute('data-event-id'); 2640 const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 2641 instance.props.content.append(template.first().clone()[0]); 2642 }, 2643 onHide( instance ){ 2644 instance.props.content.innerHTML = ''; 2645 } 2646 }; 2647 if( calendar.data('preview-tooltips-trigger') ) { 2648 tooltip_vars.trigger = calendar.data('preview-tooltips-trigger'); 2649 } 2650 $(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]); 2651 tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars); 2652 }else if( calendar.hasClass('preview-modal') ){ 2653 // Modal 2654 calendar.find('.em-cal-event').on('click', function(){ 2655 const id = this.getAttribute('data-event-id'); 2656 const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]'); 2657 modal.attr('data-calendar-id', calendar.attr('id')); 2658 openModal(modal); 2659 }); 2660 } 2661 // responsive mobile view for date clicks 2662 if( calendar.hasClass('responsive-dateclick-modal') ){ 2663 calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){ 2664 //if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){ 2665 e.preventDefault(); 2666 const id = this.getAttribute('data-calendar-date'); 2667 const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"]'); 2668 modal.attr('data-calendar-id', calendar.attr('id')); 2669 openModal(modal); 2670 //} 2671 }); 2672 } 2673 // observe resizing if not fixed 2674 if( !calendar.hasClass('size-fixed') ){ 2675 EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]); 2676 } 2677 // even aspect, because aspect ratio can screw up widths vs row template heights 2678 let calendar_body = calendar.find('.em-cal-body'); 2679 if( calendar_body.hasClass('even-aspect') ) { 2680 let ro_function = function (el) { 2681 let width = el.firstElementChild.getBoundingClientRect().width; 2682 if (width > 0) { 2683 el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)'); 2684 } 2685 } 2686 let ro = new ResizeObserver(function (entries) {
2687 for (let entry of entries) { 2688 ro_function(entry.target); 2689 } 2690 }); 2691 ro.observe(calendar_body[0]); 2692 ro_function(calendar_body[0]); 2693 } 2694 2695 // figure out colors 2696 calendar.find('.date-day-colors').each( function(){ 2697 let colors = JSON.parse(this.getAttribute('data-colors')); 2698 let day = $(this).siblings('.em-cal-day-date.colored'); 2699 let sides = { 2700 1 : { 1 : '--date-border-color', 'class' : 'one' }, 2701 2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' }, 2702 3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' }, 2703 4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' }, 2704 }; 2705 for (let i = 0; i < colors.length; i += 4) { 2706 const ring_colors = colors.slice(i, i + 4); 2707 // add a ring 2708 let outer_ring = day.children().first(); 2709 let new_ring = $('<div class="ring"></div>').prependTo(day); 2710 outer_ring.appendTo(new_ring); 2711 new_ring.addClass( sides[ring_colors.length].class ); 2712 for ( let it = 0; it < ring_colors.length; it++ ){ 2713 new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]); 2714 } 2715 } 2716 }); 2717 2718 if( calendar.hasClass('with-advanced') ){ 2719 const trigger = calendar.find('.em-search-advanced-trigger'); 2720 const search_advanced = $('#'+trigger.attr('data-search-advanced-id')); 2721 search_advanced.triggerHandler('update_trigger_count'); 2722 } 2723 } 2724 calendar_month_init(); 2725 $(document).triggerHandler('em_calendar_loaded', [calendar]); 2726 }; 2727 $('.em-calendar').each( function(){ 2728 let calendar = $(this); 2729 em_calendar_init( calendar ); 2730 }); 2731 $(document).on('em_calendar_load', '.em-calendar', function(){ 2732 em_calendar_init( this ); 2733 }); 2734 $(document).on('em_view_loaded_calendar', function( e, view, form ){ 2735 let calendar; 2736 if( view.hasClass('em-calendar') ){ 2737 calendar = view; 2738 }else { 2739 calendar = view.find('.em-calendar').first(); 2740 } 2741 em_calendar_init( calendar ); 2742 }); 2743}); 2744 2745let EM_View_Updater = function( element, html ){ 2746 let content = jQuery(html); 2747 let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container'); 2748 if( view.length > 0 ){ 2749 if( content.hasClass('em-view-container') ){ 2750 view.replaceWith(content); 2751 view = content; 2752 }else{ 2753 view.empty().append(content); 2754 } 2755 }else{ 2756 // create a view if possible 2757 if( content.hasClass('em-view-container') ){ 2758 element.replaceWith(content); 2759 view = content; 2760 }else if( content.attr('data-view-id') ){ 2761 let view = jQuery('<div class="em em-view-container"></div>'); 2762 let view_id = content.attr('data-view-id'); 2763 view.attr('data-view-id', view_id); 2764 view.attr('id', 'em-view-'+ view_id); 2765 view.attr('data-view-type', content.attr('data-view-type')); 2766 view.append(content); 2767 element.replaceWith(view); 2768 } 2769 } 2770 return view; 2771} 2772 2773/** 2774 * 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. 2775 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met. 2776 * @param breakpoints 2777 * @param elements 2778 * @constructor 2779 */ 2780let EM_ResizeObserver = function( breakpoints, elements ){ 2781 const ro = new ResizeObserver( function( entries ){ 2782 for (let entry of entries) { 2783 let el = entry.target; 2784 if( !el.classList.contains('size-fixed') ) { 2785 for (const [name, breakpoint] of Object.entries(breakpoints)) { 2786 if (el.offsetWidth <= breakpoint || breakpoint === false) { 2787 for (let breakpoint_name of Object.keys(breakpoints)) { 2788 if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name); 2789 } 2790 el.classList.add('size-' + name); 2791 break; 2792 } 2793 } 2794 } 2795 } 2796 });
2797 elements.forEach( function( el ){ 2798 if( typeof el !== 'undefined' ){ 2799 ro.observe(el); 2800 } 2801 }); 2802 return ro; 2803}; 2804 2805// event list and event page (inc. some extra booking form logic) - todo/cleanup 2806jQuery(document).ready( function($){ 2807 // Events List 2808 let breakpoints = { 2809 'small' : 600, 2810 'large' : false, 2811 } 2812 const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() ); 2813 $(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){ 2814 let new_elements = view.find('.em-list').each( function(){ 2815 if( !this.classList.contains('size-fixed') ){ 2816 events_ro.observe( this ); 2817 } 2818 }); 2819 }); 2820 2821 $(document).on('click', '.em-grid .em-item[data-href]', function(e){ 2822 if( e.target.type !== 'a' ){ 2823 window.location.href = this.getAttribute('data-href'); 2824 } 2825 }); 2826 2827 // Single event area 2828 breakpoints = { 2829 'small' : 600, 2830 'medium' : 900, 2831 'large' : false, 2832 } 2833 const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() ); 2834 $(document).on('em_view_loaded', function( e, view ){ 2835 let new_elements = view.find('.em-event-single').each( function(){ 2836 if( !this.classList.contains('size-fixed') ){ 2837 event_ro.observe( this ); 2838 } 2839 }); 2840 }); 2841 // booking form area (WIP) 2842 $(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){ 2843 e.preventDefault(); 2844 var parent = $(this).closest('.em-event-booking-form'); 2845 parent.find('.em-login-trigger').hide(); 2846 parent.find('.em-login-content').fadeIn(); 2847 let login_form = parent.find('.em-login'); 2848 login_form[0].scrollIntoView({ 2849 behavior: 'smooth' 2850 }); 2851 login_form.first().find('input[name="log"]').focus(); 2852 2853 }); 2854 $(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){ 2855 e.preventDefault(); 2856 let parent = $(this).closest('.em-event-booking-form'); 2857 parent.find('.em-login-content').hide(); 2858 parent.find('.em-login-trigger').show(); 2859 }); 2860 EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray()); 2861 2862}); 2863 2864// handle generic ajax submission forms vanilla style 2865document.addEventListener('DOMContentLoaded', function () { 2866 document.querySelectorAll('form.em-ajax-form').forEach( function(el){ 2867 el.addEventListener('submit', function(e){ 2868 e.preventDefault(); 2869 let form = e.currentTarget; 2870 let formData = new FormData(form); 2871 let button = form.querySelector('button[type="submit"]'); 2872 let loader; 2873 2874 if( form.classList.contains('no-overlay-spinner') ){ 2875 form.classList.add('loading'); 2876 }else{ 2877 let loader = document.createElement('div'); 2878 loader.id = 'em-loading'; 2879 form.append(loader); 2880 } 2881 2882 var request = new XMLHttpRequest(); 2883 if( form.getAttribute('data-api-url') ){ 2884 request.open('POST', form.getAttribute('data-api-url'), true); 2885 request.setRequestHeader('X-WP-Nonce', EM.api_nonce); 2886 }else{ 2887 request.open('POST', EM.ajaxurl, true); 2888 } 2889 2890 request.onload = function() { 2891 if( loader ) loader.remove(); 2892 if (this.status >= 200 && this.status < 400) { 2893 // Success! 2894 try { 2895 let data = JSON.parse(this.response); 2896 let notice; 2897 if( !form.classList.contains('no-inline-notice') ){ 2898 notice = form.querySelector('.em-notice'); 2899 if( !notice ){ 2900 notice = document.createElement('li'); 2901 form.prepend(notice); 2902 if( formData.get('action') ){ 2903 form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), { 2904 detail : { 2905 form : form, 2906 notice : notice, 2907 response : data, 2908 } 2909 }) ); 2910 } 2911 } 2912 notice.innerHTML = ''; 2913 notice.setAttribute('class', 'em-notice'); 2914 } 2915 if( data.result ){ 2916 if( !form.classList.contains('no-inline-notice') ){ 2917 notice.classList.add('em-notice-success'); 2918 notice.innerHTML = data.message; 2919 form.replaceWith(notice); 2920 }else{ 2921 form.classList.add('load-successful'); 2922 form.classList.remove('loading'); 2923 if( data.message ){ 2924 EM_Alert(data.message); 2925 } 2926 } 2927 }else{ 2928 if( !form.classList.contains('no-inline-notice') ){ 2929 notice.classList.add('em-notice-error'); 2930 notice.innerHTML = data.errors; 2931 }else{ 2932 EM_Alert(data.errors); 2933 } 2934 } 2935 } catch(e) { 2936 alert( 'Error Encountered : ' + e); 2937 } 2938 } else { 2939 alert('Error encountered... please see debug logs or contact support.'); 2940 } 2941 form.classList.remove('loading'); 2942 }; 2943 2944 request.onerror = function() {
2945 alert('Connection error encountered... please see debug logs or contact support.'); 2946 }; 2947 2948 request.send( formData ); 2949 return false; 2950 }); 2951 }); 2952}); 2953 2954function EM_Alert( content ){ 2955 // find the alert modal, create if not 2956 let modal = document.getElementById('em-alert-modal'); 2957 if( modal === null ){ 2958 modal = document.createElement('div'); 2959 modal.setAttribute('class', "em pixelbones em-modal"); 2960 modal.id = 'em-alert-modal'; 2961 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>'; 2962 document.body.append(modal); 2963 } 2964 document.getElementById('em-alert-modal-content').innerHTML = content; 2965 openModal(modal); 2966}; 2967 2968/*! 2969 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/ 2970 * Did a search/replace of timepicker to em_timepicker to prevent conflicts. 2971 */ 2972(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}function _objectSpread2(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _createForOfIteratorHelper(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray(o))){var i=0;var F=function(){};return{s:F,n:function(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var it,normalCompletion=true,didErr=false,err;return{s:function(){it=o[Symbol.iterator]()},n:function(){var step=it.next();normalCompletion=step.done;return step},e:function(e){didErr=true;err=e},f:function(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}var ONE_DAY=86400;var roundingFunction=function roundingFunction(seconds,settings){if(seconds===null){return null}else if(typeof settings.step!=="number"){return seconds}else{var offset=seconds%(settings.step*60);
2972var 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)))}}var selectTimeEvent=new Event("selectTime");if(this.selectedValue!=value){this.selectedValue=value;var changeTimeEvent=new Event("changeTime");
2972var 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(settings.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;
2972if(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>settings.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;
2972if(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;
2972if(_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
2972))}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})})(); 2973 2974/* flatpickr v4.6.13,, @license MIT */�
vendor: 50,641 bytes, lines 2974-2975
2974 2975!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,346 bytes, lines 2975-2976
2975 2976(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;
2976index<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}); 2977 2978// tippy.js 2979// popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core 2980!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),o=1,i=1;if(r(e)&&t){var a=e.offsetHeight,f=e.offsetWidth;f>0&&(o=s(n.width)/f||1),a>0&&(i=s(n.height)/a||1)}return{width:n.width/o,height:n.height/i,top:n.top/i,right:n.right/o,bottom:n.bottom/i,left:n.left/o,x:n.left/o,y:n.top/i}}function c(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function u(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function l(e){return f(u(e)).left+c(e).scrollLeft}function d(e){return t(e).getComputedStyle(e)}function h(e){var t=d(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function m(e,n,o){void 0===o&&(o=!1);var i,a,d=r(n),m=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),v=u(n),g=f(e,m),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(d||!d&&!o)&&(("body"!==p(n)||h(v))&&(y=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:c(i)),r(n)?((b=f(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=l(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function v(e){var t=f(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function g(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||u(e)}function y(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:r(e)&&h(e)?e:y(g(e))}function b(e,n){var r;void 0===n&&(n=[]);var o=y(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualVie
vendor: 4,539 bytes, line 2980
2980wport||[],h(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(b(g(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function w(e){return r(e)&&"fixed"!==d(e).position?e.offsetParent:null}function O(e){for(var n=t(e),i=w(e);i&&x(i)&&"static"===d(i).position;)i=w(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===d(i).position)?n:i||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&r(e)&&"fixed"===d(e).position)return null;var n=g(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(p(n))<0;){var i=d(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var j="top",E="bottom",D="right",A="left",L="auto",P=[j,E,D,A],M="start",k="end",W="viewport",B="popper",H=P.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+k])}),[]),T=[].concat(P,[L]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+k])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function S(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function q(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function V(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function N(e,r){return r===W?V(function(e){var n=t(e),r=u(e),o=n.visualViewport,i=r.clientWidth,a=r.clientHeight,s=0,f=0;return o&&(i=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=o.offsetLeft,f=o.offsetTop)),{width:i,height:a,x:s+l(e),y:f}}(e)):n(r)?function(e){var t=f(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(r):V(function(e){var t,n=u(e),r=c(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+l(e),p=-r.scrollTop;return"rtl"===d(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:p}}(u(e)))}function I(e,t,o){var s="clippingParents"===t?function(e){var t=b(g(e)),o=["absolute","fixed"].indexOf(d(e).position)>=0&&r(e)?O(e):e;return n(o)?t.filter((function(e){return n(e)&&q(e,o)&&"body"!==p(e)})):[]}(e):[].concat(t),f=[].concat(s,[o]),c=f[0],u=f.reduce((function(t,n){var r=N(e,n);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),N(e,c));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function _(e){return e.split("-")[1]}function F(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function U(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?_(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case j:t={x:s,y:n.y-r.height};break;case E:t={x:s,y:n.y+n.height};break;case D:t={x:n.x+n.width,y:f};break;case A:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?F(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case M:t[c]=t[c]-(n[p]/2-r[p]/2);break;case k:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function z(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function X(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Y(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.boundary,s=void 0===a?"clippingParents":a,c=r.rootBoundary,p=void 0===c?W:c,l=r.elementContext,d=void 0===l?B:l,h=r.altBoundary,m=void 0!==h&&h,v=r.padding,g=void 0===v?0:v,y=z("number"!=typeof g?g:X(g,P)),b=d===B?"reference":B,x=e.rects.popper,w=e.elements[m?b:d],O=I(n(w)?w:w.contextElement||u(e.elements.popper),s,p),A=f(e.elements.reference),L=U({reference:A,element:x,strategy:"absolute",placement:i}),M=V(Object.assign({},x,L)),k=d===B?M:A,H={top:O.top-k.top+y.top,bottom:k.bottom-O.bottom+y.bottom,left:O.left-k.left+y.left,right:k.right-O.right+y.right},T=e.modifiersData.offset;if(d===B&&T){var R=T[i];
vendor: 12,767 bytes, lines 2980-2981
2980Object.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})})); 2981// tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs
vendor: 25,667 bytes, line 2982
2982!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}));
vendor: 6,389 bytes, lines 2982-2985
2982 2983 2984/*! selectize.js - v0.13.5 | https://github.com/selectize/selectize.js | Apache License (v2) */ 2985!function(root,factory){"function"==typeof define&&define.amd?define("sifter",factory):"object"==typeof exports?module.exports=factory():root.Sifter=factory()}(this,function(){function Sifter(items,settings){this.items=items,this.settings=settings||{diacritics:!0}}Sifter.prototype.tokenize=function(query,respect_word_boundaries){if(!(query=trim(String(query||"").toLowerCase()))||!query.length)return[];for(var regex,letter,tokens=[],words=query.split(/ +/),i=0,n=words.length;i<n;i++){if(regex=escape_regex(words[i]),this.settings.diacritics)for(letter in DIACRITICS)DIACRITICS.hasOwnProperty(letter)&&(regex=regex.replace(new RegExp(letter,"g"),DIACRITICS[letter]));respect_word_boundaries&&(regex="\\b"+regex),tokens.push({string:words[i],regex:new RegExp(regex,"i")})}return tokens},Sifter.prototype.iterator=function(object,callback){var iterator=is_array(object)?Array.prototype.forEach||function(callback){for(var i=0,n=this.length;i<n;i++)callback(this[i],i,this)}:function(callback){for(var key in this)this.hasOwnProperty(key)&&callback(this[key],key,this)};iterator.apply(object,[callback])},Sifter.prototype.getScoreFunction=function(search,options){function scoreValue(value,token){var pos;return!value||-1===(pos=(value=String(value||"")).search(token.regex))?0:(token=token.string.length/value.length,0===pos&&(token+=.5),token)}var field_count,tokens=(search=this.prepareSearch(search,options)).tokens,fields=search.options.fields,token_count=tokens.length,nesting=search.options.nesting,scoreObject=(field_count=fields.length)?1===field_count?function(token,data){return scoreValue(getattr(data,fields[0],nesting),token)}: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}:function(){return 0};return token_count?1===token_count?function(data){return scoreObject(tokens[0],data)}:"and"===search.options.conjunction?function(data){for(var score,i=0,sum=0;i<token_count;i++){if((score=scoreObject(tokens[i],data))<=0)return 0;sum+=score}return sum/token_count}:function(data){for(var i=0,sum=0;i<token_count;i++)sum+=scoreObject(tokens[i],data);return sum/token_count}:function(){return 0}},Sifter.prototype.getSortFunction=function(search,options){var i,n,field,fields_count,multiplier,multipliers,implicit_score,self=this,sort=!(search=self.prepareSearch(search,options)).query&&options.sort_empty||options.sort,get_field=function(name,result){return"$score"===name?result.score:getattr(self.items[result.id],name,options.nesting)},fields=[];if(sort)for(i=0,n=sort.length;i<n;i++)!search.query&&"$score"===sort[i].field||fields.push(sort[i]);if(search.query){for(implicit_score=!0,i=0,n=fields.length;i<n;i++)if("$score"===fields[i].field){implicit_score=!1;break}implicit_score&&fields.unshift({field:"$score",direction:"desc"})}else for(i=0,n=fields.length;i<n;i++)if("$score"===fields[i].field){fields.splice(i,1);break}for(multipliers=[],i=0,n=fields.length;i<n;i++)multipliers.push("desc"===fields[i].direction?-1:1);return(fields_count=fields.length)?1===fields_count?(field=fields[0].field,multiplier=multipliers[0],function(a,b){return multiplier*cmp(get_field(field,a),get_field(field,b))}):function(a,b){for(var field,i=0;i<fields_count;i++)if(field=fields[i].field,field=multipliers[i]*cmp(get_field(field,a),get_field(field,b)))return field;return 0}:null},Sifter.prototype.prepareSearch=function(query,options){if("object"==typeof query)return query;var option_fields=(options=extend({},options)).fields,option_sort=options.sort,option_sort_empty=options.sort_empty;return option_fields&&!is_array(option_fields)&&(options.fields=[option_fields]),option_sort&&!is_array(option_sort)&&(options.sort=[option_sort]),option_sort_empty&&!is_array(option_sort_empty)&&(options.sort_empty=[option_sort_empty]),{options:options,query:String(query||"").toLowerCase(),tokens:this.tokenize(query,options.respect_word_boundaries),total:0,items:[]}},Sifter.prototype.search=function(query,options){var score,fn_score,search=this.prepareSearch(query,options);return options=search.options,query=search.query,fn_score=options.score||this.getScoreFunction(search),query.length?this.iterator(this.items,function(item,id){score=fn_score(item),(!1===options.filter||0<score)&&search.items.push({score:score,id:id})}):this.iterator(this.items,function(item,id){search.items.push({score:1,id:id})}),(query=this.getSortFunction(search,options))&&search.items.sort(query),search.total=search.items.length,"number"==typeof options.limit&&(search.items=search.items.slice(0,options.limit)),search};var cmp=function(a,b){return"number"==typeof a&&"number"==typeof b?b<a?1:a<b?-1:0:(a=asciifold(String(a||"")),(b=asciifold(String(b||"")))<a?1:a<b?-1:0)},extend=function(a,b){for(var k,object,i=1,n=arguments.length;i<n;i++)if(object=arguments[i])for(k in object)object.hasOwnProperty(k)&&(a[k]=object[k]);return a},getattr=function(obj,name,nesting){if(obj&&name){if(!nesting)return obj[name];for(var names=name.split(".");names.length&&(obj=obj[names.shift()]););return obj}},trim=function(str){return(str+"").replace(/^\s+|\s+$|/g,"")},escape_regex=function(str){return(str+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")},is_array=Array.isArray||"undefined"!=typeof $&&$.isArray||function(object){return"[object Array]"===Object.prototype.toString.call(object)},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ÃøÃöÃóÃòÃôÇÇÅÅÅÅȮȯá»á»ÆÉµÆ Æ¡á»á»ÅÅ
2985ÃõǪǫÈÈÕÖ
]",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ŹźáºáºÅ½Å¾Å»Å¼áºáºáºáºÆµÆ¶]"},asciifold=function(){var i,n,k,chunk,foreignletters="",lookup={};for(k in DIACRITICS)if(DIACRITICS.hasOwnProperty(k))for(foreignletters+=chunk=DIACRITICS[k].substring(2,DIACRITICS[k].length-1),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()}}();return Sifter}),function(root,factory){"function"==typeof define&&define.amd?define("microplugin",factory):"object"==typeof exports?module.exports=factory():root.MicroPlugin=factory()}(this,function(){var MicroPlugin={mixin:function(Interface){Interface.plugins={},Interface.prototype.initializePlugins=function(plugins){var i,n,key,queue=[];if(this.plugins={names:[],settings:{},requested:{},loaded:{}},utils.isArray(plugins))for(i=0,n=plugins.length;i<n;i++)"string"==typeof plugins[i]?queue.push(plugins[i]):(this.plugins.settings[plugins[i].name]=plugins[i].options,queue.push(plugins[i].name));else if(plugins)for(key in plugins)plugins.hasOwnProperty(key)&&(this.plugins.settings[key]=plugins[key],queue.push(key));for(;queue.length;)this.require(queue.shift())},Interface.prototype.loadPlugin=function(name){var plugins=this.plugins,plugin=Interface.plugins[name];if(!Interface.plugins.hasOwnProperty(name))throw new Error('Unable to find "'+name+'" plugin');plugins.requested[name]=!0,plugins.loaded[name]=plugin.fn.apply(this,[this.plugins.settings[name]||{}]),plugins.names.push(name)},Interface.prototype.require=function(name){var plugins=this.plugins;if(!this.plugins.loaded.hasOwnProperty(name)){if(plugins.requested[name])throw new Error('Plugin has circular dependency ("'+name+'")');this.loadPlugin(name)}return plugins.loaded[name]},Interface.define=function(name,fn){Interface.plugins[name]={name:name,fn:fn}}}},utils={isArray:Array.isArray||function(vArg){return"[object Array]"===Object.prototype.toString.call(vArg)}};return MicroPlugin}),function(root,factory){"function"==typeof define&&define.amd?define("selectize",["jquery","sifter","microplugin"],factory):"object"==typeof module&&"object"==typeof module.exports?module.exports=factory(require("jquery"),require("sifter"),require("microplugin")):root.Selectize=factory(root.jQuery,root.Sifter,root.MicroPlugin)}(this,function($,Sifter,MicroPlugin){"use strict";function MicroEvent(){}$.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()};function isset(object){return void 0!==object}function hash_key(value){return null==value?null:"boolean"==typeof value?value?"1":"0":value+""}function escape_html(str){return(str+"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function debounce_events(self,types,fn){var type,trigger=self.trigger,event_args={};for(type in self.trigger=function(){var type=arguments[0];if(-1===types.indexOf(type))return trigger.apply(self,arguments);event_args[type]=arguments},fn.apply(self,[]),self.trigger=trigger,event_args)event_args.hasOwnProperty(type)&&trigger.apply(self,event_args[type])}function getSelection(input){var sel,selLen,result={};return void 0===input?console.warn("WARN getSelection cannot locate input control"):"selectionStart"in input?(result.start=input.selectionStart,result.length=input.selectionEnd-result.start):document.selection&&(input.focus(),sel=document.selection.createRange(),selLen=document.selection.createRange().text.length,sel.moveStart("character",-input.value.length),result.start=sel.text.length-selLen,result.length=selLen),result}function measureString(str,$parent){return str?(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"]),Selectize.$testInput.width()):0}function autoGrow($input){function update(e,options){var printable,keyCode,selection;options=options||{},(e=e||window.event||{}).metaKey||e.altKey||!options.force&&!1===$input.data("grow")||(options=$input.val(),e.type&&"keydown"===e.type.toLowerCase()&&(printable=48<=(keyCode=e.keyCode)&&keyCode<=57||65<=keyCode&&keyCode<=90||96<=keyCode&&keyCode<=111||186<=keyCode&&keyCode<=222||32===keyCode,46===keyCode||8===keyCode?(selection=getSelection($input[0])).length?options=options.substring(0,selection.start)+options.substring(selection.start+selection.length):8===keyCode&&selection.start?options=options.substring(0,selection.start-1)+options.substring(selection.start+1):46===keyCode&&void 0!==selection.start&&(options=options.substring(0,selection.start)+options.substring(selection.start+1)):printable&&(keyCode=e.shiftKey,selection=String.fromCharCode(e.keyCode),options+=selection=keyCode?selection.toUpperCase():selection.toLowerCase())),e=(printable=$input.attr("placeholder"))?measureString(printable,$input)+4:0,(keyCode=Math.max(measureString(options,$input),e)+4)!==currentWidth&&(currentWidth=keyCode,$input.width(keyCode),$input.triggerHandler("resize")))}var currentWidth=null;
2985$input.on("keydown keyup update blur",update),update()}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;return 0===n?delete this._events:1===n?delete this._events[event]:(this._events=this._events||{},void(event in this._events!=!1&&this._events[event].splice(this._events[event].indexOf(fct),1)))},trigger:function(event){if(this._events=this._events||{},event in this._events!=!1)for(var i=0;i<this._events[event].length;i++)this._events[event][i].apply(this,Array.prototype.slice.call(arguments,1))}},MicroEvent.mixin=function(destObject){for(var props=["on","off","trigger"],i=0;i<props.length;i++)destObject.prototype[props[i]]=MicroEvent.prototype[props[i]]};var options,IS_MAC=/Mac/.test(navigator.userAgent),KEY_CMD=IS_MAC?91:17,KEY_CTRL=IS_MAC?18:17,SUPPORTS_VALIDITY_API=!/android/i.test(window.navigator.userAgent)&&!!document.createElement("input").validity,hook={before:function(self,method,fn){var original=self[method];self[method]=function(){return fn.apply(self,arguments),original.apply(self,arguments)}},after:function(self,method,fn){var original=self[method];self[method]=function(){var result=original.apply(self,arguments);return fn.apply(self,arguments),result}}},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)},Selectize=function($input,settings){var i,n,fn,delay,timeout,input=$input[0],computedStyle=(input.selectize=this,window.getComputedStyle&&window.getComputedStyle(input,null));if(computedStyle=(computedStyle?computedStyle.getPropertyValue("direction"):input.currentStyle&&input.currentStyle.direction)||$input.parents("[dir]:first").attr("dir")||"",$.extend(this,{order:0,settings:settings,$input:$input,tabIndex:$input.attr("tabindex")||"",tagType:"select"===input.tagName.toLowerCase()?1:2,rtl:/rtl/i.test(computedStyle),eventNS:".selectize"+ ++Selectize.count,highlightedValue:null,isBlurring:!1,isOpen:!1,isDisabled:!1,isRequired:$input.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",lastValidValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===settings.loadThrottle?this.onSearchChange:(fn=this.onSearchChange,delay=settings.loadThrottle,function(){var self=this,args=arguments;window.clearTimeout(timeout),timeout=window.setTimeout(function(){fn.apply(self,args)},delay)})}),this.sifter=new Sifter(this.options,{diacritics:settings.diacritics}),this.settings.options){for(i=0,n=this.settings.options.length;i<n;i++)this.registerOption(this.settings.options[i]);delete this.settings.options}if(this.settings.optgroups){for(i=0,n=this.settings.optgroups.length;i<n;i++)this.registerOptionGroup(this.settings.optgroups[i]);delete this.settings.optgroups}this.settings.mode=this.settings.mode||(1===this.settings.maxItems?"single":"multi"),"boolean"!=typeof this.settings.hideSelected&&(this.settings.hideSelected="multi"===this.settings.mode),this.initializePlugins(this.settings.plugins),this.setupCallbacks(),this.setupTemplates(),this.setup()};return MicroEvent.mixin(Selectize),void 0!==MicroPlugin?MicroPlugin.mixin(Selectize):(MicroPlugin="Dependency MicroPlugin is missing",options=(options={explanation:'Make sure you either: (1) are using the "standalone" version of Selectize, or (2) require MicroPlugin before you load Selectize.'})||{},console.error("Selectize: "+MicroPlugin),options.explanation&&(console.group&&console.group(),console.error(options.explanation),console.group&&console.groupEnd())),$.extend(Selectize.prototype,{setup:function(){var $parent,inputId,fn,self=this,settings=self.settings,eventNS=self.eventNS,$window=$(window),$document=$(document),$input
2985=self.$input,inputMode=self.settings.mode,classes=$input.attr("class")||"",$wrapper=$("<div>").addClass(settings.wrapperClass).addClass(classes).addClass(inputMode),$control=$("<div>").addClass(settings.inputClass).addClass("items").appendTo($wrapper),$control_input=$('<input type="text" autocomplete="new-password" autofill="no" />').appendTo($control).attr("tabindex",$input.is(":disabled")?"-1":self.tabIndex),$dropdown_parent=$(settings.dropdownParent||$wrapper),inputMode=$("<div>").addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent),$dropdown_parent=$("<div>").addClass(settings.dropdownContentClass).attr("tabindex","-1").appendTo(inputMode);(inputId=$input.attr("id"))&&($control_input.attr("id",inputId+"-selectized"),$("label[for='"+inputId+"']").attr("for",inputId+"-selectized")),self.settings.copyClassesToDropdown&&inputMode.addClass(classes),$wrapper.css({width:$input[0].style.width}),self.plugins.names.length&&(inputId="plugin-"+self.plugins.names.join(" plugin-"),$wrapper.addClass(inputId),inputMode.addClass(inputId)),(null===settings.maxItems||1<settings.maxItems)&&1===self.tagType&&$input.attr("multiple","multiple"),self.settings.placeholder&&$control_input.attr("placeholder",settings.placeholder),!self.settings.splitOn&&self.settings.delimiter&&(classes=self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),self.settings.splitOn=new RegExp("\\s*"+classes+"+\\s*")),$input.attr("autocorrect")&&$control_input.attr("autocorrect",$input.attr("autocorrect")),$input.attr("autocapitalize")&&$control_input.attr("autocapitalize",$input.attr("autocapitalize")),$input.is("input")&&($control_input[0].type=$input[0].type),self.$wrapper=$wrapper,self.$control=$control,self.$control_input=$control_input,self.$dropdown=inputMode,self.$dropdown_content=$dropdown_parent,inputMode.on("mouseenter mousedown click","[data-disabled]>[data-selectable]",function(e){e.stopImmediatePropagation()}),inputMode.on("mouseenter","[data-selectable]",function(){return self.onOptionHover.apply(self,arguments)}),inputMode.on("mousedown click","[data-selectable]",function(){return self.onOptionSelect.apply(self,arguments)}),inputId="mousedown",classes="*:not(input)",fn=function(){return self.onItemSelect.apply(self,arguments)},($parent=$control).on(inputId,classes,function(e){for(var child=e.target;child&&child.parentNode!==$parent[0];)child=child.parentNode;return e.currentTarget=child,fn.apply(this,[e])}),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){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,[])},blur:function(){return self.onBlur.apply(self,arguments)},focus:function(){return self.ignoreBlur=!1,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){e.keyCode===KEY_CTRL&&(self.isCtrlDown=!1),16===e.keyCode&&(self.isShiftDown=!1),e.keyCode===KEY_CMD&&(self.isCmdDown=!1)}),$document.on("mousedown"+eventNS,function(e){if(self.isFocused){if(e.target===self.$dropdown[0]||e.target.parentNode===self.$dropdown[0])return!1;self.$control.has(e.target).length||e.target===self.$control[0]||self.blur(e.target)}}),$window.on(["scroll"+eventNS,"resize"+eventNS].join(" "),function(){self.isOpen&&self.positionDropdown.apply(self,arguments)}),$window.on("mousemove"+eventNS,function(){self.ignoreHover=!1}),this.revertSettings={$children:$input.children().detach(),tabindex:$input.attr("tabindex")},$input.attr("tabindex",-1).hide().after(self.$wrapper),Array.isArray(settings.items)&&(self.lastValidValue=settings.items,self.setValue(settings.items),delete settings.items),SUPPORTS_VALIDITY_API&&$input.on("invalid"+eventNS,function(e){e.preventDefault(),self.isInvalid=!0,self.refreshState()}),self.updateOriginalInput(),self.refreshItems(),self.refreshState(),self.updatePlaceholder(),self.isSetup=!0,$input.is(":disabled")&&self.disable(),self.on("change",this.onChange),$input.data("selectize",self),$input.addClass("selectized"),self.trigger("initialize"),!0===settings.preload&&self.onSearchChange("")},setupTemplates:function(){var field_label=this.settings.labelField,field_value=this.settings.valueField,field_optgroup=this.settings.optgroupLabelField;this.settings.render=$.extend({},{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){return'<div class="option '+(""===data[field_value]?"selectize-dropdown-emptyoptionlabel":"")+'">'+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>"}},this.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)callbacks.hasOwnProperty(key)&&(fn=this.settings[callbacks[key]])&&this.on(key,fn)},onClick:function(e){this.isFocused&&this.isOpen||(this.focus(),e.preventDefault())},onMouseDown:function(e){var self=this,defaultPrevented=e.isDefaultPrevented();$(e.target);if(self.isFocused){if(e.target!==self.$control_input[0])return"single"===self.settings.mode?self.isOpen?self.close():self.open():defaultPrevented||self.setActiveItem(null),!1}else defaultPrevented||window.setTimeout(function(){self.focus()},0)},onChange:function(){""!==this.getValue()&&(this.lastValidValue=this.getValue()),this.$input.trigger("input"),this.$input.trigger("change")},onPaste:function(e){var self=this;self.isFull()||self.isInputHidden||self.isLocked?e.preventDefault():self.settings.splitOn&&setTimeout(function(){var pastedText=self.$control_input.val();if(pastedText.match(self.settings.splitOn))for(var splitInput=pastedText.trim().split(self.settings.splitOn),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);return this.settings.create&&"multi"===this.settings.mode&&character===this.settings.delimiter?(this.createItem(),e.preventDefault(),!1):void 0},onKeyDown:function(e){var $next;e.target,this.$control_input[0];if(this.isLocked)9!==e.keyCode&&e.preventDefault();else{switch(e.keyCode){case 65:if(this.isCmdDown)return void this.selectAll();break;case 27:return void(this.isOpen&&(e.preventDefault(),e.stopPropagation(),this.close()));case 78:if(!e.ctrlKey||e.altKey)break;case 40:return!this.isOpen&&this.hasOptions?this.open():this.$activeOption&&(this.ignoreHover=!0,($next=this.getAdjacentOption(this.$activeOption,1)).length&&this.setActiveOption($next,!0,!0)),void e.preventDefault();case 80:if(!e.ctrlKey||e.altKey)break;case 38:return this.$activeOption&&(this.ignoreHover=!0,($next=this.getAdjacentOption(this.$activeOption,-1)).length&&this.setActiveOption($next,!0,!0)),void e.preventDefault();case 13:return void(this.isOpen&&this.$activeOption&&(this.onOptionSelect({currentTarget:this.$activeOption}),e.preventDefault()));case 37:return void this.advanceSelection(-1,e);case 39:return void this.advanceSelection(1,e);case 9:return this.settings.selectOnTab&&this.isOpen&&this.$activeOption&&(this.onOptionSelect({currentTarget:this.$activeOption}),this.isFull()||e.preventDefault()),void(this.settings.create&&this.createItem()&&this.settings.showAddOptionOnCreate&&e.preventDefault());case 8:case 46:return void this.deleteSelection(e)}!this.isFull()&&!this.isInputHidden||(IS_MAC?e.metaKey:e.ctrlKey)||e.preventDefault()}},onInput:function(e){var value=this.$control_input.val()||"";this.lastValue!==value&&(this.lastValue=value,this.onSearchChange(value),this.refreshOptions(),this.trigger("type",value))},onSearchChange:function(value){var self=this,fn=self.settings.load;fn&&!self.loadedSearches.hasOwnProperty(value)&&(self.loadedSearches[value]=!0,self.load(function(callback){fn.apply(self,[value,callback])}))},onFocus:function(e){var wasFocused=this.isFocused;if(this.isDisabled)return this.blur(),e&&e.preventDefault(),!1;
2985this.ignoreFocus||(this.isFocused=!0,"focus"===this.settings.preload&&this.onSearchChange(""),wasFocused||this.trigger("focus"),this.$activeItems.length||(this.showInput(),this.setActiveItem(null),this.refreshOptions(!!this.settings.openOnFocus)),this.refreshState())},onBlur:function(e,dest){var self=this;if(self.isFocused&&(self.isFocused=!1,!self.ignoreFocus)){if(!self.ignoreBlur&&document.activeElement===self.$dropdown_content[0])return self.ignoreBlur=!0,void self.onFocus(e);e=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=!1,self.ignoreFocus=!1,self.trigger("blur")};self.isBlurring=!0,self.ignoreFocus=!0,self.settings.create&&self.settings.createOnBlur?self.createItem(null,!1,e):e()}},onOptionHover:function(e){this.ignoreHover||this.setActiveOption(e.currentTarget,!1)},onOptionSelect:function(e){var $target,self=this;e.preventDefault&&(e.preventDefault(),e.stopPropagation()),($target=$(e.currentTarget)).hasClass("create")?self.createItem(null,function(){self.settings.closeAfterSelect&&self.close()}):void 0!==($target=$target.attr("data-value"))&&(self.lastQuery=null,self.setTextboxValue(""),self.addItem($target),self.settings.closeAfterSelect?self.close():!self.settings.hideSelected&&e.type&&/mouse/.test(e.type)&&self.setActiveOption(self.getOption($target)))},onItemSelect:function(e){this.isLocked||"multi"===this.settings.mode&&(e.preventDefault(),this.setActiveItem(e.currentTarget,e))},load:function(fn){var self=this,$wrapper=self.$wrapper.addClass(self.settings.loadingClass);self.loading++,fn.apply(self,[function(results){self.loading=Math.max(self.loading-1,0),results&&results.length&&(self.addOption(results),self.refreshOptions(self.isFocused&&!self.isInputHidden)),self.loading||$wrapper.removeClass(self.settings.loadingClass),self.trigger("load",results)}])},getTextboxValue:function(){return this.$control_input.val()},setTextboxValue:function(value){var $input=this.$control_input;$input.val()!==value&&($input.val(value).triggerHandler("update"),this.lastValue=value)},getValue:function(){return 1===this.tagType&&this.$input.attr("multiple")?this.items:this.items.join(this.settings.delimiter)},setValue:function(value,silent){debounce_events(this,silent?[]:["change"],function(){this.clear(silent),this.addItems(value,silent)})},setMaxItems:function(value){this.settings.maxItems=value=0===value?null:value,this.settings.mode=this.settings.mode||(1===this.settings.maxItems?"single":"multi"),this.refreshState()},setActiveItem:function($item,e){var eventName,i,end,item,swap,$last;if("single"!==this.settings.mode){if(!($item=$($item)).length)return $(this.$activeItems).removeClass("active"),this.$activeItems=[],void(this.isFocused&&this.showInput());if("mousedown"===(eventName=e&&e.type.toLowerCase())&&this.isShiftDown&&this.$activeItems.length){for($last=this.$control.children(".active:last"),$last=Array.prototype.indexOf.apply(this.$control[0].childNodes,[$last[0]]),(end=Array.prototype.indexOf.apply(this.$control[0].childNodes,[$item[0]]))<$last&&(swap=$last,$last=end,end=swap),i=$last;i<=end;i++)item=this.$control[0].childNodes[i],-1===this.$activeItems.indexOf(item)&&($(item).addClass("active"),this.$activeItems.push(item));e.preventDefault()}else"mousedown"===eventName&&this.isCtrlDown||"keydown"===eventName&&this.isShiftDown?$item.hasClass("active")?(swap=this.$activeItems.indexOf($item[0]),this.$activeItems.splice(swap,1),$item.removeClass("active")):this.$activeItems.push($item.addClass("active")[0]):($(this.$activeItems).removeClass("active"),this.$activeItems=[$item.addClass("active")[0]]);this.hideInput(),this.isFocused||this.focus()}},setActiveOption:function($option,scroll,animate){var height_item,y,scroll_top,scroll_bottom;this.$activeOption&&(this.$activeOption.removeClass("active"),this.trigger("dropdown_item_deactivate",this.$activeOption.attr("data-value"))),this.$activeOption=null,($option=$($option)).length&&(this.$activeOption=$option.addClass("active"),this.isOpen&&this.trigger("dropdown_item_activate",this.$activeOption.attr("data-value")),!scroll&&isset(scroll)||($option=this.$dropdown_content.height(),height_item=this.$activeOption.outerHeight(!0),scroll=this.$dropdown_content.scrollTop()||0,scroll_bottom=(scroll_top=y=this.$activeOption.offset().top-this.$dropdown_content.offset().top+scroll)-$option+height_item,$option+scroll<y+height_item?this.$dropdown_content.stop().animate({scrollTop:scroll_bottom},animate?this.settings.scrollDuration:0):y<scroll&&this.$dropdown_content.stop().animate({scrollTop:scroll_top},animate?this.settings.scrollDuration:0)))},selectAll:function(){"single"!==this.settings.mode&&(this.$activeItems=Array.prototype.slice.apply(this.$control.children(":not(input)").addClass("active")),this.$activeItems.length&&(this.hideInput(),this.close()),this.focus())},hideInput:function(){this.setTextboxValue(""),this.$control_input.css({opacity:0,position:"absolute",left:this.rtl?1e4:-1e4}),this.isInputHidden=!0},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0}),this.isInputHidden=!1},focus:function(){var self=this;return self.isDisabled||(self.ignoreFocus=!0,self.$control_input[0].focus(),window.setTimeout(function(){self.ignoreFocus=!1,self.onFocus()},0)),self},blur:function(dest){return this.$control_input[0].blur(),this.onBlur(null,dest),this},getScoreFunction:function(query){return this.sifter.getScoreFunction(query,this.get
2985SearchOptions())},getSearchOptions:function(){var settings=this.settings,sort=settings.sortField;return{fields:settings.searchField,conjunction:settings.searchConjunction,sort:sort="string"==typeof sort?[{field:sort}]:sort,nesting:settings.nesting}},search:function(query){var i,result,calculateScore,settings=this.settings,options=this.getSearchOptions();if(settings.score&&"function"!=typeof(calculateScore=this.settings.score.apply(this,[query])))throw new Error('Selectize "score" setting must be a function that returns a function');if(query!==this.lastQuery?(this.lastQuery=query,result=this.sifter.search(query,$.extend(options,{score:calculateScore})),this.currentResults=result):result=$.extend(!0,{},this.currentResults),settings.hideSelected)for(i=result.items.length-1;0<=i;i--)-1!==this.items.indexOf(hash_key(result.items[i].id))&&result.items.splice(i,1);return result},refreshOptions:function(triggerDropdown){void 0===triggerDropdown&&(triggerDropdown=!0);var i,j,k,groups,groups_order,option,option_html,optgroup,optgroups,html,html_children,has_create_option,$active,$create,d,tmp,self=this,query=self.$control_input.val().trim(),results=self.search(query),$dropdown_content=self.$dropdown_content,active_before=self.$activeOption&&hash_key(self.$activeOption.attr("data-value")),n=results.items.length;for("number"==typeof self.settings.maxOptions&&(n=Math.min(n,self.settings.maxOptions)),groups={},groups_order=[],i=0;i<n;i++)for(option=self.options[results.items[i].id],option_html=self.render("option",option),optgroup=option[self.settings.optgroupField]||"",j=0,k=(optgroups=Array.isArray(optgroup)?optgroup:[optgroup])&&optgroups.length;j<k;j++)optgroup=optgroups[j],self.optgroups.hasOwnProperty(optgroup)||(optgroup=""),groups.hasOwnProperty(optgroup)||(groups[optgroup]=document.createDocumentFragment(),groups_order.push(optgroup)),groups[optgroup].appendChild(option_html);for(this.settings.lockOptgroupOrder&&groups_order.sort(function(a,b){return(self.optgroups[a]&&self.optgroups[a].$order||0)-(self.optgroups[b]&&self.optgroups[b].$order||0)}),html=document.createDocumentFragment(),i=0,n=groups_order.length;i<n;i++)optgroup=groups_order[i],self.optgroups.hasOwnProperty(optgroup)&&groups[optgroup].childNodes.length?((html_children=document.createDocumentFragment()).appendChild(self.render("optgroup_header",self.optgroups[optgroup])),html_children.appendChild(groups[optgroup]),html.appendChild(self.render("optgroup",$.extend({},self.optgroups[optgroup],{html:(d=html_children,tmp=void 0,(tmp=document.createElement("div")).appendChild(d.cloneNode(!0)),tmp.innerHTML),dom:html_children})))):html.appendChild(groups[optgroup]);if($dropdown_content.html(html),self.settings.highlight&&($dropdown_content.removeHighlight(),results.query.length&&results.tokens.length))for(i=0,n=results.tokens.length;i<n;i++)!function($element,pattern){var regex,highlight;if("string"!=typeof pattern||pattern.length)regex="string"==typeof pattern?new RegExp(pattern,"i"):pattern,highlight=function(node){var skip=0;if(3===node.nodeType){var spannode,match,pos=node.data.search(regex);0<=pos&&0<node.data.length&&(match=node.data.match(regex),(spannode=document.createElement("span")).className="highlight",(pos=node.splitText(pos)).splitText(match[0].length),match=pos.cloneNode(!0),spannode.appendChild(match),pos.parentNode.replaceChild(spannode,pos),skip=1)}else if(1===node.nodeType&&node.childNodes&&!/(script|style)/i.test(node.tagName)&&("highlight"!==node.className||"SPAN"!==node.tagName))for(var i=0;i<node.childNodes.length;++i)i+=highlight(node.childNodes[i]);return skip},$element.each(function(){highlight(this)})}($dropdown_content,results.tokens[i].regex);if(!self.settings.hideSelected)for(self.$dropdown.find(".selected").removeClass("selected"),i=0,n=self.items.length;i<n;i++)self.getOption(self.items[i]).addClass("selected");(has_create_option=self.canCreate(query))&&self.settings.showAddOptionOnCreate&&($dropdown_content.prepend(self.render("option_create",{input:query})),$create=$($dropdown_content[0].childNodes[0])),self.hasOptions=0<results.items.length||has_create_option&&self.settings.showAddOptionOnCreate,self.hasOptions?(0<results.items.length?(query=active_before&&self.getOption(active_before),""!==results.query&&query&&query.length?$active=query:"single"===self.settings.mode&&self.items.length&&($active=self.getOption(self.items[0])),$active&&$active.length||($active=$create&&!self.settings.addPrecedence?self.getAdjacentOption($create,1):$dropdown_content.find("[data-selectable]:first"))):$active=$create,self.setActiveOption($active),triggerDropdown&&!self.isOpen&&self.open()):(self.setActiveOption(null),triggerDropdown&&self.isOpen&&self.close())},addOption:function(data){var i,n,value;if(Array.isArray(data))for(i=0,n=data.length;i<n;i++)this.addOption(data[i]);else(value=this.registerOption(data))&&(this.userOptions[value]=!0,this.lastQuery=null,this.trigger("option_add",value,data))},registerOption:function(data){var key=hash_key(data[this.settings.valueField]);return null!=key&&!this.options.hasOwnProperty(key)&&(data.$order=data.$order||++this.order,this.options[key]=data,key)},registerOptionGroup:function(data){var key=hash_key(data[this.settings.optgroupValueField]);return!!key&&(data.$order=data.$order||++this.order,this.optgroups[key]=data,key)},addOptionGroup:function(id,data){data[this.settings.optgroupValueField]=id,(id=this.registerOptionGroup(data))&&this.trigger("optgroup_add",id,data)},removeOptionGroup:function(id){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 value_new,index_item,order_old;if(value=hash_key(value),value_new=hash_key(data[this.settings.valueField]),null!==value&&this.options.hasOwnProperty(value)){if("string"!=typeof value_new)throw new Error("Value must be set in option data");order_old=this.options[value].$order,value_new!==value&&(delete this.options[value],-1!==(index_item=this.items.indexOf(value))&&this.items.splice(index_item,1,value_new)),data.$order=data.$order||order_old,this.options[value_new]=data,index_item=this.renderCache.item,order_old=this.renderCache.option,index_item&&(delete index_item[value],delete index_item[value_new]),order_old&&(delete order_old[value],delete order_old[value_new]),-1!==this.items.indexOf(value_new)&&(index_item=this.getItem(value),order_old=$(this.render("item",data)),index_item.hasClass("active")&&order_old.addClass("active"),index_item.replaceWith(order_old)),this.lastQuery=null,this.isOpen&&this.refreshOptions(!1)}},removeOption:function(value,silent){value=hash_key(value);var cache_items=this.renderCache.item,cache_options=this.renderCache.option;cache_items&&delete cache_items[value],cache_options&&delete cache_options[value],delete this.userOptions[value],delete this.options[value],this.lastQuery=null,this.trigger("option_remove",value),this.removeItem(value,silent)},clearOptions:function(silent){var self=this,options=(self.loadedSearches={},self.userOptions={},self.renderCache={},self.options);$.each(self.options,function(key,value){-1==self.items.indexOf(key)&&delete options[key]}
2985),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 0<$options.length?$options.eq(0):$()},getAdjacentOption:function($option,direction){var $options=this.$dropdown.find("[data-selectable]"),$option=$options.index($option)+direction;return 0<=$option&&$option<$options.length?$options.eq($option):$()},getElementWithValue:function(value,$els){if(null!=(value=hash_key(value)))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){if(null!=(textContent=hash_key(textContent)))for(var i=0,n=$els.length;i<n;i++){var eleTextContent=$els[i].textContent;if(1==ignoreCase&&(eleTextContent=null!==eleTextContent?eleTextContent.toLowerCase():null,textContent=textContent.toLowerCase()),eleTextContent===textContent)return $($els[i])}return $()},getItem:function(value){return this.getElementWithValue(value,this.$control.children())},getFirstItemMatchedByTextContent:function(textContent,ignoreCase){return this.getElementWithTextContent(textContent,ignoreCase=null!==ignoreCase&&!0===ignoreCase,this.$dropdown_content.find("[data-selectable]"))},addItems:function(values,silent){this.buffer=document.createDocumentFragment();for(var childNodes=this.$control[0].childNodes,i=0;i<childNodes.length;i++)this.buffer.appendChild(childNodes[i]);for(var items=Array.isArray(values)?values:[values],i=0,n=items.length;i<n;i++)this.isPending=i<n-1,this.addItem(items[i],silent);values=this.$control[0];values.insertBefore(this.buffer,values.firstChild),this.buffer=null},addItem:function(value,silent){debounce_events(this,silent?[]:["change"],function(){var $item,$option,wasFull,inputMode=this.settings.mode;value=hash_key(value),-1!==this.items.indexOf(value)?"single"===inputMode&&this.close():this.options.hasOwnProperty(value)&&("single"===inputMode&&this.clear(silent),"multi"===inputMode&&this.isFull()||($item=$(this.render("item",this.options[value])),wasFull=this.isFull(),this.items.splice(this.caretPos,0,value),this.insertAtCaret($item),this.isPending&&(wasFull||!this.isFull())||this.refreshState(),this.isSetup&&(wasFull=this.$dropdown_content.find("[data-selectable]"),this.isPending||($option=this.getOption(value),$option=this.getAdjacentOption($option,1).attr("data-value"),this.refreshOptions(this.isFocused&&"single"!==inputMode),$option&&this.setActiveOption(this.getOption($option))),!wasFull.length||this.isFull()?this.close():this.isPending||this.positionDropdown(),this.updatePlaceholder(),this.trigger("item_add",value,$item),this.isPending||this.updateOriginalInput({silent:silent}))))})},removeItem:function(value,silent){var i,idx,$item=value instanceof $?value:this.getItem(value);value=hash_key($item.attr("data-value")),-1!==(i=this.items.indexOf(value))&&(this.trigger("item_before_remove",value,$item),$item.remove(),$item.hasClass("active")&&(idx=this.$activeItems.indexOf($item[0]),this.$activeItems.splice(idx,1)),this.items.splice(i,1),this.lastQuery=null,!this.settings.persist&&this.userOptions.hasOwnProperty(value)&&this.removeOption(value,silent),i<this.caretPos&&this.setCaret(this.caretPos-1),this.refreshState(),this.updatePlaceholder(),this.updateOriginalInput({silent:silent}),this.positionDropdown(),this.trigger("item_remove",value,$item))},createItem:function(input,triggerDropdown){var self=this,caret=self.caretPos,callback=(input=input||(self.$control_input.val()||"").trim(),arguments[arguments.length-1]);if("function"!=typeof callback&&(callback=function(){}),"boolean"!=typeof triggerDropdown&&(triggerDropdown=!0),!self.canCreate(input))return callback(),!1;self.lock();var fn,called,setup="function"==typeof self.settings.create?this.settings.create:function(input){var data={},input=data[self.settings.labelField]=input;if(!self.settings.formatValueToKey||"function"!=typeof self.settings.formatValueToKey||null!=(input=self.settings.formatValueToKey.apply(this,[input]))&&"object"!=typeof input&&"function"!=typeof input)return data[self.settings.valueField]=input,data;throw new Error('Selectize "formatValueToKey" setting must be a function that returns a value other than object or function.')},create=(called=!(fn=function(data){return self.unlock(),!data||"object"!=typeof data||"string"!=typeof(value=hash_key(data[self.settings.valueField]))?callback():(self.setTextboxValue(""),self.addOption(data),self.setCaret(caret),self.addItem(value),self.refreshOptions(triggerDropdown&&"single"!==self.settings.mode),void callback(data));var value}),function(){called||(called=!0,fn.apply(this,arguments))}),setup=setup.apply(this,[input,create]);return void 0!==setup&&create(setup),!0},refreshItems:function(){this.lastQuery=null,this.isSetup&&this.addItem(this.items),this.refreshState(),this.updateOriginalInput()},refreshState:function(){this.refreshValidityState(),this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return!1;var invalid=!this.items.length;this.isInvalid=invalid,this.$control_input.prop("required",invali
2985d),this.$input.prop("required",!invalid)},refreshClasses:function(){var isFull=this.isFull(),isLocked=this.isLocked;this.$wrapper.toggleClass("rtl",this.rtl),this.$control.toggleClass("focus",this.isFocused).toggleClass("disabled",this.isDisabled).toggleClass("required",this.isRequired).toggleClass("invalid",this.isInvalid).toggleClass("locked",isLocked).toggleClass("full",isFull).toggleClass("not-full",!isFull).toggleClass("input-active",this.isFocused&&!this.isInputHidden).toggleClass("dropdown-active",this.isOpen).toggleClass("has-options",!$.isEmptyObject(this.options)).toggleClass("has-items",0<this.items.length),this.$control_input.data("grow",!isFull&&!isLocked)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(opts){var i,n,options,label;if(opts=opts||{},1===this.tagType){for(options=[],i=0,n=this.items.length;i<n;i++)label=this.options[this.items[i]][this.settings.labelField]||"",options.push('<option value="'+escape_html(this.items[i])+'" selected="selected">'+escape_html(label)+"</option>");options.length||this.$input.attr("multiple")||options.push('<option value="" selected="selected"></option>'),this.$input.html(options.join(""))}else this.$input.val(this.getValue()),this.$input.attr("value",this.$input.val());this.isSetup&&!opts.silent&&this.trigger("change",this.$input.val())},updatePlaceholder:function(){var $input;this.settings.placeholder&&($input=this.$control_input,this.items.length?$input.removeAttr("placeholder"):$input.attr("placeholder",this.settings.placeholder),$input.triggerHandler("update",{force:!0}))},open:function(){this.isLocked||this.isOpen||"multi"===this.settings.mode&&this.isFull()||(this.focus(),this.isOpen=!0,this.refreshState(),this.$dropdown.css({visibility:"hidden",display:"block"}),this.positionDropdown(),this.$dropdown.css({visibility:"visible"}),this.trigger("dropdown_open",this.$dropdown))},close:function(){var trigger=this.isOpen;"single"===this.settings.mode&&this.items.length&&(this.hideInput(),this.isBlurring&&this.$control_input.blur()),this.isOpen=!1,this.$dropdown.hide(),this.setActiveOption(null),this.refreshState(),trigger&&this.trigger("dropdown_close",this.$dropdown)},positionDropdown:function(){var $control=this.$control,offset="body"===this.settings.dropdownParent?$control.offset():$control.position();offset.top+=$control.outerHeight(!0),this.$dropdown.css({width:$control[0].getBoundingClientRect().width,top:offset.top,left:offset.left})},clear:function(silent){this.items.length&&(this.$control.children(":not(input)").remove(),this.items=[],this.lastQuery=null,this.setCaret(0),this.setActiveItem(null),this.updatePlaceholder(),this.updateOriginalInput({silent:silent}),this.refreshState(),this.showInput(),this.trigger("clear"))},insertAtCaret:function($el){var caret=Math.min(this.caretPos,this.items.length),$el=$el[0],target=this.buffer||this.$control[0];0===caret?target.insertBefore($el,target.firstChild):target.insertBefore($el,target.childNodes[caret]),this.setCaret(caret+1)},deleteSelection:function(e){var i,n,values,option_select,$tail,direction=e&&8===e.keyCode?-1:1,selection=getSelection(this.$control_input[0]);if(this.$activeOption&&!this.settings.hideSelected&&(option_select=("string"==typeof this.settings.deselectBehavior&&"top"===this.settings.deselectBehavior?this.getFirstOption():this.getAdjacentOption(this.$activeOption,-1)).attr("data-value")),values=[],this.$activeItems.length){for($tail=this.$control.children(".active:"+(0<direction?"last":"first")),$tail=this.$control.children(":not(input)").index($tail),0<direction&&$tail++,i=0,n=this.$activeItems.length;i<n;i++)values.push($(this.$activeItems[i]).attr("data-value"));e&&(e.preventDefault(),e.stopPropagation())}else(this.isFocused||"single"===this.settings.mode)&&this.items.length&&(direction<0&&0===selection.start&&0===selection.length?values.push(this.items[this.caretPos-1]):0<direction&&selection.start===this.$control_input.val().length&&values.push(this.items[this.caretPos]));if(!values.length||"function"==typeof this.settings.onDelete&&!1===this.settings.onDelete.apply(this,[values]))return!1;for(void 0!==$tail&&this.setCaret($tail);values.length;)this.removeItem(values.pop());return this.showInput(),this.positionDropdown(),this.refreshOptions(!0),option_select&&(e=this.getOption(option_select)).length&&this.setActiveOption(e),!0},advanceSelection:function(direction,e){var tail,valueLength,selection;0!==direction&&(this.rtl&&(direction*=-1),tail=0<direction?"last":"first",selection=getSelection(this.$control_input[0]),this.isFocused&&!this.isInputHidden?(valueLength=this.$control_input.val().length,(direction<0?0!==selection.start||0!==selection.length:selection.start!==valueLength)||valueLength||this.advanceCaret(direction,e)):(selection=this.$control.children(".active:"+tail)).length&&(valueLength=this.$control.children(":not(input)").index(selection),this.setActiveItem(null),this.setCaret(0<direction?valueLength+1:valueLength)))},advanceCaret:function(direction,e){var $adj;0!==direction&&(this.isShiftDown?($adj=this.$control_input[0<direction?"next":"prev"]()).length&&(this.hideInput(),this.setActiveItem($adj),e&&e.preventDefault()):this.setCaret(this.caretPos+direction))},setCaret:function(i){if(i="single"===this.settings.mode?this.items.length:Math.max(0,Math.min(this.items.length,i)),!this.isPending)for(var $child,$children=this.$control.children(":not(input)"),j=0,n=$children.length;j<n;
2985j++)$child=$($children[j]).detach(),j<i?this.$control_input.before($child):this.$control.append($child);this.caretPos=i},lock:function(){this.close(),this.isLocked=!0,this.refreshState()},unlock:function(){this.isLocked=!1,this.refreshState()},disable:function(){this.$input.prop("disabled",!0),this.$control_input.prop("disabled",!0).prop("tabindex",-1),this.isDisabled=!0,this.lock()},enable:function(){this.$input.prop("disabled",!1),this.$control_input.prop("disabled",!1).prop("tabindex",this.tabIndex),this.isDisabled=!1,this.unlock()},destroy:function(){var eventNS=this.eventNS,revertSettings=this.revertSettings;this.trigger("destroy"),this.off(),this.$wrapper.remove(),this.$dropdown.remove(),this.$input.html("").append(revertSettings.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:revertSettings.tabindex}).show(),this.$control_input.removeData("grow"),this.$input.removeData("selectize"),0==--Selectize.count&&Selectize.$testInput&&(Selectize.$testInput.remove(),Selectize.$testInput=void 0),$(window).off(eventNS),$(document).off(eventNS),$(document.body).off(eventNS),delete this.$input[0].selectize},render:function(templateName,data){var value,id,html="",cache=!1;return(cache="option"!==templateName&&"item"!==templateName?cache:!!(value=hash_key(data[this.settings.valueField])))&&(isset(this.renderCache[templateName])||(this.renderCache[templateName]={}),this.renderCache[templateName].hasOwnProperty(value))?this.renderCache[templateName][value]:(html=$(this.settings.render[templateName].apply(this,[data,escape_html])),"option"===templateName||"option_create"===templateName?data[this.settings.disabledField]||html.attr("data-selectable",""):"optgroup"===templateName&&(id=data[this.settings.optgroupValueField]||"",html.attr("data-group",id),data[this.settings.disabledField]&&html.attr("data-disabled","")),"option"!==templateName&&"item"!==templateName||html.attr("data-value",value||""),cache&&(this.renderCache[templateName][value]=html[0]),html[0])},clearCache:function(templateName){void 0===templateName?this.renderCache={}:delete this.renderCache[templateName]},canCreate:function(input){if(!this.settings.create)return!1;var filter=this.settings.createFilter;return input.length&&("function"!=typeof filter||filter.apply(this,[input]))&&("string"!=typeof filter||new RegExp(filter).test(input))&&(!(filter instanceof RegExp)||filter.test(input))}}),Selectize.count=0,Selectize.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:!1,showAddOptionOnCreate:!0,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:!1,selectOnTab:!0,preload:!1,allowEmptyOption:!1,showEmptyOptionInDropdown:!1,emptyOptionLabel:"--",closeAfterSelect:!1,scrollDuration:60,deselectBehavior:"previous",loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"selectize-control",inputClass:"selectize-input",dropdownClass:"selectize-dropdown",dropdownContentClass:"selectize-dropdown-content",dropdownParent:null,copyClassesToDropdown:!0,render:{}},$.fn.selectize=function(settings_user){function init_select($input,settings_element){function addOption($option,group){$option=$($option);var arr,value=hash_key($option.val());(value||settings.allowEmptyOption)&&(optionsMap.hasOwnProperty(value)?group&&((arr=optionsMap[value][field_optgroup])?$.isArray(arr)?arr.push(group):optionsMap[value][field_optgroup]=[arr,group]:optionsMap[value][field_optgroup]=group):((arr=readData($option)||{})[field_label]=arr[field_label]||$option.text(),arr[field_value]=arr[field_value]||value,arr[field_disabled]=arr[field_disabled]||$option.prop("disabled"),arr[field_optgroup]=arr[field_optgroup]||group,optionsMap[value]=arr,options.push(arr),$option.is(":selected")&&settings_element.items.push(value)))}var i,n,tagName,$children,options=settings_element.options,optionsMap={},readData=function($el){$el=attr_data&&$el.attr(attr_data);return"string"==typeof $el&&$el.length?JSON.parse($el):null};for(settings_element.maxItems=$input.attr("multiple")?null:1,i=0,n=($children=$input.children()).length;i<n;i++)"optgroup"===(tagName=$children[i].tagName.toLowerCase())?function($optgroup){var i,n,id,optgroup,$options;for((id=($optgroup=$($optgroup)).attr("label"))&&((optgroup=read
2985Data($optgroup)||{})[field_optgroup_label]=id,optgroup[field_optgroup_value]=id,optgroup[field_disabled]=$optgroup.prop("disabled"),settings_element.optgroups.push(optgroup)),i=0,n=($options=$("option",$optgroup)).length;i<n;i++)addOption($options[i],id)}($children[i]):"option"===tagName&&addOption($children[i])}var defaults=$.fn.selectize.defaults,settings=$.extend({},defaults,settings_user),attr_data=settings.dataAttr,field_label=settings.labelField,field_value=settings.valueField,field_disabled=settings.disabledField,field_optgroup=settings.optgroupField,field_optgroup_label=settings.optgroupLabelField,field_optgroup_value=settings.optgroupValueField;return this.each(function(){var $input,tag_name,placeholder,input_html;this.selectize||($input=$(this),tag_name=this.tagName.toLowerCase(),(placeholder=$input.attr("placeholder")||$input.attr("data-placeholder"))||settings.allowEmptyOption||(placeholder=$input.children('option[value=""]').text()),settings.allowEmptyOption&&settings.showEmptyOptionInDropdown&&!$input.children('option[value=""]').length&&(input_html=$input.html(),$input.html('<option value="">'+settings.emptyOptionLabel+"</option>"+input_html)),("select"===tag_name?init_select:function($input,settings_element){var i,n,values,option,data_raw=$input.attr(attr_data);if(data_raw)for(settings_element.options=JSON.parse(data_raw),i=0,n=settings_element.options.length;i<n;i++)settings_element.items.push(settings_element.options[i][field_value]);else{data_raw=$.trim($input.val()||"");if(settings.allowEmptyOption||data_raw.length){for(i=0,n=(values=data_raw.split(settings.delimiter)).length;i<n;i++)(option={})[field_label]=values[i],option[field_value]=values[i],settings_element.options.push(option);settings_element.items=values}}})($input,input_html={placeholder:placeholder,options:[],optgroups:[],items:[]}),new Selectize($input,$.extend(!0,{},defaults,input_html,settings_user)))})},$.fn.selectize.defaults=Selectize.defaults,$.fn.selectize.support={validity:SUPPORTS_VALIDITY_API},Selectize.define("auto_position",function(){const POSITION={top:"top",bottom:"bottom"};this.positionDropdown=function(){const $control=this.$control,offset="body"===this.settings.dropdownParent?$control.offset():$control.position();offset.top+=$control.outerHeight(!0);var dropdownHeight=this.$dropdown.prop("scrollHeight")+5,dropdownHeight=this.$control.get(0).getBoundingClientRect().top+dropdownHeight+this.$wrapper.height()>window.innerHeight?POSITION.top:POSITION.bottom,styles={width:$control.outerWidth(),left:offset.left};dropdownHeight===POSITION.top?(Object.assign(styles,{bottom:offset.top,top:"unset",margin:"0 0 5px 0"}),this.$dropdown.addClass("selectize-position-top")):(Object.assign(styles,{top:offset.top,bottom:"unset",margin:"5px 0 0 0"}),this.$dropdown.removeClass("selectize-position-top")),this.$dropdown.css(styles)}}),Selectize.define("auto_select_on_type",function(options){var originalBlur,self=this;self.onBlur=(originalBlur=self.onBlur,function(e){var $matchedItem=self.getFirstItemMatchedByTextContent(self.lastValue,!0);return void 0!==$matchedItem.attr("data-value")&&self.getValue()!==$matchedItem.attr("data-value")&&self.setValue($matchedItem.attr("data-value")),originalBlur.apply(this,arguments)})}),Selectize.define("autofill_disable",function(options){var original,self=this;self.setup=(original=self.setup,function(){original.apply(self,arguments),self.$control_input.attr({autocomplete:"new-password",autofill:"no"})})}),Selectize.define("drag_drop",function(options){if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');var self,original;"multi"===this.settings.mode&&((self=this).lock=(original=self.lock,function(){var sortable=self.$control.data("sortable");return sortable&&sortable.disable(),original.apply(self,arguments)}),self.unlock=function(){var original=self.unlock;return function(){var sortable=self.$control.data("sortable");return sortable&&sortable.enable(),original.apply(self,arguments)}}(),self.setup=function(){var original=self.setup;return function(){original.apply(this,arguments);
2985var $control=self.$control.sortable({items:"[data-value]",forcePlaceholderSize:!0,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,values=[];$control.children("[data-value]").each(function(){values.push($(this).attr("data-value"))}),self.isFocused=!1,self.setValue(values),self.isFocused=!0,self.setActiveItem(active),self.positionDropdown()}})}}())}),Selectize.define("dropdown_header",function(options){var original,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=(original=self.setup,function(){original.apply(self,arguments),self.$dropdown_header=$(options.html(options)),self.$dropdown.prepend(self.$dropdown_header)})}),Selectize.define("optgroup_columns",function(options){function equalizeSizes(){var i,height_max,width,width_parent,$optgroups=$("[data-group]",self.$dropdown_content),n=$optgroups.length;if(n&&self.$dropdown_content.width()){if(options.equalizeHeight){for(i=height_max=0;i<n;i++)height_max=Math.max(height_max,$optgroups.eq(i).height());$optgroups.css({height:height_max})}options.equalizeWidth&&(width_parent=self.$dropdown_content.innerWidth()-getScrollbarWidth(),width=Math.round(width_parent/n),$optgroups.css({width:width}),1<n&&(width_parent=width_parent-width*(n-1),$optgroups.eq(n-1).css({width:width_parent})))}}var original,self=this,getScrollbarWidth=(options=$.extend({equalizeWidth:!0,equalizeHeight:!0},options),this.getAdjacentOption=function($option,direction){var $options=$option.closest("[data-group]").find("[data-selectable]"),$option=$options.index($option)+direction;return 0<=$option&&$option<$options.length?$options.eq($option):$()},this.onKeyDown=(original=self.onKeyDown,function(e){var index,$optgroup;if(!this.isOpen||37!==e.keyCode&&39!==e.keyCode)return original.apply(this,arguments);self.ignoreHover=!0,index=($optgroup=this.$activeOption.closest("[data-group]")).find("[data-selectable]").index(this.$activeOption),($optgroup=(e=($optgroup=37===e.keyCode?$optgroup.prev("[data-group]"):$optgroup.next("[data-group]")).find("[data-selectable]")).eq(Math.min(e.length-1,index))).length&&this.setActiveOption($optgroup)}),function(){var div,width=getScrollbarWidth.width,doc=document;return void 0===width&&((div=doc.createElement("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)),width});(options.equalizeHeight||options.equalizeWidth)&&(hook.after(this,"positionDropdown",equalizeSizes),hook.after(this,"refreshOptions",equalizeSizes))}),Selectize.define("remove_button",function(options){options=$.extend({label:"×",title:"Remove",className:"remove",append:!0},options),("single"===this.settings.mode?function(thisRef,options){options.className="remove-single";var original,self=thisRef,html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";thisRef.setup=(original=self.setup,function(){var id,render_item;options.append&&(id=$(self.$input.context).attr("id"),$("#"+id),render_item=self.settings.render.item,self.settings.render.item=function(data){return html_container=render_item.apply(thisRef,arguments),html_element=html,$("<span>").append(html_container).append(html_element);var html_container,html_element}),original.apply(thisRef,arguments),thisRef.$control.on("click","."+options.className,function(e){e.preventDefault(),self.isLocked||self.clear()})})}:function(thisRef,options){var original,self=thisRef,html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";thisRef.setup=(original=self.setup,function(){var render_item;options.append&&(render_item=self.settings.render.item,self.settings.render.item=function(data){return html_container=render_item.apply(thisRef,arguments),html_element=html,pos=html_container.search(/(<\/[^>]+>\s*)$/),html_container.substring(0,pos)+html_element+html_container.substring(pos);var html_container,html_element,pos}),original.apply(thisRef,arguments),thisRef.$control.on("click","."+options.className,function(e){if(e.preventDefault(),!self.isLocked)return e=$(e.currentTarget).parent(),self.setActiveItem(e),self.deleteSelection()&&self.setCaret(self.items.length),!1})})})(this,options)}),Selectize.define("restore_on_backspace",function(options){var original,self=this;options.text=options.text||function(option){return option[this.settings.labelField]},this.onKeyDown=(original=self.onKeyDown,function(e){var index;return 8===e.keyCode&&""===this.$control_input.val()&&!this.$activeItems.length&&0<=(index=this.caretPos-1)&&index<this.items.length?(index=this.options[this.items[index]],this.deleteSelection(e)&&(this.setTextboxValue(options.text.apply(this,[index])),this.refreshOptions(!0)),void e.preventDefault()):original.apply(this,arguments)})}),Selectize.define("select_on_focus",function(options){var originalFocus,originalBlur,self=this;self.on("focus",(originalFocus=self.onFocus,function(e){var value=self.getItem(self.getValue()).text();return self.clear(),self.setTextboxValue(value),self.$control_input.select(),setTimeout(function(){self.settings.selectOnTab&&self.setActiveOption(self.getFirstItemMatchedByTextContent(value)),self.settings.score=null},0),originalFocus.apply(this,arguments)})),self.onBlur=(originalBlur=self.onBlur,function(e){return""===self.getValue()&&self.lastValidValue!==self.getValue()&&self.setValue(self.lastValidValue),setTimeout(function(){self.settings.score=function(){return function(){return 1}}},0),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(){const original=self.onBlur;return function(e){if(original.apply(this,e),e){const $control=this.$control,$items=$control.find(".
2985item"),limit=options.tagLimit;void 0===limit||$items.length<=limit||($items.toArray().forEach(function(item,index){index<limit||$(item).hide()}),$control.append("<span><b>"+($items.length-limit)+"</b></span>"))}}}(),this.onFocus=function(){const original=self.onFocus;return function(e){if(original.apply(this,e),e){const $control=this.$control,$items=$control.find(".item");$items.show(),$control.find("span").remove()}}}()}),Selectize}); 2986/* selectize click2deselect (custom) */ 2987Selectize.define("click2deselect",function(options){var self=this;var setup=self.setup;this.setup=function(){setup.apply(self,arguments);self.$dropdown.on("click","[data-selectable]",function(e){let value=this.getAttribute("data-value");if(this.classList.contains("selected")){self.removeItem(value);self.refreshItems();self.refreshOptions()}return false});self.on("item_remove",function(value){self.getOption(value).removeClass("selected")})}});
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.