PluginProbe ʕ •ᴥ•ʔ
VikAppointments Services Booking Calendar / 1.2.21
VikAppointments Services Booking Calendar v1.2.21
1.2.21 1.2.20 trunk 1.2.17 1.2.18 1.2.19
vikappointments / media / js / admin.js
vikappointments / media / js Last commit date
admin.js 2 days ago bootstrap.min.js 2 days ago gutenberg-shortcodes.js 2 days ago gutenberg-tools.js 2 days ago gutenberg-widgets.js 2 days ago system.js 2 days ago tinymce-shortcodes.js 2 days ago
admin.js
84 lines
1 /**
2 * Callback used to post a survey form after clicking
3 * a button contained within a RSS feed.
4 *
5 * @param mixed button The button element.
6 *
7 * @return boolean
8 */
9 function vapRssSubmitSurvey(button) {
10 // recover closest modal
11 var modal = jQuery(button).closest('.modal[id^="jmodal"]');
12
13 if (!modal.length) {
14 // abort, modal not found
15 return false;
16 }
17
18 // take form inside the modal
19 var form = modal.find('form');
20
21 if (!form.length) {
22 // abort, no specified forms
23 return false;
24 }
25
26 // retrieve feed ID from modal data
27 var feedId = modal.attr('data-feed-id');
28 var submitDate;
29
30 if (typeof localStorage !== 'undefined') {
31 // get submission date of the survey, if any
32 submitDate = localStorage.getItem('vikappointments.rss.survey.' + feedId);
33 }
34
35 // disable button to avoid double submit
36 jQuery(button).prop('disabled', true);
37
38 // extract title from modal
39 var subject = jQuery(modal).find('.modal-header h3').text().trim();
40
41 // serialize form to array
42 var data = form.serializeArray();
43 // push subject within form
44 data.push({name: 'subject', value: subject});
45
46 // create request promise
47 new Promise((resolve, reject) => {
48 // check whether the feed ID has been already submitted
49 if (submitDate) {
50 reject('Survey already submitted on ' + submitDate);
51 return false;
52 }
53
54 // make self AJAX request to post survey
55 doAjax(
56 'admin-ajax.php?action=vikappointments&task=feedback.survey',
57 jQuery.param(data),
58 function(resp) {
59 resolve(resp);
60 },
61 function(err) {
62 reject(err);
63 }
64 );
65 }).then((data) => {
66 if (typeof localStorage !== 'undefined') {
67 // register survey within the pool to avoid several submissions
68 localStorage.setItem('vikappointments.rss.survey.' + feedId, new Date().toUTCString());
69 }
70 }).catch((error) => {
71 console.error(error);
72 }).finally(() => {
73 // look for a button to auto-dismiss the modal
74 var closeBtn = modal.find('#rss-feed-dismiss');
75
76 if (closeBtn.length) {
77 // trigger click to dismiss the modal
78 closeBtn.trigger('click');
79 } else {
80 // otherwise manually close the modal
81 wpCloseJModal(modal.attr('id'));
82 }
83 });
84 }