/** * Script admin pour la gestion des règles dépendantes des capacités de traduction */ (function($) { 'use strict'; $(document).ready(function() { // Variables globales const $addBtn = $('#add-sub-rule-btn'); const $modal = $('#sub-rule-modal'); const $confirmBtn = $('#confirm-add-sub-rule'); const $cancelBtn = $('#cancel-add-sub-rule'); const $spinner = $('.traduction-langue-add-sub-rule .spinner'); const parentId = $addBtn.data('parent-id'); // Ouvrir la modal au clic sur le bouton $addBtn.on('click', function(e) { e.preventDefault(); openModal(); }); // Fermer la modal au clic sur Annuler $cancelBtn.on('click', function(e) { e.preventDefault(); closeModal(); }); // Fermer la modal au clic sur l'overlay $('.sub-rule-modal-overlay').on('click', function(e) { closeModal(); }); // Fermer la modal avec la touche ESC $(document).on('keyup', function(e) { if (e.key === 'Escape' && $modal.is(':visible')) { closeModal(); } }); // Confirmer la création de la règle dépendante $confirmBtn.on('click', function(e) { e.preventDefault(); createSubRule(); }); /** * Ouvre la modal de confirmation */ function openModal() { $modal.fadeIn(200); $('body').addClass('modal-open'); } /** * Ferme la modal de confirmation */ function closeModal() { $modal.fadeOut(200); $('body').removeClass('modal-open'); } /** * Crée une règle dépendante via l'API REST */ function createSubRule() { // Désactiver les boutons pendant le traitement $confirmBtn.prop('disabled', true); $cancelBtn.prop('disabled', true); $spinner.addClass('is-active'); // Données à envoyer const data = { parent_id: parentId }; // Appel REST API $.ajax({ url: traductionLangueAdmin.restUrl, method: 'POST', data: JSON.stringify(data), contentType: 'application/json', beforeSend: function(xhr) { // Ajouter le nonce pour l'authentification xhr.setRequestHeader('X-WP-Nonce', traductionLangueAdmin.nonce); }, success: function(response) { if (response.success && response.data) { // Afficher un message de succès showNotice('success', response.data.message || 'Règle dépendante créée avec succès.'); // Recharger la page après un court délai pour voir la nouvelle règle setTimeout(function() { window.location.reload(); }, 1000); } else { showNotice('error', 'Une erreur est survenue lors de la création de la règle.'); resetButtons(); } }, error: function(xhr) { let errorMessage = 'Une erreur est survenue lors de la création de la règle.'; if (xhr.responseJSON && xhr.responseJSON.message) { errorMessage = xhr.responseJSON.message; } else if (xhr.responseText) { try { const response = JSON.parse(xhr.responseText); if (response.message) { errorMessage = response.message; } } catch (e) { // Ignorer les erreurs de parsing } } showNotice('error', errorMessage); resetButtons(); } }); } /** * Réinitialise l'état des boutons après une erreur */ function resetButtons() { $confirmBtn.prop('disabled', false); $cancelBtn.prop('disabled', false); $spinner.removeClass('is-active'); closeModal(); } /** * Affiche une notification WordPress * * @param {string} type - Type de notification (success, error, warning, info) * @param {string} message - Message à afficher */ function showNotice(type, message) { const noticeClass = 'notice-' + type; const $notice = $('

' + message + '

'); // Insérer la notification après le titre de la page $('.wrap h1').first().after($notice); // Rendre la notification dismissible $(document).trigger('wp-updates-notice-added'); // Auto-supprimer après 5 secondes setTimeout(function() { $notice.fadeOut(function() { $(this).remove(); }); }, 5000); } }); })(jQuery);