Razvoj
Vodič za razvoj
Ažurirajte dokumentaciju samo pod website/docs (English). Prevodi pod website/i18n/<locale>/… se generišu i ne treba ih ručno uređivati. Koristite zadatke za prevođenje (npr. make translate_web_docs_batch) da osvežite lokalizovani sadržaj.
Preduslovi
- Node.js 22+ i npm (testirano sa Node 22)
- Thunderbird 128 ESR ili noviji (za ručno testiranje)
Raspored projekta (visok nivo)
- Koren: skripta za pakovanje
distribution_zip_packer.sh, dokumentacija, snimci ekrana sources/: glavni kod dodatka (background, options/popup UI, manifesti, ikone)tests/: Vitest skupwebsite/: Docusaurus dokumenti (sa i18n podwebsite/i18n/de/...)
Instalacija i alati
- Instalirajte zavisnosti u korenu:
npm ci - Dokumentacija (opciono):
cd website && npm ci - Otkrijte mete:
make help
Živi razvoj (web‑ext run)
- Brza petlja u Firefox Desktop (samo UI smoke‑testovi):
npx web-ext run --source-dir sources --target=firefox-desktop- Pokretanje u Thunderbird-u (preporučeno za MailExtensions):
npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"- Saveti:
- Držite otvorenu Thunderbird konzolu grešaka (Tools → Developer Tools → Error Console).
- MV3 event stranice se suspenduju kada su neaktivne; ponovo učitajte dodatak posle izmena koda ili dozvolite da web‑ext automatski ponovo učita.
- Neka ponašanja specifična za Firefox se razlikuju; uvek proverite u Thunderbird-u radi pariteta API-ja.
- Putanje do Thunderbird binarnog fajla (primeri):
- Linux:
thunderbird(npr./usr/bin/thunderbird) - macOS:
/Applications/Thunderbird.app/Contents/MacOS/thunderbird - Windows:
"C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe" - Izolacija profila: Koristite odvojen Thunderbird profil za razvoj kako biste izbegli uticaj na vašu svakodnevnu postavku.
Make mete (po abecedi)
Makefile standardizuje uobičajene razvojne tokove. Pokrenite make help bilo kada za jednolinijski rezime svake mete.
Savet: pokretanje make bez mete otvara jednostavan Whiptail meni za izbor mete.
| Meta | Jednolinijski opis |
|---|---|
clean | Uklonite lokalne artefakte build/preview (tmp/, web-local-preview/, website/build/). |
commit | Formatirajte, pokrenite testove (uklj. i18n), ažurirajte changelog, commit & push. |
eslint | Pokrenite ESLint preko flat konfiguracije (npm run -s lint:eslint). |
help | Ispišite sve mete sa jednolinijskim opisima (sortirano). |
lint | web‑ext lint na sources/ (privremeni manifest; ignoriše ZIP-ove; nefatalno). |
menu | Interaktivni meni za izbor mete i opcionih argumenata. |
pack | Napravite ATN i LOCAL ZIP-ove (pokreće linter; poziva skriptu za pakovanje). |
prettier | Formatirajte repozitorijum na licu mesta (piše izmene). |
prettier_check | Prettier u check režimu (bez pisanja); pada ako je potrebno preformatiranje. |
prettier_write | Alias za prettier. |
test | Prettier (write), ESLint, zatim Vitest (coverage ako je podešen). |
test_i18n | Samo i18n testovi: placeholderi/paritet u dodatku + paritet sajta. |
translate_app | Alias za translation_app. |
translation_app | Prevedite stringove UI aplikacije iz sources/_locales/en/messages.json. |
translate_web_docs_batch | Prevedite dokumente sajta putem OpenAI Batch API (preporučeno). |
translate_web_docs_sync | Prevedite dokumente sajta sinhrono (legacy, bez batch-a). |
translate_web_index | Alias za translation_web_index. |
translation_web_index | Prevedite UI početne stranice/navigacije/podnožja (website/i18n/en/code.json → .../<lang>/code.json). |
web_build | Izgradite dokumente u website/build (podržava --locales / BUILD_LOCALES). |
web_build_linkcheck | Provera linkova bez interneta (preskače udaljene HTTP[S]). |
web_build_local_preview | Lokalni gh‑pages pregled; automatski servis na 8080–8090; opciono testovi/provera linkova. |
web_push_github | Pošaljite website/build na granu gh-pages. |
Sintaksa za opcije
- Koristite
make <command> OPTS="…"da prosledite opcije (preporučene navodnike). Svaka meta ispod prikazuje primer upotrebe.
--
Saveti za build po jezicima
- Napravite podskup jezika: postavite
BUILD_LOCALES="en de"ili proslediteOPTS="--locales en,de"web metama. - Pregled određenog jezika:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/.
Izgradnja i pakovanje
- Napravite ZIP-ove:
make pack - Proizvodi ATN i LOCAL ZIP-ove u korenu repozitorijuma (ne uređujte artefakte ručno)
- Savet: ažurirajte verziju i u
sources/manifest_ATN.jsoni usources/manifest_LOCAL.jsonpre pakovanja - Ručna instalacija (dev): Thunderbird → Tools → Add‑ons and Themes → zupčanik → Install Add‑on From File… → izaberite napravljeni ZIP
Test
- Kompletan skup:
make test(Vitest) - Pokrivenost (opciono):
npm i -D @vitest/coverage-v8- Pokrenite
make test; otvoritecoverage/index.htmlza HTML izveštaj - Samo i18n:
make test_i18n(UI ključevi/placeholderi/naslovi + paritet sajta po jeziku i dokumentu uz provere id/title/sidebar_label)
Otklanjanje grešaka i logovi
- Konzola grešaka: Tools → Developer Tools → Error Console
- Prebacivanje detaljnih logova u runtime-u:
- Uključi:
messenger.storage.local.set({ debug: true }) - Isključi:
messenger.storage.local.set({ debug: false }) - Logovi se pojavljuju tokom sastavljanja/slanja odgovora
Dokumentacija (sajt)
- Dev server:
cd website && npm run start - Build statičkog sajta:
cd website && npm run build - Ekvivalenti u Make (abecedno):
make web_build,make web_build_linkcheck,make web_build_local_preview,make web_push_github - Primeri upotrebe:
- Samo EN, preskoči testove/proveru linkova, bez push-a:
make web_build_local_preview OPTS="--locales en --no-test --no-link-check --dry-run" - Svi jezici, sa testovima/proverom linkova, zatim push:
make web_build_local_preview && make web_push_github - Pre objavljivanja, pokrenite proveru linkova bez interneta:
make web_build_linkcheck. - i18n: Engleski je u
website/docs/*.md; nemački prevodi uwebsite/i18n/de/docusaurus-plugin-content-docs/current/*.md - Pretraga: Ako su Algolia DocSearch promenljive okruženja podešene u CI (
DOCSEARCH_APP_ID,DOCSEARCH_API_KEY,DOCSEARCH_INDEX_NAME), sajt koristi Algolia pretragu; u suprotnom se vraća na lokalnu pretragu. Na početnoj stranici, pritisnite/iliCtrl+Kda otvorite polje za pretragu.
Ruta preusmeravanja za donacije
website/src/pages/donate.js- Ruta:
/donate(i/<locale>/donate) - Ponašanje:
- Ako trenutna ruta ima jezik (npr.
/de/donate), koristi ga - U suprotnom, izaberite najbolji pogodak iz
navigator.languagesu odnosu na podešene jezike; vratite se na podrazumevani jezik - Preusmerava na:
en→/docs/donation- ostale →
/<locale>/docs/donation - Koristi
useBaseUrlza ispravno rukovanje baseUrl-om - Uključuje meta refresh +
noscriptlink kao rezervu
Saveti za pregled
- Zaustavite Node pregled čisto: otvorite
http://localhost:<port>/__stop(štampa se posleLocal server started). - Ako se slike ne učitavaju u MDX/JSX, koristite
useBaseUrl('/img/...')da se ispoštuje sajtbaseUrl. - Pregled se startuje prvi; provera linkova se pokreće naknadno i ne blokira (prekinuti spoljašnji linkovi neće zaustaviti pregled).
- Primer URL-a za pregled:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/(štampa se posle “Local server started”). - Spoljašnji linkovi u proveri linkova: Neki spoljašnji sajtovi (npr. addons.thunderbird.net) blokiraju automatske crawlere i mogu prikazati 403 u proverama linkova. Pregled se i dalje pokreće; ovo je bezbedno ignorisati.
Prevedite sajt
Šta možete prevesti
- Samo UI sajta: početna stranica, navigacioni bar, podnožje i drugi UI stringovi. Sadržaj dokumentacije za sada ostaje samo na engleskom.
Gde da menjate
- Uredite
website/i18n/<locale>/code.json(koristiteenkao referencu). Ostavite placeholdere kao{year},{slash},{ctrl},{k},{code1}nepromenjene.
Generišite ili osvežite fajlove
- Napravite nedostajuće stubove za sve jezike:
npm --prefix website run i18n:stubs - Prepišite stubove iz engleskog (posle dodavanja novih stringova):
npm --prefix website run i18n:stubs:force - Alternativa za jedan jezik:
npx --prefix website docusaurus write-translations --locale <locale>
Prevedite stringove UI za početnu/navigacioni bar/podnožje (OpenAI)
- Podesite akreditive jednom (shell ili .env):
export OPENAI_API_KEY=sk-...- Opciono:
export OPENAI_MODEL=gpt-4o-mini - Jednokratno (svi jezici, bez en):
make translate_web_index - Ograničite na određene jezike:
make translate_web_index OPTS="--locales de,fr" - Prepišite postojeće vrednosti:
make translate_web_index OPTS="--force"
Validacija i ponovni pokušaji
- Skripta za prevođenje validira oblik JSON-a, čuva placeholdere sa vitičastim zagradama i osigurava da URL-ovi ostanu neizmenjeni.
- U slučaju neuspešne validacije, pokušava ponovo sa povratnom informacijom do 2 puta pre nego što zadrži postojeće vrednosti.
Pregledajte svoj lokal
- Dev server:
npm --prefix website run start - Posetite
http://localhost:3000/<locale>/Thunderbird-Reply-with-Attachments/
Slanje
- Otvorite PR sa izmenjenim
code.jsonfajlom(a). Držite izmene fokusiranim i uključite brz snimak ekrana kad je moguće.
Saveti za bezbednost i konfiguraciju
- Ne komitujte
sources/manifest.json(privremeno se kreira tokom build-a) - Održavajte
browser_specific_settings.gecko.idstabilnim da biste sačuvali kanal za ažuriranje
Trajnost podešavanja
- Skladištenje: Sva korisnička podešavanja se nalaze u
storage.locali opstaju kroz ažuriranja dodatka. - Instalacija: Podrazumevane vrednosti se primenjuju samo kada ključ strogo nedostaje (undefined).
- Ažuriranje: Migracija popunjava samo nedostajuće ključeve; postojeće vrednosti se nikada ne prepisuju.
- Oznaka šeme:
settingsVersion(trenutno1). - Ključevi i podrazumevane vrednosti:
blacklistPatterns: string[]→['*intern*', '*secret*', '*passwor*']confirmBeforeAdd: boolean→falseconfirmDefaultChoice: 'yes'|'no'→'yes'warnOnBlacklistExcluded: boolean→true- Kod: videti
sources/background.js→initializeOrMigrateSettings()iSCHEMA_VERSION.
Razvojni tok (dodavanje novog podešavanja)
- Uvećajte
SCHEMA_VERSIONusources/background.js. - Dodajte novi ključ + podrazumevanu vrednost u objekat
DEFAULTSuinitializeOrMigrateSettings(). - Koristite pravilo "only-if-undefined" pri setovanju podrazumevanih vrednosti; ne prepisujte postojeće vrednosti.
- Ako je podešavanje vidljivo korisniku, povežite ga u
sources/options.jsi dodajte lokalizovane stringove. - Dodajte/prilagodite testove (videti
tests/background.settings.migration.test.js).
Saveti za ručno testiranje
- Simulirajte svežu instalaciju: obrišite direktorijum podataka ekstenzije ili krenite sa novim profilom.
- Simulirajte ažuriranje: postavite
settingsVersionna0ustorage.locali ponovo učitajte; potvrdite da postojeće vrednosti ostaju neizmenjene i da se dodaju samo nedostajući ključevi.
Otklanjanje problema
- Uverite se da je Thunderbird 128 ESR ili noviji
- Koristite konzolu grešaka za probleme u runtime-u
- Ako se čini da uskladištena podešavanja nisu pravilno primenjena, restartujte Thunderbird i pokušajte ponovo. (Thunderbird može keširati stanje kroz sesije; restart obezbeđuje učitavanje svežih podešavanja.)
CI i pokrivenost
- GitHub Actions (
CI — Tests) pokreće vitest sa pragovima pokrivenosti (85% lines/functions/branches/statements). Ako pragovi nisu ispunjeni, posao pada. - Workflow otprema artefakt
coverage-htmlsa HTML izveštajem; preuzmite ga sa stranice pokretanja (Actions → najskorije pokretanje → Artifacts).
Doprinos
- Videti CONTRIBUTING.md za smernice o granama/commit-ovima/PR-ovima
- Savet: Kreirajte odvojen Thunderbird razvojni profil za testiranje kako biste izbegli uticaj na vaš svakodnevni profil.
Prevodi
- Pokretanje velikih poslova prevođenja “sve → sve” može biti sporo i skupo. Počnite sa podskupom (npr. nekoliko dokumenata i 1–2 jezika), pregledajte rezultat, zatim proširite.
- Politika ponovnih pokušaja: poslovi prevođenja obavljaju do 3 ponovna pokušaja sa eksponencijalnim backoff-om pri API greškama; videti
scripts/translate_web_docs_batch.jsiscripts/translate_web_docs_sync.js.
Snimci ekrana za dokumentaciju
-
Čuvajte slike pod
website/static/img/. -
Referencirajte ih u MD/MDX preko
useBaseUrl('/img/<filename>')kako bi putanje radile sa sajtombaseUrl. -
Nakon dodavanja ili preimenovanja slika pod
website/static/img/, potvrdite da sve reference i dalje koristeuseBaseUrl('/img/…')i da se renderuju u lokalnom pregledu. Favikone -
Više‑veličinski
favicon.icose generiše automatski u svim build putevima (Make + skripte) putemwebsite/scripts/build-favicon.mjs. -
Nije potreban ručni korak; dovoljno je ažurirati
icon-*.png. Savet za pregled -
Ostavite front‑matter
idneizmenjen u prevedenim dokumentima; prevodite samotitleisidebar_labelkada su prisutni.
clean
- Svrha: uklonite lokalne artefakte build/preview.
- Upotreba:
make clean - Uklanja (ako je prisutno):
tmp/web-local-preview/website/build/
commit
- Svrha: formatiranje, testiranje, ažuriranje changelog-a, commit i push.
- Upotreba:
make commit - Detalji: pokreće Prettier (write),
make test,make test_i18n; dodaje changelog kada postoje stage-ovane izmene; šalje naorigin/<branch>.