PluginProbe
Booking Calendar / 11.4.1
Booking Calendar v11.4.1
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-settings-messages / _src / settings_messages_page.js

settings_messages_page.js in Booking Calendar 11.4.1, at includes/page-settings-messages/_src/settings_messages_page.js

128 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* global jQuery, wpbc_settings_messages_page */
2 (function ($, w) {
3 'use strict';
4
5 var config = w.wpbc_settings_messages_page || {};
6
7 function trimText(value) {
8 return String(value || '').trim();
9 }
10
11 function showMessage(message, type, delay) {
12 if (typeof w.wpbc_admin_show_message === 'function') {
13 w.wpbc_admin_show_message(message, type || 'info', delay || 4000, false);
14 }
15 }
16
17 $(function () {
18 var $form = $('#wpbc_settings_messages_form');
19
20 function switchRightPanel($tab) {
21 var panelId = $tab.attr('aria-controls');
22 var panel = panelId ? document.getElementById(panelId) : null;
23 var $tabs = $tab.closest('.wpbc_messages_rightbar_tabs').find('[role="tab"]');
24 var $panels = $('.wpbc_messages_rightbar_panels [role="tabpanel"]');
25
26 if (!panel) {
27 return;
28 }
29 $tabs.attr('aria-selected', 'false');
30 $tab.attr('aria-selected', 'true');
31 $panels.attr('hidden', 'hidden').attr('aria-hidden', 'true');
32 $(panel).removeAttr('hidden').attr('aria-hidden', 'false');
33 }
34
35 function applyDefaultsToForm() {
36 $form.find('textarea[data-default-message]').each(function () {
37 var $textarea = $(this);
38 $textarea.val($textarea.attr('data-default-message') || '');
39 });
40 $form.find('.wpbc_message_enabled input[type="checkbox"]').prop('checked', true);
41 }
42
43 function saveSettings() {
44 var $button = $('[data-wpbc-messages-save="1"]');
45 var originalHtml = $button.data('wpbc-original-text');
46 var isResetAll = '1' === $form.find('[data-wpbc-messages-reset-input="1"]').val();
47
48 if ($button.hasClass('disabled')) {
49 return;
50 }
51 if (!originalHtml) {
52 originalHtml = $button.html();
53 $button.data('wpbc-original-text', originalHtml);
54 }
55
56 $button.addClass('disabled').attr('aria-disabled', 'true');
57 $button.find('.in-button-text').html('  ' + trimText(config.i18n && config.i18n.saving ? config.i18n.saving : 'Saving') + '...');
58
59 $.ajax({
60 url: config.ajax_url,
61 method: 'POST',
62 data: $form.serialize(),
63 dataType: 'json'
64 }).done(function (response) {
65 if (response && response.success) {
66 if (isResetAll) {
67 applyDefaultsToForm();
68 }
69 showMessage(response.data && response.data.message ? response.data.message : (config.i18n && config.i18n.saved ? config.i18n.saved : 'Saved'), 'success', 3000);
70 return;
71 }
72 showMessage(response && response.data && response.data.message ? response.data.message : (config.i18n && config.i18n.save_failed ? config.i18n.save_failed : 'Unable to save form messages.'), 'error', 10000);
73 }).fail(function (xhr) {
74 var message = xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message
75 ? xhr.responseJSON.data.message
76 : (config.i18n && config.i18n.save_failed ? config.i18n.save_failed : 'Unable to save form messages.');
77 showMessage(message, 'error', 10000);
78 }).always(function () {
79 $form.find('[data-wpbc-messages-reset-input="1"]').val('0');
80 $button.removeClass('disabled').removeAttr('aria-disabled').html(originalHtml);
81 });
82 }
83
84 $form.on('submit', function (event) {
85 event.preventDefault();
86 saveSettings();
87 });
88
89 $(document).on('click', '[data-wpbc-messages-save="1"]', function (event) {
90 event.preventDefault();
91 saveSettings();
92 });
93
94 $(document).on('click', '[data-reset-message="1"]', function () {
95 var $row = $(this).closest('.wpbc_settings_message_row');
96 var $textarea = $row.find('textarea');
97 $textarea.val($textarea.attr('data-default-message') || '').trigger('focus');
98 $row.find('.wpbc_message_enabled input[type="checkbox"]').prop('checked', true);
99 });
100
101 $(document).on('click', '.wpbc_messages_rightbar_tabs [role="tab"]', function (event) {
102 event.preventDefault();
103 switchRightPanel($(this));
104 });
105
106 $(document).on('click', '.wpbc_messages_section_nav a', function (event) {
107 var targetId = String($(this).attr('href') || '').replace(/^#/, '');
108 var target = targetId ? document.getElementById(targetId) : null;
109
110 if (!target) {
111 return;
112 }
113 event.preventDefault();
114 $('html, body').stop(true).animate({scrollTop: $(target).offset().top - 24}, 250, function () {
115 $(target).attr('tabindex', '-1').trigger('focus');
116 });
117 });
118
119 $(document).on('click', '[data-wpbc-messages-reset-all="1"]', function () {
120 if (!w.confirm(config.i18n && config.i18n.reset_confirm ? config.i18n.reset_confirm : 'Restore every form message to its plugin default?')) {
121 return;
122 }
123 $form.find('[data-wpbc-messages-reset-input="1"]').val('1');
124 saveSettings();
125 });
126 });
127 }(jQuery, window));
128