]> git.openstreetmap.org Git - nominatim-ui.git/blob - src/components/Header.svelte
a93d6c5ec6b42289795b07869090687edf49a6e0
[nominatim-ui.git] / src / components / Header.svelte
1 <script>
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
7   import { map_store, page } from '../lib/stores.js';
8
9   $: view = $page.tab;
10   $: page_title = Nominatim_Config.Page_Title;
11
12   let map_lat;
13   let map_lon;
14
15   map_store.subscribe(map => {
16     if (!map) return;
17
18     map.on('move', function () {
19       map_lat = map.getCenter().lat;
20       map_lon = map.getCenter().lng;
21     });
22   });
23 </script>
24
25 <style>
26   .navbar-brand :global(a:hover) {
27     text-decoration: none;
28   }
29
30   .navbar-brand h1 {
31     display: inline;
32     font-size: 1.2em;
33     color: #333;
34   }
35
36   .navbar-brand img {
37     display: inline-block;
38     margin-right: 5px;
39     margin-top: -5px;
40   }
41
42   .nav-item {
43     white-space: nowrap;
44   }
45
46   .page-title-section {
47     display: none;
48     text-align: center;
49     padding: 1em;
50   }
51   @media (max-width: 600px) {
52     .page-title-section {
53       display: block;
54     }
55   }
56
57   .search-section {
58     padding: 1em 30px;
59     background-color: #f5f5f5;
60     border-top: 2px solid #ddd;
61     border-bottom: 2px solid #ddd;
62   }
63 </style>
64
65 <header class="container-fluid">
66   <nav class="navbar navbar-expand-sm navbar-light">
67     <div class="container-fluid">
68       <!-- Brand -->
69       <div class="navbar-brand">
70         <PageLink page="search">
71           <img alt="logo" id="theme-logo" src="theme/logo.png" />
72           <h1>{page_title}</h1>
73         </PageLink>
74       </div>
75       <!-- Toggler (hamburger button) -->
76       <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
77         <span class="navbar-toggler-icon"></span>
78       </button>
79       <div class="collapse navbar-collapse" id="navbarSupportedContent">
80         <!-- Left-aligned links -->
81         <ul class="navbar-nav me-auto">
82           <li class="nav-item">
83             <PageLink page="search" extra_classes="nav-link {view === 'search' ? 'active' : ''}">Search</PageLink>
84           </li>
85           <li class="nav-item">
86             <ReverseLink lat={map_lat} lon={map_lon} extra_classes="nav-link {view === 'reverse' ? 'active' : ''}">Reverse</ReverseLink>
87           </li>
88           <li class="nav-item">
89             <PageLink page="details" extra_classes="nav-link {view === 'details' ? 'active' : ''}">Search By ID</PageLink>
90           </li>
91         </ul>
92       </div>
93       <!-- Right aligned links -->
94       <ul class="navbar-nav">
95         <li class="nav-item">
96           <PageLink page="about" extra_classes="nav-link {view === 'about' ? 'active' : ''}">About & Help</PageLink>
97         </li>
98       </ul>
99     </div>
100   </nav>
101 </header>
102 <section class="page-title-section">
103   <h2>{view}</h2>
104 </section>
105 <section class="search-section">
106   <slot/>
107 </section>
108 <Error/>
109 <LastUpdated/>