From 24379c992ccae2b803638cf9caf11c70ee33ba6d Mon Sep 17 00:00:00 2001 From: Nonimart Date: Thu, 21 Aug 2025 14:43:17 +0200 Subject: [PATCH] FEATURE optmizing a sanitize title function to match what wordpress sanitize title does --- resources/js/singles/sommaire.ts | 88 ++++---------------------------- 1 file changed, 11 insertions(+), 77 deletions(-) diff --git a/resources/js/singles/sommaire.ts b/resources/js/singles/sommaire.ts index c8eb343..5e23438 100644 --- a/resources/js/singles/sommaire.ts +++ b/resources/js/singles/sommaire.ts @@ -4,89 +4,23 @@ export function handleSmoothScrollToTitle(targetId: string): void { targetElement.scrollIntoView({ behavior: 'smooth' }); } + // Fonction équivalente à sanitize_title() de WordPress function sanitizeTitle(title: string): string { // Convertir en minuscules let slug = title.toLowerCase(); - // Remplacer les caractères spéciaux français et autres - const replacements: { [key: string]: string } = { - à: 'a', - á: 'a', - â: 'a', - ã: 'a', - ä: 'a', - å: 'a', - è: 'e', - é: 'e', - ê: 'e', - ë: 'e', - ì: 'i', - í: 'i', - î: 'i', - ï: 'i', - ò: 'o', - ó: 'o', - ô: 'o', - õ: 'o', - ö: 'o', - ù: 'u', - ú: 'u', - û: 'u', - ü: 'u', - ý: 'y', - ÿ: 'y', - ñ: 'n', - ç: 'c', - œ: 'oe', - æ: 'ae', - '«': '', - '»': '', - '"': '', - '"': '', - '?': '', - '!': '', - ':': '', - ';': '', - '.': '', - ',': '', - '(': '', - ')': '', - '[': '', - ']': '', - '{': '', - '}': '', - '/': '-', - '\\': '-', - '|': '-', - '&': 'et', - '@': 'at', - '#': '', - $: '', - '%': '', - '*': '', - '+': '', - '=': '', - '<': '', - '>': '', - '~': '', - '`': '', - '^': '', - '°': '', - '…': '', - '—': '-', - '–': '-', - '−': '-', - ' ': '-', - '\t': '-', - '\n': '-', - '\r': '-', - }; + // Normaliser les caractères (supprimer les accents) - comme WordPress + slug = slug.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); - // Appliquer les remplacements - for (const [char, replacement] of Object.entries(replacements)) { - slug = slug.replace(new RegExp(char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), replacement); - } + // Remplacer les points par des tirets (comme WordPress) + slug = slug.replace(/\./g, '-'); + + // Remplacer les caractères spéciaux + slug = slug.replace(/[«»"'?!:;,()[\]{}/\\|&@#$%*+=<>~`^°…—–−]/g, ''); + + // Remplacer leespaces et caractères de contrôle par des tirets + slug = slug.replace(/[\s\t\n\r]+/g, '-'); // Supprimer les caractères non alphanumériques restants (sauf tirets) slug = slug.replace(/[^a-z0-9\-]/g, '');