card-layouts

Wspólne źródło schematów, layoutów i generatora kart pracy używanych przez serie edukacyjne. Jeden plik card_source.json opisuje treść oraz mapowanie edukacyjne, a tools/render_card.py generuje z niego równolegle LaTeX i HTML.

Repozytorium rozdziela trzy warstwy:

  1. Treść kartycard_source.json: cele, efekty nauczania, kryteria, drzewka marginesowe, kroki oraz zadania.
  2. Layouttemplates/*.json: geometria strony, role marginesów, komponenty i wybór emitera TeX/HTML.
  3. Seriaseries.json: kolejność kart, repozytoria, wersje i kontrakt uruchamiania zadań.

Zawartość

card-layouts/
├── schemas/
│   ├── card-source.schema.json
│   ├── card-template.schema.json
│   ├── reference-registry.schema.json
│   └── series.schema.json
├── templates/
│   ├── karta-klasyczna.json
│   ├── karta-5a.json
│   └── karta-5b.json
├── tools/render_card.py
├── docs/
│   ├── CARD.md
│   ├── api.md
│   └── SERIES.md
└── examples/
    ├── card/
    └── series/

Layouty

Layout Przeznaczenie Marginesy Emitery
karta-klasyczna elastyczna karta sekcyjna dwa panele drzewek TeX + HTML
karta-5a wielostronicowa karta A4 landscape TECH po lewej, OG po prawej TeX + HTML
karta-5b referencyjna karta A4 portrait gołe drzewka TECH/OG TeX + HTML

karta-5b jest obecnym layoutem referencyjnym. Używa geometrii 0,55 / 2,05 / 0,55 / 14,70 / 0,55 / 2,05 / 0,55 cm; lewy margines zawiera efekty zawodowe TECH, a prawy efekty ogólne OG.

Szybki start

Wygenerowanie przykładowej karty:

make render-example

Powstaną:

examples/card/build/tex/main.tex
examples/card/build/html/index.html
examples/card/build/html/style.css

Złożenie kontrolnego PDF-u wymaga latexmk i pakietów LaTeX używanych przez generator:

make pdf-example

Pełna kontrola repozytorium:

make check

Walidacja względem JSON Schema jest wykonywana, gdy dostępny jest pakiet jsonschema. Workflow Gitei pozostaje samowystarczalny i zawsze uruchamia walidację relacji generatora; pełną walidację schematów można włączyć lokalnie:

python3 -m pip install -r requirements-dev.txt
CARD_LAYOUTS_REQUIRE_JSONSCHEMA=1 python3 scripts/check_repository.py

Generator można też wywołać bezpośrednio dla dowolnego katalogu karty:

python3 tools/render_card.py /sciezka/do/karty
python3 tools/render_card.py /sciezka/do/karty --template templates/karta-5b.json

Katalog karty musi zawierać json/card_source.json. Ścieżki wyjściowe określa obiekt generated w tym pliku.

Model edukacyjny

Źródłem marginesów nie jest luźny tekst. Relacje są jawne:

WE (wymaganie edukacyjne)
└── EN/EK (efekt nauczania lub efekt kształcenia)
    └── KW (kryterium weryfikacji)

Każda sekcja i każdy krok mogą wskazywać te same drzewka przez tree_refs. Dzięki temu TeX i HTML pokazują identyczne powiązanie treści z efektami.

Sekcje mogą także deklarować strukturalne assets (najczęściej zrzuty ekranu z doc/assets). Generator wstawia je do TeX/PDF i HTML, zachowuje podpis, tekst alternatywny i stabilną etykietę oraz przygotowuje link do pełnego obrazu w wersji ekranowej.

Szczegóły modelu karty opisuje docs/CARD.md, manifestu serii docs/SERIES.md, a wspólnego serwera aplikacji docs/api.md.

Słowniki podstaw programowych

Generator może rozszerzać skróty z zewnętrznych słowników JSON. Karta podaje ich katalog przez:

{
  "dictionary_refs": {
    "pp_json_root": "../../pp/json"
  }
}

Brak słowników nie blokuje generowania, jeśli karta zawiera kompletne pola display i text we własnych drzewkach.

Rejestry referencji

Wspólnej strategii, innej karty, treści ani wzoru nie kopiujemy do karty. card_source.json przechowuje stabilne UUID-y, a generator rozwiązuje je przez lokalny kanoniczny rejestr JSON. Widocznym hiperłączem jest kod strategii (Mxx), nazwa karty albo etykieta treści/wzoru. Model danych i przykład są w docs/CARD.md.

Zasada zmian

  • zmiana treści należy do card_source.json;
  • zmiana geometrii i stylu należy do templates/*.json oraz emitera;
  • wygenerowanych plików nie edytujemy ręcznie;
  • nowa wersja layoutu wymaga aktualizacji numeru version, przykładu i testu obu wyjść.
S
Description
A1-A8 card generator, React viewer and print layouts
Readme 782 KiB
Languages
Python 58.4%
TypeScript 31.9%
CSS 9.6%