PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.1.91
LatePoint – Calendar Booking Plugin for Appointments and Events v5.1.91
5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / assets / javascripts / admin.js
latepoint / lib / assets / javascripts Last commit date
bin 1 year ago vendor 1 year ago admin.js 1 year ago front.js 1 year ago vendor-admin.js 1 year ago vendor-front.js 1 year ago
admin.js
921 lines
1 /*
2 * Copyright (c) 2022 LatePoint LLC. All rights reserved.
3 */
4
5 // @codekit-prepend "bin/time.js";
6 // @codekit-prepend "bin/lateselect.js";
7 // @codekit-prepend "bin/latecheckbox.js";
8 // @codekit-prepend "bin/actions.js";
9 // @codekit-prepend "bin/notifications.js";
10 // @codekit-prepend "bin/shared.js";
11 // @codekit-prepend "bin/admin/updates.js";
12 // @codekit-prepend "bin/admin/main.js";
13 // @codekit-prepend "bin/admin/_agents.js";
14 // @codekit-prepend "bin/admin/_customers.js";
15 // @codekit-prepend "bin/admin/_chart.js";
16 // @codekit-prepend "bin/admin/_calendar.js";
17 // @codekit-prepend "bin/admin/_processes.js";
18 // @codekit-prepend "bin/admin/_steps.js";
19 // @codekit-prepend "bin/admin/_orders.js";
20 // @codekit-prepend "bin/admin/_stripe_connect.js";
21
22
23
24 // DOCUMENT READY
25 jQuery(document).ready(function( $ ) {
26
27
28 // DASHBOARD
29 latepoint_init_calendars();
30 latepoint_init_circles_charts();
31 latepoint_init_donut_charts();
32 latepoint_init_daily_bookings_chart();
33 latepoint_init_element_togglers();
34 latepoint_init_daterangepicker(jQuery('.os-date-range-picker'));
35 latepoint_init_monthly_view();
36 latepoint_init_form_blocks();
37 latepoint_init_reminders_form();
38 latepoint_init_coupons_form();
39 latepoint_init_copy_on_click_elements();
40 latepoint_init_side_menu();
41 latepoint_init_color_picker();
42 latepoint_init_clickable_cells();
43 latepoint_init_input_masks();
44 latepoint_init_process_forms();
45 latepoint_init_sticky_side_menu();
46 latepoint_init_sortable_columns();
47 latepoint_init_accordions();
48 latepoint_init_default_form_fields_settings();
49 latepoint_init_steps_settings();
50 latepoint_init_booking_form_preview();
51
52 latepoint_init_version5_intro();
53
54 jQuery(document).on({
55 mouseenter: function () {
56 let $elem = jQuery(this);
57 let offset = $elem.offset();
58 jQuery('body > .late-tooltip').remove();
59 let $popup = jQuery('<div/>').addClass('late-tooltip').text($elem.data('late-tooltip')).appendTo(jQuery('body'));
60 $popup.css('top', offset.top - 2);
61 $popup.css('left', offset.left + $elem.outerWidth() / 2);
62 return false;
63 },
64 mouseleave: function () {
65 jQuery('body > .late-tooltip').remove();
66 }
67 }, "[data-late-tooltip]");
68
69 jQuery('body').on('click', '.disabled-items-open-trigger', function(){
70 jQuery('.disabled-items-wrapper').toggleClass('is-open');
71 return false;
72 });
73
74 jQuery('body').on('click', '.latepoint-side-panel-close', function(){
75 jQuery('.side-sub-panel-wrapper').remove();
76 return false;
77 });
78
79 jQuery('#settings_list_of_phone_countries').on('change', function(){
80 if(jQuery(this).val() == latepoint_helper.value_all){
81 jQuery('.select-phone-countries-wrapper').hide();
82 }else{
83 jQuery('.select-phone-countries-wrapper').show();
84 }
85 });
86
87 jQuery('.os-select-all-toggler').on('change', function(){
88 var $connection_wrappers = jQuery(this).closest('.white-box').find('.os-complex-connections-selector .connection');
89 if(jQuery(this).is(':checked')){
90 latepoint_complex_selector_select($connection_wrappers);
91 }else{
92 latepoint_complex_selector_deselect($connection_wrappers);
93 }
94 return false;
95 });
96
97
98 jQuery('.os-main-location-selector').on('change', function(){
99 var route = jQuery(this).data('route');
100 var params = 'id=' + jQuery(this).val();
101 var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' };
102 jQuery('.latepoint-content-w').addClass('os-loading');
103 jQuery.ajax({
104 type : "post",
105 dataType : "json",
106 url : latepoint_timestamped_ajaxurl(),
107 data : data,
108 success: function(data){
109 location.reload();
110 }
111 });
112 });
113
114 jQuery('.os-service-durations-w').on('click', '.os-remove-duration', function(){
115 jQuery(this).closest('.duration-box').slideUp(300, function(){
116 jQuery(this).remove();
117 });
118 return false;
119 });
120
121
122 jQuery('.menu-color-toggler').on('click', function(){
123 jQuery('.latepoint-side-menu-w').toggleClass('dark');
124 return false;
125 });
126
127
128 jQuery('.latepoint-mobile-top-menu-trigger').on('click', function(){
129 jQuery(this).closest('.latepoint-all-wrapper').toggleClass('os-show-mobile-menu');
130 if(jQuery(this).closest('.latepoint-all-wrapper').hasClass('os-show-mobile-menu')){
131 jQuery('.latepoint-side-menu-w ul.side-menu > li.has-children > a').on('click', function(){
132 jQuery(this).closest('li').toggleClass('menu-item-sub-open-mobile');
133 return false;
134 });
135 }else{
136 jQuery('.latepoint-side-menu-w ul.side-menu > li.has-children > a').off('click');
137 }
138 return false;
139 });
140
141 jQuery('.latepoint-mobile-top-search-trigger-cancel').on('click', function(){
142 jQuery(this).closest('.latepoint-all-wrapper').removeClass('os-show-mobile-search');
143 return false;
144 });
145
146 jQuery('.latepoint-mobile-top-search-trigger').on('click', function(){
147 jQuery(this).closest('.latepoint-all-wrapper').toggleClass('os-show-mobile-search');
148 if(jQuery(this).closest('.latepoint-all-wrapper').hasClass('os-show-mobile-search')){
149 jQuery('.latepoint-top-search').trigger('focus');
150 }
151 return false;
152 });
153
154
155 jQuery('.latepoint-side-menu-w').on('click', '.top-user-info-toggler', function(){
156 jQuery('.latepoint-user-info-dropdown').toggleClass('os-visible');
157 return false;
158 });
159
160 jQuery('.latepoint-content').on('click', '.mobile-calendar-actions-trigger', function(){
161 jQuery(this).closest('.calendar-mobile-controls').toggleClass('os-show-actions');
162 return false;
163 });
164
165 jQuery('.latepoint-content').on('click', '.os-widget-header-actions-trigger', function(){
166 jQuery(this).closest('.os-widget-header').toggleClass('os-show-actions');
167 return false;
168 });
169
170 jQuery('.latepoint-content').on('click', '.mobile-table-actions-trigger', function(){
171 jQuery(this).closest('.os-pagination-w').toggleClass('os-show-actions');
172 return false;
173 });
174
175
176
177
178
179
180 jQuery('.download-csv-with-filters').on('click', function(){
181 var filter_params = jQuery(this).closest('.table-with-pagination-w').find('.os-table-filter').serialize();
182 filter_params+= '&download=csv';
183 jQuery(this).attr('href', this.href + '&' + filter_params);
184 });
185
186 jQuery('select.pagination-page-select').on('change', function(){
187 latepoint_filter_table(jQuery(this).closest('.table-with-pagination-w').find('table'), jQuery(this).closest('.pagination-page-select-w'), false);
188 });
189
190 jQuery('select.os-table-filter').on('change', function(){
191 latepoint_filter_table(jQuery(this).closest('table'), jQuery(this).closest('.os-form-group'));
192 });
193
194 jQuery('input.os-table-filter').on('keyup', function(){
195 latepoint_filter_table(jQuery(this).closest('table'), jQuery(this).closest('.os-form-group'));
196 });
197
198
199 jQuery('.customize-connection-btn').on('click', function(){
200 jQuery(this).closest('.connection').toggleClass('show-customize-box');
201 return false;
202 });
203
204 jQuery('.connection-children-list').on('click', 'li', function(){
205 if(jQuery(this).hasClass('active')){
206 jQuery(this).removeClass('active');
207 jQuery(this).find('input.connection-child-is-connected').val('no');
208 }else{
209 jQuery(this).addClass('active');
210 jQuery(this).find('input.connection-child-is-connected').val('yes');
211 }
212 latepoint_count_active_connections(jQuery(this).closest('.connection'));
213 return false;
214 });
215
216 jQuery('.display-toggler-control').on('change', function(){
217 let group = jQuery(this).data('toggler-group');
218 let key = jQuery(this).val();
219 jQuery('.display-toggler-target[data-toggler-group="' + group + '"]').hide();
220 jQuery('.display-toggler-target[data-toggler-group="' + group + '"][data-toggler-key="'+ key +'"]').show();
221 return false;
222 });
223
224 jQuery('.add-item-category-trigger').on('click', function(){
225 jQuery('.add-item-category-box').toggle();
226 jQuery('.os-new-item-category-form-w').toggle();
227 return false;
228 });
229
230 jQuery('.latepoint-top-search').on('keyup', function(event){
231 var $wrapper = jQuery(this).closest('.latepoint-top-search-w');
232 $wrapper.addClass('os-loading');
233 var query = jQuery(this).val();
234 if(event.keyCode == 27){
235 $wrapper.removeClass('typing');
236 jQuery('.latepoint-top-search-results-w').html('');
237 jQuery(this).val('');
238 $wrapper.removeClass('os-loading');
239 return;
240 }
241 if(query == ''){
242 $wrapper.removeClass('typing');
243 jQuery('.latepoint-top-search-results-w').html('');
244 $wrapper.removeClass('os-loading');
245 return;
246 }
247 var route = jQuery(this).data('route');
248 var params = 'query=' + query;
249 var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' };
250 $wrapper.addClass('typing');
251 jQuery.ajax({
252 type : "post",
253 dataType : "json",
254 url : latepoint_timestamped_ajaxurl(),
255 data : data,
256 success: function(data){
257 if(!$wrapper.hasClass('typing')) return;
258 $wrapper.removeClass('os-loading');
259 if(data.status === "success"){
260 jQuery('.latepoint-top-search-results-w').html(data.message);
261 }else{
262 // console.log(data.message);
263 }
264 }
265 });
266 });
267
268
269 jQuery('.appointment-status-selector').on('click', function(e){
270 e.stopPropagation();
271 });
272
273 jQuery('.latepoint-show-license-details').on('click', function(e){
274 jQuery(this).closest('.active-license-info').find('.license-info-w').slideToggle(200);
275 return false;
276 });
277
278 jQuery('.aba-button-w').on('click', function(e){
279 e.stopPropagation();
280 var confirm_message = (jQuery(this).hasClass('aba-approve')) ? latepoint_helper.approve_confirm : latepoint_helper.reject_confirm;
281 if(confirm(confirm_message)){
282 var $box = jQuery(this).closest('.appointment-box-large');
283 $box.find('.appointment-status-selector select').val(jQuery(this).data('status')).trigger('change');
284 }
285 return false;
286 });
287
288
289
290 jQuery('.appointment-status-selector select').on('change', function(e){
291 var $wrapper = jQuery(this).closest('.appointment-status-selector');
292 var route = $wrapper.data('route');
293 var nonce = $wrapper.data('wp-nonce');
294 var booking_id = $wrapper.data('booking-id');
295 var status = jQuery(this).val();
296 jQuery(this).closest('.appointment-box-large').attr('class', 'appointment-box-large status-' + status);
297 var params = 'id=' + booking_id + '&status=' + status + '&_wpnonce=' + nonce;
298 var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' };
299 jQuery.ajax({
300 type : "post",
301 dataType : "json",
302 url : latepoint_timestamped_ajaxurl(),
303 data : data,
304 success: function(data){
305 if(data.status === "success"){
306 latepoint_add_notification(data.message);
307 }else{
308 latepoint_add_notification(data.message, 'error');
309 // console.log(data.message);
310 }
311 }
312 });
313 });
314
315 jQuery('body').on('click', '.open-template-variables-panel', function(){
316 jQuery('.latepoint-template-variables').toggleClass('is-visible');
317 return false;
318 });
319
320 jQuery('body').on('click', '.close-template-variables-panel', function(){
321 jQuery('.latepoint-template-variables').removeClass('is-visible');
322 return false;
323 });
324
325 jQuery('body').on('click', '.open-layout-template-variables-panel', function(){
326 jQuery('.latepoint-layout-template-variables').toggleClass('is-visible');
327 return false;
328 });
329
330 jQuery('body').on('click', '.close-layout-template-variables-panel', function(){
331 jQuery('.latepoint-layout-template-variables').removeClass('is-visible');
332 return false;
333 });
334
335 jQuery('body').on('click', '.os-notifications .os-notification-close', function(){
336 jQuery(this).closest('.item').remove();
337 return false;
338 });
339
340
341 jQuery('body').on('keyup', '.os-form-group .os-form-control', function(){
342 if(jQuery(this).val()){
343 jQuery(this).closest('.os-form-group').addClass('has-value');
344 }else{
345 jQuery(this).closest('.os-form-group').removeClass('has-value');
346 }
347 });
348
349
350
351 jQuery('.os-wizard-setup-w, .latepoint-settings-w, .custom-schedule-wrapper').on('click', '.ws-head', function(){
352 var $schedule_wrapper = jQuery(this).closest('.weekday-schedule-w');
353 $schedule_wrapper.toggleClass('is-editing').removeClass('day-off');
354 $schedule_wrapper.find('.os-toggler').removeClass('off');
355 $schedule_wrapper.find('input.is-active').val(1);
356 });
357
358
359 jQuery('.latepoint').on('click', '.wizard-add-edit-item-trigger', function(e){
360 jQuery(this).addClass('os-loading');
361 var add_item_route_name = jQuery(this).data('route');
362 var item_info = { };
363 if(jQuery(this).data('id')){
364 item_info.id = jQuery(this).data('id');
365 }
366 var data = { action: latepoint_helper.route_action, route_name: add_item_route_name, params: item_info, layout: 'none', return_format: 'json' };
367 jQuery.ajax({
368 type : "post",
369 dataType : "json",
370 url : latepoint_timestamped_ajaxurl(),
371 data : data,
372 success: function(data){
373 jQuery('.wizard-add-edit-item-trigger.os-loading').removeClass('os-loading');
374 if(data.status === "success"){
375 jQuery('.os-wizard-step-content-i').html(data.message);
376 jQuery('.os-wizard-setup-w').addClass('is-sub-editing');
377 jQuery('.os-wizard-footer').hide();
378 latepoint_init_wizard_content();
379 }else{
380 // console.log(data.message);
381 }
382 }
383 });
384 });
385
386
387
388
389 jQuery('.latepoint').on('click', '.os-wizard-trigger-next-btn', function(){
390 var $next_btn = jQuery(this);
391 $next_btn.addClass('os-loading');
392 var current_step_code = jQuery('#wizard_current_step_code').val();
393 var params = 'current_step_code='+current_step_code;
394
395 // work periods step
396 if(jQuery('.os-wizard-setup-w form.weekday-schedules-w').length){
397 params+= '&'+ jQuery('.os-wizard-setup-w form.weekday-schedules-w .weekday-schedule-w:not(.day-off) input').serialize();
398 }
399 // agent/notifications step
400 if(jQuery('.os-wizard-default-agent-form').length){
401 params+= '&'+ jQuery('.os-wizard-default-agent-form input').serialize();
402
403 var $form = $('.os-wizard-default-agent-form');
404 var form_data = new FormData($form[0]);
405 form_data.set('current_step_code', current_step_code);
406
407 if (('lp_intlTelInputGlobals' in window) && ('lp_intlTelInputUtils' in window)) {
408 // Get e164 formatted number from phone fields when form is submitted
409 $form.find('input.os-mask-phone').each(function () {
410 let telInstance = window.lp_intlTelInputGlobals.getInstance(this);
411 if(telInstance){
412 const phoneInputName = this.getAttribute('name');
413 const phoneInputValue = window.lp_intlTelInputGlobals.getInstance(this).getNumber(window.lp_intlTelInputUtils.numberFormat.E164);
414 form_data.set(phoneInputName, phoneInputValue);
415 }
416 });
417 }
418 params = latepoint_formdata_to_url_encoded_string(form_data);
419 }
420
421 var data = {
422 action: latepoint_helper.route_action,
423 route_name: jQuery(this).data('route-name'),
424 params: params,
425 layout: 'none',
426 return_format: 'json'};
427 jQuery.ajax({
428 type : "post",
429 dataType : "json",
430 url : latepoint_timestamped_ajaxurl(),
431 data : data,
432 success: function(data){
433 $next_btn.removeClass('os-loading');
434 if(data.status === "success"){
435 jQuery('#wizard_current_step_code').val(data.step_code);
436 jQuery('.os-wizard-setup-w').attr('class', 'os-wizard-setup-w step-' + data.step_code);
437 jQuery('.os-wizard-step-content').html(data.message);
438 latepoint_init_wizard_content();
439 if(data.show_prev_btn){
440 jQuery('.os-wizard-prev-btn').show();
441 }else{
442 jQuery('.os-wizard-prev-btn').hide();
443 }
444 if(data.show_next_btn){
445 jQuery('.os-wizard-next-btn').show();
446 }else{
447 jQuery('.os-wizard-next-btn').hide();
448 }
449 if(!data.show_next_btn && !data.show_prev_btn){
450 jQuery('.os-wizard-footer').hide();
451 }else{
452 jQuery('.os-wizard-footer').show();
453 }
454 }
455 }
456 });
457 return false;
458 });
459
460 // WIZARD PREV BUTTON CLICK LOGIC
461 jQuery('.latepoint').on('click', '.os-wizard-trigger-prev-btn', function(){
462 var $prev_btn = jQuery(this);
463 $prev_btn.addClass('os-loading');
464 var current_step_code = jQuery('#wizard_current_step_code').val();
465 var params = 'current_step_code='+current_step_code;
466 var data = { action: latepoint_helper.route_action, route_name: jQuery(this).data('route-name'), params: params, layout: 'none', return_format: 'json'};
467 jQuery.ajax({
468 type : "post",
469 dataType : "json",
470 url : latepoint_timestamped_ajaxurl(),
471 data : data,
472 success: function(data){
473 $prev_btn.removeClass('os-loading');
474 if(data.status === "success"){
475 jQuery('#wizard_current_step_code').val(data.step_code);
476 jQuery('.os-wizard-setup-w').attr('class', 'os-wizard-setup-w step-' + data.step_code);
477 jQuery('.os-wizard-step-content').html(data.message);
478 latepoint_init_wizard_content();
479 if(data.show_prev_btn){
480 jQuery('.os-wizard-prev-btn').show();
481 }else{
482 jQuery('.os-wizard-prev-btn').hide();
483 }
484 if(data.show_next_btn){
485 jQuery('.os-wizard-next-btn').show();
486 }else{
487 jQuery('.os-wizard-next-btn').hide();
488 }
489 if(!data.show_next_btn && !data.show_prev_btn){
490 jQuery('.os-wizard-footer').hide();
491 }else{
492 jQuery('.os-wizard-footer').show();
493 }
494 }
495 }
496 });
497 return false;
498 });
499
500 jQuery('.latepoint-content-w').on('change', '.os-widget .os-trigger-reload-widget', function(){
501 latepoint_reload_widget(jQuery(this).closest('.os-widget'));
502 });
503
504 jQuery('.latepoint-content-w').on('click', '.os-widget .timeline-type-toggle .timeline-type-option', function(){
505 jQuery(this).closest('.timeline-type-toggle').find('.timeline-type-option.active').removeClass('active');
506 jQuery(this).addClass('active');
507 jQuery('.timeline-and-availability-contents').removeClass('shows-appointments shows-availability').addClass('shows-' + jQuery(this).data('value'));
508 jQuery('#' + jQuery(this).closest('.timeline-type-toggle').data('value-holder-id')).val(jQuery(this).data('value'));
509 });
510
511
512 dragula([].slice.apply(document.querySelectorAll('.os-categories-ordering-w .os-category-children')), {
513 moves: function (el, container, handle) {
514 return (handle.classList.contains('os-category-drag') || handle.classList.contains('os-category-item-drag'));
515 },
516 }).on('drop', function(el){
517 var $categories_wrapper = jQuery('.os-categories-ordering-w');
518 var category_datas = [];
519 var item_datas = [];
520
521 $categories_wrapper.find('.os-category-parent-w').each(function(index){
522 var order_number = jQuery(this).index() + 1;
523 var parent_id = jQuery(this).parent().closest('.os-category-parent-w').data('id') || 0;
524 category_datas.push({id: jQuery(this).data('id'), order_number: order_number, parent_id: parent_id});
525 });
526 $categories_wrapper.find('.item-in-category-w').each(function(index){
527 var item_order_number = jQuery(this).index() + 1;
528 var category_id = jQuery(this).closest('.os-category-parent-w').data('id') || 0;
529 item_datas.push({id: jQuery(this).data('id'), order_number: item_order_number, category_id: category_id});
530 });
531 latepoint_recalculate_items_count_in_category();
532 var data = { action: latepoint_helper.route_action, route_name: $categories_wrapper.data('category-order-update-route'), params: {category_datas: category_datas, item_datas: item_datas}, return_format: 'json' }
533 $categories_wrapper.addClass('os-loading');
534 jQuery.ajax({
535 type : "post",
536 dataType : "json",
537 url : latepoint_timestamped_ajaxurl(),
538 data : data,
539 success: function(response){
540 $categories_wrapper.removeClass('os-loading');
541 if(response.status === "success"){
542 // latepoint_add_notification(response.message);
543 }else{
544 alert(response.message);
545 }
546 }
547 });
548 });
549
550
551 // Universal re-ordering dragging for form blocks
552 dragula([jQuery('.os-draggable-form-blocks')[0]], {
553 moves: function (el, container, handle) {
554 return handle.classList.contains('os-form-block-drag');
555 },
556 }).on('drop', function(el){
557 var blocks_order_data = {};
558 var $draggable_form_blocks_wrapper = jQuery('.os-draggable-form-blocks');
559 $draggable_form_blocks_wrapper.find('.os-form-block').each(function(index){
560 var new_order_number = jQuery(this).index() + 1;
561 var $block_model_id = jQuery(this).find('.os-form-block-id');
562 if($block_model_id.length && $block_model_id.val()) blocks_order_data[$block_model_id.val()] = new_order_number;
563 });
564 var data = { action: latepoint_helper.route_action,
565 route_name: $draggable_form_blocks_wrapper.data('order-update-route'),
566 params: {ordered_fields: blocks_order_data,
567 fields_for: $draggable_form_blocks_wrapper.data('fields-for')},
568 return_format: 'json' }
569 $draggable_form_blocks_wrapper.addClass('os-loading');
570 jQuery.ajax({
571 type : "post",
572 dataType : "json",
573 url : latepoint_timestamped_ajaxurl(),
574 data : data,
575 success: function(response){
576 $draggable_form_blocks_wrapper.removeClass('os-loading');
577 }
578 });
579 });
580
581
582 jQuery('body.latepoint-admin').on('click', '.os-category-edit-btn, .os-category-edit-cancel-btn, .os-category-w .os-category-name', function(){
583 jQuery(this).closest('.os-category-w').toggleClass('editing');
584 return false;
585 });
586
587 jQuery('body.latepoint-admin').on('click', '.step-edit-btn, .step-edit-cancel-btn, .step-w .step-head', function(){
588 jQuery(this).closest('.step-w').toggleClass('editing');
589 return false;
590 });
591
592 jQuery('body.latepoint-admin').on('click', '.agent-info-change-agent-btn', function(){
593 jQuery(this).closest('.agent-info-w').removeClass('selected').addClass('selecting');
594 return false;
595 });
596
597 jQuery('body.latepoint-admin').on('click', '.agent-info-change-agent-btn', function(){
598 jQuery(this).closest('.agent-info-w').removeClass('selected').addClass('selecting');
599 return false;
600 });
601
602
603 jQuery('body.latepoint-admin').on('click', '.customer-info-create-btn', function(){
604 jQuery(this).closest('.customer-info-w').removeClass('selecting').addClass('selected');
605 return false;
606 });
607
608 jQuery('body.latepoint-admin').on('click', '.customer-info-load-btn', function(){
609 jQuery(this).closest('.customer-info-w').removeClass('selected').addClass('selecting').find('.customers-selector-search-input').trigger('focus');
610 return false;
611 });
612
613 jQuery('body.latepoint-admin').on('click', '.customers-selector-cancel', function(){
614 jQuery(this).closest('.customer-info-w').removeClass('selecting').addClass('selected ');
615 jQuery('.customers-options-list .customer-option').show();
616 jQuery('.customers-selector-search-input').val('');
617 return false;
618 });
619
620 // CUSTOMER SELECTOR
621
622 // SERVICES SELECTOR
623 jQuery('body.latepoint-admin').on('click', '.service-option-selected', function(){
624 var $select = jQuery(this).closest('.os-services-select-field-w');
625 if($select.hasClass('active')){
626 $select.removeClass('active');
627 }else{
628 $select.addClass('active').find('input').trigger('focus');
629 }
630 return false;
631 });
632
633
634 jQuery('body.latepoint-admin').on('keyup', '.service-options-filter-input', function(){
635 var $list = jQuery(this).closest('.services-options-list');
636 var text = jQuery(this).val().toLowerCase();
637 $list.find('.service-option').hide();
638
639 // Search
640 $list.find('.service-option').each(function(){
641
642 if(jQuery(this).text().toLowerCase().indexOf(""+text+"") != -1 ){
643 jQuery(this).show();
644 }
645 });
646 return false;
647 });
648
649
650 jQuery('.calendar-week-agent-w').on('click', '.calendar-load-target-date', function(event){
651 jQuery(this).addClass('os-loading');
652 latepoint_reload_week_view_calendar(jQuery(this).data('target-date'));
653 return false;
654 });
655
656 jQuery('.calendar-week-agent-w').on('change', '.cc-availability-toggler #overlay_service_availability', function(event){
657 if(jQuery(this).val() == 'on'){
658 jQuery('.calendar-week-agent-w .cc-service-selector').show();
659 }else{
660 jQuery('.calendar-week-agent-w .cc-service-selector').hide();
661 }
662 latepoint_reload_week_view_calendar();
663 });
664
665
666 jQuery('.calendar-week-agent-w').on('change', '.trigger-weekly-calendar-reload', function(event){
667 latepoint_reload_week_view_calendar();
668 return false;
669 });
670
671 jQuery('.latepoint-admin').on('click', '.os-complex-connections-selector .selector-trigger', function(e){
672 var $connection_wrapper = jQuery(this).closest('.connection');
673 if($connection_wrapper.hasClass('active')){
674 latepoint_complex_selector_deselect($connection_wrapper);
675 jQuery(this).closest('.white-box').find('.os-select-all-toggler').prop('checked', false);
676 }else{
677 latepoint_complex_selector_select($connection_wrapper);
678 }
679 return false;
680 });
681
682 jQuery('.latepoint-admin').on('click', '.os-complex-connections-selector .item-quantity-selector', function(e){
683 let val = parseInt(jQuery(this).closest('.item-quantity-selector-w').find('.item-quantity-selector-input').val());
684 if(jQuery(this).data('sign') == 'plus'){
685 val = val + 1;
686 }else{
687 val = val - 1;
688 }
689 val = (val > 0) ? val : 0;
690 jQuery(this).closest('.item-quantity-selector-w').find('.item-quantity-selector-input').val(val).trigger('change');
691 return false;
692 });
693
694 jQuery('.latepoint-admin').on('change', '.os-complex-connections-selector .item-quantity-selector-input', function(e){
695 let $this = jQuery(this);
696 let $connection_wrapper = jQuery(this).closest('.connection');
697 if($this.val() > 0){
698 latepoint_complex_selector_select($connection_wrapper, $this.val());
699 }else{
700 latepoint_complex_selector_deselect($connection_wrapper);
701 }
702 return false;
703 });
704
705 jQuery('.latepoint-admin').on('click', '.os-agents-selector .agent', function(){
706 if(jQuery(this).hasClass('active')){
707 jQuery(this).removeClass('active');
708 jQuery(this).find('.connection-child-is-connected').val('no');
709 }else{
710 jQuery(this).addClass('active');
711 jQuery(this).find('.connection-child-is-connected').val('yes');
712 }
713 return false;
714 });
715
716 jQuery('.latepoint-admin').on('click', '.os-services-selector .service', function(){
717 if(jQuery(this).hasClass('active')){
718 jQuery(this).removeClass('active');
719 jQuery(this).find('.connection-child-is-connected').val('no');
720 }else{
721 jQuery(this).addClass('active');
722 jQuery(this).find('.connection-child-is-connected').val('yes');
723 }
724 return false;
725 });
726
727 jQuery('.latepoint-admin').on( 'click', '.os-form-toggler-group', function( event ){
728 jQuery(this).find('.os-toggler').trigger('click');
729 return false;
730 });
731
732 jQuery('.latepoint-admin').on( 'click', '.os-toggler', function( event ){
733 let $toggler = jQuery(this);
734 if($toggler.data('confirm')){
735 if(!confirm($toggler.data('confirm'))) return false;
736 }
737 if($toggler.hasClass('on')){
738 $toggler.removeClass('on').addClass('off');
739 }else{
740 $toggler.removeClass('off').addClass('on');
741 }
742 if($toggler.data('for')){
743 if($toggler.hasClass('os-toggler-radio')){
744 // radio
745 // uncheck all radio buttons with the same name
746 let $radio = jQuery('#' + $toggler.data('for'));
747 jQuery('input[type="radio"][name="'+ $radio.prop('name') + '"]:checked').each(function(index){
748 let toggle_content_id = jQuery(this).prop('checked', false).closest('.os-toggler-w').find('.os-toggler.on').removeClass('on').addClass('off').data('controlled-toggle-id');
749 jQuery('#'+ toggle_content_id).hide();
750 });
751 $radio.prop('checked', !$toggler.hasClass('off'));
752 }else{
753 var $hiddenInput = jQuery('input[type="hidden"]#' + $toggler.data('for'));
754 if($hiddenInput.length){
755 // hidden input
756 if($toggler.data('is-string-value')){
757 $hiddenInput.val($toggler.hasClass('off') ? 'off' : 'on').trigger('change');
758 }else{
759 $hiddenInput.val($toggler.hasClass('off') ? 0 : 1).trigger('change');
760 }
761
762 if($toggler.data('os-instant-update')){
763 let data = new FormData();
764
765 let params = $hiddenInput.serialize();
766 if($toggler.data('nonce')) params+= '&_wpnonce='+$toggler.data('nonce');
767 data.append('params', params);
768 data.append('action', latepoint_helper.route_action);
769 data.append('route_name', $toggler.data('os-instant-update'));
770 data.append('return_format', 'json');
771
772 jQuery.ajax({
773 type: "post",
774 dataType: "json",
775 processData: false,
776 contentType: false,
777 url: latepoint_timestamped_ajaxurl(),
778 data: data,
779 success: function (response) {
780
781 }
782 });
783 }
784 }else{
785 // checkbox
786 jQuery('#' + $toggler.data('for')).prop('checked', !$toggler.hasClass('off'));
787 }
788 }
789 }
790 if($toggler.data('controlled-toggle-id')){
791 if($toggler.hasClass('off')){
792 jQuery('#' + $toggler.data('controlled-toggle-id')).hide();
793 }else{
794 jQuery('#' + $toggler.data('controlled-toggle-id')).show();
795 }
796 }
797 $toggler.trigger('ostoggler:toggle');
798 return false;
799 });
800
801
802
803 // UPLOAD/REMOVE IMAGE LINK LOGIC
804 jQuery('.latepoint-admin').on( 'click', '.os-image-selector-trigger', function( event ){
805 var frame;
806
807 event.preventDefault();
808
809 var $image_uploader_trigger = jQuery(this);
810 var $image_selector_w = jQuery(this).closest('.os-image-selector-w');
811 var $image_container = $image_selector_w.find('.os-image-container');
812 var $image_id_holder = $image_selector_w.find('.os-image-id-holder');
813
814 let is_avatar = $image_selector_w.hasClass('is-avatar');
815
816 var image_exists = is_avatar ? $image_container.find('.image-self').length : $image_container.find('img').length;
817
818 if(image_exists){
819 $image_id_holder.val('');
820 $image_selector_w.removeClass('has-image');
821 $image_container.html('');
822 $image_uploader_trigger.find('.os-text-holder').text($image_uploader_trigger.data('label-set-str'));
823 }else{
824 // If the media frame already exists, reopen it.
825 if ( frame ) {
826 frame.open();
827 return false;
828 }
829
830 // Create a new media frame
831 frame = wp.media({
832 title: 'Select or Upload Media',
833 button: { text: 'Use this media' },
834 multiple: false
835 });
836
837 frame.on( 'select', function() {
838 var attachment = frame.state().get('selection').first().toJSON();
839 if(is_avatar){
840 $image_container.html( '<div class="image-self" style="background-image: url('+attachment.url+')"></div>' );
841 }else{
842 $image_container.html( '<img src="'+attachment.url+'" alt=""/>' );
843 }
844 $image_id_holder.val( attachment.id );
845 $image_selector_w.addClass('has-image');
846 $image_uploader_trigger.find('.os-text-holder').text($image_uploader_trigger.data('label-remove-str'));
847 });
848
849 frame.open();
850 }
851
852 return false;
853 });
854
855
856
857 jQuery('body').on('click', '.latepoint-lightbox-close', function(){
858 latepoint_lightbox_close();
859 return false;
860 });
861
862
863 jQuery('body').on('click', '.latepoint-side-panel-close-trigger', function(){
864 latepoint_close_side_panel();
865 return false;
866 });
867 jQuery('body').on('click', '.latepoint-side-sub-panel-close-trigger', function(){
868 jQuery(this).closest('.side-sub-panel-wrapper').remove();
869 return false;
870 });
871
872
873
874 jQuery('body.latepoint-admin').on('click', '.time-ampm-select', function(){
875 let $form = jQuery(this).closest('.order-item-booking-data-form-wrapper');
876 jQuery(this).closest('.time-ampm-w').find('.active').removeClass('active');
877 jQuery(this).addClass('active');
878 var ampm_value = jQuery(this).data('ampm-value');
879 jQuery(this).closest('.os-time-group').find('.ampm-value-hidden-holder').val(ampm_value);
880 if(jQuery(this).closest('.quick-start-time-w').length){
881 // if called from quick edit form - we need to make sure it accurately changes time to next day if end time is earlier than start time
882 latepoint_set_booking_end_time($form);
883 latepoint_is_next_day($form);
884 }
885 if(jQuery(this).closest('.quick-end-time-w').length){
886 latepoint_is_next_day($form);
887 }
888 return false;
889 });
890
891
892 jQuery('body.latepoint-admin').on('click', '.latepoint-lightbox-shadow', function(){
893 latepoint_lightbox_close();
894 return false;
895 });
896
897 jQuery('body.latepoint-admin').on('click', '.latepoint-side-panel-shadow', function(){
898 jQuery('.latepoint-side-panel-w').remove();
899 return false;
900 });
901
902 // SCHEDULE
903
904 jQuery('body.latepoint-admin').on('click', '.ws-period-remove', function(e){
905 jQuery(this).closest('.ws-period').remove();
906 return false;
907 });
908
909
910 jQuery('.latepoint-admin').on( 'click', '.weekday-schedule-w .os-toggler', function( event ){
911 if(jQuery(this).hasClass('off')){
912 jQuery(this).closest('.weekday-schedule-w').addClass('day-off').removeClass('is-editing').find('input.is-active').val(0);
913 }else{
914 jQuery(this).closest('.weekday-schedule-w').removeClass('day-off').addClass('is-editing').find('input.is-active').val(1);
915 }
916 return false;
917 });
918
919
920
921 });