1// Set datepicker default value. 2var datepicker_format = 'yy-mm-dd'; 3 4function mecEnhanceDatepickerAccessibility($inputs) 5{ 6 if(!$inputs || !$inputs.length) return; 7 8 $inputs.attr('aria-haspopup', 'dialog'); 9 $inputs.off('focus.mecDatepickerA11y').on('focus.mecDatepickerA11y', function() 10 { 11 window.setTimeout(function() 12 { 13 var $datepicker = jQuery('#ui-datepicker-div'); 14 if(!$datepicker.length) return; 15 16 $datepicker.attr({ 17 role: 'dialog', 18 'aria-live': 'polite', 19 'aria-label': (typeof mecdata !== 'undefined' && mecdata.a11y_calendar_dialog) ? mecdata.a11y_calendar_dialog : 'Calendar date picker' 20 }); 21 }, 0); 22 }); 23} 24 25jQuery(document).ready(function($) 26{ 27 // Image picker on terms menu 28 $('.mec_upload_image_button').click(function(event) 29 { 30 event.preventDefault(); 31 32 var real_ajax_url = wp.ajax.settings.url; 33 wp.ajax.settings.url = real_ajax_url + '?mec_fes=1'; 34 35 var post_id = $(this).data('post-id'); 36 if(post_id && post_id !== -1) wp.media.model.settings.post.id = post_id; 37 if(post_id === -1) wp.media.model.settings.post.id = null; 38 39 var preview_id = 'mec_thumbnail_img'; 40 var input_id = 'mec_thumbnail'; 41 42 if($(this).data('preview-id')) preview_id = $(this).data('preview-id'); 43 if($(this).data('input-id')) input_id = $(this).data('input-id'); 44 45 var frame; 46 if(frame) 47 { 48 frame.open(); 49 return; 50 } 51 52 frame = wp.media(); 53 frame.on('select', function() 54 { 55 // Grab the selected attachment. 56 var attachment = frame.state().get('selection').first(); 57 58 $('#'+preview_id).html('<img src="'+attachment.attributes.url+'" alt="Featured image preview" style="max-width: 100%;" />'); 59 $('#'+input_id).val(attachment.attributes.url); 60 61 $('.mec_remove_image_button').toggleClass('mec-util-hidden'); 62 63 frame.close(); 64 }); 65 66 frame.open(); 67 }); 68 69 // Image remover on terms menu 70 $('.mec_remove_image_button').click(function(event) 71 { 72 event.preventDefault(); 73 74 var preview_id = 'mec_thumbnail_img'; 75 var input_id = 'mec_thumbnail'; 76 77 if($(this).data('preview-id')) preview_id = $(this).data('preview-id'); 78 if($(this).data('input-id')) input_id = $(this).data('input-id'); 79 80 $('#'+preview_id).html(''); 81 $('#'+input_id).val(''); 82 83 $('.mec_remove_image_button').toggleClass('mec-util-hidden'); 84 }); 85 86 // Image picker on add event menu for location 87 $('.mec_location_upload_image_button').click(function(event) 88 { 89 event.preventDefault(); 90 91 var frame; 92 if(frame) 93 { 94 frame.open(); 95 return; 96 } 97 98 frame = wp.media(); 99 frame.on('select', function() 100 { 101 // Grab the selected attachment. 102 var attachment = frame.state().get('selection').first(); 103 104 $('#mec_location_thumbnail_img').html('<img src="'+attachment.attributes.url+'" />'); 105 $('#mec_location_thumbnail').val(attachment.attributes.url); 106 107 $('.mec_location_remove_image_button').toggleClass('mec-util-hidden'); 108 109 frame.close(); 110 }); 111 112 frame.open(); 113 }); 114 115 // Image remover on add event menu for location 116 $('.mec_location_remove_image_button').click(function(event) 117 { 118 event.preventDefault(); 119 120 $('#mec_location_thumbnail_img').html(''); 121 $('#mec_location_thumbnail').val(''); 122 123 $('.mec_location_remove_image_button').toggleClass('mec-util-hidden'); 124 }); 125 126 // Image picker on add event menu for organizer 127 $('.mec_organizer_upload_image_button').click(function(event) 128 { 129 event.preventDefault(); 130 131 var frame; 132 if(frame) 133 { 134 frame.open(); 135 return; 136 } 137 138 frame = wp.media(); 139 frame.on('select', function() 140 { 141 // Grab the selected attachment. 142 var attachment = frame.state().get('selection').first(); 143 144 $('#mec_organizer_thumbnail_img').html('<img src="'+attachment.attributes.url+'" />'); 145 $('#mec_organizer_thumbnail').val(attachment.attributes.url); 146 147 $('.mec_organizer_remove_image_button').toggleClass('mec-util-hidden'); 148 149 frame.close(); 150 }); 151 152 frame.open(); 153 });
154 155 // Image remover on add event menu for organizer 156 $('.mec_organizer_remove_image_button').click(function(event) 157 { 158 event.preventDefault(); 159 160 $('#mec_organizer_thumbnail_img').html(''); 161 $('#mec_organizer_thumbnail').val(''); 162 163 $('.mec_organizer_remove_image_button').toggleClass('mec-util-hidden'); 164 }); 165 166 // Image remover on frontend event submission menu 167 $('#mec_fes_remove_image_button').click(function(event) 168 { 169 event.preventDefault(); 170 171 $('#mec_fes_thumbnail_img').html(''); 172 $('#mec_fes_thumbnail').val(''); 173 $('#mec_featured_image_file').val(''); 174 175 $('#mec_fes_remove_image_button').addClass('mec-util-hidden'); 176 }); 177 178 // Location Image remover on frontend event submission menu 179 $('#mec_fes_location_remove_image_button').click(function(event) 180 { 181 event.preventDefault(); 182 183 $('#mec_fes_location_thumbnail_img').html(''); 184 $('#mec_fes_location_thumbnail').val(''); 185 $('#mec_fes_location_thumbnail_file').val(''); 186 187 $('#mec_fes_location_remove_image_button').addClass('mec-util-hidden'); 188 }); 189 190 // Organizer Image remover on frontend event submission menu 191 $('#mec_fes_organizer_remove_image_button').click(function(event) 192 { 193 event.preventDefault(); 194 195 $('#mec_fes_organizer_thumbnail_img').html(''); 196 $('#mec_fes_organizer_thumbnail').val(''); 197 $('#mec_fes_organizer_thumbnail_file').val(''); 198 199 $('#mec_fes_organizer_remove_image_button').addClass('mec-util-hidden'); 200 }); 201 202 // Sponsor Image remover on frontend event submission menu 203 $('#mec_fes_sponsor_remove_image_button').click(function(event) 204 { 205 event.preventDefault(); 206 207 $('#mec_fes_sponsor_thumbnail_img').html(''); 208 $('#mec_fes_sponsor_thumbnail').val(''); 209 $('#mec_fes_sponsor_thumbnail_file').val(''); 210 211 $('#mec_fes_sponsor_remove_image_button').addClass('mec-util-hidden'); 212 }); 213 214 // Speaker Image remover on frontend event submission menu 215 $('#mec_fes_speaker_remove_image_button').click(function(event) 216 { 217 event.preventDefault(); 218 219 $('#mec_fes_speaker_thumbnail_img').html(''); 220 $('#mec_fes_speaker_thumbnail').val(''); 221 $('#mec_fes_speaker_thumbnail_file').val(''); 222 223 $('#mec_fes_speaker_remove_image_button').addClass('mec-util-hidden'); 224 }); 225 226 var date_splite; 227 if(typeof mec_admin_localize !== 'undefined') 228 { 229 date_splite = mec_admin_localize.datepicker_format.split('&'); 230 if(date_splite[0] !== undefined && date_splite.length == 2) datepicker_format = date_splite[0]; 231 } 232 else if(typeof mecdata !== 'undefined') 233 { 234 date_splite = mecdata.datepicker_format.split( '&' ); 235 if(date_splite[0] !== undefined && date_splite.length == 2) datepicker_format = date_splite[0]; 236 } 237 238 $('[id^="mec-book-form-btn-step"]').on('click',function() 239 { 240 setTimeout(function() 241 { 242 if($.fn.datepicker) 243 { 244 if('date' !== $('.mec-date-picker').prop('type')) 245 { 246 $('.mec-date-picker').datepicker( 247 { 248 changeYear: true, 249 changeMonth: true, 250 dateFormat: datepicker_format, 251 gotoCurrent: true, 252 yearRange: 'c-3:c+5', 253 }); 254 } 255 256 } 257 }, 1000); 258 }); 259 260 if($.fn.datepicker) 261 { 262 mecEnhanceDatepickerAccessibility($('.mec-date-picker, .mec_date_picker_dynamic_format, .mec_date_picker, .mec_date_picker_dynamic_format_start, .mec_date_picker_dynamic_format_end, #mec_start_date, #mec_end_date, #mec_date_repeat_end_at_date')); 263 264 $('.mec-date-picker').datepicker( 265 { 266 changeYear: true, 267 changeMonth: true, 268 dateFormat: datepicker_format, 269 gotoCurrent: true, 270 yearRange: 'c-3:c+5', 271 }); 272 273 $('#mec_start_date').datepicker( 274 { 275 changeYear: true, 276 changeMonth: true, 277 dateFormat: datepicker_format, 278 gotoCurrent: true, 279 yearRange: 'c-3:c+5', 280 onSelect: function(value, i) 281 { 282 const end = $("#mec_end_date");
283 if(value !== i.lastVal) 284 { 285 end.datepicker("option", "minDate", value); 286 } 287 288 if(end.val() === '') 289 { 290 end.val(value); 291 } 292 } 293 }); 294 295 $('#mec_end_date').datepicker( 296 { 297 changeYear: true, 298 changeMonth: true, 299 dateFormat: datepicker_format, 300 gotoCurrent: true, 301 yearRange: 'c-3:c+5', 302 onSelect: function(value, i) 303 { 304 const start = $("#mec_start_date"); 305 if(value !== i.lastVal) 306 { 307 start.datepicker("option", "maxDate", value); 308 } 309 310 if(start.val() === '') 311 { 312 start.val(value); 313 } 314 } 315 }); 316 317 $('#mec_date_repeat_end_at_date').datepicker( 318 { 319 changeYear: true, 320 changeMonth: true, 321 dateFormat: datepicker_format, 322 gotoCurrent: true, 323 yearRange: 'c-3:c+5', 324 }); 325 326 $('.mec_date_picker_dynamic_format').datepicker( 327 { 328 changeYear: true, 329 changeMonth: true, 330 dateFormat: datepicker_format, 331 gotoCurrent: true, 332 yearRange: 'c-3:c+5', 333 }); 334 335 $('.mec_date_picker').datepicker( 336 { 337 changeYear: true, 338 changeMonth: true, 339 dateFormat: 'yy-mm-dd', 340 gotoCurrent: true, 341 yearRange: 'c-3:c+5', 342 }); 343 344 $('.mec_date_picker_dynamic_format_start').datepicker( 345 { 346 changeYear: true, 347 changeMonth: true, 348 dateFormat: datepicker_format, 349 gotoCurrent: true, 350 yearRange: 'c-1:c+5', 351 onSelect: function(date) 352 { 353 var selectedDate; 354 355 try 356 { 357 selectedDate = $.datepicker.parseDate(datepicker_format, date); 358 } 359 catch(e) 360 { 361 selectedDate = new Date(date); 362 } 363 364 if(!(selectedDate instanceof Date) || isNaN(selectedDate.getTime())) return; 365 366 var endDate = new Date(selectedDate.getTime()); 367 368 var $end_picker = $(this).next(); 369 $end_picker.datepicker("option", "minDate", endDate); 370 $end_picker.datepicker("option", "maxDate", '+5y'); 371 372 $(this).trigger('change'); 373 } 374 }); 375 376 $('.mec_date_picker_dynamic_format_end').datepicker( 377 { 378 changeYear: true, 379 changeMonth: true, 380 dateFormat: datepicker_format, 381 gotoCurrent: true, 382 yearRange: 'c-1:c+5', 383 }); 384 385 trigger_period_picker(); 386 } 387 388 // Initialize WP Color Picker 389 if($.fn.wpColorPicker) jQuery('.mec-color-picker').wpColorPicker(); 390 391 $('#mec_location_id').on('change', function() 392 { 393 mec_location_toggle(); 394 }); 395 396 $('#mec_organizer_id').on('change', function() 397 { 398 mec_organizer_toggle(); 399 var mec_organizer_val = parseInt($(this).val()); 400 var mec_additional_organizer = $(this).parent().parent().find('#mec-additional-organizer-wrap'); 401 402 if(mec_organizer_val != 1) mec_additional_organizer.show(); 403 else mec_additional_organizer.hide(); 404 }); 405 406 mec_location_toggle(); 407 mec_organizer_toggle(); 408 409 $('#mec_repeat').on('change', function() 410 { 411 mec_repeat_toggle(); 412 }); 413 414 mec_repeat_toggle(); 415 416 $('#mec_repeat_type').on('change', function() 417 { 418 mec_repeat_type_toggle(); 419 }); 420 421 mec_repeat_type_toggle(); 422 423 $('#mec_bookings_limit_unlimited').on('change', function() 424 { 425 mec_bookings_unlimited_toggle(); 426 }); 427 428 $('#mec_add_in_days').on('click', function() 429 { 430 var allday = $(this).data('allday'); 431 432 var start = $('#mec_exceptions_in_days_start_date').val(); 433 if(start === '') return false; 434 435 var end = $('#mec_exceptions_in_days_end_date').val(); 436 if(end === '') return false; 437 438 var start_hour = $('#mec_exceptions_in_days_start_hour').val(); 439 if(start_hour.length === 1) start_hour = '0'+start_hour; 440 441 var start_minutes = $('#mec_exceptions_in_days_start_minutes').val(); 442 if(start_minutes.length === 1) start_minutes = '0'+start_minutes; 443 444 var start_ampm = $('#mec_exceptions_in_days_start_ampm').val(); 445 if(typeof start_ampm === 'undefined') start_ampm = ''; 446 447 var end_hour = $('#mec_exceptions_in_days_end_hour').val(); 448 if(end_hour.length === 1) end_hour = '0'+end_hour; 449 450 var end_minutes = $('#mec_exceptions_in_days_end_minutes').val(); 451 if(end_minutes.length === 1) end_minutes = '0'+end_minutes; 452 453 var end_ampm = $('#mec_exceptions_in_days_end_ampm').val(); 454 if(typeof end_ampm === 'undefined') end_ampm = ''; 455 456 var value = start + ':' + end + ':' + start_hour + '-' + start_minutes + '-' + start_ampm + ':' + end_hour + '-' + end_minutes + '-' + end_ampm; 457 var label = start + ' <span class="mec-time-picker-label '+(allday ? 'mec-util-hidden' : '')+'">' + start_hour + ':' + start_minutes + ' ' + start_ampm + '</span> - ' + end + ' <span class="mec-time-picker-label '+(allday ? 'mec-util-hidden' : '')+'">' + end_hour + ':' + end_minutes + ' ' + end_ampm + '</span>'; 458 459 // Don't add exactly same occurrences 460 if($('#mec_in_days input[value="'+value+'"]').length > 0) return false; 461 462 var $key = $('#mec_new_in_days_key'); 463 464 var key = $key.val(); 465 var html = $('#mec_new_in_days_raw').html().replace(/:i:/g, key).replace(/:val:
465/g, value).replace(/:label:/g, label); 466 467 $('#mec_in_days').append(html); 468 $key.val(parseInt(key)+1); 469 }); 470 471 $('#mec_edit_in_days').on('click', function() 472 { 473 // Form 474 const $form = $('#mec-in-days-form'); 475 476 const modify_id = $form.data('modify'); 477 const $row = $('#mec_in_days_row'+modify_id); 478 479 var allday = $(this).data('allday'); 480 481 var start = $('#mec_exceptions_in_days_start_date').val(); 482 if(start === '') return false; 483 484 var end = $('#mec_exceptions_in_days_end_date').val(); 485 if(end === '') return false; 486 487 var start_hour = $('#mec_exceptions_in_days_start_hour').val(); 488 if(start_hour.length === 1) start_hour = '0'+start_hour; 489 490 var start_minutes = $('#mec_exceptions_in_days_start_minutes').val(); 491 if(start_minutes.length === 1) start_minutes = '0'+start_minutes; 492 493 var start_ampm = $('#mec_exceptions_in_days_start_ampm').val(); 494 if(typeof start_ampm === 'undefined') start_ampm = ''; 495 496 var end_hour = $('#mec_exceptions_in_days_end_hour').val(); 497 if(end_hour.length === 1) end_hour = '0'+end_hour; 498 499 var end_minutes = $('#mec_exceptions_in_days_end_minutes').val(); 500 if(end_minutes.length === 1) end_minutes = '0'+end_minutes; 501 502 var end_ampm = $('#mec_exceptions_in_days_end_ampm').val(); 503 if(typeof end_ampm === 'undefined') end_ampm = ''; 504 505 var value = start + ':' + end + ':' + start_hour + '-' + start_minutes + '-' + start_ampm + ':' + end_hour + '-' + end_minutes + '-' + end_ampm; 506 var label = start + ' <span class="mec-time-picker-label '+(allday ? 'mec-util-hidden' : '')+'">' + start_hour + ':' + start_minutes + ' ' + start_ampm + '</span> - ' + end + ' <span class="mec-time-picker-label '+(allday ? 'mec-util-hidden' : '')+'">' + end_hour + ':' + end_minutes + ' ' + end_ampm + '</span>'; 507 508 $row.find($('input[type=hidden]')).val(value); 509 $row.find($('.mec-in-days-day')).html(label); 510 511 // Reset Dates 512 $form.parent().find($('input[type=text]')).val(''); 513 514 // Modification Mode 515 $form.removeClass('mec-in-days-edit-mode').addClass('mec-in-days-add-mode').removeData('modify'); 516 }); 517 518 $('#mec_cancel_in_days').on('click', function() 519 { 520 // Form 521 let $form = $('#mec-in-days-form'); 522 523 // Reset Dates 524 $form.parent().find($('input[type=text]')).val(''); 525 526 // Modification Mode 527 $form.removeClass('mec-in-days-edit-mode').addClass('mec-in-days-add-mode').removeData('modify'); 528 }); 529 530 $('#mec_add_not_in_days').on('click', function() 531 { 532 let date = $('#mec_exceptions_not_in_days_date').val(); 533 if(date === '') return false; 534 535 let d = date.replaceAll('-', ''); 536 d = d.replaceAll('/', ''); 537 d = d.replaceAll('.', ''); 538 539 540 let $wrapper = $('#mec_not_in_days'); 541 let $key = $('#mec_new_not_in_days_key'); 542 543 let c = 'mec-date-'+d; 544 if($wrapper.find($('.'+c)).length) return; 545 546 let key = $key.val(); 547 let html = $('#mec_new_not_in_days_raw').html().replace(/:i:/g, key).replace(/:d:/g, d).replace(/:val:/g, date); 548 549 $wrapper.append(html); 550 $key.val(parseInt(key)+1); 551 }); 552 553 $('#mec_add_ticket_button').on('click', function() 554 { 555 let $key = $('#mec_new_ticket_key'); 556 let key = $key.val(); 557 let html = $('#mec_new_ticket_raw').html().replace(/:i:/g, key); 558 559 $('#mec_tickets').append(html); 560 $key.val(parseInt(key)+1); 561 562 mec_init_sortable_sections(); 563 564 $('.mec_add_price_date_button').off('click').on('click', function() 565 { 566 mec_handle_add_price_date_button(this); 567 }); 568 569 $.each($(".mec-select2"), function(i,v) 570 { 571 if($(v).attr('name').search(":i:") > 0) 572 { 573 return; 574 } 575 576 if(typeof $(v).data('select2-id') == 'undefined') 577 { 578 $(v).select2(); 579 } 580 }); 581
582 trigger_period_picker(); 583 }); 584 585 $('.mec_add_price_date_button').off('click').on('click', function() 586 { 587 mec_handle_add_price_date_button(this); 588 }); 589 590 mec_hourly_schedule_add_day_listener(); 591 mec_init_sortable_sections(); 592 593 $('#mec_add_fee_button').on('click', function() 594 { 595 var key = $('#mec_new_fee_key').val(); 596 var html = $('#mec_new_fee_raw').html().replace(/:i:/g, key); 597 598 $('#mec_fees_list').append(html); 599 $('#mec_new_fee_key').val(parseInt(key)+1); 600 601 mec_init_sortable_sections(); 602 }); 603 604 $('#mec_add_ticket_variation_button').on('click', function() 605 { 606 var key = $('#mec_new_ticket_variation_key').val(); 607 var html = $('#mec_new_ticket_variation_raw').html().replace(/:i:/g, key); 608 609 $('#mec_ticket_variations_list').append(html); 610 $('#mec_new_ticket_variation_key').val(parseInt(key)+1); 611 612 mec_init_sortable_sections(); 613 }); 614 615 $('.mec-form-row.mec-available-color-row span').on('click', function() 616 { 617 $('.mec-form-row.mec-available-color-row span').removeClass('color-selected'); 618 $(this).addClass('color-selected'); 619 }); 620 621 $('#mec_reg_form_field_types button').on('click', function() 622 { 623 var type = $(this).data('type'); 624 625 if (type == 'mec_email') { 626 if ($('#mec_reg_form_fields').find('input[value="mec_email"][type="hidden"]').length) { 627 return false; 628 } 629 } 630 631 if (type == 'name') { 632 if ($('#mec_reg_form_fields').find('input[value="name"][type="hidden"]').length) { 633 return false; 634 } 635 } 636 637 var key = $('#mec_new_reg_field_key').val(); 638 var html = $('#mec_reg_field_'+type).html().replace(/:i:/g, key); 639 640 $('#mec_reg_form_fields').append(html); 641 $('#mec_new_reg_field_key').val(parseInt(key)+1); 642 643 // Set onclick listener for add option fields 644 mec_reg_fields_option_listeners(); 645 mec_refresh_booking_condition_editors('reg'); 646 }); 647 648 // Set onclick listener for add option fields 649 mec_reg_fields_option_listeners(); 650 mec_refresh_booking_condition_editors('reg'); 651 652 // Advanced Repeating 653 $('#mec-advanced-wraper ul > ul > li').click(function() 654 { 655 if($(this).attr('class') == '') $(this).attr('class', 'mec-active'); 656 else $(this).attr('class', ''); 657 658 $('#mec_date_repeat_advanced').val($('#mec-advanced-wraper div:first-child > ul').find('.mec-active').find('span').text().slice(0, -1)); 659 }); 660 661 $('#mec_event_form_field_types button').on('click', function() 662 { 663 var type = $(this).data('type'); 664 665 var key = $('#mec_new_event_field_key').val(); 666 var html = $('#mec_event_field_'+type).html().replace(/:i:/g, key); 667 668 $('#mec_event_form_fields').append(html); 669 $('#mec_new_event_field_key').val(parseInt(key)+1); 670 671 // Set onclick listener for add option fields 672 mec_event_fields_option_listeners(); 673 }); 674 675 // Set onclick listener for add option fields 676 mec_event_fields_option_listeners(); 677 678 $('#mec_bfixed_form_field_types button').on('click', function() 679 { 680 var type = $(this).data('type'); 681 682 var key = $('#mec_new_bfixed_field_key').val(); 683 var html = $('#mec_bfixed_field_'+type).html().replace(/:i:/g, key); 684 685 $('#mec_bfixed_form_fields').append(html); 686 $('#mec_new_bfixed_field_key').val(parseInt(key)+1); 687 688 // Set onclick listener for add option fields 689 mec_bfixed_fields_option_listeners(); 690 mec_refresh_booking_condition_editors('bfixed'); 691 }); 692 693 // Set onclick listener for add option fields 694 mec_bfixed_fields_option_listeners(); 695 mec_refresh_booking_condition_editors('bfixed'); 696 697 jQuery(document).on('change', '.mec-booking-condition-enabled, .mec-booking-condition-source, .mec-booking-condition-option', function() 698 { 699 const $trigger = jQuery(this); 700 const $conditionBox = jQuery(this).closest('.mec-booking-condition-box'); 701 const prefix = String($conditionBox.data('conditionPrefix') || ''); 702 703 if($trigger.hasClass('mec-booking-condition-source')) 704 { 705 $conditionBox.data('currentSourceFieldId', String($trigger.val() || '')); 706 $conditionBox.data('currentOptionKey', ''); 707 $conditionBox.find('.mec-booking-condition-option').val(''); 708 } 709 else if($trigger.hasClass('mec-booking-condition-option')) 710 { 711 $conditionBox.data('currentOptionKey', String($trigger.val() || '')); 712 } 713 714 mec_refresh_booking_condition_editor($conditionBox); 715 if(prefix) mec_refresh_booking_condition_editors(prefix); 716 });
717 718 jQuery(document).on('input change', '#mec_reg_form_fields input[name*="[label]"], #mec_bfixed_form_fields input[name*="[label]"]', function() 719 { 720 const $field = jQuery(this).closest('li[id^="mec_reg_fields_"], li[id^="mec_bfixed_fields_"]'); 721 if($field.attr('id') && $field.attr('id').indexOf('mec_reg_fields_') === 0) mec_refresh_booking_condition_editors('reg'); 722 if($field.attr('id') && $field.attr('id').indexOf('mec_bfixed_fields_') === 0) mec_refresh_booking_condition_editors('bfixed'); 723 }); 724 725 // Additional Organizers 726 mec_additional_organizers_listeners(); 727 728 // Show / Hide Password 729 $('.mec-show-hide-password').on('click', function() 730 { 731 var $input = $(this).siblings("input"); 732 var current = $input.attr('type'); 733 734 if(current === 'password') $input.attr('type', 'text'); 735 else $input.attr('type', 'password'); 736 }); 737 738 // FAQ 739 $('#mec_add_faq_button').on('click', function() 740 { 741 const $key = $('#mec_new_faq_key'); 742 const key = $key.val(); 743 const html = $('#mec_new_faq_raw').html().replace(/:i:/g, key); 744 745 $('#mec_faq_list').append(html); 746 $key.val(parseInt(key)+1); 747 748 mec_init_sortable_sections(); 749 }); 750 751 // Appointments 752 // Move the selector to the metabox header 753 var $header = $('#mec_metabox_details .hndle'); 754 // If .hndle is not found, try .postbox-header (newer WP versions) 755 if ($header.length === 0) { 756 $header = $('#mec_metabox_details .postbox-header'); 757 } 758 $('.mec-event-appointment-type-wrap').appendTo($header).removeClass('mec-util-hidden').on('click', function(e) { 759 e.stopPropagation(); 760 }); 761 762 $('#mec_entity_type_select').on('change', function() 763 { 764 const entity_type = $(this).val(); 765 const $fes_form = $('#mec_fes_form'); 766 const $metabox_details = $('#mec_metabox_details'); 767 const $appointment_form_wrapper = $('.mec-appointment-form-wrap'); 768 769 if (entity_type === 'appointment') 770 { 771 $fes_form.removeClass('mec-entity-type-event').addClass('mec-entity-type-appointment'); 772 $metabox_details.removeClass('mec-entity-type-event').addClass('mec-entity-type-appointment'); 773 774 $appointment_form_wrapper.removeClass('mec-util-hidden'); 775 } 776 else 777 { 778 $fes_form.removeClass('mec-entity-type-appointment').addClass('mec-entity-type-event'); 779 $metabox_details.removeClass('mec-entity-type-appointment').addClass('mec-entity-type-event'); 780 781 $appointment_form_wrapper.addClass('mec-util-hidden'); 782 } 783 }); 784 785 $('#mec_entity_type_select').trigger('change'); 786 787 const $repeatType = $('#mec_appointments_availability_repeat_type'); 788 if($.fn.datepicker) 789 { 790 $('#mec_appointments_start_date').datepicker({ 791 changeYear: true, 792 changeMonth: true, 793 dateFormat: datepicker_format, 794 gotoCurrent: true, 795 yearRange: 'c-3:c+5', 796 }); 797 } 798 function mec_toggle_repeat_type() 799 { 800 const val = $repeatType.val(); 801 if (val === 'no_repeat') 802 { 803 $('.lsd-apt-days-wrapper').addClass('mec-util-hidden'); 804 $('.lsd-apt-adjusted-title').addClass('mec-util-hidden'); 805 $('.lsd-apt-start-date-wrapper').addClass('mec-util-hidden'); 806 } 807 else 808 { 809 $('.lsd-apt-days-wrapper').removeClass('mec-util-hidden'); 810 $('.lsd-apt-adjusted-title').removeClass('mec-util-hidden'); 811 $('.lsd-apt-start-date-wrapper').removeClass('mec-util-hidden'); 812 } 813 } 814 $repeatType.on('change', mec_toggle_repeat_type); 815 mec_toggle_repeat_type(); 816 817 $(document).on('click', '.lsd-apt-day-icon-remove', function() 818 { 819 const $button = $(this); 820 const $timeslot = $button.parent(); 821 const $timeslots = $button.parents('.lsd-apt-day-timeslots'); 822 823 $timeslot.remove(); 824 if ($timeslots.find('.lsd-apt-day-timeslot-wrapper').length === 0) 825 { 826 $timeslots.find('.lsd-apt-day-timeslots-unavailable').removeClass('mec-util-hidden'); 827 } 828 });
829 830 $(document).on('click', '.lsd-apt-day-icon-plus', function() 831 { 832 const $button = $(this); 833 let key = $button.data('key'); 834 835 const $day = $button.parents('.lsd-apt-day-wrapper'); 836 const day = $day.data('key'); 837 838 const $timeslots = $day.find('.lsd-apt-day-timeslots-wrapper'); 839 const $template = $('#lsd-apt-day-templates-'+day+'-timeslot'); 840 841 key = key + 1; 842 const html = $template.html().replace(/:t:/g, key); 843 $timeslots.append(html); 844 845 $button.data('key', key); 846 $day.find('.lsd-apt-day-timeslots-unavailable').addClass('mec-util-hidden'); 847 }); 848 849 $(document).on('click', '.lsd-apt-day-icon-copy', function () 850 { 851 const $button = $(this); 852 const $sourceDay = $button.closest('.lsd-apt-day-wrapper'); 853 const sourceDayKey = $sourceDay.data('key'); 854 855 const $weekWrapper = $sourceDay.parent(); 856 const $sourceTimeslots = $sourceDay.find('.lsd-apt-day-timeslots-wrapper .lsd-apt-day-timeslot-wrapper'); 857 858 $weekWrapper.find('.lsd-apt-day-wrapper').each(function () 859 { 860 const $targetDay = $(this); 861 862 const targetDayKey = $targetDay.data('key'); 863 if (targetDayKey === sourceDayKey) return; 864 865 const isActive = $targetDay.find('.lsd-apt-day-timeslots-wrapper .lsd-apt-day-timeslot-wrapper').length > 0; 866 if (!isActive) return; 867 868 const $targetWrapper = $targetDay.find('.lsd-apt-day-timeslots-wrapper'); 869 $targetWrapper.empty(); 870 871 $sourceTimeslots.each(function () 872 { 873 const $sourceSlot = $(this); 874 const $clone = $sourceSlot.clone(true); 875 876 $sourceSlot.find('select').each(function (i) { 877 const value = $(this).val(); 878 $clone.find('select').eq(i).val(value); 879 }); 880 881 $sourceSlot.find('input').each(function (i) { 882 const value = $(this).val(); 883 $clone.find('input').eq(i).val(value); 884 }); 885 886 $clone.find('[name], [id], [for]').each(function () 887 { 888 $.each(this.attributes, function () { 889 if (this.name === 'name' || this.name === 'id' || this.name === 'for') { 890 this.value = this.value 891 .replace(`[availability][${sourceDayKey}]`, `[availability][${targetDayKey}]`) 892 .replace(`availability_${sourceDayKey}_`, `availability_${targetDayKey}_`); 893 } 894 }); 895 }); 896 897 $targetWrapper.append($clone); 898 }); 899 }); 900 }); 901 902 $(document).on('click', '.lsd-apt-adjusted-day-add', function() 903 { 904 const $wrapper = $('.lsd-apt-adjusted-days-wrapper'); 905 let key = $wrapper.data('key') || 0; 906 907 key = key + 1; 908 let html = $('#lsd-apt-adjusted-template-day').html(); 909 html = html.replace(/:i:/g, key); 910 911 $wrapper.append(html); 912 $wrapper.data('key', key); 913 914 if($.fn.datepicker) 915 { 916 $wrapper.find('.mec-apt-date-picker').last().datepicker({ 917 changeYear: true, 918 changeMonth: true, 919 dateFormat: datepicker_format, 920 gotoCurrent: true, 921 yearRange: 'c-3:c+5', 922 }); 923 } 924 }); 925 926 $(document).on('click', '.lsd-apt-adjusted-day-remove', function() 927 { 928 $(this).closest('.lsd-apt-day-wrapper').remove(); 929 }); 930 931 $(document).on('click', '.lsd-apt-adj-day-icon-plus', function() 932 { 933 const $button = $(this); 934 let key = $button.data('key'); 935 const $day = $button.closest('.lsd-apt-day-wrapper'); 936 const day = $day.data('day'); 937 const $timeslots = $day.find('.lsd-apt-day-timeslots-wrapper'); 938 939 key = key + 1; 940 let html = $('#lsd-apt-adjusted-template-timeslot').html(); 941 942 html = html.replace(/:i:/g, day).replace(/:t:/g, key); 943 $timeslots.append(html); 944 945 $button.data('key', key); 946 $day.find('.lsd-apt-day-timeslots-unavailable').addClass('mec-util-hidden'); 947 });
948}); 949 950function trigger_period_picker() 951{ 952 jQuery('.mec-date-picker-start').datepicker( 953 { 954 changeYear: true, 955 changeMonth: true, 956 dateFormat: 'yy-mm-dd', 957 gotoCurrent: true, 958 yearRange: 'c-1:c+5', 959 onSelect: function(date) 960 { 961 const selectedDate = new Date(date); 962 const endDate = new Date(selectedDate.getTime()); 963 964 const $end_picker = jQuery(this).next(); 965 $end_picker.datepicker("option", "minDate", endDate); 966 $end_picker.datepicker("option", "maxDate", '+5y'); 967 jQuery(this).trigger('change'); 968 } 969 }); 970 971 jQuery('.mec-date-picker-end').datepicker( 972 { 973 changeYear: true, 974 changeMonth: true, 975 dateFormat: 'yy-mm-dd', 976 gotoCurrent: true, 977 yearRange: 'c-1:c+5', 978 }); 979} 980 981function mec_location_toggle() 982{ 983 if(jQuery('#mec_location_id').val() != '0') jQuery('#mec_location_new_container').hide(); 984 else jQuery('#mec_location_new_container').show(); 985} 986 987function mec_organizer_toggle() 988{ 989 if(jQuery('#mec_organizer_id').val() != '0') jQuery('#mec_organizer_new_container').hide(); 990 else jQuery('#mec_organizer_new_container').show(); 991} 992 993function mec_repeat_toggle() 994{ 995 if(jQuery('#mec_repeat').is(':checked')) jQuery('.mec-form-repeating-event-row').show(); 996 else jQuery('.mec-form-repeating-event-row').hide(); 997} 998 999function mec_repeat_type_toggle() 1000{ 1001 var repeat_type = jQuery('#mec_repeat_type').val(); 1002 1003 if(repeat_type == 'certain_weekdays') 1004 { 1005 jQuery('#mec_repeat_interval_container').hide(); 1006 jQuery('#mec_repeat_certain_weekdays_container').show(); 1007 jQuery('#mec_exceptions_in_days_container').hide(); 1008 jQuery('#mec_end_wrapper').show(); 1009 jQuery('#mec-advanced-wraper').hide(); 1010 } 1011 else if(repeat_type == 'custom_days') 1012 { 1013 jQuery('#mec_repeat_interval_container').hide(); 1014 jQuery('#mec_repeat_certain_weekdays_container').hide(); 1015 jQuery('#mec_exceptions_in_days_container').show(); 1016 jQuery('#mec_end_wrapper').hide(); 1017 jQuery('#mec-advanced-wraper').hide(); 1018 } 1019 else if(repeat_type == 'advanced') 1020 { 1021 jQuery('#mec_repeat_interval_container').hide(); 1022 jQuery('#mec_repeat_certain_weekdays_container').hide(); 1023 jQuery('#mec_exceptions_in_days_container').hide(); 1024 jQuery('#mec_end_wrapper').show(); 1025 jQuery('#mec-advanced-wraper').show(); 1026 } 1027 else if(repeat_type != 'daily' && repeat_type != 'weekly' && repeat_type != 'monthly') 1028 { 1029 jQuery('#mec_repeat_interval_container').hide(); 1030 jQuery('#mec_repeat_certain_weekdays_container').hide(); 1031 jQuery('#mec_exceptions_in_days_container').hide(); 1032 jQuery('#mec_end_wrapper').show(); 1033 jQuery('#mec-advanced-wraper').hide(); 1034 } 1035 else 1036 { 1037 jQuery('#mec_repeat_interval_container').show(); 1038 jQuery('#mec_repeat_certain_weekdays_container').hide(); 1039 jQuery('#mec_exceptions_in_days_container').hide(); 1040 jQuery('#mec_end_wrapper').show(); 1041 jQuery('#mec-advanced-wraper').hide(); 1042 } 1043} 1044 1045function mec_in_days_remove(i) 1046{ 1047 jQuery('#mec_in_days_row'+i).remove(); 1048} 1049 1050function mec_in_days_edit(i) 1051{ 1052 // Date 1053 let $row = jQuery('#mec_in_days_row'+i); 1054 let value = $row.find(jQuery('input[type=hidden]')).val(); 1055 1056 const values = value.split(':'); 1057 const start_times = values[2].split('-') 1058 const end_times = values[3].split('-') 1059 1060 // Form 1061 let $form = jQuery('#mec-in-days-form'); 1062 1063 // Set Dates 1064 jQuery('#mec_exceptions_in_days_start_date').val(values[0]); 1065 jQuery('#mec_exceptions_in_days_end_date').val(values[1]); 1066 1067 // Set Times 1068 jQuery('#mec_exceptions_in_days_start_hour').val(parseInt(start_times[0])); 1069 jQuery('#mec_exceptions_in_days_start_minutes').val(parseInt(start_times[1])); 1070 jQuery('#mec_exceptions_in_days_start_ampm').val(start_times[2]); 1071 1072 jQuery('#mec_exceptions_in_days_end_hour').val(parseInt(end_times[0])); 1073 jQuery('#mec_exceptions_in_days_end_minutes').val(parseInt(end_times[1])); 1074 jQuery('#mec_exceptions_in_days_end_ampm').val(end_times[2]); 1075 1076 // Modification Mode 1077 $form.removeClass('mec-in-days-add-mode').addClass('mec-in-days-edit-mode').data('modify', i); 1078} 1079 1080function mec_not_in_days_remove(i) 1081{ 1082 jQuery('#mec_not_in_days_row'+i).remove(); 1083} 1084
1085function mec_bookings_unlimited_toggle() 1086{ 1087 jQuery('#mec_bookings_limit').toggleClass('mec-util-hidden'); 1088} 1089 1090function mec_hourly_schedule_add_day_listener() 1091{ 1092 jQuery('.mec-add-hourly-schedule-day-button').each(function() 1093 { 1094 jQuery(this).off('click').on('click', function() 1095 { 1096 var k = jQuery(this).data('key'); 1097 var raw = jQuery(this).data('raw'); 1098 var append = jQuery(this).data('append'); 1099 1100 var key = jQuery(k).val(); 1101 var html = jQuery(raw).html().replace(/:d:/g, key).replace(/:dd:/g, parseInt(key)+1); 1102 1103 jQuery(append).append(html); 1104 jQuery(k).val(parseInt(key)+1); 1105 1106 mec_hourly_schedule_listeners(); 1107 }); 1108 1109 mec_hourly_schedule_listeners(); 1110 }); 1111} 1112 1113function mec_bookings_after_occurrence_cancel_listener() 1114{ 1115 jQuery('.mec-occurrences-bookings-after-occurrences-cancel').off('change').on('change', function() 1116 { 1117 const $dropdown = jQuery(this); 1118 const value = $dropdown.val(); 1119 const $moveWrapper = $dropdown.next(); 1120 1121 if(value === 'move' || value === 'move_notify') 1122 { 1123 $moveWrapper.removeClass('w-hidden'); 1124 } 1125 else 1126 { 1127 $moveWrapper.addClass('w-hidden'); 1128 } 1129 }); 1130} 1131 1132function mec_hourly_schedule_listeners() 1133{ 1134 jQuery('.mec-add-hourly-schedule-button').off('click').on('click', function() 1135 { 1136 var prefix = jQuery(this).data('prefix'); 1137 var day = jQuery(this).data('day'); 1138 var $key = jQuery('#'+prefix+'mec_new_hourly_schedule_key'+day); 1139 1140 var key = $key.val(); 1141 var html = jQuery('#'+prefix+'mec_new_hourly_schedule_raw'+day).html().replace(/:i:/g, key).replace(/:d:/g, day).replace(); 1142 var g_field_id = prefix+"-hourly_schedules-"+day+"-schedules-:i:-description"; 1143 var field_id = prefix+"-hourly_schedules-"+day+"-schedules-"+key+"-description"; 1144 html = html.replace(g_field_id,field_id); 1145 html = html.replace(':k:',key); 1146 jQuery('#'+prefix+'mec_hourly_schedules'+day).append(html); 1147 $key.val(parseInt(key)+1); 1148 1149 wp.editor.initialize("mec"+field_id,{ 1150 tinymce: { 1151 wpautop: true, 1152 plugins : 'charmap colorpicker compat3x directionality fullscreen hr image lists media paste tabfocus textcolor wordpress wpautoresize wpdialogs wpeditimage wpemoji wpgallery wplink wptextpattern wpview', 1153 toolbar1: 'bold italic underline strikethrough | bullist numlist | blockquote hr wp_more | alignleft aligncenter alignright | link unlink | fullscreen | wp_adv', 1154 toolbar2: 'formatselect alignjustify forecolor | pastetext removeformat charmap | outdent indent | undo redo | wp_help' 1155 }, 1156 quicktags: true, 1157 mediaButtons: false, 1158 }); 1159 }); 1160 1161 jQuery(".mec-hourly-schedule-schedules").sortable({ 1162 handle: '.mec_field_sort' 1163 }); 1164} 1165 1166function mec_hourly_schedule_remove(day, i, prefix) 1167{ 1168 jQuery("#"+prefix+"mec_hourly_schedule_row"+day+'_'+i).remove(); 1169} 1170 1171function mec_hourly_schedule_day_remove(day, prefix) 1172{ 1173 jQuery("#"+prefix+"mec_meta_box_hourly_schedule_day_"+day).remove(); 1174} 1175 1176function mec_ticket_remove(i) 1177{ 1178 jQuery("#mec_ticket_row"+i).remove(); 1179} 1180 1181function mec_set_event_color(color) 1182{ 1183 try 1184 { 1185 jQuery("#mec_event_color").wpColorPicker('color', '#'+color); 1186 } 1187 catch(e) 1188 { 1189 jQuery("#mec_event_color").val(color); 1190 } 1191} 1192 1193function mec_remove_fee(key) 1194{ 1195 jQuery("#mec_fee_row"+key).remove(); 1196} 1197 1198function mec_remove_ticket_variation(key, id_prefix) 1199{ 1200 jQuery("#mec_"+id_prefix+"_row"+key).remove(); 1201} 1202 1203function add_variation_per_ticket(ticket_id) 1204{ 1205 var $input = jQuery('#mec_new_variation_per_ticket_key'); 1206 1207 var key = $input.val(); 1208 var html = jQuery('#mec_new_variation_per_ticket_raw'+ticket_id).html().replace(/:v:/g, key); 1209 1210 jQuery('#mec_ticket_variations_list'+ticket_id).append(html); 1211 $input.val(parseInt(key)+1); 1212 1213 mec_init_sortable_sections(); 1214} 1215 1216function mec_init_sortable_instance(selector, options) 1217{ 1218 jQuery(selector).each(function() 1219 { 1220 var $element = jQuery(this); 1221 1222 if(!$element.length) return; 1223 1224 if(typeof $element.data('ui-sortable') === 'undefined') 1225 { 1226 $element.sortable(options); 1227 } 1228 else 1229 { 1230 $element.sortable('refresh'); 1231 } 1232 });
1233} 1234 1235function mec_init_sortable_sections() 1236{ 1237 if(typeof jQuery.fn.sortable === 'undefined') return; 1238 1239 mec_init_sortable_instance('#mec_tickets', { handle: '.mec_field_sort', items: '> .mec_ticket_row' }); 1240 mec_init_sortable_instance('#mec_fees_list', { handle: '.mec_field_sort', items: '> .mec-box' }); 1241 mec_init_sortable_instance('[id^="mec_ticket_variations_list"]', { handle: '.mec_field_sort', items: '> .mec_ticket_variation_row' }); 1242 mec_init_sortable_instance('#mec_faq_list', { handle: '.mec_field_sort', items: '> .mec_faq_row' }); 1243} 1244 1245function mec_get_booking_condition_form_fields(prefix) 1246{ 1247 return jQuery('#mec_' + prefix + '_form_fields > li'); 1248} 1249 1250function mec_get_booking_condition_field_id($field, prefix) 1251{ 1252 return String(($field.attr('id') || '').replace('mec_' + prefix + '_fields_', '')); 1253} 1254 1255function mec_get_booking_condition_field_type($field, prefix) 1256{ 1257 const fieldId = mec_get_booking_condition_field_id($field, prefix); 1258 return String($field.find('input[name="mec[' + prefix + '_fields][' + fieldId + '][type]"]').val() || ''); 1259} 1260 1261function mec_get_booking_condition_field_label($field, prefix) 1262{ 1263 const fieldId = mec_get_booking_condition_field_id($field, prefix); 1264 const $labelInput = $field.find('input[name="mec[' + prefix + '_fields][' + fieldId + '][label]"]').first(); 1265 const fallback = jQuery.trim($field.find('.mec_' + prefix + '_field_type').first().text() || ''); 1266 1267 return jQuery.trim(($labelInput.val() || fallback || '')); 1268} 1269 1270function mec_get_booking_condition_field_option_list($field, prefix) 1271{ 1272 const fieldId = mec_get_booking_condition_field_id($field, prefix); 1273 const options = []; 1274 1275 $field.find('input[name^="mec[' + prefix + '_fields][' + fieldId + '][options]"][name$="[label]"]').each(function() 1276 { 1277 const name = jQuery(this).attr('name') || ''; 1278 const match = name.match(/\[options\]\[(.*?)\]\[label\]$/); 1279 if(!match) return; 1280 1281 options.push({ 1282 key: String(match[1]), 1283 label: jQuery.trim(jQuery(this).val() || '') 1284 }); 1285 }); 1286 1287 return options; 1288} 1289 1290function mec_booking_condition_field_has_duplicate_options($field, prefix) 1291{ 1292 const seen = {}; 1293 const options = mec_get_booking_condition_field_option_list($field, prefix); 1294 1295 for(let i = 0; i < options.length; i++) 1296 { 1297 const label = options[i].label; 1298 if(!label) continue; 1299 if(seen[label]) return true; 1300 1301 seen[label] = true; 1302 } 1303 1304 return false; 1305} 1306 1307function mec_refresh_booking_condition_editor($conditionBox) 1308{ 1309 if(!$conditionBox || !$conditionBox.length) return; 1310 1311 const prefix = String($conditionBox.data('conditionPrefix') || ''); 1312 const currentFieldId = String($conditionBox.data('conditionFieldId') || ''); 1313 const $enabled = $conditionBox.find('.mec-booking-condition-enabled'); 1314 const $controls = $conditionBox.find('.mec-booking-condition-controls'); 1315 const $source = $conditionBox.find('.mec-booking-condition-source'); 1316 const $option = $conditionBox.find('.mec-booking-condition-option'); 1317 const $matchType = $conditionBox.find('.mec-booking-condition-match-type'); 1318 const $message = $conditionBox.find('.mec-booking-condition-message'); 1319 const enabled = $enabled.is(':checked'); 1320 const strings = (typeof mec_admin_localize !== 'undefined' && mec_admin_localize.booking_conditions) ? mec_admin_localize.booking_conditions : {}; 1321 1322 $controls.toggleClass('mec-util-hidden', !enabled); 1323 if(!enabled) 1324 { 1325 $message.text(''); 1326 return; 1327 } 1328 1329 const currentSourceId = String($source.val() || $conditionBox.data('currentSourceFieldId') || ''); 1330 const currentOptionKey = String($option.val() || $conditionBox.data('currentOptionKey') || ''); 1331 const sourceFields = []; 1332 const sourceMap = {}; 1333 1334 mec_get_booking_condition_form_fields(prefix).each(function() 1335 { 1336 const $field = jQuery(this); 1337 const fieldId = mec_get_booking_condition_field_id($field, prefix); 1338 const fieldType = mec_get_booking_condition_field_type($field, prefix); 1339 1340 if(!fieldId) return; 1341 if(fieldId === currentFieldId) return false; 1342 if(jQuery.inArray(fieldType, ['checkbox', 'radio', 'select', 'agreement']) === -1) return; 1343 if(jQuery.inArray(fieldType, ['checkbox', 'radio', 'select']) !== -1 && mec_booking_condition_field_has_duplicate_options($field, prefix)) return; 1344 1345 const sourceField = { 1346 id: fieldId, 1347 type: fieldType, 1348 label: mec_get_booking_condition_field_label($field, prefix) 1349 }; 1350 1351 sourceFields.push(sourceField); 1352 sourceMap[fieldId] = sourceField; 1353 });
1354 1355 $source.empty().append('<option value="">' + (strings.select_field || 'Select a field') + '</option>'); 1356 jQuery.each(sourceFields, function(index, sourceField) 1357 { 1358 $source.append('<option value="' + sourceField.id + '">' + sourceField.label + '</option>'); 1359 }); 1360 1361 if(currentSourceId && sourceMap[currentSourceId]) $source.val(currentSourceId); 1362 1363 const selectedSourceId = String($source.val() || ''); 1364 const selectedSource = sourceMap[selectedSourceId] || null; 1365 1366 $option.empty(); 1367 1368 if(!selectedSource) 1369 { 1370 $matchType.val(''); 1371 $option.prop('disabled', true).append('<option value="">' + (strings.select_option || 'Select an option') + '</option>'); 1372 $message.text(sourceFields.length ? (strings.select_controller || 'Choose a controller field.') : (strings.no_sources || 'No eligible controller fields are available.')); 1373 $conditionBox.data('currentSourceFieldId', ''); 1374 $conditionBox.data('currentOptionKey', ''); 1375 return; 1376 } 1377 1378 if(selectedSource.type === 'agreement') 1379 { 1380 $matchType.val('checked'); 1381 $option.prop('disabled', true).append('<option value="">' + (strings.checked_state || 'Checked') + '</option>'); 1382 $message.text((strings.checked_message || 'This field will show when "%s" is checked.').replace('%s', selectedSource.label)); 1383 $conditionBox.data('currentSourceFieldId', selectedSourceId); 1384 $conditionBox.data('currentOptionKey', ''); 1385 return; 1386 } 1387 1388 const $sourceField = jQuery('#mec_' + prefix + '_fields_' + selectedSource.id); 1389 const options = mec_get_booking_condition_field_option_list($sourceField, prefix); 1390 const matchType = selectedSource.type === 'checkbox' ? 'contains_option' : 'equals_option'; 1391 1392 $matchType.val(matchType); 1393 $option.prop('disabled', false).append('<option value="">' + (strings.select_option || 'Select an option') + '</option>'); 1394 1395 jQuery.each(options, function(index, option) 1396 { 1397 $option.append('<option value="' + option.key + '">' + option.label + '</option>'); 1398 }); 1399 1400 if(currentOptionKey) $option.val(currentOptionKey); 1401 1402 if(!$option.val()) 1403 { 1404 $message.text((strings.select_value || 'Choose the value that should reveal this field.').replace('%s', selectedSource.label)); 1405 } 1406 else 1407 { 1408 $message.text(''); 1409 } 1410 1411 $conditionBox.data('currentSourceFieldId', selectedSourceId); 1412 $conditionBox.data('currentOptionKey', String($option.val() || '')); 1413} 1414 1415function mec_refresh_booking_condition_editors(prefix) 1416{ 1417 jQuery('.mec-booking-condition-box[data-condition-prefix="' + prefix + '"]').each(function() 1418 { 1419 mec_refresh_booking_condition_editor(jQuery(this)); 1420 }); 1421} 1422 1423function mec_reg_fields_option_listeners() 1424{ 1425 jQuery('button.mec-reg-field-add-option').off('click').on('click', function() 1426 { 1427 var field_id = jQuery(this).data('field-id'); 1428 var key = jQuery('#mec_new_reg_field_option_key_'+field_id).val(); 1429 var html = jQuery('#mec_reg_field_option').html().replace(/:i:/g, key).replace(/:fi:/g, field_id); 1430 1431 jQuery('#mec_reg_fields_'+field_id+'_options_container').append(html); 1432 jQuery('#mec_new_reg_field_option_key_'+field_id).val(parseInt(key)+1); 1433 mec_refresh_booking_condition_editors('reg'); 1434 }); 1435 1436 if(typeof jQuery.fn.sortable !== 'undefined') 1437 { 1438 jQuery("#mec_reg_form_fields").sortable( 1439 { 1440 handle: '.mec_reg_field_sort', 1441 stop: function() 1442 { 1443 mec_refresh_booking_condition_editors('reg'); 1444 } 1445 }); 1446 1447 jQuery(".mec_reg_fields_options_container").sortable( 1448 { 1449 handle: '.mec_reg_field_option_sort' 1450 }); 1451 1452 jQuery(".mec-hourly-schedule-days").sortable( 1453 { 1454 handle: 'h4' 1455 }); 1456 1457 jQuery(".mec-hourly-schedule-schedules").sortable({ 1458 handle: '.mec_field_sort' 1459 }); 1460 } 1461} 1462 1463function mec_reg_fields_option_remove(field_key, key) 1464{ 1465 jQuery("#mec_reg_fields_option_"+field_key+"_"+key).remove(); 1466 mec_refresh_booking_condition_editors('reg'); 1467} 1468 1469function mec_reg_fields_remove(key) 1470{ 1471 jQuery("#mec_reg_fields_"+key).remove(); 1472 mec_refresh_booking_condition_editors('reg'); 1473} 1474 1475function mec_handle_add_price_date_button(e) 1476{ 1477 var key = jQuery(e).data('key'); 1478 var p = jQuery('#mec_new_ticket_price_key_'+key).val(); 1479 var html = jQuery('#mec_new_ticket_price_raw_'+key).html().replace(/:i:/g, key).replace(/:j:/g, p); 1480 1481 jQuery('#mec-ticket-price-dates-'+key).append(html); 1482 jQuery('#mec_new_ticket_price_key_'+key).val(parseInt(p)+1); 1483 jQuery('#mec-ticket-price-dates-'+key+' .new_added').datepicker( 1484 { 1485 changeYear: true, 1486 changeMonth: true, 1487 dateFormat: datepicker_format, 1488 gotoCurrent: true, 1489 yearRange: 'c-3:c+5', 1490 });
1491} 1492 1493function mec_ticket_price_remove(ticket_key, price_key) 1494{ 1495 jQuery("#mec_ticket_price_raw_"+ticket_key+"_"+price_key).remove(); 1496} 1497 1498function mec_event_fields_option_listeners() 1499{ 1500 jQuery('button.mec-event-field-add-option').off('click').on('click', function() 1501 { 1502 var field_id = jQuery(this).data('field-id'); 1503 var key = jQuery('#mec_new_event_field_option_key_'+field_id).val(); 1504 var html = jQuery('#mec_event_field_option').html().replace(/:i:/g, key).replace(/:fi:/g, field_id); 1505 1506 jQuery('#mec_event_fields_'+field_id+'_options_container').append(html); 1507 jQuery('#mec_new_event_field_option_key_'+field_id).val(parseInt(key)+1); 1508 }); 1509 1510 if(typeof jQuery.fn.sortable !== 'undefined') 1511 { 1512 jQuery("#mec_event_form_fields").sortable( 1513 { 1514 handle: '.mec_event_field_sort' 1515 }); 1516 1517 jQuery(".mec_event_fields_options_container").sortable( 1518 { 1519 handle: '.mec_event_field_option_sort' 1520 }); 1521 } 1522} 1523 1524function mec_event_fields_option_remove(field_key, key) 1525{ 1526 jQuery("#mec_event_fields_option_"+field_key+"_"+key).remove(); 1527} 1528 1529function mec_event_fields_remove(key) 1530{ 1531 jQuery("#mec_event_fields_"+key).remove(); 1532} 1533 1534function mec_bfixed_fields_option_listeners() 1535{ 1536 jQuery('button.mec-bfixed-field-add-option').off('click').on('click', function() 1537 { 1538 var field_id = jQuery(this).data('field-id'); 1539 var key = jQuery('#mec_new_bfixed_field_option_key_'+field_id).val(); 1540 var html = jQuery('#mec_bfixed_field_option').html().replace(/:i:/g, key).replace(/:fi:/g, field_id); 1541 1542 jQuery('#mec_bfixed_fields_'+field_id+'_options_container').append(html); 1543 jQuery('#mec_new_bfixed_field_option_key_'+field_id).val(parseInt(key)+1); 1544 mec_refresh_booking_condition_editors('bfixed'); 1545 }); 1546 1547 if(typeof jQuery.fn.sortable !== 'undefined') 1548 { 1549 jQuery("#mec_bfixed_form_fields").sortable( 1550 { 1551 handle: '.mec_bfixed_field_sort', 1552 stop: function() 1553 { 1554 mec_refresh_booking_condition_editors('bfixed'); 1555 } 1556 }); 1557 1558 jQuery(".mec_bfixed_fields_options_container").sortable( 1559 { 1560 handle: '.mec_bfixed_field_option_sort' 1561 }); 1562 } 1563} 1564 1565function mec_bfixed_fields_option_remove(field_key, key) 1566{ 1567 jQuery("#mec_bfixed_fields_option_"+field_key+"_"+key).remove(); 1568 mec_refresh_booking_condition_editors('bfixed'); 1569} 1570 1571function mec_bfixed_fields_remove(key) 1572{ 1573 jQuery("#mec_bfixed_fields_"+key).remove(); 1574 mec_refresh_booking_condition_editors('bfixed'); 1575} 1576 1577function mec_additional_organizers_listeners() 1578{ 1579 jQuery('#mec_additional_organizers_add').off('click').on('click', function() 1580 { 1581 var value = jQuery('.mec-additional-organizers select').val(); 1582 console.log(value); 1583 if (!value) return; 1584 1585 var text = jQuery('.mec-additional-organizers select option:selected').text(); 1586 1587 var sortLabel = jQuery(this).data('sort-label'); 1588 var removeLabel = jQuery(this).data('remove-label'); 1589 1590 jQuery('.mec-additional-organizers-list').append('<li><span class="mec-additional-organizer-sort">'+sortLabel+'</span> <span onclick="mec_additional_organizers_remove(this);" class="mec-additional-organizer-remove">'+removeLabel+'</span><input type="hidden" name="mec[additional_organizer_ids][]" value="'+value+'"><span class="mec_orgz_item_name">'+text+'</span></li>'); 1591 1592 mec_additional_organizers_listeners(); 1593 }); 1594 1595 if(typeof jQuery.fn.sortable !== 'undefined') 1596 { 1597 jQuery(".mec-additional-organizers-list").sortable( 1598 { 1599 handle: '.mec-additional-organizer-sort' 1600 }); 1601 } 1602} 1603 1604function mec_additional_organizers_remove(element) 1605{ 1606 jQuery(element).parent().remove(); 1607} 1608 1609function mec_faq_remove(key) 1610{ 1611 jQuery("#mec_faq_row"+key).remove(); 1612} 1613 1614jQuery(document).on('focus', '.mec_date_picker', function () 1615{ 1616 if (!jQuery(this).hasClass('hasDatepicker')) 1617 { 1618 jQuery(this).datepicker({ 1619 changeYear: true, 1620 changeMonth: true, 1621 dateFormat: 'yy-mm-dd', 1622 gotoCurrent: true, 1623 yearRange: 'c-3:c+5', 1624 }); 1625 } 1626});
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.