better orte

This commit is contained in:
Simon Martens
2025-09-25 17:47:17 +02:00
parent 9849764f76
commit 7796b386f0
4 changed files with 190 additions and 49 deletions

View File

@@ -3,6 +3,7 @@ package app
import (
"os"
"path/filepath"
"strings"
"sync"
"github.com/Theodor-Springmann-Stiftung/kgpz_web/controllers"
@@ -212,6 +213,14 @@ func (k *KGPZ) Funcs() map[string]interface{} {
e["GetGND"] = k.GND.Person
e["GetGeonames"] = k.Geonames.Place
// Math functions
e["sub"] = func(a, b int) int { return a - b }
e["add"] = func(a, b int) int { return a + b }
// String functions
e["contains"] = func(s, substr string) bool { return strings.Contains(s, substr) }
e["lower"] = func(s string) string { return strings.ToLower(s) }
e["LookupPieces"] = k.Library.Pieces.ReverseLookup
e["LookupWorks"] = k.Library.Works.ReverseLookup
e["LookupIssues"] = k.Library.Issues.ReverseLookup

File diff suppressed because one or more lines are too long

View File

@@ -4,14 +4,19 @@
<div class="bg-white px-6 py-6 rounded w-full">
<!-- Back Navigation -->
<div class="mb-6">
<a href="/ort/" class="inline-flex items-center text-blue-600 hover:text-blue-700 text-sm">
<i class="ri-arrow-left-line mr-2"></i>
Zurück zur Übersicht
<a href="/ort/" class="inline-flex items-center hover:text-black text-gray-600 transition-colors text-xl no-underline font-bold">
<i class="ri-arrow-left-line mr-1 text-xl font-bold"></i>
Orte
</a>
</div>
<!-- Place Header -->
<div class="mb-8">
{{ $geonames := GetGeonames .model.SelectedPlace.Place.Geo }}
<!-- Name and external links - similar to akteure header -->
<div class="flex items-start justify-between gap-4">
<div class="flex-1">
<h1 class="text-3xl font-bold text-slate-800 mb-2">
{{ if .model.SelectedPlace.Place.Names }}
{{ index .model.SelectedPlace.Place.Names 0 }}
@@ -19,20 +24,98 @@
{{ .model.SelectedPlace.Place.ID }}
{{ end }}
</h1>
<!-- Geographic Information from Geonames -->
{{ if ne $geonames nil }}
<div class="text-lg text-slate-700 mb-2">
<!-- Modern Country Info (only if not Germany) -->
{{ if and (ne $geonames.CountryName "") (ne $geonames.CountryName "Germany") }}
<div class="mb-1">
{{ $mainPlaceName := "" }}
{{ if .model.SelectedPlace.Place.Names }}
{{ $mainPlaceName = index .model.SelectedPlace.Place.Names 0 }}
{{ end }}
{{ if eq $geonames.CountryName "France" }}
heutiges Frankreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "United Kingdom" }}
heutiges Großbritannien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Russia" }}
heutiges Russland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if or (eq $geonames.CountryName "Czech Republic") (eq $geonames.CountryName "Czechia") }}
heutiges Tschechien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if or (eq $geonames.CountryName "Netherlands") (eq $geonames.CountryName "The Netherlands") }}
heutige Niederlande{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Poland" }}
heutiges Polen{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Switzerland" }}
heutige Schweiz{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Latvia" }}
heutiges Lettland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Sweden" }}
heutiges Schweden{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Austria" }}
heutiges Österreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Belgium" }}
heutiges Belgien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Slovakia" }}
heutige Slowakei{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Finland" }}
heutiges Finnland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Denmark" }}
heutiges Dänemark{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else }}
{{ $geonames.CountryName }}
{{ end }}
</div>
{{ end }}
<!-- Coordinates -->
<div class="text-slate-600 text-base space-y-1">
{{ if and (ne $geonames.Lat "") (ne $geonames.Lng "") }}
<div>
<i class="ri-map-pin-line mr-1"></i><a href="https://www.openstreetmap.org/?mlat={{ $geonames.Lat }}&mlon={{ $geonames.Lng }}&zoom=12" target="_blank" rel="noopener noreferrer" class="text-blue-600 hover:text-blue-700 underline">{{ $geonames.Lat }}, {{ $geonames.Lng }}</a>
</div>
{{ end }}
</div>
</div>
{{ else }}
<!-- Fallback when no Geonames data -->
{{ if .model.SelectedPlace.Place.Geo }}
<p class="text-slate-600">
<p class="text-slate-600 mb-2">
<i class="ri-map-pin-line mr-1"></i>
<a href="{{ .model.SelectedPlace.Place.Geo }}" target="_blank" rel="noopener noreferrer" class="text-blue-600 hover:text-blue-700 underline">
Geonames
</a>
</p>
{{ end }}
{{ end }}
</div>
<!-- External link symbols on the right - similar to akteure -->
<div class="flex gap-3 flex-shrink-0 items-center">
{{ if ne $geonames nil }}
<!-- Wikipedia link if available -->
{{ if ne $geonames.WikipediaURL "" }}
<a href="https://{{ $geonames.WikipediaURL }}" target="_blank" class="hover:opacity-80 transition-opacity" title="Wikipedia">
<img src="/assets/wikipedia.png" alt="Wikipedia" class="w-6 h-6">
</a>
{{ end }}
{{ end }}
<!-- Geonames link -->
{{ if .model.SelectedPlace.Place.Geo }}
<a href="{{ .model.SelectedPlace.Place.Geo }}" target="_blank" class="hover:opacity-80 transition-opacity no-underline" title="Geonames">
<i class="ri-global-line text-xl text-blue-600"></i>
</a>
{{ end }}
</div>
</div>
</div>
<!-- Associated Pieces -->
<div>
<h2 class="text-xl font-semibold text-slate-800 mb-4">
<i class="ri-newspaper-line mr-2"></i><u class="decoration underline-offset-3">Beiträge</u> ({{ len .model.SelectedPlace.Pieces }})
<i class="ri-newspaper-line mr-2"></i><u class="decoration underline-offset-3">Verlinkte Beiträge</u> ({{ len .model.SelectedPlace.Pieces }})
</h2>
{{ if .model.SelectedPlace.Pieces }}
@@ -91,9 +174,10 @@
</div>
</div>
{{ else }}
<p class="text-slate-500 italic">Keine Beiträge für diesen Ort gefunden.</p>
<p class="text-slate-500 italic">Keine verlinkten Beiträge für diesen Ort gefunden.</p>
{{ end }}
</div>
</div>
</div>
@@ -127,8 +211,11 @@
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
{{ range $placeID := .model.Sorted }}
{{ $place := index $.model.Places $placeID }}
<div class="border border-slate-200 rounded-lg hover:bg-slate-50">
<a href="/ort/{{ $place.ID }}" class="block p-4">
{{ $geonames := GetGeonames $place.Geo }}
<div class="border border-slate-200 rounded-lg hover:bg-slate-50 transition-colors h-24">
<a href="/ort/{{ $place.ID }}" class="block p-4 h-full flex flex-col justify-between">
<div class="flex items-start justify-between gap-2">
<div class="flex-1">
<h3 class="font-medium text-slate-800 mb-1">
{{ if $place.Names }}
{{ index $place.Names 0 }}
@@ -136,12 +223,56 @@
{{ $place.ID }}
{{ end }}
</h3>
{{ if $place.Geo }}
<p class="text-sm text-slate-600">
<!-- Show geographic info if available (only if not Germany) -->
{{ if ne $geonames nil }}
{{ if and (ne $geonames.CountryName "") (ne $geonames.CountryName "Germany") }}
<p class="text-sm text-slate-600 mb-1">
<i class="ri-map-pin-line mr-1"></i>
{{ $place.Geo }}
{{ $mainPlaceName := "" }}
{{ if $place.Names }}
{{ $mainPlaceName = index $place.Names 0 }}
{{ end }}
{{ if eq $geonames.CountryName "France" }}
heutiges Frankreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "United Kingdom" }}
heutiges Großbritannien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Russia" }}
heutiges Russland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if or (eq $geonames.CountryName "Czech Republic") (eq $geonames.CountryName "Czechia") }}
heutiges Tschechien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if or (eq $geonames.CountryName "Netherlands") (eq $geonames.CountryName "The Netherlands") }}
heutige Niederlande{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Poland" }}
heutiges Polen{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Switzerland" }}
heutige Schweiz{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Latvia" }}
heutiges Lettland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Sweden" }}
heutiges Schweden{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Austria" }}
heutiges Österreich{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Belgium" }}
heutiges Belgien{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Slovakia" }}
heutige Slowakei{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Finland" }}
heutiges Finnland{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else if eq $geonames.CountryName "Denmark" }}
heutiges Dänemark{{- if and (ne $geonames.ToponymName "") (ne (lower $geonames.ToponymName) (lower $mainPlaceName)) -}}, {{ $geonames.ToponymName }}{{- end }}
{{ else }}
{{ $geonames.CountryName }}
{{ end }}
</p>
{{ end }}
{{ else if $place.Geo }}
<p class="text-sm text-slate-600">
<i class="ri-map-pin-line mr-1"></i>Geonames verfügbar
</p>
{{ end }}
</div>
</div>
</a>
</div>
{{ end }}

View File

@@ -1,12 +1,12 @@
{{ $place := .place }}
{{ if $place }}
<title>{{ index $place.Names 0 }} - KGPZ</title>
<meta name="description" content="Informationen zu {{ index $place.Names 0 }} in der K<EFBFBD>nigsberger Gelehrten und Politischen Zeitung.">
<meta name="keywords" content="{{ index $place.Names 0 }}, Ort, KGPZ, K<EFBFBD>nigsberg, Zeitung">
{{ if .model.SelectedPlace }}
{{ $place := .model.SelectedPlace.Place }}
<title>{{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }} - KGPZ</title>
<meta name="description" content="Informationen zu {{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }} in der Königsberger Gelehrten und Politischen Zeitung.">
<meta name="keywords" content="{{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }}, Ort, KGPZ, Königsberg, Zeitung">
<!-- Open Graph tags for social media -->
<meta property="og:title" content="{{ index $place.Names 0 }} - KGPZ">
<meta property="og:description" content="Informationen zu {{ index $place.Names 0 }} in der K<EFBFBD>nigsberger Gelehrten und Politischen Zeitung.">
<meta property="og:title" content="{{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }} - KGPZ">
<meta property="og:description" content="Informationen zu {{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }} in der Königsberger Gelehrten und Politischen Zeitung.">
<meta property="og:type" content="article">
<meta property="og:url" content="/ort/{{ $place.ID }}">
@@ -17,17 +17,17 @@
{
"@context": "https://schema.org",
"@type": "Place",
"name": "{{ index $place.Names 0 }}",
"description": "Historischer Ort erw<EFBFBD>hnt in der K<EFBFBD>nigsberger Gelehrten und Politischen Zeitung",
"name": "{{ if $place.Names }}{{ index $place.Names 0 }}{{ else }}{{ $place.ID }}{{ end }}",
"description": "Historischer Ort erwähnt in der Königsberger Gelehrten und Politischen Zeitung"{{ if or (and (ne $geonames.Lat "") (ne $geonames.Lng "")) (ne $geonames.CountryName "") (ne $place.Geo "") }},{{ end }}
{{ if and (ne $geonames.Lat "") (ne $geonames.Lng "") }}
"geo": {
"@type": "GeoCoordinates",
"latitude": {{ $geonames.Lat }},
"longitude": {{ $geonames.Lng }}
},
}{{ if or (ne $geonames.CountryName "") (ne $place.Geo "") }},{{ end }}
{{ end }}
{{ if ne $geonames.CountryName "" }}
"addressCountry": "{{ $geonames.CountryName }}",
"addressCountry": "{{ $geonames.CountryName }}"{{ if ne $place.Geo "" }},{{ end }}
{{ end }}
{{ if ne $place.Geo "" }}
"sameAs": "{{ $place.Geo }}"
@@ -36,6 +36,7 @@
</script>
{{ end }}
{{ else }}
<title>Ort nicht gefunden - KGPZ</title>
<meta name="description" content="Der angeforderte Ort wurde nicht gefunden.">
<title>Orte - KGPZ</title>
<meta name="description" content="Übersicht aller Orte in der Königsberger Gelehrten und Politischen Zeitung.">
<meta name="keywords" content="Orte, Geografie, KGPZ, Königsberg, Zeitung">
{{ end }}