| 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 |
|