/* * Copyright (c) 2022 LatePoint LLC. All rights reserved. */ // @codekit-prepend "bin/time.js"; // @codekit-prepend "bin/lateselect.js"; // @codekit-prepend "bin/latecheckbox.js"; // @codekit-prepend "bin/actions.js"; // @codekit-prepend "bin/notifications.js"; // @codekit-prepend "bin/shared.js"; // @codekit-prepend "bin/admin/updates.js"; // @codekit-prepend "bin/admin/main.js"; // @codekit-prepend "bin/admin/_agents.js"; // @codekit-prepend "bin/admin/_customers.js"; // @codekit-prepend "bin/admin/_customers_import.js"; // @codekit-prepend "bin/admin/_chart.js"; // @codekit-prepend "bin/admin/_calendar.js"; // @codekit-prepend "bin/admin/_processes.js"; // @codekit-prepend "bin/admin/_steps.js"; // @codekit-prepend "bin/admin/_orders.js"; // @codekit-prepend "bin/admin/_stripe_connect.js"; // DOCUMENT READY jQuery(document).ready(function( $ ) { // DASHBOARD latepoint_init_calendars(); latepoint_init_circles_charts(); latepoint_init_donut_charts(); latepoint_init_daily_bookings_chart(); latepoint_init_element_togglers(); latepoint_init_daterangepicker(jQuery('.os-date-range-picker')); latepoint_init_monthly_view(); latepoint_init_form_blocks(); latepoint_init_reminders_form(); latepoint_init_coupons_form(); latepoint_init_copy_on_click_elements(); latepoint_init_side_menu(); latepoint_init_color_picker(); latepoint_init_clickable_cells(); latepoint_init_input_masks(); latepoint_init_process_forms(); latepoint_init_sticky_side_menu(); latepoint_init_sortable_columns(); latepoint_init_accordions(); latepoint_init_default_form_fields_settings(); latepoint_init_steps_settings(); latepoint_init_booking_form_preview(); latepoint_init_sticky_side_nav(); latepoint_init_version5_intro(); jQuery(document).on({ mouseenter: function () { let $elem = jQuery(this); let offset = $elem.offset(); jQuery('body > .late-tooltip').remove(); let $popup = jQuery('<div/>').addClass('late-tooltip').text($elem.data('late-tooltip')).appendTo(jQuery('body')); $popup.css('top', offset.top - 2); $popup.css('left', offset.left + $elem.outerWidth() / 2); return false; }, mouseleave: function () { jQuery('body > .late-tooltip').remove(); } }, "[data-late-tooltip]"); jQuery('body').on('click', '.disabled-items-open-trigger', function(){ jQuery('.disabled-items-wrapper').toggleClass('is-open'); return false; }); jQuery('body').on('click', '.latepoint-side-panel-close', function(){ jQuery('.side-sub-panel-wrapper').remove(); return false; }); jQuery('#settings_list_of_phone_countries').on('change', function(){ if(jQuery(this).val() == latepoint_helper.value_all){ jQuery('.select-phone-countries-wrapper').hide(); }else{ jQuery('.select-phone-countries-wrapper').show(); } }); jQuery('.os-select-all-toggler').on('change', function(){ var $connection_wrappers = jQuery(this).closest('.white-box').find('.os-complex-connections-selector .connection'); if(jQuery(this).is(':checked')){ latepoint_complex_selector_select($connection_wrappers); }else{ latepoint_complex_selector_deselect($connection_wrappers); } return false; }); jQuery('.os-main-location-selector').on('change', function(){ var route = jQuery(this).data('route'); var params = 'id=' + jQuery(this).val(); var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' }; jQuery('.latepoint-content-w').addClass('os-loading'); jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ location.reload(); } }); }); jQuery('.os-service-durations-w').on('click', '.os-remove-duration', function(){ jQuery(this).closest('.duration-box').slideUp(300, function(){ jQuery(this).remove(); }); return false; }); jQuery('.menu-color-toggler').on('click', function(){ jQuery('.latepoint-side-menu-w').toggleClass('dark'); return false; }); jQuery('.latepoint-mobile-top-menu-trigger').on('click', function(){ jQuery(this).closest('.latepoint-all-wrapper').toggleClass('os-show-mobile-menu'); if(jQuery(this).closest('.latepoint-all-wrapper').hasClass('os-show-mobile-menu')){ jQuery('.latepoint-side-menu-w ul.side-menu > li.has-children > a').on('click', function(){ jQuery(this).closest('li').toggleClass('menu-item-sub-open-mobile'); return false; }); }else{ jQuery('.latepoint-side-menu-w ul.side-menu > li.has-children > a').off('click'); } return false; }); jQuery('.latepoint-mobile-top-search-trigger-cancel').on('click', function(){ jQuery(this).closest('.latepoint-all-wrapper').removeClass('os-show-mobile-search'); return false; }); jQuery('.latepoint-mobile-top-search-trigger').on('click', function(){ jQuery(this).closest('.latepoint-all-wrapper').toggleClass('os-show-mobile-search'); if(jQuery(this).closest('.latepoint-all-wrapper').hasClass('os-show-mobile-search')){ jQuery('.latepoint-top-search').trigger('focus'); } return false; }); jQuery('.latepoint-top-bar-w').on('click', '.top-user-info-toggler', function(){ jQuery('.latepoint-user-info-dropdown').toggleClass('os-visible'); return false; }); jQuery('.latepoint-content').on('click', '.mobile-calendar-actions-trigger', function(){ jQuery(this).closest('.calendar-mobile-controls').toggleClass('os-show-actions'); return false; }); jQuery('.latepoint-content').on('click', '.os-widget-header-actions-trigger', function(){ jQuery(this).closest('.os-widget-header').toggleClass('os-show-actions'); return false; }); jQuery('.latepoint-content').on('click', '.mobile-table-actions-trigger', function(){ jQuery(this).closest('.os-pagination-w').toggleClass('os-show-actions'); return false; }); jQuery('.download-csv-with-filters').on('click', function(){ var filter_params = jQuery(this).closest('.table-with-pagination-w').find('.os-table-filter').serialize(); filter_params+= '&download=csv'; jQuery(this).attr('href', this.href + '&' + filter_params); }); jQuery('select.pagination-page-select').on('change', function(){ latepoint_filter_table(jQuery(this).closest('.table-with-pagination-w').find('table'), jQuery(this).closest('.pagination-page-select-w'), false); }); jQuery('select.os-table-filter').on('change', function(){ latepoint_filter_table(jQuery(this).closest('table'), jQuery(this).closest('.os-form-group')); }); jQuery('input.os-table-filter').on('keyup', function(){ latepoint_filter_table(jQuery(this).closest('table'), jQuery(this).closest('.os-form-group')); }); jQuery('.customize-connection-btn').on('click', function(){ jQuery(this).closest('.connection').toggleClass('show-customize-box'); return false; }); jQuery('.connection-children-list').on('click', 'li', function(){ if(jQuery(this).hasClass('active')){ jQuery(this).removeClass('active'); jQuery(this).find('input.connection-child-is-connected').val('no'); }else{ jQuery(this).addClass('active'); jQuery(this).find('input.connection-child-is-connected').val('yes'); } latepoint_count_active_connections(jQuery(this).closest('.connection')); return false; }); jQuery('.display-toggler-control').on('change', function(){ let group = jQuery(this).data('toggler-group'); let key = jQuery(this).val(); jQuery('.display-toggler-target[data-toggler-group="' + group + '"]').hide(); jQuery('.display-toggler-target[data-toggler-group="' + group + '"][data-toggler-key="'+ key +'"]').show(); return false; }); jQuery('.add-item-category-trigger').on('click', function(){ jQuery('.add-item-category-box').toggle(); jQuery('.os-new-item-category-form-w').toggle(); return false; }); jQuery('.latepoint-top-search').on('keyup', function(event){ var $wrapper = jQuery(this).closest('.latepoint-top-search-w'); $wrapper.addClass('os-loading'); var query = jQuery(this).val(); if(event.keyCode == 27){ $wrapper.removeClass('typing'); jQuery('.latepoint-top-search-results-w').html(''); jQuery(this).val(''); $wrapper.removeClass('os-loading'); return; } if(query == ''){ $wrapper.removeClass('typing'); jQuery('.latepoint-top-search-results-w').html(''); $wrapper.removeClass('os-loading'); return; } var route = jQuery(this).data('route'); var params = 'query=' + query; var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' }; $wrapper.addClass('typing'); jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ if(!$wrapper.hasClass('typing')) return; $wrapper.removeClass('os-loading'); if(data.status === "success"){ jQuery('.latepoint-top-search-results-w').html(data.message); }else{ // console.log(data.message); } } }); }); jQuery('.appointment-status-selector').on('click', function(e){ e.stopPropagation(); }); jQuery('.latepoint-show-license-details').on('click', function(e){ jQuery(this).closest('.active-license-info').find('.license-info-w').slideToggle(200); return false; }); jQuery('.aba-button-w').on('click', function(e){ e.stopPropagation(); var confirm_message = (jQuery(this).hasClass('aba-approve')) ? latepoint_helper.approve_confirm : latepoint_helper.reject_confirm; if(confirm(confirm_message)){ var $box = jQuery(this).closest('.appointment-box-large'); $box.find('.appointment-status-selector select').val(jQuery(this).data('status')).trigger('change'); } return false; }); jQuery('.appointment-status-selector select').on('change', function(e){ var $wrapper = jQuery(this).closest('.appointment-status-selector'); var route = $wrapper.data('route'); var nonce = $wrapper.data('wp-nonce'); var booking_id = $wrapper.data('booking-id'); var status = jQuery(this).val(); jQuery(this).closest('.appointment-box-large').attr('class', 'appointment-box-large status-' + status); var params = 'id=' + booking_id + '&status=' + status + '&_wpnonce=' + nonce; var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' }; jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ if(data.status === "success"){ latepoint_add_notification(data.message); }else{ latepoint_add_notification(data.message, 'error'); // console.log(data.message); } } }); }); jQuery('body').on('click', '.open-template-variables-panel', function(){ jQuery('.latepoint-template-variables').toggleClass('is-visible'); return false; }); jQuery('body').on('click', '.close-template-variables-panel', function(){ jQuery('.latepoint-template-variables').removeClass('is-visible'); return false; }); jQuery('body').on('click', '.open-layout-template-variables-panel', function(){ jQuery('.latepoint-layout-template-variables').toggleClass('is-visible'); return false; }); jQuery('body').on('click', '.close-layout-template-variables-panel', function(){ jQuery('.latepoint-layout-template-variables').removeClass('is-visible'); return false; }); jQuery('body').on('click', '.os-notifications .os-notification-close', function(){ jQuery(this).closest('.item').remove(); return false; }); jQuery('body').on('keyup', '.os-form-group .os-form-control', function(){ if(jQuery(this).val()){ jQuery(this).closest('.os-form-group').addClass('has-value'); }else{ jQuery(this).closest('.os-form-group').removeClass('has-value'); } }); jQuery('.os-wizard-setup-w, .latepoint-settings-w, .custom-schedule-wrapper').on('click', '.ws-head', function(){ var $schedule_wrapper = jQuery(this).closest('.weekday-schedule-w'); $schedule_wrapper.toggleClass('is-editing').removeClass('day-off'); $schedule_wrapper.find('.os-toggler').removeClass('off'); $schedule_wrapper.find('input.is-active').val(1); }); jQuery('body.latepoint').on('click', '.wizard-add-edit-item-trigger', function(e){ jQuery(this).addClass('os-loading'); var add_item_route_name = jQuery(this).data('route'); var item_info = { }; if(jQuery(this).data('id')){ item_info.id = jQuery(this).data('id'); } var data = { action: latepoint_helper.route_action, route_name: add_item_route_name, params: item_info, layout: 'none', return_format: 'json' }; jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ jQuery('.wizard-add-edit-item-trigger.os-loading').removeClass('os-loading'); if(data.status === "success"){ jQuery('.os-wizard-step-content-i').html(data.message); jQuery('.os-wizard-setup-w').addClass('is-sub-editing'); jQuery('.os-wizard-footer').hide(); latepoint_init_wizard_content(); }else{ // console.log(data.message); } } }); }); jQuery('body.latepoint').on('click', '.os-wizard-trigger-next-btn', function(){ var $next_btn = jQuery(this); $next_btn.addClass('os-loading'); var current_step_code = jQuery('#wizard_current_step_code').val(); var params = 'current_step_code='+current_step_code; // work periods step if(jQuery('.os-wizard-setup-w form.weekday-schedules-w').length){ params+= '&'+ jQuery('.os-wizard-setup-w form.weekday-schedules-w .weekday-schedule-w:not(.day-off) input').serialize(); } // agent/notifications step if(jQuery('.os-wizard-default-agent-form').length){ params+= '&'+ jQuery('.os-wizard-default-agent-form input').serialize(); var $form = $('.os-wizard-default-agent-form'); var form_data = new FormData($form[0]); form_data.set('current_step_code', current_step_code); if (('lp_intlTelInputGlobals' in window) && ('lp_intlTelInputUtils' in window)) { // Get e164 formatted number from phone fields when form is submitted $form.find('input.os-mask-phone').each(function () { let telInstance = window.lp_intlTelInputGlobals.getInstance(this); if(telInstance){ const phoneInputName = this.getAttribute('name'); const phoneInputValue = window.lp_intlTelInputGlobals.getInstance(this).getNumber(window.lp_intlTelInputUtils.numberFormat.E164); form_data.set(phoneInputName, phoneInputValue); } }); } params = latepoint_formdata_to_url_encoded_string(form_data); } var data = { action: latepoint_helper.route_action, route_name: jQuery(this).data('route-name'), params: params, layout: 'none', return_format: 'json'}; jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ $next_btn.removeClass('os-loading'); if(data.status === "success"){ jQuery('#wizard_current_step_code').val(data.step_code); jQuery('.os-wizard-setup-w').attr('class', 'os-wizard-setup-w step-' + data.step_code); jQuery('.os-wizard-step-content').html(data.message); latepoint_init_wizard_content(); if(data.show_prev_btn){ jQuery('.os-wizard-prev-btn').show(); }else{ jQuery('.os-wizard-prev-btn').hide(); } if(data.show_next_btn){ jQuery('.os-wizard-next-btn').show(); }else{ jQuery('.os-wizard-next-btn').hide(); } if(!data.show_next_btn && !data.show_prev_btn){ jQuery('.os-wizard-footer').hide(); }else{ jQuery('.os-wizard-footer').show(); } } } }); return false; }); // WIZARD PREV BUTTON CLICK LOGIC jQuery('body.latepoint').on('click', '.os-wizard-trigger-prev-btn', function(){ var $prev_btn = jQuery(this); $prev_btn.addClass('os-loading'); var current_step_code = jQuery('#wizard_current_step_code').val(); var params = 'current_step_code='+current_step_code; var data = { action: latepoint_helper.route_action, route_name: jQuery(this).data('route-name'), params: params, layout: 'none', return_format: 'json'}; jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(data){ $prev_btn.removeClass('os-loading'); if(data.status === "success"){ jQuery('#wizard_current_step_code').val(data.step_code); jQuery('.os-wizard-setup-w').attr('class', 'os-wizard-setup-w step-' + data.step_code); jQuery('.os-wizard-step-content').html(data.message); latepoint_init_wizard_content(); if(data.show_prev_btn){ jQuery('.os-wizard-prev-btn').show(); }else{ jQuery('.os-wizard-prev-btn').hide(); } if(data.show_next_btn){ jQuery('.os-wizard-next-btn').show(); }else{ jQuery('.os-wizard-next-btn').hide(); } if(!data.show_next_btn && !data.show_prev_btn){ jQuery('.os-wizard-footer').hide(); }else{ jQuery('.os-wizard-footer').show(); } } } }); return false; }); jQuery('.latepoint-content-w').on('change', '.os-widget .os-trigger-reload-widget', function(){ latepoint_reload_widget(jQuery(this).closest('.os-widget')); }); jQuery('.latepoint-content-w').on('click', '.os-widget .timeline-type-toggle .timeline-type-option', function(){ jQuery(this).closest('.timeline-type-toggle').find('.timeline-type-option.active').removeClass('active'); jQuery(this).addClass('active'); jQuery('.timeline-and-availability-contents').removeClass('shows-appointments shows-availability').addClass('shows-' + jQuery(this).data('value')); jQuery('#' + jQuery(this).closest('.timeline-type-toggle').data('value-holder-id')).val(jQuery(this).data('value')); }); dragula([].slice.apply(document.querySelectorAll('.os-categories-ordering-w .os-category-children')), { moves: function (el, container, handle) { return (handle.classList.contains('os-category-drag') || handle.classList.contains('os-category-item-drag')); }, }).on('drop', function(el){ var $categories_wrapper = jQuery('.os-categories-ordering-w'); var category_datas = []; var item_datas = []; $categories_wrapper.find('.os-category-parent-w').each(function(index){ var order_number = jQuery(this).index() + 1; var parent_id = jQuery(this).parent().closest('.os-category-parent-w').data('id') || 0; category_datas.push({id: jQuery(this).data('id'), order_number: order_number, parent_id: parent_id}); }); $categories_wrapper.find('.item-in-category-w').each(function(index){ var item_order_number = jQuery(this).index() + 1; var category_id = jQuery(this).closest('.os-category-parent-w').data('id') || 0; item_datas.push({id: jQuery(this).data('id'), order_number: item_order_number, category_id: category_id}); }); latepoint_recalculate_items_count_in_category(); 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' } $categories_wrapper.addClass('os-loading'); jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(response){ $categories_wrapper.removeClass('os-loading'); if(response.status === "success"){ // latepoint_add_notification(response.message); }else{ alert(response.message); } } }); }); // Universal re-ordering dragging for form blocks dragula([jQuery('.os-draggable-form-blocks')[0]], { moves: function (el, container, handle) { return handle.classList.contains('os-form-block-drag'); }, }).on('drop', function(el){ var blocks_order_data = {}; var $draggable_form_blocks_wrapper = jQuery('.os-draggable-form-blocks'); $draggable_form_blocks_wrapper.find('.os-form-block').each(function(index){ var new_order_number = jQuery(this).index() + 1; var $block_model_id = jQuery(this).find('.os-form-block-id'); if($block_model_id.length && $block_model_id.val()) blocks_order_data[$block_model_id.val()] = new_order_number; }); var data = { action: latepoint_helper.route_action, route_name: $draggable_form_blocks_wrapper.data('order-update-route'), params: {ordered_fields: blocks_order_data, fields_for: $draggable_form_blocks_wrapper.data('fields-for')}, return_format: 'json' } $draggable_form_blocks_wrapper.addClass('os-loading'); jQuery.ajax({ type : "post", dataType : "json", url : latepoint_timestamped_ajaxurl(), data : data, success: function(response){ $draggable_form_blocks_wrapper.removeClass('os-loading'); } }); }); jQuery('body.latepoint-admin').on('click', '.os-category-edit-btn, .os-category-edit-cancel-btn, .os-category-w .os-category-name', function(){ jQuery(this).closest('.os-category-w').toggleClass('editing'); return false; }); jQuery('body.latepoint-admin').on('click', '.step-edit-btn, .step-edit-cancel-btn, .step-w .step-head', function(){ jQuery(this).closest('.step-w').toggleClass('editing'); return false; }); jQuery('body.latepoint-admin').on('click', '.agent-info-change-agent-btn', function(){ jQuery(this).closest('.agent-info-w').removeClass('selected').addClass('selecting'); return false; }); jQuery('body.latepoint-admin').on('click', '.agent-info-change-agent-btn', function(){ jQuery(this).closest('.agent-info-w').removeClass('selected').addClass('selecting'); return false; }); jQuery('body.latepoint-admin').on('click', '.customer-info-create-btn', function(){ jQuery(this).closest('.customer-info-w').removeClass('selecting').addClass('selected'); return false; }); jQuery('body.latepoint-admin').on('click', '.customer-info-load-btn', function(){ jQuery(this).closest('.customer-info-w').removeClass('selected').addClass('selecting').find('.customers-selector-search-input').trigger('focus'); return false; }); jQuery('body.latepoint-admin').on('click', '.customers-selector-cancel', function(){ jQuery(this).closest('.customer-info-w').removeClass('selecting').addClass('selected '); jQuery('.customers-options-list .customer-option').show(); jQuery('.customers-selector-search-input').val(''); return false; }); // CUSTOMER SELECTOR // SERVICES SELECTOR jQuery('body.latepoint-admin').on('click', '.service-option-selected', function(){ var $select = jQuery(this).closest('.os-services-select-field-w'); if($select.hasClass('active')){ $select.removeClass('active'); }else{ $select.addClass('active').find('input').trigger('focus'); } return false; }); jQuery('body.latepoint-admin').on('keyup', '.service-options-filter-input', function(){ var $list = jQuery(this).closest('.services-options-list'); var text = jQuery(this).val().toLowerCase(); $list.find('.service-option').hide(); // Search $list.find('.service-option').each(function(){ if(jQuery(this).text().toLowerCase().indexOf(""+text+"") != -1 ){ jQuery(this).show(); } }); return false; }); jQuery('.calendar-week-agent-w').on('click', '.calendar-load-target-date', function(event){ jQuery(this).addClass('os-loading'); latepoint_reload_week_view_calendar(jQuery(this).data('target-date')); return false; }); jQuery('.calendar-week-agent-w').on('change', '.cc-availability-toggler #overlay_service_availability', function(event){ if(jQuery(this).val() == 'on'){ jQuery('.calendar-week-agent-w .cc-service-selector').show(); }else{ jQuery('.calendar-week-agent-w .cc-service-selector').hide(); } latepoint_reload_week_view_calendar(); }); jQuery('.calendar-week-agent-w').on('change', '.trigger-weekly-calendar-reload', function(event){ latepoint_reload_week_view_calendar(); return false; }); jQuery('.latepoint-admin').on('click', '.os-complex-connections-selector .selector-trigger', function(e){ var $connection_wrapper = jQuery(this).closest('.connection'); if($connection_wrapper.hasClass('active')){ latepoint_complex_selector_deselect($connection_wrapper); jQuery(this).closest('.white-box').find('.os-select-all-toggler').prop('checked', false); }else{ latepoint_complex_selector_select($connection_wrapper); } return false; }); jQuery('.latepoint-admin').on('click', '.os-complex-connections-selector .item-quantity-selector', function(e){ let val = parseInt(jQuery(this).closest('.item-quantity-selector-w').find('.item-quantity-selector-input').val()); if(jQuery(this).data('sign') == 'plus'){ val = val + 1; }else{ val = val - 1; } val = (val > 0) ? val : 0; jQuery(this).closest('.item-quantity-selector-w').find('.item-quantity-selector-input').val(val).trigger('change'); return false; }); jQuery('.latepoint-admin').on('change', '.os-complex-connections-selector .item-quantity-selector-input', function(e){ let $this = jQuery(this); let $connection_wrapper = jQuery(this).closest('.connection'); if($this.val() > 0){ latepoint_complex_selector_select($connection_wrapper, $this.val()); }else{ latepoint_complex_selector_deselect($connection_wrapper); } return false; }); jQuery('.latepoint-admin').on('click', '.os-agents-selector .agent', function(){ if(jQuery(this).hasClass('active')){ jQuery(this).removeClass('active'); jQuery(this).find('.connection-child-is-connected').val('no'); }else{ jQuery(this).addClass('active'); jQuery(this).find('.connection-child-is-connected').val('yes'); } return false; }); jQuery('.latepoint-admin').on('click', '.os-services-selector .service', function(){ if(jQuery(this).hasClass('active')){ jQuery(this).removeClass('active'); jQuery(this).find('.connection-child-is-connected').val('no'); }else{ jQuery(this).addClass('active'); jQuery(this).find('.connection-child-is-connected').val('yes'); } return false; }); jQuery('.latepoint-admin').on( 'click', '.os-form-toggler-group', function( event ){ jQuery(this).find('.os-toggler').trigger('click'); return false; }); jQuery('.latepoint-admin').on( 'click', '.os-toggler', function( event ){ let $toggler = jQuery(this); if($toggler.data('confirm')){ if(!confirm($toggler.data('confirm'))) return false; } if($toggler.hasClass('on')){ $toggler.removeClass('on').addClass('off'); }else{ $toggler.removeClass('off').addClass('on'); } if($toggler.data('for')){ if($toggler.hasClass('os-toggler-radio')){ // radio // uncheck all radio buttons with the same name let $radio = jQuery('#' + $toggler.data('for')); jQuery('input[type="radio"][name="'+ $radio.prop('name') + '"]:checked').each(function(index){ 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'); jQuery('#'+ toggle_content_id).hide(); }); $radio.prop('checked', !$toggler.hasClass('off')); }else{ var $hiddenInput = jQuery('input[type="hidden"]#' + $toggler.data('for')); if($hiddenInput.length){ // hidden input if($toggler.data('is-string-value')){ $hiddenInput.val($toggler.hasClass('off') ? 'off' : 'on').trigger('change'); }else{ $hiddenInput.val($toggler.hasClass('off') ? 0 : 1).trigger('change'); } if($toggler.data('os-instant-update')){ let data = new FormData(); let params = $hiddenInput.serialize(); if($toggler.data('nonce')) params+= '&_wpnonce='+$toggler.data('nonce'); data.append('params', params); data.append('action', latepoint_helper.route_action); data.append('route_name', $toggler.data('os-instant-update')); data.append('return_format', 'json'); jQuery.ajax({ type: "post", dataType: "json", processData: false, contentType: false, url: latepoint_timestamped_ajaxurl(), data: data, success: function (response) { } }); } }else{ // checkbox jQuery('#' + $toggler.data('for')).prop('checked', !$toggler.hasClass('off')); } } } if($toggler.data('controlled-toggle-id')){ if($toggler.hasClass('off')){ jQuery('#' + $toggler.data('controlled-toggle-id')).hide(); }else{ jQuery('#' + $toggler.data('controlled-toggle-id')).show(); } } if($toggler.data('negative-controlled-toggle-id')){ if($toggler.hasClass('off')){ jQuery('#' + $toggler.data('negative-controlled-toggle-id')).show(); }else{ jQuery('#' + $toggler.data('negative-controlled-toggle-id')).hide(); } } $toggler.trigger('ostoggler:toggle'); return false; }); // UPLOAD/REMOVE IMAGE LINK LOGIC jQuery('.latepoint-admin').on( 'click', '.os-image-selector-trigger', function( event ){ var frame; event.preventDefault(); var $image_uploader_trigger = jQuery(this); var $image_selector_w = jQuery(this).closest('.os-image-selector-w'); var $image_container = $image_selector_w.find('.os-image-container'); var $image_id_holder = $image_selector_w.find('.os-image-id-holder'); let is_avatar = $image_selector_w.hasClass('is-avatar'); var image_exists = is_avatar ? $image_container.find('.image-self').length : $image_container.find('img').length; if(image_exists){ $image_id_holder.val(''); $image_selector_w.removeClass('has-image'); $image_container.html(''); $image_uploader_trigger.find('.os-text-holder').text($image_uploader_trigger.data('label-set-str')); }else{ // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return false; } // Create a new media frame frame = wp.media({ title: 'Select or Upload Media', button: { text: 'Use this media' }, multiple: false }); frame.on( 'select', function() { var attachment = frame.state().get('selection').first().toJSON(); if(is_avatar){ $image_container.html( '<div class="image-self" style="background-image: url('+attachment.url+')"></div>' ); }else{ $image_container.html( '<img src="'+attachment.url+'" alt=""/>' ); } $image_id_holder.val( attachment.id ); $image_selector_w.addClass('has-image'); $image_uploader_trigger.find('.os-text-holder').text($image_uploader_trigger.data('label-remove-str')); }); frame.open(); } return false; }); jQuery('.latepoint-admin').on('click', '.os-multiple-files-uploader a', function(event) { event.stopPropagation(); }); jQuery('.latepoint-admin').on('click', '.os-multiple-files-uploader', function(event) { var frame; event.preventDefault(); var $uploader_trigger = jQuery(this); var $uploader_wrapper = $uploader_trigger.closest('.os-multiple-files-uploader'); var $files_list = $uploader_wrapper.find('.os-uploaded-files-list'); var $file_ids_holder = $uploader_wrapper.find('.os-file-ids-holder'); // Create a new media frame frame = wp.media({ title: 'Select or Upload Files', button: { text: 'Add selected files' }, multiple: 'add' // Allows to select multiple files }); // When files are selected... frame.on('select', function() { var attachments = frame.state().get('selection').map(function(attachment) { attachment = attachment.toJSON(); return attachment; }); var current_ids = $file_ids_holder.val() ? $file_ids_holder.val().split(',') : []; attachments.forEach(function(attachment) { // Skip if file already added if(current_ids.indexOf(attachment.id.toString()) !== -1) return; // Add to IDs list current_ids.push(attachment.id); // Add to files list var $file_item = jQuery('<div class="os-uploaded-file" data-file-id="'+attachment.id+'">'); $file_item.append('<a class="os-file-link" href="'+attachment.url+'" target="_blank">'+attachment.filename+'</a>'); $file_item.append('<a href="#" class="os-remove-file" title="'+$uploader_trigger.data('label-remove-str')+'"><i class="latepoint-icon latepoint-icon-cross"></i></a>'); $files_list.append($file_item); }); // Update hidden field with all IDs $file_ids_holder.val(current_ids.join(',')); }); frame.open(); return false; }); jQuery('.latepoint-admin').on('click', '.os-remove-file', function(event) { event.preventDefault(); let $remove_btn = jQuery(this); const confirm_text = $remove_btn.closest('.os-uploaded-files-list').data('confirm-text') || 'Are you sure you want to remove this file?'; if (confirm(confirm_text)) { let $file_item = $remove_btn.closest('.os-uploaded-file'); let $file_ids_holder = $file_item.closest('.os-multiple-files-uploader').find('.os-file-ids-holder'); let file_id = $file_item.data('file-id'); let current_ids = $file_ids_holder.val() ? $file_ids_holder.val().split(',') : []; current_ids = current_ids.filter(function(id) { return id != file_id; }); $file_ids_holder.val(current_ids.join(',')); $file_item.remove(); } }); jQuery('body').on('click', '.latepoint-lightbox-close', function(){ latepoint_lightbox_close(); return false; }); jQuery('body').on('click', '.latepoint-side-panel-close-trigger', function(){ latepoint_close_side_panel(); return false; }); jQuery('body').on('click', '.latepoint-side-sub-panel-close-trigger', function(){ jQuery(this).closest('.side-sub-panel-wrapper').remove(); return false; }); jQuery('body.latepoint-admin').on('click', '.time-ampm-select', function(){ let $form = jQuery(this).closest('.order-item-booking-data-form-wrapper'); jQuery(this).closest('.time-ampm-w').find('.active').removeClass('active'); jQuery(this).addClass('active'); var ampm_value = jQuery(this).data('ampm-value'); jQuery(this).closest('.os-time-group').find('.ampm-value-hidden-holder').val(ampm_value); if(jQuery(this).closest('.quick-start-time-w').length){ // 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 latepoint_set_booking_end_time($form); latepoint_is_next_day($form); } if(jQuery(this).closest('.quick-end-time-w').length){ latepoint_is_next_day($form); } return false; }); jQuery('body.latepoint-admin').on('click', '.latepoint-lightbox-shadow', function(){ latepoint_lightbox_close(); return false; }); jQuery('body.latepoint-admin').on('click', '.latepoint-side-panel-shadow', function(){ jQuery('.latepoint-side-panel-w').remove(); return false; }); // SCHEDULE jQuery('body.latepoint-admin').on('click', '.ws-period-remove', function(e){ jQuery(this).closest('.ws-period').remove(); return false; }); jQuery('.latepoint-admin').on( 'click', '.weekday-schedule-w .os-toggler', function( event ){ if(jQuery(this).hasClass('off')){ jQuery(this).closest('.weekday-schedule-w').addClass('day-off').removeClass('is-editing').find('input.is-active').val(0); }else{ jQuery(this).closest('.weekday-schedule-w').removeClass('day-off').addClass('is-editing').find('input.is-active').val(1); } return false; }); });