mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 08:09:18 +02:00
CSS: - Remove duplicate 'background' fallbacks in base.css, header.css, search.css (solid color declared before gradient — gradient always wins) - Remove duplicate 'padding' in admin.css .admin-import-log JS (biome --write safe fixes applied): - function() → arrow functions in all IIFEs and callbacks - forEach/callback → arrow functions - evaluePtrn → parseInt(x, 10) in admin-contacts-form.js - Cleaned label text in build.mjs lint step Remaining warnings are intentional: !important overrides, descending specificity (admin.css cascade), noUnusedVariables (functions exported to window/onclick), useTemplate style preference.
118 lines
4.3 KiB
JavaScript
118 lines
4.3 KiB
JavaScript
/**
|
|
* admin-contenus-langues.js — Langues management on contenus.php.
|
|
* Bulk merge, delete, toggle-all, sticky bar height tracking.
|
|
*
|
|
* Inline-rename functions (languesStartRename, languesCancelRename) remain in
|
|
* the template because they embed PHP-generated icon SVGs.
|
|
*/
|
|
var _languesPendingForm = null;
|
|
|
|
function languesConfirmDelete(btn, name) {
|
|
_languesPendingForm = btn.closest('form');
|
|
document.getElementById('langues-delete-name').textContent = name;
|
|
document.getElementById('langues-delete-dialog').showModal();
|
|
}
|
|
|
|
function languesSubmitPending() {
|
|
if (_languesPendingForm) _languesPendingForm.submit();
|
|
}
|
|
|
|
function languesToggleAll(src) {
|
|
document.querySelectorAll('input[name="selected_langs[]"]').forEach((cb) => {
|
|
cb.checked = src.checked;
|
|
});
|
|
languesUpdateBulk();
|
|
}
|
|
|
|
function languesUpdateBulk() {
|
|
var n = document.querySelectorAll('input[name="selected_langs[]"]:checked').length;
|
|
document.getElementById('langues-selected-count').textContent = n;
|
|
var bar = document.getElementById('langues-bulk-actions');
|
|
var wrap = document.getElementById('langues-table-wrap');
|
|
var visible = n > 1;
|
|
bar.style.display = visible ? 'flex' : 'none';
|
|
if (visible) {
|
|
requestAnimationFrame(() => {
|
|
wrap.style.setProperty('--sticky-top', bar.offsetHeight + 'px');
|
|
});
|
|
} else {
|
|
wrap.style.setProperty('--sticky-top', '0px');
|
|
}
|
|
}
|
|
|
|
function languesCancelSelection() {
|
|
document.querySelectorAll('input[name="selected_langs[]"]').forEach((cb) => {
|
|
cb.checked = false;
|
|
});
|
|
languesUpdateBulk();
|
|
}
|
|
|
|
function languesConfirmBulkDelete() {
|
|
var checked = document.querySelectorAll('input[name="selected_langs[]"]:checked');
|
|
if (checked.length < 1) return;
|
|
document.getElementById('langues-bulk-delete-count').textContent = checked.length;
|
|
document.getElementById('langues-bulk-delete-dialog').showModal();
|
|
}
|
|
|
|
function languesExecBulkDelete() {
|
|
var container = document.getElementById('langues-bulk-checkboxes');
|
|
container.innerHTML = '';
|
|
document.querySelectorAll('input[name="selected_langs[]"]:checked').forEach((cb) => {
|
|
var inp = document.createElement('input');
|
|
inp.type = 'hidden';
|
|
inp.name = 'selected_langs[]';
|
|
inp.value = cb.value;
|
|
container.appendChild(inp);
|
|
});
|
|
document.getElementById('langues-bulk-form').querySelector('input[name="action"]').value =
|
|
'delete_bulk';
|
|
document.getElementById('langues-bulk-delete-dialog').close();
|
|
document.getElementById('langues-bulk-form').submit();
|
|
}
|
|
|
|
function languesConfirmBulkMerge() {
|
|
var checked = document.querySelectorAll('input[name="selected_langs[]"]:checked');
|
|
if (checked.length < 2) return;
|
|
document.getElementById('langues-bulk-merge-count').textContent = checked.length;
|
|
var sel = document.getElementById('langues-bulk-merge-target-select');
|
|
sel.innerHTML = '<option value="">— Choisir la destination —</option>';
|
|
checked.forEach((cb) => {
|
|
var tr = cb.closest('tr');
|
|
sel.innerHTML +=
|
|
'<option value="' +
|
|
cb.value +
|
|
'">' +
|
|
tr.querySelector('td:nth-child(2)').textContent.trim() +
|
|
'</option>';
|
|
});
|
|
document.getElementById('langues-bulk-merge-dialog').showModal();
|
|
}
|
|
|
|
function languesExecBulkMerge() {
|
|
var targetId = document.getElementById('langues-bulk-merge-target-select').value;
|
|
if (!targetId) return;
|
|
document.getElementById('langues-bulk-target').value = targetId;
|
|
var container = document.getElementById('langues-bulk-checkboxes');
|
|
container.innerHTML = '';
|
|
document.querySelectorAll('input[name="selected_langs[]"]:checked').forEach((cb) => {
|
|
var inp = document.createElement('input');
|
|
inp.type = 'hidden';
|
|
inp.name = 'selected_langs[]';
|
|
inp.value = cb.value;
|
|
container.appendChild(inp);
|
|
});
|
|
document.getElementById('langues-bulk-merge-dialog').close();
|
|
document.getElementById('langues-bulk-form').submit();
|
|
}
|
|
|
|
document.addEventListener('htmx:afterSwap', (evt) => {
|
|
if (evt.target.id === 'langues-table-wrap') {
|
|
document
|
|
.querySelectorAll('input[name="selected_langs[]"]')
|
|
.forEach((cb) => {
|
|
cb.addEventListener('change', languesUpdateBulk);
|
|
});
|
|
languesUpdateBulk();
|
|
}
|
|
});
|