Files
SuperminarenandClaude Sonnet 5.5 874838f525 Swedish adaptation: Instegscertifikat and HAREC
- Editions replaced by INSTEG, HAREC and UPPGRADERING (Instegscertifikat -> HAREC)
- Question pool optional; simulator, homework tool and solutions switch off without one
- All UI strings, templates, renderers and project JS localised to sv-SE
  (decimal comma, Swedish non-breaking-space rules, Å/Ä/Ö in Morse table)
- DARC branding, membership CTA and German links removed; attribution footer added
- Page names centralised in src/pages.py
- README and docs rewritten in Swedish

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-10 15:03:02 +02:00

129 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 50Ω – svensk adaption
Generator för en svensk webbplats för självstudier inför **Instegscertifikatet** och **HAREC**. Projektet är en oberoende svensk adaption av [50ohm.de](https://50ohm.de) och drivs varken av DARC e.V. eller av SSA.
## Licens, attribution och ändringsmeddelande
Det här repot är baserat på generatorn bakom [50ohm.de](https://50ohm.de) (DARC e.V.), originalet finns i repot [DARC-e-V/50ohm](https://github.com/DARC-e-V/50ohm) (grenen `main`). Generatorns kod är licensierad under AGPL-3.0 (se [`LICENSE`](LICENSE)); innehållet på 50ohm.de är licensierat under CC BY 4.0 och måste tillskrivas DARC e.V. Licensfilerna ska behållas.
**Ändringar:** Generatorn har översatts till svenska (gränssnitt, bildtexter, LaTeX, enhets- och typografiregler enligt svensk praxis), kurserna har ersatts av Instegscertifikat, HAREC och uppgradering från Instegscertifikat till HAREC, den tyska frågebanken är valfri, och all DARC-/tysk branding och alla länkar till tyska tjänster har tagits bort.
Detta är en oberoende adaption. Den är **inte godkänd av DARC eller SSA**.
## Översikt
Utbildningsmaterialet skrivs i ett utökat markdown-format, internt kallat DARCdown. Kärnan i generatorn är en parser baserad på [mistletoe](https://github.com/miyuchina/mistletoe) som har utökats med extra syntax och utdataformat. Formatet beskrivs i `README-FORMAT.md` i innehållsrepot.
Utdataformat:
- HTML: [`fifty_ohm_html_renderer.py`](renderer/fifty_ohm_html_renderer.py)
- LaTeX: [`fifty_ohm_latex_renderer.py`](renderer/fifty_ohm_latex_renderer.py)
- HTML för presentationer med reveal.js: [`fifty_ohm_html_slide_renderer.py`](renderer/fifty_ohm_html_slide_renderer.py)
Själva generatorn finns i `src`, framför allt skriptet [`build.py`](src/build.py). Namnen på webbplatsens sidor definieras på ett ställe: [`src/pages.py`](src/pages.py).
## Kurser (Edition)
Tre kurser byggs. Varje kurs har en innehållsförteckning (toc) i innehållsrepot:
| Edition (`--edition`) | Kurs | Fil |
|---|---|---|
| `INSTEG` | Instegscertifikat | `toc/INSTEG.json` |
| `HAREC` | HAREC | `toc/HAREC.json` |
| `UPPGRADERING` | Uppgradering: Instegscertifikat till HAREC | `toc/UPPGRADERING.json` |
Utan `--edition` byggs alla tre. Alternativet kan anges flera gånger:
```console
$ python main.py --edition INSTEG --edition HAREC
```
## Innehållsrepot
Generatorn läser sitt innehåll från ett separat repo med följande struktur:
```
toc/<EDITION>.json innehållsförteckning per kurs
contents/sections/<ident>.md text för ett avsnitt
contents/slides/<ident>.md presentation för ett avsnitt (valfri)
contents/snippets/*.md korta texter för startsidan
contents/static/<sida>.html statiska sidor (+ <sida>_sidebar.html, valfri)
contents/drawings, photos, html bilder, foton och inbäddad HTML
contents/questions/question_pool.json frågebank (valfri, se nedan)
contents/questions/metadata.json bildmetadata för frågorna (valfri)
contents/solutions/<frågenummer>.md lösningsvägar (valfria)
```
### Statiska sidor och snippets
Följande sidnamn används (se `src/pages.py`): `prov`, `info`, `sok`, `kurser_karta`, `kurser_lista`, `mentorer`. För de tre sista används en generell mall om innehållsrepot saknar motsvarande statiska sida. Saknade snippets ger tom text, bygget misslyckas inte.
Snippets som används på startsidan: `index_title`, `index_teaser`, `index_content`, `index_btn_start`, `index_btn_vad_ar_amatorradio`, `lernen_selbst_title`, `lernen_selbst_teaser`, `lernen_selbst_btn_instegs`, `lernen_selbst_btn_harec`, `lernen_selbst_btn_uppgradering`, `lernen_kurs_*` och `lernen_mentor_*` (`title`, `teaser`, `btn`).
### Frågebank (valfri)
Det finns ingen svensk frågebank. Om `contents/questions/question_pool.json` saknas hoppar generatorn över provsimulatorn, övningsverktyget, lösningssidorna och `question_index.json`, och alla länkar dit döljs i mallarna (Jinja-variabeln `has_question_pool`). Finns frågebanken byggs allt som förut. `metadata.json` är valfri; saknas en fråga där används standardvärden.
## Kom igång
### Installera Python och beroenden
Projektet är uppsatt med [`uv`](https://docs.astral.sh/uv/) men fungerar lika bra med `pip` och `venv`. Använd Python-versionen i `.python-version`.
```console
$ uv venv
$ source .venv/bin/activate
$ uv pip sync requirements.txt
```
Med `venv` och `pip`:
```console
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt
```
### Bygga
Ange sökvägen till ett utcheckat innehållsrepo, antingen i `config/config.json` (se `config/config.json.example`), som miljövariabel `OHM_INPUT` eller på kommandoraden:
```console
$ python main.py -i ../50ohm-contents-dl -o build
```
Flaggor: `--input/-i` (innehåll), `--output/-o` (målkatalog, standard `./build`), `--edition` (kurs, se ovan), `--no-render-editions`, `--no-render-solutions`, `--build-zip`. `python build.py` bygger allt och packar `build/build.zip`.
### Testa lokalt
Startsidan är `build/index.html`. För att sökfunktionen ska fungera krävs en lokal webbserver:
```console
$ cd build/
$ python3 -m http.server 8000
```
Öppna sedan [`http://localhost:8000/index.html`](http://localhost:8000/index.html).
### Hosting
Resultatet är rent statiska filer. Kopiera innehållet i `build/` till valfri webbserver (nginx, Apache, GitHub Pages, ...). Alla länkar är relativa. Ett Docker-bygge finns i `docker/Dockerfile`:
```console
$ docker build -f docker/Dockerfile -t 50ohm-sv .
$ docker run --rm -v ../50ohm-contents-dl:/content -v $PWD/build:/build 50ohm-sv -i /content -o /build
```
Webbplatsens sidfot innehåller en platshållare för driftansvarigs egna utgivar-/kontaktuppgifter och integritetspolicy (`templates/html/page.html`, markerad med `TODO`). Den måste fyllas i innan webbplatsen publiceras.
### Tester och kodstil
```console
$ pip install pytest ruff
$ python -m pytest
$ ruff check . && ruff format --check .
```
## Presentationer
Se [`doc/Slides.md`](doc/Slides.md).