En moderne gjenskaping av okfn/timemapper: lag tidslinjer med tilhørende kart («tidskart») fra Google-regneark eller CSV-filer, og kjør det hele på din egen tjener.
Hva er forbedret i forhold til originalen:
- Moderne stack: Node ≥ 18, Express 5, TimelineJS 3 (3.9.x), Leaflet 1.9 — originalen krevde Node 0.8 og Express 3 fra 2013 og lar seg ikke kjøre på moderne programvare.
- Ingen Twitter-innlogging (originalens passport-twitter er dødt etter X sine API-endringer). I stedet ett administratorpassord satt som miljøvariabel — laget for én bruker/organisasjon.
- Alle frontend-biblioteker ligger lokalt i
public/vendor/— ingen avhengighet til eksterne CDN-er (bare OpenStreetMap-fliser hentes utenfra ved visning). - Støtter både publiserte Google Sheets og opplasting av CSV-filer.
- Norske og engelske kolonnenavn, norske datoformater (
17.05.1814), årstall f.Kr. (-320). - Docker-oppsett med vedvarende datalagring, alternativt systemd + nginx (se
deploy/). - Enkel JSON-fillagring under
data/— ingen database å drifte; sikkerhetskopier katalogen, ferdig.
Katalogen docs/ inneholder en statisk eksport av tidskartene – rene
HTML-filer som kan vises av hvem som helst i nettleseren. Når repoet ligger på
GitHub: gå til Settings → Pages, velg Deploy from a branch, branch
main og mappe /docs, og lagre. Etter et minutt er demoen tilgjengelig på
https://<brukernavn>.github.io/<repo-navn>/
Regenerér den statiske eksporten etter endringer med:
npm run seed-demo # legger demodataene i data/ (første gang)
npm run export-static # skriver ny docs/ fra tidskartene i data/Eksporten er «frossen» – den henter ikke data fra Google Sheets ved visning. Den kjørende appen (under) gjør det.
# rediger docker-compose.yml: sett ADMIN_PASSWORD og SESSION_SECRET
docker compose up -d --buildÅpne http://localhost:3000, logg inn med administratorpassordet og lag ditt første tidskart.
Dataene lagres i ./data/ på verten.
npm ci --omit=dev
ADMIN_PASSWORD='hemmelig' SESSION_SECRET='lang-tilfeldig-streng' node server.jsFor varig drift: se deploy/timemapper.service (systemd) og deploy/nginx.conf.example
(omvendt proxy med TLS).
| Variabel | Standard | Beskrivelse |
|---|---|---|
PORT |
3000 |
Port appen lytter på |
ADMIN_PASSWORD |
(tom) | Passord for redigering. Tomt = kun visning |
SESSION_SECRET |
(tilfeldig) | Hemmelighet for innloggingskapselen. Sett fast verdi i produksjon, ellers logges du ut ved omstart |
SITE_TITLE |
TimeMapper |
Navn i toppfeltet |
DATA_DIR |
./data |
Hvor tidskart og opplastede CSV-er lagres |
Første rad i regnearket/CSV-en er kolonneoverskrifter. Gjenkjente kolonner (engelske navn fra originale TimeMapper-maler og norske aliaser):
- Title / Tittel (påkrevd i praksis)
- Start / Dato —
1814,1814-05,1814-05-17,17.05.1814, ev. medTT:MM. Negative årstall = f.Kr. - End / Slutt — valgfri sluttdato (gir varighet)
- Description / Beskrivelse
- Location —
lat, long, f.eks.63.4305, 10.3951(gir markør i kartet) - Place / Stedsnavn — vises i teksten
- Media / Bilde — URL til bilde/video (YouTube, Vimeo m.m. via TimelineJS)
- Media Caption, Media Credit
- Web Page / Lenke — «Les mer»-lenke
- Group / Kategori — grupperer hendelser i egne bånd i tidslinjen
- Source / Kilde
Rader uten gyldig startdato hoppes over, og en advarsel vises øverst i visningen.
For Google Sheets: bruk Fil → Del → Publiser på nettet, eller del arket med «alle med lenken», og lim inn URL-en. Data hentes ved hver visning, så endringer i arket slår gjennom automatisk.
Hvert tidskart har en innbyggingsvisning uten navigasjon:
<iframe src="https://din-tjener.no/t/mitt-tidskart/embed" width="100%" height="650"></iframe>TimelineJS3 og Leaflet ligger i public/vendor/ og oppdateres slik:
npm update @knight-lab/timelinejs leaflet
cp -r node_modules/@knight-lab/timelinejs/dist/js/{timeline.js,locale} public/vendor/timeline3/js/
cp -r node_modules/@knight-lab/timelinejs/dist/css/{timeline.css,fonts,icons} public/vendor/timeline3/css/
cp node_modules/leaflet/dist/leaflet.{js,css} public/vendor/leaflet/
cp -r node_modules/leaflet/dist/images public/vendor/leaflet/MIT — samme som originalen. TimelineJS3 (MPL 2.0) og Leaflet (BSD-2) har egne lisenser.