feat: améliorer l'accessibilité et les performances avec support pour prefers-reduced-motion, prefers-contrast, focus-visible, ajout de preconnect pour les domaines externes, versioning des assets CSS/JS, et correction des chemins de ressources avec ltrim
This commit is contained in:
@@ -59,14 +59,24 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
let cachedBookmarks = null;
|
||||
let cachedTags = null;
|
||||
|
||||
// Escape HTML to prevent XSS
|
||||
function escapeHtml(text) {
|
||||
if (typeof text !== 'string') return '';
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
|
||||
// Highlight matching text with <mark> tags
|
||||
function highlightMatch(text, query) {
|
||||
if (!query || query.length === 0) return text;
|
||||
if (!query || query.length === 0) return escapeHtml(text);
|
||||
|
||||
// Escape HTML first to prevent XSS
|
||||
const escapedText = escapeHtml(text);
|
||||
// Escape special regex characters in query
|
||||
const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
const regex = new RegExp(`(${escapedQuery})`, 'gi');
|
||||
return text.replace(regex, '<mark>$1</mark>');
|
||||
return escapedText.replace(regex, '<mark>$1</mark>');
|
||||
}
|
||||
|
||||
// Fuzzy search - matches substring anywhere in text
|
||||
|
||||
Reference in New Issue
Block a user