2 import PageLink from './PageLink.svelte';
3 import ReverseLink from './ReverseLink.svelte';
4 import LastUpdated from './LastUpdated.svelte';
5 import Error from './Error.svelte';
6 import { onMount } from 'svelte';
7 import { map_store, page } from '../lib/stores.js';
8 import { initColorToggler } from '../color-mode-toggler.js';
10 let { subheader } = $props();
12 const page_title = Nominatim_Config.Page_Title;
13 const reverse_only = Nominatim_Config.Reverse_Only;
16 let map_lat = $state();
17 let map_lon = $state();
19 map_store.subscribe(map => {
22 map.on('move', function () {
23 map_lat = map.getCenter().lat.toFixed(5);
24 map_lon = map.getCenter().lng.toFixed(5);
28 page.subscribe(pg => { view = pg.tab; });
30 onMount(initColorToggler);
34 .navbar-brand :global(a:hover) {
35 text-decoration: none;
41 color: var(--bs-body-color);
45 display: inline-block;
59 @media (max-width: 600px) {
67 background-color: var(--bs-tertiary-bg);
68 border-top: 2px solid var(--bs-border-color);
69 border-bottom: 2px solid var(--bs-border-color);
74 {#snippet mainPageLink()}
75 <img alt="logo" id="theme-logo" src="theme/logo.png" />
79 <header class="container-fluid">
80 <nav class="navbar navbar-expand-sm navbar-light">
81 <div class="container-fluid">
83 <div class="navbar-brand">
84 <PageLink text_snippet={mainPageLink} page={reverse_only ? 'reverse' : 'search'} />
86 <!-- Toggler (hamburger button) -->
87 <button class="navbar-toggler"
89 data-bs-toggle="collapse"
90 data-bs-target="#navbarSupportedContent"
91 aria-controls="navbarSupportedContent"
93 aria-label="Toggle navigation">
94 <span class="navbar-toggler-icon"></span>
96 <div class="collapse navbar-collapse" id="navbarSupportedContent">
97 <!-- Left-aligned links -->
98 <ul class="navbar-nav me-auto">
100 <li class="nav-item">
101 <PageLink page="search"
103 extra_classes="nav-link {view === 'search' ? 'active' : ''}" />
106 <li class="nav-item">
107 <ReverseLink lat={map_lat}
110 extra_classes="nav-link {view === 'reverse' ? 'active' : ''}" />
112 <li class="nav-item">
113 <PageLink page="details"
115 extra_classes="nav-link {view === 'details' ? 'active' : ''}" />
119 <!-- Right aligned links -->
120 <ul class="navbar-nav">
121 <li class="nav-item position-relative">
122 <button class="btn nav-link dropdown-toggle" id="bd-theme" type="button"
123 data-bs-toggle="dropdown" aria-label="Toggle color theme">
124 <span id="bd-theme-text">Color</span>
126 <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="bd-theme-text">
128 <button type="button" class="dropdown-item" data-bs-theme-value="light">
133 <button type="button" class="dropdown-item" data-bs-theme-value="dark">
138 <button type="button" class="dropdown-item" data-bs-theme-value="auto">
144 <li class="nav-item">
145 <PageLink page="about"
147 extra_classes="nav-link {view === 'about' ? 'active' : ''}" />
153 <section class="page-title-section">
156 <section class="search-section">
157 {@render subheader?.()}