158 lines
5.4 KiB
JavaScript
158 lines
5.4 KiB
JavaScript
/**
|
|
* 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 = $('<div class="notice ' + noticeClass + ' is-dismissible"><p>' + message + '</p></div>');
|
|
|
|
// 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);
|