fix(extension): permissions universelles Store + nettoyage article v0.4.5
- 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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user