PluginProbe
Contact Forms by Cimatti / 2.3.6
Contact Forms by Cimatti v2.3.6
2.3.6 2.3.5 2.3.0 2.2.32 2.2.4 2.2.0 2.1.2 2.1.1 trunk 1.0 1.1 1.2 1.2.1 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 All 62 releases
contact-forms / assets / js / admin / deactivation-modal.js

deactivation-modal.js in Contact Forms by Cimatti 2.3.6, at assets/js/admin/deactivation-modal.js

167 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Contact Forms - Deactivation Modal
3 *
4 * Intercepts the plugin "Deactivate" link on the Plugins page and shows
5 * a modal asking the user what to do with existing data.
6 *
7 * @package ContactForms
8 * @since 2.0.0-beta.70
9 */
10
11 (function ($) {
12 'use strict';
13
14 var settings = accuaFormsDeactivation;
15 var deactivateUrl = '';
16
17 function createModal() {
18 var modalHtml =
19 '<div id="accua-deactivation-overlay">' +
20 '<div id="accua-deactivation-modal">' +
21
22 '<div class="accua-deact-header">' +
23 '<h2>' + settings.i18n.title + '</h2>' +
24 '<p>' + settings.i18n.description + '</p>' +
25 '</div>' +
26
27 '<div class="accua-deact-body">' +
28
29 '<button type="button" class="accua-deact-option accua-deact-option--skip" data-mode="skip">' +
30 '<span class="accua-deact-option__label">' + settings.i18n.skip + '</span>' +
31 '<span class="accua-deact-option__desc">' + settings.i18n.skipDesc + '</span>' +
32 '</button>' +
33
34 '<button type="button" class="accua-deact-option accua-deact-option--anonymize" data-mode="anonymize">' +
35 '<span class="accua-deact-option__label">' + settings.i18n.anonymizeAll + '</span>' +
36 '<span class="accua-deact-option__desc">' + settings.i18n.anonymizeAllDesc + '</span>' +
37 '</button>' +
38
39 '<button type="button" class="accua-deact-option accua-deact-option--delete" data-mode="delete">' +
40 '<span class="accua-deact-option__label">' + settings.i18n.deleteAll + '</span>' +
41 '<span class="accua-deact-option__desc">' + settings.i18n.deleteAllDesc + '</span>' +
42 '</button>' +
43
44 '</div>' +
45
46 '<div class="accua-deact-footer">' +
47 '<button type="button" id="accua-deact-cancel" class="button">' + settings.i18n.cancel + '</button>' +
48 '</div>' +
49
50 '</div>' +
51 '</div>';
52
53 var modalCss =
54 '<style>' +
55 '#accua-deactivation-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);z-index:100000}' +
56 '#accua-deactivation-modal{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:8px;width:520px;max-width:90vw;box-shadow:0 5px 30px rgba(0,0,0,.3)}' +
57 '.accua-deact-header{padding:20px 24px 0}' +
58 '.accua-deact-header h2{margin:0 0 8px;font-size:18px;line-height:1.4}' +
59 '.accua-deact-header p{color:#646970;margin:0 0 16px;font-size:13px}' +
60 '.accua-deact-body{padding:0 24px 20px}' +
61 '.accua-deact-option{display:block;width:100%;text-align:left;border:1px solid #dcdcde;border-radius:4px;padding:12px 16px;margin-bottom:10px;cursor:pointer;background:#fff;transition:border-color .15s,background .15s}' +
62 '.accua-deact-option:hover{background:#f6f7f7}' +
63 '.accua-deact-option__label{display:block;font-weight:600;font-size:13px;margin-bottom:2px}' +
64 '.accua-deact-option__desc{display:block;color:#646970;font-size:12px;font-weight:400}' +
65 '.accua-deact-option--skip{border-color:#2271b1;padding:16px 16px;margin-bottom:20px}' +
66 '.accua-deact-option--skip:hover{background:#f0f6fc;border-color:#135e96}' +
67 '.accua-deact-option--skip .accua-deact-option__label{color:#2271b1;font-size:14px}' +
68 '.accua-deact-option--anonymize{border-color:#dba617}' +
69 '.accua-deact-option--anonymize:hover{background:#fcf9e8;border-color:#996800}' +
70 '.accua-deact-option--anonymize .accua-deact-option__label{color:#996800}' +
71 '.accua-deact-option--delete{border-color:#d63638}' +
72 '.accua-deact-option--delete:hover{background:#fcf0f1;border-color:#a00}' +
73 '.accua-deact-option--delete .accua-deact-option__label{color:#d63638}' +
74 '.accua-deact-option:disabled{pointer-events:none;opacity:.6}' +
75 '.accua-deact-footer{padding:12px 24px;border-top:1px solid #dcdcde;text-align:right}' +
76 '</style>';
77
78 $('body').append(modalCss + modalHtml);
79 }
80
81 function showModal() {
82 $('#accua-deactivation-overlay').fadeIn(200);
83 }
84
85 function hideModal() {
86 $('#accua-deactivation-overlay').fadeOut(200);
87 }
88
89 function init() {
90 var $deactivateLink = $('tr[data-plugin="' + settings.pluginBasename + '"] .deactivate a');
91
92 if (!$deactivateLink.length) {
93 return;
94 }
95
96 createModal();
97
98 // Intercept the Deactivate click
99 $deactivateLink.on('click', function (e) {
100 e.preventDefault();
101 deactivateUrl = $(this).attr('href');
102 showModal();
103 });
104
105 // Cancel
106 $('#accua-deact-cancel').on('click', hideModal);
107 $('#accua-deactivation-overlay').on('click', function (e) {
108 if (e.target === this) {
109 hideModal();
110 }
111 });
112
113 // Option buttons
114 $('.accua-deact-option').on('click', function () {
115 var mode = $(this).data('mode');
116 var $allOptions = $('.accua-deact-option');
117 var $cancelBtn = $('#accua-deact-cancel');
118 var $clicked = $(this);
119
120 // "Skip" - just deactivate, no AJAX
121 if (mode === 'skip') {
122 window.location.href = deactivateUrl;
123 return;
124 }
125
126 // Extra confirmation for anonymize
127 if (mode === 'anonymize') {
128 if (!confirm(settings.i18n.confirmAnonymize)) {
129 return;
130 }
131 }
132
133 // Extra confirmation for delete
134 if (mode === 'delete') {
135 if (!confirm(settings.i18n.confirmDelete)) {
136 return;
137 }
138 }
139
140 // Disable all buttons and show processing state
141 $allOptions.prop('disabled', true);
142 $cancelBtn.prop('disabled', true);
143 $clicked.find('.accua-deact-option__label').text(settings.i18n.processing);
144
145 $.ajax({
146 url: settings.ajaxUrl,
147 type: 'POST',
148 data: {
149 action: 'accua_forms_deactivation_cleanup',
150 nonce: settings.nonce,
151 mode: mode
152 },
153 success: function () {
154 window.location.href = deactivateUrl;
155 },
156 error: function () {
157 // Proceed with deactivation even if cleanup fails
158 window.location.href = deactivateUrl;
159 }
160 });
161 });
162 }
163
164 $(document).ready(init);
165
166 })(jQuery);
167