Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bit.io

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.

Struktura projektu

.
├── 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

Skąd biorą się pakiety

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.

Pasek języków

Dla każdego pakietu pasek języków łączy dwa źródła:

  1. GitHub API (/repos/{owner}/{repo}/languages) — standardowe języki rozpoznawane przez linguist (JavaScript, Rust, Python, Go, ...).
  2. 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).

Plik bit.hk

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 .hk do 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.

Wdrożenie (GitHub Pages)

  1. Wypakuj archiwum do repozytorium.
  2. W ustawieniach repo włącz PagesDeploy from a branch → gałąź main, katalog / (root).
  3. Gotowe — index.html w 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).