fix(extension): permissions universelles Store + nettoyage article v0.4.5
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m44s
CI / Deploy production (on server) (push) Successful in 24s

- build-chrome-store.mjs / build-firefox.mjs : host_permissions et content_scripts matches
  passent à http://*/* + https://*/* au lieu de memento-note.com uniquement.
  Un Web Clipper a besoin d'accéder à tous les sites ; le manifest Store
  bloquait l'injection du content script sur n'importe quel article.
- extract-article.ts : refonte de cleanClipText en filtrage par ligne avec
  patterns élargis (mis à jour, temps de lecture, aujourd'hui à HH:MM,
  source - date, publié le, etc.).
- Bump version 0.4.5 dans manifest, locales, README et builds.
This commit is contained in:
Antigravity
2026-07-18 17:04:25 +00:00
parent 0ee2afbd62
commit 4946c0d44a
53 changed files with 90 additions and 78 deletions

View File

@@ -17,26 +17,35 @@ export interface ExtractedArticle {
locale: ClipLocaleHint
}
const META_PATTERNS = [
// Dates/heures avec "mis à jour / updated / actualizado / aktualisiert"
/\b(mis à jour|updated at|actualizado|aktualisiert am|aggiornato alle)\b[\s:|-]*.*/gi,
// Temps de lecture
/\b(temps de lecture|reading time|lesedauer|tiempo de lectura|tempo di lettura|czas czytania|время чтения|阅读时间|読了時間)\b[\s:|-]*.*/gi,
// Lignes de type "Source - Aujourd'hui à 09:15 | mis à jour à 11:07"
/^(.*?\s[-|]\s)(aujourd[']?hui|today|hoy|heute|oggi|vandaag|dzisiaj|сегодня|今日)\b.*$/gim,
// Heures seules type "09:15" ou "09:15 | mis à jour..."
/^\s*\d{1,2}:\d{2}(\s*[-|]\s*.*)?$/gm,
// Lignes de métadonnées qu'on veut retirer du texte extrait.
// On teste ligne par ligne pour ne pas tronquer du vrai contenu en plein milieu.
const META_LINE_PATTERNS = [
// "mis à jour", "updated at", "actualizado", "aktualisiert", "aggiornato"
/\b(mis à jour|updated at|updated|actualizado|actualizada|aktualisiert|aktualisiert am|aggiornato alle|aggiornato)\b/i,
// "Temps de lecture", "Reading time", etc.
/\b(temps de lecture|reading time|lesedauer|tiempo de lectura|tempo di lettura|czas czytania|время чтения|阅读时间|読了時間)\b/i,
// "Aujourd'hui à 09:15", "Today at 09:15", etc.
/\b(aujourd[']?hui|today|hoy|heute|oggi|vandaag|dzisiaj|сегодня|今日)\b.*\d{1,2}:\d{2}/i,
// "Le Progrès - Aujourd'hui à 09:15 | mis à jour..."
/^.*\s[-|]\s.*\d{1,2}:\d{2}/i,
// Heure seule "09:15" ou "09:15 | ..."
/^\s*\d{1,2}:\d{2}\s*([-|].*)?$/i,
// "Publié le ...", "Published on ..."
/\b(publié le|publié|published on|published|veröffentlicht am|publicado el|publicado)\b/i,
// "Source : ...", "Par ..." en début de ligne
/^\s*(source\s*:|par\s+|by\s+|auteur\s*:|author\s*:)/i,
]
function isMetaLine(line: string): boolean {
return META_LINE_PATTERNS.some((pattern) => pattern.test(line))
}
export function cleanClipText(text: string): string {
let cleaned = text.replace(/\r\n/g, '\n').replace(/\n{3,}/g, '\n\n')
for (const pattern of META_PATTERNS) {
cleaned = cleaned.replace(pattern, '')
}
return cleaned
return text
.replace(/\r\n/g, '\n')
.split('\n')
.map((line) => line.trim())
.filter((line) => line.length > 0)
.filter((line) => line.length > 0 && !isMetaLine(line))
.join('\n')
.replace(/\n{3,}/g, '\n\n')
.trim()