Statyczna strona indeksu bibliotek dla Hacker Lang — języka programowania
dla dystrybucji Linuksa HackerOS. Bez backendu: cała lista pakietów
wczytywana jest w przeglądarce bezpośrednio z pliku
repo-list.json
w repozytorium bit-io/repository.
.
├── index.html strona główna (hero, wyróżnione pakiety)
├── pages/
│ ├── packages.html pełna lista pakietów z wyszukiwarką i filtrami
│ ├── package.html strona szczegółów pakietu (?name=nazwa)
│ └── about.html opis projektu, formatu repo-list.json i rejestru
├── js/
│ ├── repo-list.js pobiera i cache'uje repo-list.json z GitHuba
│ ├── languages.js mapa kolorów języków + wykrywanie .hl/.h#/.hcs
│ ├── hk.js parser formatu .hk + pobieranie bit.hk z repo
│ ├── packages.js renderowanie kart pakietów, metadane repo
│ ├── package-detail.js logika strony pages/package.html
│ ├── terminal.js animacja terminala na stronie głównej
│ └── main.js nawigacja mobilna, wspólne drobiazgi
├── styles/
│ ├── base.css tokeny, reset, typografia
│ ├── components.css nawigacja, stopka, karty, pasek języków
│ ├── home.css style strony głównej
│ └── package.css style listy i szczegółów pakietu
├── images/
│ ├── icon.png logo bit.io bez tła
│ └── logo.png logo bit.io z tłem
├── .nojekyll
└── README.md
Każdy wpis w repo-list.json wygląda tak:
{
"obsidian": {
"url": "https://github.com/bit-io/obsidian.git",
"type": "rust"
}
}url wskazuje na repozytorium GitHub, type to dominujący język źródłowy
(hl, rust, hsharp, hcs, ...). Strona wczytuje ten plik przez
raw.githubusercontent.com — dodanie nowego wpisu do pliku (np. przez pull
request) sprawia, że pakiet od razu pojawia się na stronie, bez żadnego
wdrożenia.
Dla każdego pakietu pasek języków łączy dwa źródła:
- GitHub API (
/repos/{owner}/{repo}/languages) — standardowe języki rozpoznawane przez linguist (JavaScript, Rust, Python, Go, ...). - Własne skanowanie drzewa repozytorium (
/git/trees/{branch}?recursive=1) — liczy bajty plików z rozszerzeniami.hl(Hacker Lang, fiolet),.h#(H#, ciemna czerwień) i.hcs(HackerScript, ciemna szarość), których GitHub nie rozpoznaje.
Wyniki są cache'owane w localStorage na godzinę (dane repo) / 30 minut
(metadane repo), żeby nie przekraczać publicznego limitu GitHub API
(60 zapytań/godz. bez autoryzacji).
Jeśli repozytorium pakietu zawiera w katalogu głównym plik bit.hk
(format opisany w
dokumentacji HackerOS),
strona szczegółów pakietu (pages/package.html) automatycznie pokazuje:
- wersję i licencję jako odznaki obok nazwy pakietu,
- panel bit.hk z wersją, licencją, autorem, punktem wejścia (
entry) i typem, - panel Zależności wygenerowany z sekcji
[dependencies](z linkami do pakietów, jeśli też są w rejestrze), - gotowy fragment
.hkdo wklejenia we własnym[dependencies], żeby zaimportować bibliotekę.
js/hk.js zawiera samodzielny parser formatu .hk (sekcje, zagnieżdżanie
przez ->/-->/--->, klucze kropkowe, tablice, komentarze ! i
uproszczoną interpolację ${...}), napisany według oficjalnej dokumentacji
formatu. Plik bit.hk jest pobierany bezpośrednio z
raw.githubusercontent.com, więc — podobnie jak repo-list.json — nie
obciąża limitu zapytań GitHub API. Jeśli pakiet nie ma jeszcze bit.hk,
strona pokazuje stosowną informację zamiast pustych pól.
- Wypakuj archiwum do repozytorium.
- W ustawieniach repo włącz Pages → Deploy from a branch → gałąź
main, katalog/ (root). - Gotowe —
index.htmlw katalogu głównym jest automatycznie wejściem do strony.
Plik .nojekyll zapobiega przetwarzaniu strony przez Jekyll (które domyślnie
ignoruje katalogi zaczynające się od podkreślenia i może gubić pliki).