fix & feat : SEO desc, feed cover, livres slug auto + filtre (v1.6.21)

- buildAutoSeoDesc() : entités HTML décodées + titre supprimé en tête (#91)
- post_confirm.js : guard null sur #confirm-slug absent (#91)
- feed.php : <media:thumbnail> avec image de couverture RSS (#90)
- admin livres : slug auto depuis le titre + filtre articles (#89)
- BookManager::sanitizeSlug() passé public

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-16 11:05:01 +02:00
parent 3b22be94e8
commit ca6cfa4ebf
8 changed files with 92 additions and 27 deletions
+8 -6
View File
@@ -22,12 +22,14 @@ document.addEventListener('DOMContentLoaded', function () {
initCounter('seo_description', 'seo_desc_counter', 155);
function updatePreview() {
var seoTitle = document.getElementById('seo_title').value.trim();
var seoDesc = document.getElementById('seo_description').value.trim();
var slug = document.getElementById('confirm-slug').value.trim();
var seoTitle = document.getElementById('seo_title').value.trim();
var seoDesc = document.getElementById('seo_description').value.trim();
var slugEl = document.getElementById('confirm-slug');
document.getElementById('preview-title').textContent = seoTitle || defaultTitle;
document.getElementById('preview-desc').textContent = seoDesc || defaultDesc;
document.getElementById('preview-url').textContent = baseUrl + slug;
if (slugEl) {
document.getElementById('preview-url').textContent = baseUrl + slugEl.value.trim();
}
}
['seo_title', 'seo_description', 'confirm-slug'].forEach(function (id) {
@@ -39,7 +41,7 @@ document.addEventListener('DOMContentLoaded', function () {
var slugDisplay = document.getElementById('slug-display');
var btnSuggest = document.getElementById('slug-btn-suggest');
if (btnSuggest) {
if (btnSuggest && slugInput && slugDisplay) {
btnSuggest.addEventListener('click', function () {
var val = btnSuggest.dataset.slugSuggest;
slugInput.value = val;
@@ -49,7 +51,7 @@ document.addEventListener('DOMContentLoaded', function () {
}
var btnKeep = document.getElementById('slug-btn-keep');
if (btnKeep) {
if (btnKeep && slugInput && slugDisplay) {
btnKeep.addEventListener('click', function () {
var val = btnKeep.dataset.slugKeep;
slugInput.value = val;