1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
{{ define "top-embeds" }}
<script>
let galleryMap = new Map();
let map;
window.addEventListener('popout', (e) => {
map.remove();
galleryMap.forEach((_, g, m) => {
g.destroy();
});
galleryMap.clear();
map = null;
galleryMap = null;
}, {once: true});
</script>
{{ end }}
{{ define "body" }}
<div class="bg-background-light flex flex-col inset-shadow px-8 py-4 overflow-y-auto">
<p class="xs:hidden font-spectral text-2xl font-bold italic text-main-dark tracking-[.0125rem] mb-1">{{ .Title }}</p>
<p class="xs:hidden grow text-lg font-spectral text-secondary">{{ .L.Metadata.Published }}: {{ .PublishedDate }}</p>
<p class="xs:hidden grow text-lg font-spectral text-secondary">{{ .L.Metadata.Action }}: {{ .ActionDate }}</p>
<hr class="xs:hidden border-t-2 border-dotted border-main-dark mt-1 mb-2 w-full ml-auto mr-auto">
{{ .ParsedMarkdown }}
{{- if .MapLocationX }}
<hr class="border-t-3 border-dotted border-main-dark mt-1 mb-2 w-[80%] ml-auto mr-auto">
<div id="map-container" class="relative p-1 flex-none ml-auto mr-auto w-[60%] ar-lt-0.8:w-[80%] h-[40dvh] ar-lt-0.8:h-[30dvh]"></div>
<hr class="border-t-3 border-dotted border-main-dark mt-1 mb-2 w-[80%] ml-auto mr-auto">
<script>
function initLocationMap(id, x, y, relativeErrorMeters = 0) {
map = L.map(id).setView([x, y], 8);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
if (relativeErrorMeters != 0) {
var circle = L.circle([x, y], {
color: '#8a9d8a',
fillColor: '#8a9d8a',
fillOpacity: 0.15,
radius: relativeErrorMeters
}).addTo(map);
}
var marker = L.marker([x, y], {
title: '{{ .Title }}',
}).addTo(map)
.bindPopup('<span><b>{{ .Title }}</b><br><a href="https://www.openstreetmap.org/#map=13/{{ .MapLocationX }}/{{ .MapLocationY }}">{{ .MapLocationX }}, {{ .MapLocationY }}</a></span>')
.openPopup();
}
document.addEventListener('htmx:afterRequest', (e) => {
if (e.detail.target.id == 'general-page-body') {
initLocationMap(
'map-container',
{{ .MapLocationX }},
{{ .MapLocationY }},
{{ .MapLocationAreaMeters }}
);
}
}, {once: true});
</script>
{{- end }}
</div>
{{ end }}
{{ define "footer" }}
<div hx-get="/api/v1/like" hx-target="this" hx-swap="outerHTML" hx-trigger="load"></div>
{{ end }}
{{ define "bottom-embeds" }}
<script>
let galleryResizeTimeout;
function resizeCb() {
clearTimeout(galleryResizeTimeout);
galleryResizeTimeout = setTimeout(() => {
if (map !== undefined) {
map.invalidateSize();
}
var oldGalleryMap = new Map(galleryMap);
oldGalleryMap.forEach((createFunc, g, map) => {
galleryMap.delete(g);
g.destroy();
createFunc();
});
}, 300);
}
window.addEventListener('resize', resizeCb);
document.addEventListener('popout', (e) => {
window.removeEventListener('resize', resizeCb);
galleryResizeTimeout = null;
});
</script>
{{ end }}
|