1(function ($) { 2 3 var Advanced = function ($container, options) { 4 let obj = this, 5 hash = window.location.href.split('#') 6 ; 7 8 jQuery.extend(obj.options, options); 9 10 if (hash.length > 1) { 11 if (hash[1] === 'zoom-failed') { 12 obj.options.booklyAlert({error: [obj.options.l10n.zoomFailed]}); 13 if ('pushState' in history) { 14 history.pushState('', document.title, hash[0]); 15 } 16 } 17 } 18 19 let $form = $('form', $container), 20 $unsaved_changes = $('.bookly-js-unsaved-changes'), 21 $unsaved_changes_save = $('.bookly-js-save-changes', $unsaved_changes), 22 $unsaved_changes_ignore = $('.bookly-js-ignore-changes', $unsaved_changes), 23 has_changes = false 24 ; 25 26 $container 27 .on('change', 'select,input,textarea', function () { 28 has_changes = true; 29 }) 30 .on('click', '.bookly-js-google-calendar-row a', function (e) { 31 var url = $(this).attr('href'); 32 if (has_changes) { 33 e.preventDefault(); 34 $unsaved_changes.booklyModal('show'); 35 $unsaved_changes.data('url', url); 36 } 37 }) 38 .on('click', '.bookly-js-outlook-calendar-row a', function (e) { 39 var url = $(this).attr('href'); 40 if (has_changes) { 41 e.preventDefault(); 42 $unsaved_changes.booklyModal('show'); 43 $unsaved_changes.data('url', url); 44 } 45 }) 46 .on('change', '[name=google_calendar_id]', function () { 47 let $calendar_list = $(this).closest('.bookly-js-google-calendars-list'), 48 $spinner = $calendar_list.find('.spinner-border'), 49 $warning = $calendar_list.find('.bookly-js-duplicate-calendar-warning'); 50 51 $warning.hide(); 52 $spinner.show(); 53 $.ajax({ 54 url: ajaxurl, 55 type: 'POST', 56 data: { 57 action: 'bookly_pro_check_google_calendars', 58 staff_id: obj.options.get_staff_advanced.staff_id, 59 csrf_token: BooklyL10nGlobal.csrf_token, 60 calendar_id: this.value, 61 }, 62 dataType: 'json', 63 success: function (response) { 64 $spinner.hide(); 65 if (!response.success) { 66 $warning.show(); 67 } 68 } 69 }); 70 }) 71 .on('change', '[name=google_disconnect]', function () { 72 has_changes = true; 73 $('.bookly-js-google-calendars-list', $form).toggle(!this.checked); 74 }).on('change', '[name=outlook_disconnect]', function () { 75 has_changes = true; 76 $('.bookly-js-outlook-calendars-list', $form).toggle(!this.checked); 77 }) 78 // Save staff member details. 79 .on('click', '#bookly-advanced-save', function (e) { 80 e.preventDefault(); 81 let ladda = Ladda.create(this); 82 ladda.start(); 83 saveAdvanced(function (response) { 84 ladda.stop(); 85 if (response.success) { 86 obj.options.saving({success: [obj.options.l10n.saved]}); 87 } 88 }); 89 }) 90 .on('change', '[name="zoom_authentication"]', function () { 91 $('.bookly-js-zoom-settings', $form).toggle(false); 92 $('.bookly-js-zoom-' + this.value, $form).toggle(true); 93 obj.options.validation(this.value === 'oauth' && $('.bookly-js-zoom-disconnected').is(":visible"), obj.options.l10n.zoomOAuthConnectRequired); 94 }) 95 .on('change', '[name="icalendar"]', function () { 96 $('#bookly-icalendar-days-offset').toggle(this.value === '1'); 97 }) 98 .on('focus', '#bookly-icalendar-url', function () { 99 $(this).select(); 100 }) 101 .on('click', '[type="reset"]', function (e) { 102 $form[0].reset(); 103 has_changes = false;
104 $('[name="zoom_authentication"]:checked', $form).trigger('change'); 105 $('[name="icalendar"]:checked', $form).trigger('change'); 106 }) 107 .on('click', '.bookly-js-zoom_oauth_connect', function (e) { 108 e.preventDefault(); 109 $.ajax({ 110 url: ajaxurl, 111 type: 'POST', 112 data: { 113 action: 'bookly_pro_get_zoom_authorization_url', 114 staff_id: obj.options.get_staff_advanced.staff_id, 115 csrf_token: BooklyL10nGlobal.csrf_token, 116 layout: obj.options.get_staff_advanced.layout, 117 page_url: document.URL.split('#')[0] 118 }, 119 dataType: 'json', 120 success: function (response) { 121 if (response.success) { 122 window.location.href = response.data.authorization_url; 123 } 124 } 125 }); 126 }); 127 128 $('.bookly-js-zoom-' + $('[name="zoom_authentication"]', $form).val(), $form).show(); 129 130 $unsaved_changes_ignore.off().on('click', function () { 131 window.location.href = $unsaved_changes.data('url'); 132 }); 133 $unsaved_changes_save.off().on('click', function () { 134 let ladda = Ladda.create(this); 135 ladda.start(); 136 saveAdvanced(function (response) { 137 if (response.success) { 138 window.location.href = $unsaved_changes.data('url'); 139 } else { 140 obj.options.saving({error: [response.data.error]}); 141 } 142 ladda.stop(); 143 }); 144 }); 145 146 if (typeof window.booklyInitCopyToClipboard === 'function') { 147 window.booklyInitCopyToClipboard($('.bookly-js-copy-to-clipboard', $form)); 148 } 149 150 function saveAdvanced(callback) { 151 let data = $form.serializeArray(); 152 data.push({name: 'action', value: 'bookly_pro_update_staff_advanced'}); 153 data.push({name: 'csrf_token', value: BooklyL10nGlobal.csrf_token}); 154 data.push({name: 'staff_id', value: obj.options.get_staff_advanced.staff_id}); 155 $.ajax({ 156 type: 'POST', 157 url: ajaxurl, 158 data: data, 159 dataType: 'json', 160 xhrFields: {withCredentials: true}, 161 crossDomain: 'withCredentials' in new XMLHttpRequest(), 162 success: function (response) { 163 if (obj.options.get_staff_advanced.layout === 'frontend') { 164 let $disconnected = $('.bookly-js-zoom-connected', $container); 165 if ($('input:checked', $disconnected).length > 0) { 166 $disconnected.hide(); 167 $('.bookly-js-zoom-disconnected', $container).show(); 168 $('#zoom_authentication').val('default').trigger('change'); 169 } 170 } 171 obj.options.booklyAlert(response.data.alerts); 172 has_changes = false; 173 callback(response); 174 } 175 }); 176 } 177 }; 178 179 Advanced.prototype.options = { 180 get_staff_advanced: { 181 action: 'bookly_pro_get_staff_advanced', 182 staff_id: -1, 183 layout: 'backend' 184 }, 185 l10n: {}, 186 booklyAlert: window.booklyAlert, 187 validation: function (has_error, info) { 188 $(document.body).trigger('staff.validation', ['staff-advanced', has_error, info]); 189 }, 190 saving: function (alerts) { 191 $(document.body).trigger('staff.saving', [alerts]); 192 }, 193 }; 194 195 window.BooklyStaffAdvanced = Advanced; 196})(jQuery);
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.