166 lines
No EOL
7.3 KiB
HTML
166 lines
No EOL
7.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="no">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Røsstad Familietre</title>
|
|
|
|
<!-- Icons -->
|
|
<script src="https://unpkg.com/@phosphor-icons/web"></script>
|
|
|
|
<!-- Leaflet Map CSS -->
|
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
|
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
|
|
|
|
<!-- Main Styles -->
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="app-root">
|
|
<!-- HEADER -->
|
|
<header class="app-header">
|
|
<div class="brand-logo">
|
|
<i class="ph-fill ph-tree-evergreen"></i>
|
|
<span>Røsstad Familietre</span>
|
|
</div>
|
|
|
|
<!-- TABS -->
|
|
<nav class="nav-tabs">
|
|
<button class="nav-tab active" data-view="tree">Familietre</button>
|
|
<button class="nav-tab" data-view="map">Kart</button>
|
|
<button class="nav-tab" data-view="timeline">Tidslinje</button>
|
|
</nav>
|
|
|
|
<!-- CONTROLS -->
|
|
<div class="header-controls">
|
|
<button id="btn-help" class="icon-btn" title="Hjelp"><i class="ph ph-question"></i></button>
|
|
<div style="width:1px; height:24px; background:#cbd5e1; margin:0 0.5rem;"></div>
|
|
|
|
<button id="btn-zoom-out" class="icon-btn" title="Zoom ut"><i class="ph ph-minus-circle"></i></button>
|
|
<span id="zoom-display"
|
|
style="font-size:0.9rem; font-weight:600; width:40px; text-align:center;">100%</span>
|
|
<button id="btn-zoom-in" class="icon-btn" title="Zoom inn"><i class="ph ph-plus-circle"></i></button>
|
|
|
|
<div style="width:1px; height:24px; background:#cbd5e1; margin:0 0.5rem;"></div>
|
|
|
|
<button id="btn-logout" class="btn-logout">Logg ut</button>
|
|
</div>
|
|
</header>
|
|
</div>
|
|
|
|
<!-- VIEW: TIMELINE -->
|
|
<div id="view-timeline" class="view-section hidden">
|
|
<div class="timeline-wrapper" id="timeline-list">
|
|
<!-- Events injected here -->
|
|
</div>
|
|
</div>
|
|
|
|
<!-- FLOATING ACTION BUTTON (FAB) -->
|
|
<button id="fab-add" class="fab-btn" title="Legg til person">
|
|
<i class="ph-bold ph-plus"></i>
|
|
</button>
|
|
|
|
</main>
|
|
</div>
|
|
|
|
<!-- MODAL: ADD PERSON -->
|
|
<div id="modal-overlay" class="modal-overlay hidden">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3 id="modal-title" class="modal-title">Legg til Person</h3>
|
|
<button id="btn-close-modal" class="icon-btn"><i class="ph ph-x"></i></button>
|
|
</div>
|
|
|
|
<div style="background:#f1f5f9; padding:4px; border-radius:8px; display:flex; margin-bottom:1.5rem;">
|
|
<button class="nav-tab active full-width" id="tab-new" onclick="window.setModalMode('new')">Ny
|
|
Person</button>
|
|
<button class="nav-tab full-width" id="tab-existing"
|
|
onclick="window.setModalMode('existing')">Eksisterende</button>
|
|
</div>
|
|
|
|
<div id="form-new">
|
|
<div class="form-group">
|
|
<label class="form-label">Navn</label>
|
|
<input type="text" id="inp-name" class="input-field" placeholder="Fullt navn">
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group" style="flex:1">
|
|
<label class="form-label">Fødselsdato</label>
|
|
<input type="date" id="inp-birth" class="input-field">
|
|
</div>
|
|
<div class="form-group" style="flex:1">
|
|
<label class="form-label">Dødsdato</label>
|
|
<input type="date" id="inp-death" class="input-field">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label">Kjønn</label>
|
|
<div style="display:flex; gap:1.5rem;">
|
|
<label style="display:flex; align-items:center; gap:0.5rem; cursor:pointer;">
|
|
<input type="radio" name="gender" value="M" checked> Mann
|
|
</label>
|
|
<label style="display:flex; align-items:center; gap:0.5rem; cursor:pointer;">
|
|
<input type="radio" name="gender" value="F"> Kvinne
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label">Sted (for Kart)</label>
|
|
<input type="text" id="inp-location" class="input-field" placeholder="F.eks. Grimstad, Norge">
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label">Notater</label>
|
|
<textarea id="inp-desc" class="input-field" rows="3" placeholder="Kort beskrivelse..."></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="form-existing" class="hidden">
|
|
<input type="text" id="search-existing" class="input-field" placeholder="Søk etter navn...">
|
|
<div id="existing-list"
|
|
style="max-height:200px; overflow-y:auto; border:1px solid #cbd5e1; border-radius:0.5rem;"></div>
|
|
<input type="hidden" id="selected-existing-id">
|
|
</div>
|
|
|
|
<button id="btn-save" class="btn-primary" style="margin-top:1rem;">Lagre</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- MODAL: HELP -->
|
|
<div id="modal-help" class="modal-overlay hidden">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3 class="modal-title">Hjelp & Instruksjoner</h3>
|
|
<button id="btn-close-help" class="icon-btn"><i class="ph ph-x"></i></button>
|
|
</div>
|
|
<div style="line-height:1.6; color:var(--color-text-main);">
|
|
<p><strong>Velkommen til Røsstad Familietre!</strong></p>
|
|
<ul style="padding-left:1.2rem; margin-bottom:1.5rem;">
|
|
<li><strong>Legg til person:</strong> Klikk på den store grønne pluss-knappen nede til høyre, eller
|
|
bruk de små knappene på kortene.</li>
|
|
<li><strong>Navigasjon:</strong> Bruk fanene øverst for å bytte mellom Tre, Kart og Tidslinje.</li>
|
|
<li><strong>Zoom:</strong> Bruk pluss/minus knappene oppe til høyre for å zoome i treet.</li>
|
|
<li><strong>Flytt treet:</strong> Du kan dra og slippe treet for å bevege deg rundt.</li>
|
|
</ul>
|
|
<p><em>Tips: Legg til et sted (f.eks. "Grimstad") for å se personen på kartet!</em></p>
|
|
</div>
|
|
<button class="btn-primary"
|
|
onclick="document.getElementById('modal-help').classList.add('hidden')">Forstått</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Leaflet JS -->
|
|
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
|
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
|
|
|
|
<!-- App Logic -->
|
|
<script type="module" src="script.js"></script>
|
|
</body>
|
|
|
|
</html> |