mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 09:55:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| {{- /* Places overview page body */ -}}
 | |
| <div class="grid grid-cols-1 lg:grid-cols-7 gap-8">
 | |
| 	{{- /* Main content - Places list */ -}}
 | |
| 	<div class="lg:col-span-5">
 | |
| 		{{- /* Places list */ -}}
 | |
| 		{{ if .model.Places }}
 | |
| 			<div class="bg-white mt-6">
 | |
| 				{{ range $placeID := .model.Sorted }}
 | |
| 					{{ $place := index $.model.Places $placeID }}
 | |
| 					{{ $pieceCount := index $.model.PlacePieceCounts $placeID }}
 | |
| 					{{ $geonames := GetGeonames $place.Geo }}
 | |
| 					{{ $mainPlaceName := "" }}
 | |
| 					{{ if $place.Names }}
 | |
| 						{{ $mainPlaceName = index $place.Names 0 }}
 | |
| 					{{ else }}
 | |
| 						{{ $mainPlaceName = $place.ID }}
 | |
| 					{{ end }}
 | |
| 					{{ $modernName := GetModernPlaceName $place.Geo $mainPlaceName }}
 | |
| 					<place-accordion class="border-b border-slate-100 last:border-b-0" data-place-id="{{ $place.ID }}" data-place-name="{{ $mainPlaceName }}" data-modern-name="{{ $modernName }}">
 | |
| 						<div class="block p-4 hover:bg-slate-50 transition-colors duration-200 cursor-pointer">
 | |
| 							<div class="flex items-start justify-between gap-2">
 | |
| 								<div class="flex-1 min-w-0">
 | |
| 									<h3 class="font-bold text-slate-800 mb-1 truncate flex items-center gap-2">
 | |
| 										<span class="truncate">
 | |
| 											{{ if $place.Names }}
 | |
| 												{{ index $place.Names 0 }}
 | |
| 											{{ else }}
 | |
| 												{{ $place.ID }}
 | |
| 											{{ end }}
 | |
| 										</span>
 | |
| 										<a href="/ort/{{ $place.ID }}" class="flex-shrink-0 text-slate-400 hover:text-slate-600 transition-colors no-underline" title="Permalink" onclick="event.stopPropagation()">
 | |
| 											<i class="ri-link text-sm"></i>
 | |
| 										</a>
 | |
| 									</h3>
 | |
| 									{{ if ne $geonames nil }}
 | |
| 										{{ $fullInfo := GetFullPlaceInfo $place.Geo $mainPlaceName }}
 | |
| 										{{ if ne $fullInfo "" }}
 | |
| 											<p class="text-sm text-slate-600 mb-1 truncate">
 | |
| 												<i class="ri-map-pin-line mr-1"></i>{{ $fullInfo }}
 | |
| 											</p>
 | |
| 										{{ end }}
 | |
| 									{{ else if $place.Geo }}
 | |
| 										<p class="text-sm text-slate-600 truncate">
 | |
| 											<i class="ri-map-pin-line mr-1"></i>Geonames verfügbar
 | |
| 										</p>
 | |
| 									{{ end }}
 | |
| 								</div>
 | |
| 								<div class="flex-shrink-0 flex items-center gap-2">
 | |
| 									<!-- External links -->
 | |
| 									{{ if ne $geonames nil }}
 | |
| 										{{ if ne $geonames.WikipediaURL "" }}
 | |
| 											<a href="https://{{ $geonames.WikipediaURL }}" target="_blank" class="hover:opacity-80 transition-opacity no-underline" title="Wikipedia" onclick="event.stopPropagation()">
 | |
| 												<img src="/assets/wikipedia.png" alt="Wikipedia" class="w-5 h-5">
 | |
| 											</a>
 | |
| 										{{ end }}
 | |
| 										{{ if and (ne $geonames.Lat "") (ne $geonames.Lng "") }}
 | |
| 											<a href="https://www.openstreetmap.org/?mlat={{ $geonames.Lat }}&mlon={{ $geonames.Lng }}&zoom=12" target="_blank" class="hover:opacity-80 transition-opacity no-underline" title="OpenStreetMap" onclick="event.stopPropagation()">
 | |
| 												<i class="ri-map-pin-line text-base text-green-600"></i>
 | |
| 											</a>
 | |
| 										{{ end }}
 | |
| 									{{ end }}
 | |
| 									{{ if $place.Geo }}
 | |
| 										<a href="{{ $place.Geo }}" target="_blank" class="hover:opacity-80 transition-opacity no-underline" title="Geonames" onclick="event.stopPropagation()">
 | |
| 											<i class="ri-global-line text-base text-blue-600"></i>
 | |
| 										</a>
 | |
| 									{{ end }}
 | |
| 									<span class="inline-flex items-center px-2 py-1 text-xs font-medium bg-slate-100 text-slate-700 rounded">
 | |
| 										{{ $pieceCount }}
 | |
| 									</span>
 | |
| 								</div>
 | |
| 							</div>
 | |
| 						</div>
 | |
| 					</place-accordion>
 | |
| 				{{ end }}
 | |
| 			</div>
 | |
| 		{{ else }}
 | |
| 			<div class="bg-slate-50 rounded-lg p-8 text-center mt-6">
 | |
| 				<div class="text-slate-500 mb-2">
 | |
| 					<svg class="w-12 h-12 mx-auto mb-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
 | |
| 						<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"/>
 | |
| 						<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"/>
 | |
| 					</svg>
 | |
| 				</div>
 | |
| 				<h3 class="text-lg font-medium text-slate-900 mb-2">Keine Orte gefunden</h3>
 | |
| 				<p class="text-slate-600">Es wurden keine Orte in der Datenbank gefunden.</p>
 | |
| 			</div>
 | |
| 		{{ end }}
 | |
| 	</div>
 | |
| 
 | |
| 	{{- /* Sidebar */ -}}
 | |
| 	<div class="lg:col-span-2 sticky top-0 self-start">
 | |
| 		{{- /* Top Box - Header and Search */ -}}
 | |
| 		<div class="bg-slate-50 p-6 border-b border-slate-200 filter-sidebar">
 | |
| 			<h1 class="text-2xl font-bold text-slate-800 mb-2">Orte</h1>
 | |
| 			<p class="text-slate-600 mb-6">
 | |
| 				Verzeichnis aller in der Zeitung erwähnten Orte und Lokalitäten
 | |
| 			</p>
 | |
| 
 | |
| 			{{- /* Search Filter */ -}}
 | |
| 			<div class="flex items-center gap-4">
 | |
| 				<div class="flex-1">
 | |
| 					<generic-filter
 | |
| 						placeholder="Ortsnamen eingeben..."
 | |
| 						item-selector="[data-place-name]"
 | |
| 						search-attributes="data-place-name,data-modern-name"
 | |
| 						count-selector="[data-filter-count]"
 | |
| 						item-type="Orte"
 | |
| 						item-type-singular="Ort">
 | |
| 					</generic-filter>
 | |
| 				</div>
 | |
| 				<div class="flex items-center text-sm font-bold text-slate-700 whitespace-nowrap" data-filter-count></div>
 | |
| 			</div>
 | |
| 		</div>
 | |
| 
 | |
| 		{{- /* Bottom Box - Map Only */ -}}
 | |
| 		<div class="bg-white rounded-b">
 | |
| 			<places-map data-places="{{ .model.PlacesJSON }}" class="w-full"></places-map>
 | |
| 		</div>
 | |
| 	</div>
 | |
| </div> | 
