This repository has been archived by the owner on Jun 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
582 lines (495 loc) · 23.1 KB
/
index.html
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
<html>
<head>
<title>Abwahl von OB Feldmann.</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Hier informieren wir als Bündnis zur Abwahl des Oberbürgermeisters in Frankfurt am Main.">
<link rel="icon" type="image/png" href="./assets/favicon.png">
<style>
:root {
--foreground-color: #111;
--foreground-link-color: blue;
--background-color: #fffded;
--button-background: #df4e90;
--button-background-rgb: 223, 78, 144;
--on-button-background: white;
--hover-opacity: 0.75;
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";;
}
* {
margin: 0;
padding: 0;
}
body {
background-color: var(--background-color);
color: var(--foreground-color);
font-family: var(--font-family);
font-size: 1.5rem;
font-weight: 400;
max-width: 2000px;
margin: 0 auto;
}
p, ul, ol, li {
font-size: inherit;
font-weight: inherit;
}
h1 {
font-size: 4rem;
font-weight: 900;
padding: 4rem 0 1rem 0;
}
h2 {
font-size: 2rem;
font-weight: 900;
padding: 2rem 0 1rem 0;
}
h3 {
font-size: 1.75rem;
font-weight: 900;
padding: 2rem 0 1rem 0;
}
h4 {
font-size: 1.5rem;
font-weight: 900;
padding: 2rem 0 1rem 0;
}
h2.section_header {
color: var(--background-color);
background-color: var(--foreground-color);
margin: 2rem 0 1rem 0;
padding: 1rem 1.5rem;
border-radius: 1rem;
}
p {
padding: 1rem 0;
}
ul {
margin-inline-start: 30px;
}
button {
background-color: var(--button-background);
color: var(--on-button-background);
cursor: pointer;
font-size: 1.5rem;
font-weight: bold;
font-family: var(--font-family);
margin: 1rem;
padding: 1rem 2rem;
border: 0;
border-radius: 1rem;
}
button.text {
background-color: transparent;
color: var(--button-background);
box-shadow: inset 0 0 0 0.15rem rgba(var(--button-background-rgb), 0.3);
}
button:hover {
opacity: var(--hover-opacity);
}
.buttonRow button:first-child {
margin-left: 0;
}
.buttonRow button:last-child {
margin-right: 0;
}
hr {
margin: 4rem 0;
border: 0;
height: 0.5rem;
background: var(--foreground-color);
border-radius: 10rem;
}
details > summary {
cursor: pointer;
list-style-type: none;
}
details > summary::-webkit-details-marker {
display: none;
}
details > summary h2::before,
details > summary h3::before {
content: '➜';
position: absolute;
left: 0;
filter: grayscale(1) brightness(0.75) contrast(2);
}
details[open] > summary h2::before,
details[open] > summary h3::before {
transform: rotate(90deg);
}
details > summary h2,
details > summary h3 {
display: inline-block;
position: relative;
padding-left: 3rem;
}
details > summary:hover {
opacity: var(--hover-opacity);
}
a {
color: var(--foreground-link-color);
text-decoration: none;
}
a:hover {
opacity: var(--hover-opacity);
}
main {
padding-bottom: 50vh;
}
section {
--padding: 10vw;
padding: 0 var(--padding);
}
@media (max-width: 800px) {
section {
--padding: 1rem;
}
}
header {
color: var(--background-color);
background-color: var(--foreground-color);
--header-margin: 2rem;
margin: var(--header-margin);
border-radius: 3rem;
}
header .logo {
width: 8rem;
height: 8rem;
}
header h1,
header h2 {
padding: 0;
}
header h1 {
margin-top: -0.6rem;
}
header h2 {
margin-top: 2rem;
}
header section {
display: flex;
justify-content: space-between;
gap: 2rem;
padding: 4rem max(4rem, calc(var(--padding) - var(--header-margin)));
}
@media (max-width: 1000px) {
header section {
flex-direction: column;
}
}
.socialmedia_grid {
display: none;
margin: 0 auto;
max-width: none;
width: auto;
font-size: 0;
gap: 1rem;
overflow: auto;
scroll-snap-type: x mandatory;
scroll-padding: var(--padding);
}
.socialmedia_grid img {
max-width: 100%;
max-height: 80vh;
scroll-snap-align: start;
}
@media (max-width: 1000px) {
.socialmedia_grid {
display: flex;
}
}
.insta_sidebar {
display: flex;
flex-direction: column;
}
.insta_sidebar img {
width: 18rem;
height: auto;
}
@media (max-width: 1000px) {
.insta_sidebar {
display: none;
}
}
.two_columns {
columns: 2;
}
@media (max-width: 800px) {
.two_columns {
columns: 1;
}
}
.download_previews {
display: flex;
margin: 0 auto;
max-width: none;
width: auto;
gap: 1rem;
overflow: auto;
scroll-snap-type: x mandatory;
scroll-padding: var(--padding);
}
.download_previews img {
max-width: 100%;
max-height: 60vh;
scroll-snap-align: start;
}
</style>
</head>
<body dir="auto">
<header>
<section>
<img class="logo" src="./assets/logo.svg">
<div>
<h1 data-i18n="title">Abwahl von OB Feldmann.</h1>
</div>
<div>
<select id="locale_chooser"></select>
</div>
</section>
</header>
<main>
<section style="display: flex; justify-content: space-between; gap: 2rem;">
<div>
<h2 data-i18n="slogan">Am 06.11.2022 mit JA stimmen!</h2>
<p data-i18n="intro" dir="auto">
Hier informieren wir als Bündnis zur Abwahl des Oberbürgermeisters in Frankfurt am Main.
</p>
<div class="buttonRow">
<a
href="https://wahlschein.ekom21.de/IWS/start.do?mb=6412000&wahltyp="
target="_blank"
>
<button>
➜
<span data-i18n="postal_voting_button" dir="auto">Briefwahl beantragen!</span>
</button>
</a>
</div>
<div class="buttonRow">
<a
href="https://www.gruene-frankfurt.de/page/mehrsprachige-informationen-abwahl-ob-feldmann"
target="_blank"
>
<button class="text">
➜
<span data-i18n="multi_locale_infos_button" dir="auto">Mehrsprachige Informationen</span>
</button>
</a>
</div>
</div>
<div class="insta_sidebar">
<img src="./assets/insta_sidebar_1.webp" alt="Abwahl von OB Feldmann! — Neustart für Frankfurt" />
<img src="./assets/insta_sidebar_2.webp" alt="Für ein Kreuz vergessen wir alle Farben. — Abwahl von OB Feldmann. Für einen Neuanfang in Frankfurt. Mit Respekt vor dem Amt des Stadtoberhauptes." />
<img src="./assets/insta_sidebar_3.webp" alt="am 06.11.2022 mit JA stimmen! — Briefwahl ab 26.09." />
</div>
</section>
<!-- <h2 data-i18n="digital_flyer" dir="auto">Digitaler Flyer</h2> -->
<section class="socialmedia_grid">
<img src="./assets/1_Feldmann_SoMe_9x168.jpg" alt="Abwahl von OB Feldmann! — Neustart für Frankfurt!" />
<img src="./assets/2_Feldmann_SoMe_9x164.png" alt="Für ein Kreuz vergessen wir alle Farben. — Abwahl von OB Feldmann. Für einen Neuanfang in Frankfurt. Mit Respekt vor dem Amt des Stadtoberhauptes." />
<img src="./assets/3_Feldmann_SoMe_9x162.png" alt="Abwahl von OB Feldmann! Am 06.11.2022 mit JA stimmen! — Briefwahl ab 26.09." />
<!-- <img src="./assets/4_Feldmann_SoMe_9x167.jpg" /> -->
</section>
<section dir="auto">
<br />
<br />
<h2 class="section_header">FAQ</h2>
<details>
<summary>
<h3>Worum geht es eigentlich?</h3>
</summary>
<p>Am 14. Juli 2022 hat das Stadtparlament Frankfurt am Main in seiner 14. Sitzung die Abwahl des Oberbürgermeisters Peter Feldmann mit einer Zweidrittel-Mehrheit beschlossen. Somit wurde die Entscheidung, ob Peter Feldmann im Amt bleibt oder nicht, in die Hände der Bürgerinnen und Bürger gelegt. Diese können am 06.11. in dem Ihnen zugewiesenen Wahllokal, oder per Briefwahl, ihre Stimme abgeben. Weitere Informationen zur Wahl befinden sich auf <a href="https://frankfurt.de/wahlen">frankfurt.de/wahlen</a>.</p>
</details>
<details>
<summary>
<h3>Warum soll Peter Feldmann abgewählt werden?</h3>
</summary>
<p>Das Amt des Oberbürgermeisters vertritt die gesamte Stadt Frankfurt am Main und bedarf daher einer Person mit entsprechendem Ansehen. Herr Peter Feldmann hat dieses Ansehen durch diverse Fehltritte und durch wiederholtes Fehlverhalten verloren.</p>
</details>
</section>
<section dir="auto">
<br />
<br />
<h2 class="section_header">Downloads</h2>
<div class="download_previews buttonRow">
<a href="./assets/Referendum_Feldmann_Flyer_DINlang.pdf" target="_blank">
<button class="text">
<p style="white-space: nowrap;">DIN-Lang Flyer (DE)</p>
<img src="./assets/Referendum_Feldmann_Flyer_DINlang.jpg" alt="DIN-Lang Flyer (DE)">
</button>
</a>
<a href="./assets/Referendum_Feldmann_Plakat_A1.pdf" target="_blank">
<button class="text">
<p style="white-space: nowrap;">A1 Plakat (DE)</p>
<img src="./assets/Referendum_Feldmann_Plakat_A1.jpg" alt="A1 Plakat (DE)">
</button>
</a>
</div>
</section>
<section dir="auto">
<hr />
<!--
<h2>Unterstützende Parteien</h2>
<img src="logo1.png" alt="Logo 1" />
<img src="logo2.png" alt="Logo 2" />
<img src="logo3.png" alt="Logo 3" />
-->
<details>
<summary>
<h2>Impressum / Nutzungsbedingungen</h2>
</summary>
<p>
<em>Angaben gemäß § 5 TMG:</em>
</p>
<p>
<strong>FDP Kreisverband Frankfurt am Main</strong><br />
Niddastraße 108<br />
60329 Frankfurt am Main<br />
Vertreten durch: Dr. Thorsten Lieb, Kreisvorsitzender<br />
</p>
<h4>Kontakt:</h4>
<p>
T: 069/590955<br />
E: <a href="mailto:[email protected]">[email protected]</a>
</p>
<h3>Nutzungsbedingungen:</h3>
<h4>I. Disclaimer/Haftung für Inhalte</h4>
<p>Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.</p>
<p>Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.</p>
<h4>II. Haftung für Links</h4>
<p>Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.</p>
<p>Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.</p>
<h4>III. Urheberrecht</h4>
<p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.</p>
<p>Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.</p>
<h4>IV. Haftungsbeschränkung</h4>
<p>Die Inhalte dieser Internet-Seite werden kostenfrei zur Verfügung gestellt und wurden mit größtmöglicher Sorgfalt erstellt. Wir übernehmen keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Inhalte und haften im Hinblick auf die Inhalte der Internet-Seite nur für Vorsatz und grobe Fahrlässigkeit.</p>
</details>
<details>
<summary>
<h2>Datenschutzerklärung</h2>
</summary>
<p>Im Folgenden informieren wir Sie über die Erhebung personenbezogener Daten bei Nutzung unserer Website neustartffm.de. Personenbezogene Daten sind alle Daten, die auf Sie persönlich beziehbar sind, z. B. Name, Adresse, E-Mail-Adressen, Seitenaufrufe.
<h3>§ 1 Verantwortlicher, Datenschutzbeauftragter, Auftragsverarbeiter</h3>
<p>(1) Für die Verarbeitung personenbezogener Daten gem. Art. 4 Ziff. 7 EU-Datenschutz-Grundverordnung (DSGVO) ist die FDP Frankfurt am Main, Niddastraße 108, 60329 Frankfurt am Main, [email protected] verantwortlich.
<p>(2) Den Datenschutzbeauftragten der FDP erreichen Sie unter [email protected] oder unter: Freie Demokratische Partei, Datenschutzbeauftragter, Reinhardtstraße 14, 10117 Berlin.
<p>(3) Teilweise bedienen wir uns zur Verarbeitung Ihrer Daten externer Dienstleister. Diese wurden von uns sorgfältig ausgewählt und beauftragt, sind an unsere Weisungen gebunden und werden regelmäßig kontrolliert.
<h3>§ 2 Erhebung personenbezogener Daten</h3>
<p>Beim Besuch unserer Website, wenn Sie uns nicht anderweitig Informationen übermitteln, erheben wir nur die personenbezogenen Daten, die Ihr Browser an unseren Server übermittelt. Diese Informationen werden temporär in einem sog. Logfile gespeichert. Folgende Informationen werden dabei ohne Ihr Zutun erfasst und bis zur automatisierten Löschung gespeichert:
<ul>
<li>IP-Adresse</li>
<li>Datum und Uhrzeit der Anfrage</li>
<li>Zeitzonendifferenz zur koordinierten Weltzeit (UTC)</li>
<li>vom Webbrowser übermittelte Anforderung, bestehend aus Anforderungsmethode (z.B. GET), angeforderter Seite oder Ressource, Protokollversion (z.B. HTTP/1.1)</li>
<li>Zugriffsstatus/HTTP-Statuscode (z.B. 404 für „Seite nicht gefunden“)</li>
<li>jeweils übertragene Datenmenge</li>
<li>Seite, von der aus die aktuell angezeigte Seite aufgerufen wurde bzw. die Ressource eingebunden wurde (sofern Ihr Webbrowser diese Information übermittelt)</li>
<li>Browserkennung, bestehend aus Name, Hersteller, Version und Sprache Ihrer Browsersoftware, sowie Betriebssystem und dessen Version (sofern Ihr Webbrowser diese Informationen übermittelt)</li>
<li>Die genannten Daten werden zu dem Zweck erhoben, Ihnen unsere Website anzuzeigen sowie Stabilität und Sicherheit zu gewährleisten. Rechtsgrundlage ist Art. 6 Abs. 1 Buchst. f DSGVO. Unser berechtigtes Interesse folgt aus dem erwähnten Zweck der Datenerhebung.</li>
</ul>
<h3>§ 3 Weitergabe von Daten</h3>
<p>Eine Übermittlung personenbezogener Daten an Dritte zu anderen als den folgenden Zwecken findet nicht statt. Wir geben Ihre Daten nur an Dritte weiter, wenn:
<ul>
<li>Sie gemäß Art. 6 Abs. 1 Buchst. a DSGVO Ihre ausdrückliche Einwilligung dazu erteilt haben,</li>
<li>die Weitergabe gemäß Art. 6 Abs. 1 Buchst. f DSGVO zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen erforderlich ist und kein Grund zur Annahme besteht, dass Sie ein überwiegendes schutzwürdiges Interesse an der Nichtweitergabe Ihrer Daten haben,</li>
<li>falls für die Weitergabe gemäß Art. 6 Abs. 1 Buchst. c DSGVO eine gesetzliche Verpflichtung besteht.</li>
</ul>
<h3>§ 4 Betroffenenrechte</h3>
<p>Sie haben gegenüber uns folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten:
<ul>
<li>Recht auf Auskunft (Art. 15 DSGVO)</li>
<li>Recht auf Berichtigung (Art. 16 DSGVO)</li>
<li>Recht auf Löschung (Art. 17 DSGVO)</li>
<li>Recht auf Einschränkung der Verarbeitung (Art. 18 DSGVO)</li>
<li>Recht auf Datenübertragbarkeit (Art. 20 DSGVO)</li>
</ul>
<p>Sie haben zudem das Recht,</p>
<ul>
<li>Ihre einmal erteilte Einwilligung jederzeit gegenüber uns zu widerrufen (Art. 7 Abs. 3 DSGVO). Dies hat zur Folge, dass wir die Datenverarbeitung, die auf dieser Einwilligung beruhte, für die Zukunft nicht mehr fortführen dürfen, sowie</li>
<li>sich bei der zuständigen Aufsichtsbehörde zu beschweren (Art. 77 DSGVO). Zuständige Aufsichtsbehörde ist der Hessische Beauftragte für Datenschutz und Informationsfreiheit.</li>
</ul>
<h3>§ 5 Widerspruchsrecht</h3>
<p>Soweit wir die Verarbeitung Ihrer personenbezogenen Daten auf die Wahrnehmung berechtigter Interessen stützen (Art. 6 Abs. 1 Buchst. f DSGVO), können Sie Widerspruch gegen die Verarbeitung einlegen. Bei Ausübung eines solchen Widerspruchs bitten wir um Darlegung der Gründe, weshalb wir Ihre personenbezogenen Daten nicht wie von uns durchgeführt verarbeiten sollten. Im Falle Ihres begründeten Widerspruchs prüfen wir die Sachlage und werden entweder die Datenverarbeitung einstellen bzw. anpassen oder Ihnen unsere zwingenden schutzwürdigen Gründe aufzeigen, aufgrund derer wir die Verarbeitung fortführen.
<p>Selbstverständlich können Sie der Verarbeitung Ihrer personenbezogenen Daten für Zwecke der Werbung und Datenanalyse jederzeit widersprechen.
<p>Über Ihren Widerspruch können Sie uns unter folgenden Kontaktdaten informieren: FDP Frankfurt am Main, Niddastraße 108, 60329 Frankfurt am Main, <a href="mailto:[email protected]">[email protected]</a>.
<h3>§ 10 Aktualität und Änderung dieser Datenschutzerklärung</h3>
<p>Diese Datenschutzerklärung ist aktuell gültig und hat den Stand Oktober 2022. Durch die Weiterentwicklung unserer Website und unserer darüber zur Verfügung gestellten Angebote oder aufgrund geänderter gesetzlicher beziehungsweise behördlicher Vorgaben kann es notwendig werden, diese Datenschutzerklärung zu ändern.
<p>Die jeweils aktuelle Datenschutzerklärung können Sie jederzeit auf unserer Website unter <a href="https://neustartffm.de">neustartffm.de</a> abrufen und ausdrucken.
</details>
<hr />
<strong>Website Programmierung:</strong> <a href="https://thomasrosen.me" target="_blank">Thomas Rosen</a><br/>
<strong>Quellcode der Website:</strong> <a href="https://github.com/voltbonn/abwahl-feldmann-webseite/" target="_blank">GitHub</a>
</section>
</main>
<script src="./langneg.js"></script>
<script src="./js-yaml.min.js"></script>
<script>
var current_locale = 'de'
var translated_texts = {}
var locales = []
function translateTexts() {
if (translated_texts[current_locale]) {
const elements = document.querySelectorAll('[data-i18n]')
elements.forEach(element => {
const key = element.getAttribute('data-i18n')
if (translated_texts[current_locale][key]) {
element.innerHTML = translated_texts[current_locale][key].replace(/\n/g, '<br>')
}
})
if (translated_texts[current_locale].title) {
document.title = translated_texts[current_locale].title
}
}
}
async function loadTexts() {
try {
const response = await fetch('./texts.yml')
const texts = await response.text()
const data = jsyaml.load(texts)
translated_texts = data.texts
delete data.texts // don't need this in the cache anymore
delete translated_texts._ // the default
locales = Object.keys(translated_texts).sort()
setClientLocale()
setLocaleChooser()
translateTexts()
} catch (error) {
console.log(error)
}
}
function setLocaleChooser() {
const localeChooser = document.getElementById('locale_chooser')
if (localeChooser) {
localeChooser.innerHTML = ''
for (const locale of locales) {
const option = document.createElement('option')
option.value = locale
option.innerHTML = `${locale} — ${translated_texts[locale].locale_name}`
localeChooser.appendChild(option)
}
localeChooser.value = current_locale
localeChooser.addEventListener('change', event => {
current_locale = event.target.value
translateTexts()
})
}
}
function setClientLocale(){
const supportedLocales = window.negotiateLanguages(
navigator.languages, // requested locales
locales, // available locales
{
defaultLocale: 'de',
strategy: 'lookup',
}
);
current_locale = supportedLocales[0]
return current_locale
}
loadTexts()
</script>
</body>
</html>