Files
fs a101b0c3ec Stadionzeitung, Veranstaltungen, News-Artikel, Lightbox und Anzeigen-Verteilung
Stadionzeitung: Live-Seiten (Tabellen, Ergebnisse, Vorschau, Termine, News,
Kontakt, Historie, Sportheim, Partner, Momente, Impressum), automatisches Cover,
Swipe-Viewer mit Vollbildmodus und die Druckfassung als Falt-Heft. Anzeigen
kommen jetzt aus dem Bestand und werden gleichmäßig verteilt, nie mehr als zwei
hintereinander (vorher vier Blöcke à fünf). Die Doppelseiten-Regel rechnet das
Skript selbst, statt sie von Hand zu prüfen.

Veranstaltungen: Bereich /veranstaltungen mit Detailseite pro Fest, Lebenszyklus
über das Datum (Ankündigung vor dem Fest, Rückblick danach), Galerie mit
Lightbox. veranstaltungen.json ist dritte Termin-Quelle, damit ein Fest nie
doppelt gepflegt wird.

News-Artikel als dritte dynamische Prefix-Route, gemeinsamer detail-head.

Behobene Fehler:
- Wappen-Kontexte setzten Zeilen-Layout auf .crest statt auf die Zeile; das
  Wappen wurde zum Grid, Vereinsname und Tore rutschten darunter zusammen
  (Ergebnis-Rückblick, Vorschau, Cover).
- --header-h (60px) unterschätzt die Kopfleiste um 32px (Logo 72px + 20px
  Versatz): neues abgeleitetes --header-space, sonst klebten Zurück-Links
  unter dem Logo.
- base_url in der Produktions-Config ohne www, während .htaccess auf www
  umleitet; preflight prüft das jetzt.
- .lightbox brauchte display:none mit (0,2,0), sonst lag das Overlay offen.

Neue Werkzeuge: bin/anzeige-add.php (Anzeigen-Bestand), bin/veranstaltung-bilder.php
(Plakate und Galerien, Alt-Texte folgen der Quelldatei), bin/qr.php (Druck-QR mit
Warnung, wenn base_url nicht auf die echte Domain zeigt).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
2026-07-31 14:55:27 +02:00

3 lines
5.4 KiB
JavaScript

(()=>{var e={pluralize(a){return a===1?0:1}};e.strings={addMore:"Daha ekle",addMoreFiles:"Daha fazla dosya ekle",addingMoreFiles:"Daha fazla dosya ekleniyor",allowAccessDescription:"Kameran\u0131zla foto\u011Fraf \xE7ekmek veya video kaydetmek i\xE7in l\xFCtfen eri\u015Fim izni verin.",allowAccessTitle:"L\xFCtfen kameran\u0131za eri\u015Fim izni verin",authenticateWith:"%{pluginName} ile ba\u011Flan",authenticateWithTitle:"L\xFCtfen dosyalar\u0131 se\xE7mek i\xE7in %{pluginName} ile ba\u011Flan\u0131n",back:"Geri",browse:"g\xF6zat",browseFiles:"g\xF6zat",cancel:"\u0130ptal",cancelUpload:"Y\xFCklemeyi \u0130ptal Et",chooseFiles:"Dosyalar\u0131 se\xE7",closeModal:"Kapat",companionError:"Ba\u011Flant\u0131 ba\u015Far\u0131s\u0131z",complete:"Y\xFCklendi",connectedToInternet:"\u0130nternete ba\u011Flan\u0131ld\u0131",copyLink:"Linki kopyala",copyLinkToClipboardFallback:"A\u015Fa\u011F\u0131daki linki kopyala",copyLinkToClipboardSuccess:"Link panoya kopyaland\u0131",creatingAssembly:"Y\xFCklemeye haz\u0131rlan\u0131yor...",creatingAssemblyFailed:"Transloadit: Y\xFCkleme olu\u015Fturulamad\u0131",dashboardTitle:"Dosya Y\xFCkle",dashboardWindowTitle:"Dosya Y\xFCkle (Kapatmak i\xE7in Esc)",dataUploadedOfTotal:"%{complete} / %{total}",done:"Bitti",dropHereOr:"S\xFCr\xFCkleyip b\u0131rak veya %{browse}",dropHint:"Buraya s\xFCr\xFCkleyip b\u0131rak\u0131n",dropPasteBoth:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r veya %{browse}",dropPasteFiles:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r veya %{browse}",dropPasteFolders:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r veya %{browse}",dropPasteImportBoth:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r, %{browse} veya i\xE7eri aktar",dropPasteImportFiles:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r, %{browse} veya i\xE7eri aktar",dropPasteImportFolders:"S\xFCr\xFCkleyip b\u0131rak, yap\u0131\u015Ft\u0131r, %{browse} veya i\xE7eri aktar",editFile:"Dosyay\u0131 d\xFCzenle",editing:"%{file} d\xFCzenleniyor",emptyFolderAdded:"Klas\xF6r bo\u015F",encoding:"\xC7\xF6z\xFCmleniyor...",enterCorrectUrl:"Hatal\u0131 URL: L\xFCtfen bir dosyaya do\u011Frudan ba\u011Flant\u0131 girdi\u011Finizden emin olun.",enterUrlToImport:"Dosya URL\u2019sini buraya yap\u0131\u015Ft\u0131r\u0131n",exceedsSize:"Bu dosya izin verilen maksimum boyutu a\u015F\u0131yor %{size}",failedToFetch:"Bu URL\u2019den al\u0131namad\u0131, l\xFCtfen do\u011Fru oldu\u011Fundan emin olun",failedToUpload:"%{file} dosyas\u0131 y\xFCklenemedi",fileSource:"Dosya kayna\u011F\u0131: %{name}",filesUploadedOfTotal:{0:"%{complete} / %{smart_count} dosya y\xFCklendi",1:"%{complete} / %{smart_count} dosya y\xFCklendi",2:"%{complete} / %{smart_count} dosya y\xFCklendi"},filter:"Filtre",finishEditingFile:"D\xFCzenlemeyi bitir",folderAdded:{0:"%{folder} klas\xF6r\xFCnden %{smart_count} dosya eklendi",1:"%{folder} klas\xF6r\xFCnden %{smart_count} dosya eklendi",2:"%{folder} klas\xF6r\xFCnden %{smart_count} dosya eklendi"},import:"Ekle",importFrom:"%{name} Ekle",loading:"Y\xFCkleniyor...",logOut:"\xC7\u0131k\u0131\u015F",myDevice:"Dosyalar\u0131m",noFilesFound:"Dosya veya klas\xF6r bulunamad\u0131",noInternetConnection:"\u0130nternet ba\u011Flant\u0131n\u0131z yok",pause:"Durdur",pauseUpload:"Y\xFCkleme Durdu",paused:"Durdu",poweredBy:"Powered by %{uppy}",processingXFiles:{0:"%{smart_count} dosya i\u015Fleniyor",1:"%{smart_count} dosya i\u015Fleniyor",2:"%{smart_count} dosya i\u015Fleniyor"},removeFile:"Dosyay\u0131 kald\u0131r",resetFilter:"Filtreyi temizle",resume:"Devam Et",resumeUpload:"Y\xFCklemeye devam et",retry:"Tekrar",retryUpload:"Tekrar y\xFCkle",saveChanges:"De\u011Fi\u015Fiklikleri kaydet",selectX:{0:"%{smart_count} se\xE7",1:"%{smart_count} se\xE7",2:"%{smart_count} se\xE7"},smile:"G\xFCl\xFCmse!",startRecording:"Video kayd\u0131na ba\u015Fla",stopRecording:"Video kayd\u0131n\u0131 durdur",takePicture:"Foto\u011Fraf \xE7ek",timedOut:"Y\xFCkleme i\u015Flemi %{seconds} saniyeden fazla s\xFCrd\xFC\u011F\xFC i\xE7in iptal edildi.",upload:"Y\xFCkle",uploadComplete:"Y\xFCkleme tamamland\u0131",uploadFailed:"Y\xFCkleme ba\u015Far\u0131s\u0131z",uploadPaused:"Y\xFCkleme durduruldu",uploadXFiles:{0:"%{smart_count} dosyay\u0131 y\xFCkle",1:"%{smart_count} dosyay\u0131 y\xFCkle",2:"%{smart_count} dosyay\u0131 y\xFCkle"},uploadXNewFiles:{0:"+%{smart_count} dosyay\u0131 y\xFCkle",1:"+%{smart_count} dosyay\u0131 y\xFCkle",2:"+%{smart_count} dosyay\u0131 y\xFCkle"},uploading:"Y\xFCkleniyor",uploadingXFiles:{0:"%{smart_count} dosya y\xFCkleniyor",1:"%{smart_count} dosya y\xFCkleniyor",2:"%{smart_count} dosya y\xFCkleniyor"},xFilesSelected:{0:"%{smart_count} dosya se\xE7ildi",1:"%{smart_count} dosya se\xE7ildi",2:"%{smart_count} dosya se\xE7ildi"},xMoreFilesAdded:{0:"%{smart_count} dosya daha eklendi",1:"%{smart_count} dosya daha eklendi",2:"%{smart_count} dosya daha eklendi"},xTimeLeft:"kalan s\xFCre %{time}",youCanOnlyUploadFileTypes:"Sadece %{types} y\xFCkleyebilirsiniz",youCanOnlyUploadX:{0:"Sadece %{smart_count} dosya y\xFCkleyebilirsiniz",1:"Sadece %{smart_count} dosya y\xFCkleyebilirsiniz",2:"Sadece %{smart_count} dosya y\xFCkleyebilirsiniz"},youHaveToAtLeastSelectX:{0:"En az %{smart_count} dosya se\xE7melisin",1:"En az %{smart_count} dosya se\xE7melisin",2:"En az %{smart_count} dosya se\xE7melisin"},selectFileNamed:"Dosya Se\xE7 %{name}",unselectFileNamed:"Dosya se\xE7imini kald\u0131r %{name}",openFolderNamed:"A\xE7\u0131k dosya %{name}"};typeof Uppy<"u"&&(globalThis.Uppy.locales.tr_TR=e);var o=e;})();
//# sourceMappingURL=tr_TR.min.js.map