Commit graph

11 commits

Author SHA1 Message Date
Axelle Abbadie
6193a3b9e5 fix: corrections lint communauté Obsidian (errors bloquantes + warnings)
- Descriptions ajoutées aux eslint-disable no-var-requires (require()
  dynamique requis : esbuild CJS ne peut pas import statiquement les
  modules Node.js natifs)
- Suppression des assignations style.display/style.flex au profit de
  classes CSS (pseudobs-fw-visible, flex sur .pseudobs-corpus-class-heading)
- Remplacement de window.prompt()/confirm() par des modales Obsidian
  (ConfirmModal, TextInputModal dans ui/SimpleModals.ts)
- Handlers d'événements async wrappés en void (...)() pour éviter les
  promesses non gérées
- Typage des résultats JSON.parse (scope/mappings) et des callbacks
  processFrontMatter, suppression des casts `as TFile` inutiles
2026-06-10 10:03:13 +02:00
Axelle Abbadie
ae11138c63 feat: corpus UI, exception-aware scan, rename cascade, export destination
Onglet Corpus
- Organisation par classes (créer, supprimer, déplacer fichiers)
- Détection statut par fichier : règles, version pseudo, export final
- Destination des exports finaux configurable : vault / à côté / dossier externe
- Option miroir de la structure de classes dans les exports
- FolderSuggest : autocomplete dossiers vault dans settings, onboarding et corpus

Exceptions dans la modale de scan
- MappingScanReviewModal : modale de contexte par occurrence (✓/✗/⚠)
- Initialisation des décisions depuis ignoredOccurrences persistées
- Bouton 'Enregistrer les exceptions' séparé d'Appliquer
- IgnoredOccurrence persistée dans mapping.json
- Surlignage rouge positionnel (context-aware, par occurrence précise)
- Exceptions exclues du moteur de remplacement (findSpansForRule)
- Section Exceptions dans l'onglet Mappings
- Clic droit 'Déclarer une exception' sur terme orange

Exports
- Re-export SRT/CHA depuis Markdown pseudonymisé (markdownToSrt, markdownToCha)
- resolveExportPath : mirroring de classes depuis le mapping pour les fichiers pseudonymisés
- writeExport : vault / next-to-source / external
- Onglet Exports : bouton adapté selon dossier exports vs source

Renommage en cascade
- vault.on('rename') : cascade automatique vers mapping, words, exports, audio, source
- renameFileAndRelated : bannière de warning dans le panneau
- Mise à jour pseudobs-source et pseudobs-audio dans le frontmatter
- moveFileToClass : déplacement audio (basename + pseudobs-audio)

Warnings
- Bannière au-dessus des onglets si le nom contient un terme pseudonymisable
- Bouton ✏ (saisie libre) +  (suggestion transcript_N)
- Statuts clarifiés : Actif/Ignoré/Partiel/Suggéré
- getValidatedFor inclut 'partial'

CSS : esbuild copie styles.css en mode dev via plugin onEnd
2026-05-17 12:39:53 +02:00
Axelle Abbadie
eb62c50373 feat: noScribe import, scan modal candidats, exceptions surlignées
Intégration noScribe (Phase 10)
- VttParser : WebVTT standard avec word timestamps (Whisper)
- NoScribeHtmlParser : HTML Qt Rich Text noScribe, extraction locuteurs S00/S01, audio source
- NoScribeVttParser : VTT noScribe v0.7 (cues splitées, labels SXX:, entités HTML)
- TranscriptConverter : format Markdown noScribe (**S00** [HH:MM:SS] : texte), extractWordData → .words.json
- Import audio automatique depuis meta tag HTML ou dossier source VTT
- Re-export VTT pseudonymisé depuis .md + .words.json (commande "Exporter en VTT")
- Redaction.ts : caviardage par syllabes (🀫)

Scan modal avec candidats
- MappingScanReviewModal : colonne occurrences cliquable → OccurrencesContextModal
- OccurrencesContextModal : cartes ✓/✗/⚠ par occurrence, callback sans application immédiate
- Bouton "Enregistrer les exceptions" séparé d'Appliquer

Exceptions
- IgnoredOccurrence dans types.ts + ignoredOccurrences sur MappingRule
- Persistance dans mapping.json, chargement au démarrage
- Surlignage rouge (pseudobs-exception, sensible à la casse via collectExact)
- Section "Exceptions" dans l'onglet Mappings avec cartes contextuelles et suppression
- Priorité 0 dans le highlighter (gagne sur orange/bleu/vert)

Corrections
- getValidatedFor() : inclut 'partial' comme état actif
- Labels de statut clarifiés : "Actif", "Ignoré", "Partiel", "Suggéré"
- Scan button corrigé dans PseudonymizationView (occurrences manquantes dans MappingRuleResult)
- PseudonymHighlighter : collectExact définie, exceptionRanges orphelin supprimé

Tests : 149 tests, 10 suites
2026-05-17 01:25:20 +02:00
Axelle Abbadie
503588e7fc feat: i18n, corpus organization, settings redesign, scope warning (Phase 10)
- i18n: all UI strings externalized in locales/en.json + fr.json;
  language selectable in wizard (new Language step) and settings
- Wizard: new Storage step with 1-vault-per-corpus recommendation
- Settings: reorganized in 6 sections ordered by frequency of use;
  language dropdown at the top
- Corpus organization: CorpusModal + ClassSelectModal;
  named classes with mirrored transcriptions/mappings/exports folders;
  class selection prompt on import
- Broad-scope warning for name rules (RuleModal + EditRuleModal):
  warning callout for folder/vault scope; success callout for file scope
- Mappings tab: grouped by scope (File/Folder/Vault);
  active-file-only filter checkbox (checked by default);
  getAllRulesWithLocation() added to ScopeResolver
- EditRuleModal, QuickPseudonymizeModal fully migrated to t()
- README, CHANGELOG, ROADMAP translated to English;
  French versions archived as *.fr.md
- esbuild: dev mode outputs directly to test_vault for hot reload
2026-05-16 01:06:01 +02:00
Axelle Abbadie
a46903c4e4 fix: violations portail Obsidian + TS lint
- Casts inutiles supprimés : as HTMLButtonElement (×2), as EntityCategory, as MappingRule[], ! sur dictionaryLoader
- Imports inutilisés supprimés : OccurrencesModal (main.ts), MappingRule (PseudonymizationView)
- CSS :has() → this.modalEl.addClass('pseudobs-modal-review-outer') dans DictScanReviewModal et MappingScanReviewModal
2026-05-14 01:34:36 +02:00
Axelle Abbadie
4e91c166e8 feat: système de dictionnaires structurés v1.1 (Phase 9)
- Format DictionaryFile v1.1 : roles, configSchema, config, author, doi
- DictionaryLoader : index de détection, résolution de classes, scanText (n-grammes), nextReplacement
- Repo dédié pseudobsidian-dictionaries + fr-communes.dict.json (34 957 communes GeoAPI INSEE)
- Wizard : catalogue de dictionnaires téléchargeables depuis le repo dédié (icônes cloud-download/check)
- scripts/build-cities.mjs : génération du dictionnaire communes
- DictScanReviewModal : modale de révision en cards (contexte, préfixe éditable, index calculé)
- MappingScanReviewModal : modale de révision pour le scan par règles existantes
- Onglet Dictionnaires : mini cards avec checkbox, scan individuel, scan groupé
- Suppression onglet Candidats : scan règles → Mappings, scan NER → NER
- RuleModal : suggestions dictionnaire séparées de Coulmont
- docs : README, CHANGELOG, ROADMAP, SPECS §6 mis à jour
2026-05-14 01:08:25 +02:00
Axelle Abbadie
631803f8f4 feat: dictionaries tab — list, entry count, import, delete 2026-05-13 11:21:11 +02:00
Axelle Abbadie
0183c6d034 chore: v0.1.0 — minAppVersion 1.7.2, CSS border-bottom fix, versions.json 2026-05-13 10:58:19 +02:00
Axelle Abbadie
b9a37f8306 Pre-v0.1.0 2026-05-12 22:15:36 +02:00
Axelle Abbadie
ebac4531f7 fix: address Obsidian community plugin review bot issues
Floating promises: add `void` to all unhandled refreshHighlightData() calls
in callbacks and event listeners; extract processFilePicker() to fix the async
event listener returning a Promise where void was expected.

Inline styles: replace all style.cssText and setAttribute('style') with CSS
classes (pseudobs-hidden-input, pseudobs-legend-*, pseudobs-suggestions-*,
pseudobs-occ-*, pseudobs-disabled-input) across OccurrencesModal, RuleModal,
QuickPseudonymizeModal, EditRuleModal, and main.ts.

Settings headings: replace all createEl('h2'/'h3') with new Setting().setHeading()
in PseudObsSettingTab (5 headings).

Sentence case: fix linter-flagged occurrences (placeholder text, legend labels,
button text); 4 residual occurrences on legitimate proper nouns (Baptiste Coulmont,
Jefferson, ICOR, Synology Drive) left for human reviewer.
2026-05-12 11:13:22 +02:00
Axelle Abbadie
d216e81fb2 init 2026-05-12 01:55:27 +02:00