# contact-forms/trunk/assets/js/admin/deactivation-modal.js

Contact Forms by Cimatti, version trunk. 167 lines.

- Page: https://pluginprobe.com/plugins/contact-forms/trunk/code/assets/js/admin/deactivation-modal.js
- Raw: https://pluginprobe.com/plugins/contact-forms/trunk/raw/assets/js/admin/deactivation-modal.js
- Modified: 2026-08-21T08:39:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/contact-forms/trunk/code/assets/js/admin/deactivation-modal.js#L10-L20`.

```javascript
/**
 * Contact Forms - Deactivation Modal
 *
 * Intercepts the plugin "Deactivate" link on the Plugins page and shows
 * a modal asking the user what to do with existing data.
 *
 * @package ContactForms
 * @since 2.0.0-beta.70
 */

(function ($) {
  'use strict';

  var settings = accuaFormsDeactivation;
  var deactivateUrl = '';

  function createModal() {
    var modalHtml =
      '<div id="accua-deactivation-overlay">' +
        '<div id="accua-deactivation-modal">' +

          '<div class="accua-deact-header">' +
            '<h2>' + settings.i18n.title + '</h2>' +
            '<p>' + settings.i18n.description + '</p>' +
          '</div>' +

          '<div class="accua-deact-body">' +

            '<button type="button" class="accua-deact-option accua-deact-option--skip" data-mode="skip">' +
              '<span class="accua-deact-option__label">' + settings.i18n.skip + '</span>' +
              '<span class="accua-deact-option__desc">' + settings.i18n.skipDesc + '</span>' +
            '</button>' +

            '<button type="button" class="accua-deact-option accua-deact-option--anonymize" data-mode="anonymize">' +
              '<span class="accua-deact-option__label">' + settings.i18n.anonymizeAll + '</span>' +
              '<span class="accua-deact-option__desc">' + settings.i18n.anonymizeAllDesc + '</span>' +
            '</button>' +

            '<button type="button" class="accua-deact-option accua-deact-option--delete" data-mode="delete">' +
              '<span class="accua-deact-option__label">' + settings.i18n.deleteAll + '</span>' +
              '<span class="accua-deact-option__desc">' + settings.i18n.deleteAllDesc + '</span>' +
            '</button>' +

          '</div>' +

          '<div class="accua-deact-footer">' +
            '<button type="button" id="accua-deact-cancel" class="button">' + settings.i18n.cancel + '</button>' +
          '</div>' +

        '</div>' +
      '</div>';

    var modalCss =
      '<style>' +
      '#accua-deactivation-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);z-index:100000}' +
      '#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)}' +
      '.accua-deact-header{padding:20px 24px 0}' +
      '.accua-deact-header h2{margin:0 0 8px;font-size:18px;line-height:1.4}' +
      '.accua-deact-header p{color:#646970;margin:0 0 16px;font-size:13px}' +
      '.accua-deact-body{padding:0 24px 20px}' +
      '.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}' +
      '.accua-deact-option:hover{background:#f6f7f7}' +
      '.accua-deact-option__label{display:block;font-weight:600;font-size:13px;margin-bottom:2px}' +
      '.accua-deact-option__desc{display:block;color:#646970;font-size:12px;font-weight:400}' +
      '.accua-deact-option--skip{border-color:#2271b1;padding:16px 16px;margin-bottom:20px}' +
      '.accua-deact-option--skip:hover{background:#f0f6fc;border-color:#135e96}' +
      '.accua-deact-option--skip .accua-deact-option__label{color:#2271b1;font-size:14px}' +
      '.accua-deact-option--anonymize{border-color:#dba617}' +
      '.accua-deact-option--anonymize:hover{background:#fcf9e8;border-color:#996800}' +
      '.accua-deact-option--anonymize .accua-deact-option__label{color:#996800}' +
      '.accua-deact-option--delete{border-color:#d63638}' +
      '.accua-deact-option--delete:hover{background:#fcf0f1;border-color:#a00}' +
      '.accua-deact-option--delete .accua-deact-option__label{color:#d63638}' +
      '.accua-deact-option:disabled{pointer-events:none;opacity:.6}' +
      '.accua-deact-footer{padding:12px 24px;border-top:1px solid #dcdcde;text-align:right}' +
      '</style>';

    $('body').append(modalCss + modalHtml);
  }

  function showModal() {
    $('#accua-deactivation-overlay').fadeIn(200);
  }

  function hideModal() {
    $('#accua-deactivation-overlay').fadeOut(200);
  }

  function init() {
    var $deactivateLink = $('tr[data-plugin="' + settings.pluginBasename + '"] .deactivate a');

    if (!$deactivateLink.length) {
      return;
    }

    createModal();

    // Intercept the Deactivate click
    $deactivateLink.on('click', function (e) {
      e.preventDefault();
      deactivateUrl = $(this).attr('href');
      showModal();
    });

    // Cancel
    $('#accua-deact-cancel').on('click', hideModal);
    $('#accua-deactivation-overlay').on('click', function (e) {
      if (e.target === this) {
        hideModal();
      }
    });

    // Option buttons
    $('.accua-deact-option').on('click', function () {
      var mode = $(this).data('mode');
      var $allOptions = $('.accua-deact-option');
      var $cancelBtn  = $('#accua-deact-cancel');
      var $clicked    = $(this);

      // "Skip" - just deactivate, no AJAX
      if (mode === 'skip') {
        window.location.href = deactivateUrl;
        return;
      }

      // Extra confirmation for anonymize
      if (mode === 'anonymize') {
        if (!confirm(settings.i18n.confirmAnonymize)) {
          return;
        }
      }

      // Extra confirmation for delete
      if (mode === 'delete') {
        if (!confirm(settings.i18n.confirmDelete)) {
          return;
        }
      }

      // Disable all buttons and show processing state
      $allOptions.prop('disabled', true);
      $cancelBtn.prop('disabled', true);
      $clicked.find('.accua-deact-option__label').text(settings.i18n.processing);

      $.ajax({
        url: settings.ajaxUrl,
        type: 'POST',
        data: {
          action: 'accua_forms_deactivation_cleanup',
          nonce: settings.nonce,
          mode: mode
        },
        success: function () {
          window.location.href = deactivateUrl;
        },
        error: function () {
          // Proceed with deactivation even if cleanup fails
          window.location.href = deactivateUrl;
        }
      });
    });
  }

  $(document).ready(init);

})(jQuery);

```
