mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-29 17:15:31 +00:00 
			
		
		
		
	Some Styling
This commit is contained in:
		| @@ -1,31 +1,23 @@ | ||||
| {{ $model := .model }} | ||||
| {{ $date := .model.Datum.When }} | ||||
| <div> | ||||
| 	<a href="/jahrgang/{{- $date.Year -}}"> | ||||
| 		Zum Jahr | ||||
| 		{{ $date.Year }} | ||||
| 	</a> | ||||
|  | ||||
| 	<div class="flex flex-row gap-x-2"> | ||||
| 		{{ if $model.Prev }} | ||||
| 			<a href="/{{- $model.Prev.Datum.When.Year -}}/{{- $model.Prev.Number.No -}}"> | ||||
| 				← Zurück | ||||
| 			</a> | ||||
| 		{{ end }} | ||||
| {{ if $model.Images.HasImages }} | ||||
| <div class="flex flex-col lg:flex-row gap-6 w-full min-h-screen mt-8"> | ||||
| 	<!-- Left side: Sticky Inhaltsverzeichnis --> | ||||
| 	<div class="lg:w-1/3 xl:w-1/4 flex-shrink-0"> | ||||
| 		<div class="lg:sticky lg:top-12 lg:max-h-[calc(100vh-2rem)] lg:overflow-y-auto"> | ||||
| 			{{ template "_title_nav" . }} | ||||
| 			{{ template "_inhaltsverzeichnis" . }} | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | ||||
| 		{{ if $model.Next }} | ||||
| 			<a href="/{{- $model.Next.Datum.When.Year -}}/{{- $model.Next.Number.No -}}"> | ||||
| 				Weiter → | ||||
| 			</a> | ||||
| 		{{ end }} | ||||
| 	<!-- Right side: Newspaper pages --> | ||||
| 	<div class="lg:w-2/3 xl:w-3/4 flex-1"> | ||||
| 		{{ template "_newspaper_layout" . }} | ||||
| 	</div> | ||||
| </div> | ||||
|  | ||||
| <div> | ||||
| 	<div class="py-3 text-xl"> | ||||
| 		<div>{{ $date.Year }}</div> | ||||
| 		<div>Stück {{ $model.Number.No }}</div> | ||||
| 		<div>{{ WeekdayName $date.Weekday }}, {{ $date.Day }}. {{ MonthName $date.Month }}</div> | ||||
| 	</div> | ||||
| {{ else }} | ||||
| <div class="max-w-4xl"> | ||||
| 		{{ template "_title_nav" . }} | ||||
| 	{{ template "_inhaltsverzeichnis" . }} | ||||
| </div> | ||||
| {{ end }} | ||||
|   | ||||
							
								
								
									
										41
									
								
								views/routes/ausgabe/components/_bilder.gohtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								views/routes/ausgabe/components/_bilder.gohtml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| {{ $model := .model }} | ||||
| {{ $images := $model.Images }} | ||||
| {{ if $images.HasImages }} | ||||
| <div class="mt-6"> | ||||
| 	<h3 class="text-lg font-medium mb-4">Seiten der Ausgabe</h3> | ||||
|  | ||||
| 	{{- if $images.MainPages }} | ||||
| 	<div class="mb-6"> | ||||
| 		<h4 class="text-md font-medium mb-2">Hauptausgabe</h4> | ||||
| 		<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> | ||||
| 			{{- range $images.MainPages -}} | ||||
| 				{{- if .Available -}} | ||||
| 				<div class="border rounded-lg p-2"> | ||||
| 					<h5 class="text-sm font-medium mb-2">Seite {{ .PageNumber }}</h5> | ||||
| 					<img src="{{ .ImagePath }}" alt="Seite {{ .PageNumber }}" class="w-full h-auto border" loading="lazy"> | ||||
| 				</div> | ||||
| 				{{- end -}} | ||||
| 			{{- end -}} | ||||
| 		</div> | ||||
| 	</div> | ||||
| 	{{- end }} | ||||
|  | ||||
| 	{{- range $beilageNum, $pages := $images.AdditionalPages -}} | ||||
| 		{{- if $pages }} | ||||
| 		<div class="mb-6"> | ||||
| 			<h4 class="text-md font-medium mb-2">Beilage {{ $beilageNum }}</h4> | ||||
| 			<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> | ||||
| 				{{- range $pages -}} | ||||
| 					{{- if .Available -}} | ||||
| 					<div class="border rounded-lg p-2"> | ||||
| 						<h5 class="text-sm font-medium mb-2">Seite {{ .PageNumber }}</h5> | ||||
| 						<img src="{{ .ImagePath }}" alt="Beilage {{ $beilageNum }}, Seite {{ .PageNumber }}" class="w-full h-auto border" loading="lazy"> | ||||
| 					</div> | ||||
| 					{{- end -}} | ||||
| 				{{- end -}} | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| </div> | ||||
| {{ end }} | ||||
| @@ -1,46 +1,55 @@ | ||||
| {{ $model := .model }} | ||||
|  | ||||
|  | ||||
| <div class="max-w-[22rem] bg-slate-100 px-6 py-4 hyphens-auto"> | ||||
| <div class="w-full bg-white border border-slate-200 px-4 py-4 hyphens-auto rounded-lg"> | ||||
| 	{{- if $model.Pieces.Pages -}} | ||||
| 		<div> | ||||
| 		<div class="space-y-4"> | ||||
| 			<div class="flex items-center gap-2 mb-4"> | ||||
| 				<i class="ri-file-list-3-line text-slate-600"></i> | ||||
| 				<h3 class="text-base font-semibold text-slate-800">Inhalt</h3> | ||||
| 			</div> | ||||
| 			{{ range  $page := $model.Pieces.Pages }} | ||||
| 				<div class="pt-4 first:pt-0 hyphens-auto"> | ||||
| 					<div class="font-bold">Seite {{ $page }}</div> | ||||
| 					<ul class=""> | ||||
| 				<div class="mb-4 first:mb-0"> | ||||
| 					<div class="flex items-center gap-2 mb-3 pb-2 border-b border-slate-200"> | ||||
| 						<i class="ri-file-text-line text-blue-600 text-sm"></i> | ||||
| 						<span class="font-medium text-slate-700 bg-blue-50 px-2 py-1 rounded text-xs">{{ $page }}</span> | ||||
| 					</div> | ||||
| 					<div class="space-y-3"> | ||||
| 						{{ range $piece := (index $model.Pieces.Items $page) }} | ||||
| 							<li class="ml-0"> | ||||
| 								{{ template "_inhaltsverzeichnis_eintrag" $piece }} | ||||
| 						<div class="py-2 px-3 bg-slate-50 rounded hover:bg-slate-100 transition-colors duration-200"> | ||||
| 							{{ template "_inhaltsverzeichnis_eintrag" $piece }} | ||||
|  | ||||
|  | ||||
| 								<!-- Links zu anderen Teilen: --> | ||||
| 								{{ if gt (len $piece.IssueRefs) 1 }} | ||||
| 									<div> | ||||
| 										{{ len $piece.IssueRefs }} Teile: | ||||
| 										<div> | ||||
| 									<div class="mt-3 pt-3 border-t border-slate-100"> | ||||
| 										<div class="flex items-center gap-2 mb-2"> | ||||
| 											<i class="ri-links-line text-blue-500 text-sm"></i> | ||||
| 											<span class="text-sm font-medium text-slate-600">{{ len $piece.IssueRefs }} Teile:</span> | ||||
| 										</div> | ||||
| 										<div class="flex flex-wrap gap-2"> | ||||
| 											{{ range $issue := $piece.IssueRefs }} | ||||
| 												<li> | ||||
| 													<a | ||||
| 														href="/{{- $issue.When -}}/{{- $issue.Nr -}}" | ||||
| 														{{- if and (eq $issue.Nr $model.Number.No) (eq $issue.When.Year | ||||
| 															$model.Datum.When.Year) | ||||
| 														-}} | ||||
| 															aria-current="page" | ||||
| 														{{ end }}> | ||||
| 														{{- $issue.When.Year }} Nr. | ||||
| 														{{ $issue.Nr -}} | ||||
| 													</a> | ||||
| 												</li> | ||||
| 												<a | ||||
| 													href="/{{- $issue.When -}}/{{- $issue.Nr -}}" | ||||
| 													class="inline-flex items-center gap-1 px-2 py-1 bg-blue-50 text-blue-700 rounded-md text-xs font-medium hover:bg-blue-100 transition-colors duration-150" | ||||
| 													{{- if and (eq $issue.Nr $model.Number.No) (eq $issue.When.Year | ||||
| 														$model.Datum.When.Year) | ||||
| 													-}} | ||||
| 														aria-current="page" | ||||
| 													{{ end }}> | ||||
| 													<i class="ri-calendar-line text-xs"></i> | ||||
| 													{{- $issue.When.Year }} Nr. {{ $issue.Nr -}} | ||||
| 												</a> | ||||
| 											{{ end }} | ||||
| 										</div> | ||||
| 									</div> | ||||
| 								{{ end }} | ||||
| 							</li> | ||||
| 						</div> | ||||
| 						{{ end }} | ||||
|  | ||||
|  | ||||
| 						<!-- Pages end --> | ||||
| 					</ul> | ||||
| 				</div> | ||||
| 				</div> | ||||
| 			{{- end -}} | ||||
| 		</div> | ||||
| @@ -49,45 +58,53 @@ | ||||
|  | ||||
| 	<!-- Beilagen --> | ||||
| 	{{- if $model.AdditionalPieces.Pages -}} | ||||
| 		<div class="mt-8"> | ||||
| 			<div>Beilage</div> | ||||
| 		<div class="mt-6 pt-6 border-t border-slate-300"> | ||||
| 			<div class="flex items-center gap-2 mb-4"> | ||||
| 				<i class="ri-attachment-line text-amber-600"></i> | ||||
| 				<h3 class="text-base font-semibold text-slate-800">Beilage</h3> | ||||
| 			</div> | ||||
| 			{{ range  $page := $model.AdditionalPieces.Pages }} | ||||
| 				<div class="pt-4 first:pt-0 "> | ||||
| 					<div class="">Seite {{ $page }}</div> | ||||
| 					<ul class="list-disc list-inside"> | ||||
| 				<div class="mb-4 first:mb-0"> | ||||
| 					<div class="flex items-center gap-2 mb-3 pb-2 border-b border-slate-200"> | ||||
| 						<i class="ri-file-text-line text-amber-600 text-sm"></i> | ||||
| 						<span class="font-medium text-slate-700 bg-amber-50 px-2 py-1 rounded text-xs">{{ $page }}</span> | ||||
| 					</div> | ||||
| 					<div class="space-y-3"> | ||||
| 						{{ range $piece := (index $model.AdditionalPieces.Items $page) }} | ||||
| 							<li class="ml-0"> | ||||
| 								{{ template "_inhaltsverzeichnis_eintrag" $piece }} | ||||
| 						<div class="py-2 px-3 bg-slate-50 rounded hover:bg-slate-100 transition-colors duration-200"> | ||||
| 							{{ template "_inhaltsverzeichnis_eintrag" $piece }} | ||||
|  | ||||
|  | ||||
| 								<!-- Links zu anderen Teilen: --> | ||||
| 								{{ if gt (len $piece.IssueRefs) 1 }} | ||||
| 									<div> | ||||
| 										{{ len $piece.IssueRefs }} Teile: | ||||
| 										<div> | ||||
| 									<div class="mt-3 pt-3 border-t border-slate-100"> | ||||
| 										<div class="flex items-center gap-2 mb-2"> | ||||
| 											<i class="ri-links-line text-blue-500 text-sm"></i> | ||||
| 											<span class="text-sm font-medium text-slate-600">{{ len $piece.IssueRefs }} Teile:</span> | ||||
| 										</div> | ||||
| 										<div class="flex flex-wrap gap-2"> | ||||
| 											{{ range $issue := $piece.IssueRefs }} | ||||
| 												<li> | ||||
| 													<a | ||||
| 														href="/{{- $issue.When -}}/{{- $issue.Nr -}}" | ||||
| 														{{- if and (eq $issue.Nr $model.Number.No) (eq $issue.When.Year | ||||
| 															$model.Datum.When.Year) | ||||
| 														-}} | ||||
| 															aria-current="page" | ||||
| 														{{ end }}> | ||||
| 														{{- $issue.When.Year }} Nr. | ||||
| 														{{ $issue.Nr -}} | ||||
| 													</a> | ||||
| 												</li> | ||||
| 												<a | ||||
| 													href="/{{- $issue.When -}}/{{- $issue.Nr -}}" | ||||
| 													class="inline-flex items-center gap-1 px-2 py-1 bg-blue-50 text-blue-700 rounded-md text-xs font-medium hover:bg-blue-100 transition-colors duration-150" | ||||
| 													{{- if and (eq $issue.Nr $model.Number.No) (eq $issue.When.Year | ||||
| 														$model.Datum.When.Year) | ||||
| 													-}} | ||||
| 														aria-current="page" | ||||
| 													{{ end }}> | ||||
| 													<i class="ri-calendar-line text-xs"></i> | ||||
| 													{{- $issue.When.Year }} Nr. {{ $issue.Nr -}} | ||||
| 												</a> | ||||
| 											{{ end }} | ||||
| 										</div> | ||||
| 									</div> | ||||
| 								{{ end }} | ||||
| 							</li> | ||||
| 						</div> | ||||
| 						{{ end }} | ||||
|  | ||||
|  | ||||
| 						<!-- Pages end --> | ||||
| 					</ul> | ||||
| 				</div> | ||||
| 				</div> | ||||
| 			{{- end -}} | ||||
| 		</div> | ||||
|   | ||||
| @@ -1,79 +1,288 @@ | ||||
| {{ $piece := . }} | ||||
| {{- $piece := . -}} | ||||
|  | ||||
| <div class="entry-description leading-relaxed mb-2"> | ||||
| {{- $hasRezension := false -}} | ||||
| {{- $hasWeltnachrichten := false -}} | ||||
| {{- $hasEinkommendeFremde := false -}} | ||||
| {{- $hasWechselkurse := false -}} | ||||
| {{- $hasBuecher := false -}} | ||||
| {{- $hasLokalanzeigen := false -}} | ||||
| {{- $hasLokalnachrichten := false -}} | ||||
| {{- $hasLotterie := false -}} | ||||
| {{- $hasGedicht := false -}} | ||||
| {{- $hasVorladung := false -}} | ||||
| {{- $hasAuszug := false -}} | ||||
| {{- $hasAufsatz := false -}} | ||||
| {{- $hasGelehrteNachrichten := false -}} | ||||
| {{- $hasTheaterkritik := false -}} | ||||
| {{- $hasUebersetzung := false -}} | ||||
| {{- $hasKommentar := false -}} | ||||
| {{- $hasNachruf := false -}} | ||||
| {{- $hasReplik := false -}} | ||||
| {{- $hasProklamation := false -}} | ||||
| {{- $hasIneigenersache := false -}} | ||||
| {{- $hasBrief := false -}} | ||||
| {{- $hasAnzeige := false -}} | ||||
| {{- $hasDesertionsliste := false -}} | ||||
| {{- $hasNotenblatt := false -}} | ||||
| {{- $hasVorlesungsverzeichnis := false -}} | ||||
| {{- $hasErzaehlung := false -}} | ||||
| {{- $hasNachtrag := false -}} | ||||
| {{- $hasPanegyrik := false -}} | ||||
| {{- $hasKriminalanzeige := false -}} | ||||
| {{- $hasAbbildung := false -}} | ||||
| {{- $hasRezepte := false -}} | ||||
| {{- $hasKorrektur := false -}} | ||||
|  | ||||
| <!-- Autor(en) --> | ||||
| {{ if $piece.AgentRefs }} | ||||
| 	<div class="authors"> | ||||
| 		{{ range $agentref := $piece.AgentRefs }} | ||||
| 			{{ if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) }} | ||||
| 				{{ $agent := GetAgent $agentref.Ref }} | ||||
| 				{{- if gt (len $agent.Names) 0 -}} | ||||
| 					<a href="/akteure/{{ $agentref.Ref }}" class="inline-block"> | ||||
| 						{{- index $agent.Names 0 -}} | ||||
| 					</a> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
| 		{{ end }} | ||||
| 	</div> | ||||
| {{ end }} | ||||
| {{- range $catref := $piece.CategoryRefs -}} | ||||
| 	{{- if eq $catref.Ref "rezension" -}}{{- $hasRezension = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "weltnachrichten" -}}{{- $hasWeltnachrichten = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "einkommende-fremde" -}}{{- $hasEinkommendeFremde = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "wechselkurse" -}}{{- $hasWechselkurse = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "buecher" -}}{{- $hasBuecher = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "lokalanzeigen" -}}{{- $hasLokalanzeigen = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "lokalnachrichten" -}}{{- $hasLokalnachrichten = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "lotterie" -}}{{- $hasLotterie = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "gedicht" -}}{{- $hasGedicht = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "vorladung" -}}{{- $hasVorladung = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "auszug" -}}{{- $hasAuszug = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "aufsatz" -}}{{- $hasAufsatz = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "gelehrte-nachrichten" -}}{{- $hasGelehrteNachrichten = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "theaterkritik" -}}{{- $hasTheaterkritik = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "uebersetzung" -}}{{- $hasUebersetzung = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "kommentar" -}}{{- $hasKommentar = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "nachruf" -}}{{- $hasNachruf = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "replik" -}}{{- $hasReplik = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "proklamation" -}}{{- $hasProklamation = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "ineigenersache" -}}{{- $hasIneigenersache = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "brief" -}}{{- $hasBrief = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "anzeige" -}}{{- $hasAnzeige = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "desertionsliste" -}}{{- $hasDesertionsliste = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "notenblatt" -}}{{- $hasNotenblatt = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "vorlesungsverzeichnis" -}}{{- $hasVorlesungsverzeichnis = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "erzaehlung" -}}{{- $hasErzaehlung = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "nachtrag" -}}{{- $hasNachtrag = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "panegyrik" -}}{{- $hasPanegyrik = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "kriminalanzeige" -}}{{- $hasKriminalanzeige = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "abbildung" -}}{{- $hasAbbildung = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "rezepte" -}}{{- $hasRezepte = true -}}{{- end -}} | ||||
| 	{{- if eq $catref.Ref "korrektur" -}}{{- $hasKorrektur = true -}}{{- end -}} | ||||
| {{- end -}} | ||||
|  | ||||
| {{- range $workref := $piece.WorkRefs -}} | ||||
| 	{{- $kat := $workref.Category -}} | ||||
| 	{{- if not $kat -}}{{- $kat = "rezension" -}}{{- end -}} | ||||
| 	{{- if eq $kat "rezension" -}}{{- $hasRezension = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "auszug" -}}{{- $hasAuszug = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "theaterkritik" -}}{{- $hasTheaterkritik = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "uebersetzung" -}}{{- $hasUebersetzung = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "kommentar" -}}{{- $hasKommentar = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "anzeige" -}}{{- $hasAnzeige = true -}}{{- end -}} | ||||
| 	{{- if eq $kat "replik" -}}{{- $hasReplik = true -}}{{- end -}} | ||||
| {{- end -}} | ||||
|  | ||||
| <!-- Kategorien --> | ||||
| <div class=""> | ||||
| 	<!-- Einzelkategorien --> | ||||
| 	{{ if $piece.CategoryRefs }} | ||||
| 		{{ range $catref := $piece.CategoryRefs }} | ||||
| 			{{ $category := GetCategory $catref.Ref }} | ||||
| 			{{- if gt (len $category.Names) 0 -}} | ||||
| 				<div class="category inline-block">{{- index $category.Names 0 -}}</div> | ||||
| 			{{ end }} | ||||
| 		{{ end }} | ||||
| 	{{ end }} | ||||
|  | ||||
| 	{{- if $piece.Title -}} | ||||
| 		<div class="">{{- index $piece.Title 0 -}}</div> | ||||
| 	{{- else if $piece.Incipit -}} | ||||
| 		<div class="">{{- index $piece.Incipit 0 -}}</div> | ||||
| {{- $place := "" -}} | ||||
| {{- if $piece.PlaceRefs -}} | ||||
| 	{{- $placeObj := GetPlace (index $piece.PlaceRefs 0).Ref -}} | ||||
| 	{{- if gt (len $placeObj.Names) 0 -}} | ||||
| 		{{- $place = index $placeObj.Names 0 -}} | ||||
| 	{{- end -}} | ||||
| {{- end -}} | ||||
|  | ||||
| 	{{- if $piece.PlaceRefs -}} | ||||
| 		{{ $place := GetPlace (index $piece.PlaceRefs 0).Ref }} | ||||
| 		{{- if gt (len $place.Names) 0 -}} | ||||
| 			<div class="">{{- index $place.Names 0 -}}</div> | ||||
| {{- $title := "" -}} | ||||
| {{- if $piece.Title -}} | ||||
| 	{{- $title = index $piece.Title 0 -}} | ||||
| {{- else if $piece.Incipit -}} | ||||
| 	{{- $title = index $piece.Incipit 0 -}} | ||||
| {{- end -}} | ||||
|  | ||||
| {{- $workTitle := "" -}} | ||||
| {{- $workAuthorName := "" -}} | ||||
| {{- $workAuthorID := "" -}} | ||||
| {{- if $piece.WorkRefs -}} | ||||
| 	{{- $work := GetWork (index $piece.WorkRefs 0).Ref -}} | ||||
| 	{{- if $work.PreferredTitle -}} | ||||
| 		{{- $workTitle = $work.PreferredTitle -}} | ||||
| 	{{- else if $work.Citation.Title -}} | ||||
| 		{{- $workTitle = $work.Citation.Title -}} | ||||
| 	{{- else if $work.Citation.Chardata -}} | ||||
| 		{{- $workTitle = $work.Citation.Chardata -}} | ||||
| 	{{- end -}} | ||||
| 	{{- /* Get work author */ -}} | ||||
| 	{{- if $work.AgentRefs -}} | ||||
| 		{{- range $workAgentRef := $work.AgentRefs -}} | ||||
| 			{{- if (or (eq $workAgentRef.Category "") (eq $workAgentRef.Category "autor")) -}} | ||||
| 				{{- $workAgent := GetAgent $workAgentRef.Ref -}} | ||||
| 				{{- if and $workAgent (gt (len $workAgent.Names) 0) -}} | ||||
| 					{{- $workAuthorName = index $workAgent.Names 0 -}} | ||||
| 					{{- $workAuthorID = $workAgentRef.Ref -}} | ||||
| 					{{- break -}} | ||||
| 				{{- end -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| {{- end -}} | ||||
|  | ||||
| {{- /* Generate natural text descriptions */ -}} | ||||
|  | ||||
| 	<!-- Kategorie Werk --> | ||||
| 	{{ if $piece.WorkRefs }} | ||||
| 		{{ range $workref := $piece.WorkRefs }} | ||||
| 			{{ $work := GetWork $workref.Ref }} | ||||
| 			<!-- What we do depends on the category --> | ||||
| 			{{- $kat := $workref.Category }} | ||||
| 			{{- if not $kat }} | ||||
| 				{{- $kat = "rezension" -}} | ||||
| {{- if $hasRezension -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>{{ if $workTitle }}, Rezension: <em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ else if $title }}, Rezension: <em>{{ $title }}</em>{{ else }}, Rezension{{ end }}{{ if $place }} ({{ $place }}){{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
|  | ||||
| 			{{- $category := GetCategory $kat -}} | ||||
| 			{{- if gt (len $category.Names) 0 -}} | ||||
| 				<div class="category inline-block">{{- index $category.Names 0 -}}</div> | ||||
| 			{{- end -}} | ||||
|  | ||||
| 			{{- if $work.PreferredTitle -}} | ||||
| 				<div class="">{{- $work.PreferredTitle -}}</div> | ||||
| 			{{- else if $work.Citation.Title -}} | ||||
| 				<div class="">{{- $work.Citation.Title -}}</div> | ||||
| 			{{- else -}} | ||||
| 				<div class="">{{- $work.Citation.Chardata -}}</div> | ||||
| 			{{- end -}} | ||||
|  | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		Rezension{{ if $workTitle }}: <em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ else if $title }}: <em>{{ $title }}</em>{{ end }}{{ if $place }} ({{ $place }}){{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- else if $hasWeltnachrichten -}} | ||||
| 	Politische Nachrichten aus aller Welt | ||||
|  | ||||
| {{- else if $hasEinkommendeFremde -}} | ||||
| 	{{- if $hasLokalnachrichten -}}Lokale Meldungen über einreisende Fremde{{- else if $hasNachruf -}}Nachruf und Einreiseliste{{- else -}}Einreiseliste{{- end -}}{{ if $place }} für {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasWechselkurse -}} | ||||
| 	Wechselkurse{{ if $place }} in {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasBuecher -}} | ||||
| 	Bücheranzeigen{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasLokalanzeigen -}} | ||||
| 	{{ if $hasNachruf }}Todesanzeige{{ else }}Lokalanzeige{{ end }}{{ if $place }} aus {{ $place }}{{ end }}{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasLokalnachrichten -}} | ||||
| 	{{ if $hasLotterie }}Lotterienachrichten{{ else if $hasNachruf }}Nachrufe{{ else if $hasTheaterkritik }}Theaternachrichten{{ else if $hasPanegyrik }}Festlichkeiten{{ else }}Lokalnachrichten{{ end }}{{ if $place }} aus {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasGedicht -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>, {{ if $hasKommentar }}Gedicht mit Kommentar{{ else if $hasUebersetzung }}Gedichtübersetzung{{ else if $hasGelehrteNachrichten }}Gedicht zu gelehrten Angelegenheiten{{ else }}Gedicht{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		{{ if $hasKommentar }}Gedicht mit Kommentar{{ else if $hasUebersetzung }}Gedichtübersetzung{{ else if $hasGelehrteNachrichten }}Gedicht zu gelehrten Angelegenheiten{{ else }}Gedicht{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- else if $hasVorladung -}} | ||||
| 	Gerichtliche Vorladung{{ if $place }} in {{ $place }}{{ end }}{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasAufsatz -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>, {{ if $hasReplik }}Erwiderung{{ else if $hasUebersetzung }}Übersetzung{{ else if $hasNachruf }}Nachruf{{ else if $hasKommentar }}Kommentar{{ else if $hasRezepte }}Rezepte und Anleitungen{{ else }}Aufsatz{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		{{ if $hasReplik }}Erwiderung{{ else if $hasUebersetzung }}Übersetzung{{ else if $hasNachruf }}Nachruf{{ else if $hasKommentar }}Kommentar{{ else if $hasRezepte }}Rezepte und Anleitungen{{ else }}Aufsatz{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- else if $hasGelehrteNachrichten -}} | ||||
| 	{{ if $hasTheaterkritik }}Theaterkritik{{ else if $hasKommentar }}Gelehrter Kommentar{{ else }}Gelehrte Nachrichten{{ end }}{{ if $place }} aus {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasTheaterkritik -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>, Theaterkritik{{ if $workTitle }} zu <em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ else if $title }} zu <em>{{ $title }}</em>{{ end }}{{ if $place }} ({{ $place }}){{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		Theaterkritik{{ if $workTitle }} zu <em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ else if $title }} zu <em>{{ $title }}</em>{{ end }}{{ if $place }} ({{ $place }}){{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- else if $hasProklamation -}} | ||||
| 	Amtliche Proklamation{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasIneigenersache -}} | ||||
| 	{{ if $hasKommentar }}{{ if $hasNachtrag }}Ergänzender Kommentar{{ else }}Redaktioneller Kommentar{{ end }}{{ else if $hasReplik }}Redaktionelle Stellungnahme{{ else }}Anmerkung der Redaktion{{ end }}{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasBrief -}} | ||||
| 	{{ if $hasNachruf }}Kondolenzbrief{{ else }}Leserbrief{{ end }}{{- $authorFound := false -}}{{- range $agentref := $piece.AgentRefs -}}{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}}{{- $agent := GetAgent $agentref.Ref -}}{{- if gt (len $agent.Names) 0 -}} von <a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>{{- $authorFound = true -}}{{- break -}}{{- end -}}{{- end -}}{{- end -}}{{ if $place }} aus {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasDesertionsliste -}} | ||||
| 	Desertionsliste{{ if $place }} für {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasNotenblatt -}} | ||||
| 	{{ if $hasNachtrag }}Ergänztes {{ end }}Notenblatt{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasVorlesungsverzeichnis -}} | ||||
| 	Vorlesungsverzeichnis{{ if $place }} der Universität {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasErzaehlung -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>, {{ if $hasUebersetzung }}Übersetzung einer Erzählung{{ else }}Erzählung{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		{{ if $hasUebersetzung }}Übersetzung einer Erzählung{{ else }}Erzählung{{ end }}{{ if $title }}: „{{ $title }}"{{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- else if $hasAbbildung -}} | ||||
| 	{{ if $hasAufsatz }}Illustrierter Aufsatz{{ else }}Abbildung{{ end }}{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasKriminalanzeige -}} | ||||
| 	Kriminalanzeige{{ if $place }} aus {{ $place }}{{ end }} | ||||
|  | ||||
| {{- else if $hasKorrektur -}} | ||||
| 	Korrektur{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasAnzeige -}} | ||||
| 	{{ if $hasAuszug }}{{ if $hasGedicht }}Gedichtauszug{{ else }}Textauszug{{ end }}{{ else }}Anzeige{{ end }}{{ if $title }}: {{ $title }}{{ end }} | ||||
|  | ||||
| {{- else if $hasAuszug -}} | ||||
| 	Auszug{{ if $title }}: „{{ $title }}"{{ end }}{{ if $workTitle }} aus <em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ end }} | ||||
|  | ||||
| {{- else -}} | ||||
| 	{{- $authorFound := false -}} | ||||
| 	{{- range $agentref := $piece.AgentRefs -}} | ||||
| 		{{- if (or (eq $agentref.Category "") (eq $agentref.Category "autor")) -}} | ||||
| 			{{- $agent := GetAgent $agentref.Ref -}} | ||||
| 			{{- if gt (len $agent.Names) 0 -}} | ||||
| 				<a href="/akteure/{{ $agentref.Ref }}" class="author-link">{{ index $agent.Names 0 }}</a>{{ if $title }}: {{ $title }}{{ end }}{{ if $workTitle }}{{ if $title }} aus {{ end }}<em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ end }} | ||||
| 				{{- $authorFound = true -}} | ||||
| 				{{- break -}} | ||||
| 			{{- end -}} | ||||
| 		{{- end -}} | ||||
| 	{{- end -}} | ||||
| 	{{- if not $authorFound -}} | ||||
| 		{{ if $title }}{{ $title }}{{ end }}{{ if $workTitle }}{{ if $title }} aus {{ end }}<em>{{ $workTitle }}</em>{{ if $workAuthorName }} von <a href="/akteure/{{ $workAuthorID }}" class="author-link">{{ $workAuthorName }}</a>{{ end }}{{ else if not $title }}Beitrag ohne Titel{{ end }} | ||||
| 	{{- end -}} | ||||
|  | ||||
| {{- end -}} | ||||
| </div> | ||||
|  | ||||
| <!-- Notizen --> | ||||
| {{ range $annotation := $piece.AnnotationNote.Annotations }} | ||||
| 	<div class="italic"> | ||||
| 		{{ $annotation.Inner.InnerXML }} | ||||
| 	</div> | ||||
| {{ end }} | ||||
| {{- range $annotation := $piece.AnnotationNote.Annotations -}} | ||||
| <div class="italic text-xs mt-1 text-slate-600"> | ||||
| 	{{ $annotation.Inner.InnerXML }} | ||||
| </div> | ||||
| {{- end -}} | ||||
							
								
								
									
										292
									
								
								views/routes/ausgabe/components/_newspaper_layout.gohtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								views/routes/ausgabe/components/_newspaper_layout.gohtml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,292 @@ | ||||
| {{ $model := .model }} | ||||
| {{ $images := $model.Images }} | ||||
|  | ||||
| <div class="space-y-8 h-full relative" id="newspaper-content"> | ||||
| 	<!-- Main Issue Pages --> | ||||
| 	{{ if $images.MainPages }} | ||||
| 		{{ $pages := $images.MainPages }} | ||||
| 		{{ $pageCount := len $pages }} | ||||
|  | ||||
| 		<div class="space-y-6"> | ||||
|  | ||||
| 			<!-- First page (single) --> | ||||
| 			{{ if ge $pageCount 1 }} | ||||
| 				{{ $firstPage := index $pages 0 }} | ||||
| 				{{ if $firstPage.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<div class="mb-3"> | ||||
| 						<div class="flex items-center gap-2 mb-2"> | ||||
| 							<i class="ri-file-image-line text-blue-600"></i> | ||||
| <span class="text-sm font-medium text-slate-600 bg-blue-50 px-2 py-1 rounded">{{ $firstPage.PageNumber }}</span> | ||||
| 						</div> | ||||
| 					</div> | ||||
| <div class="single-page bg-white p-4 rounded-lg border border-slate-200 hover:border-slate-300 transition-colors duration-200"> | ||||
| 						<img src="{{ $firstPage.ImagePath }}" | ||||
| 							 alt="Seite {{ $firstPage.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer rounded-md hover:scale-[1.02] transition-transform duration-200" | ||||
| 							 onclick="enlargePage(this, {{ $firstPage.PageNumber }}, false)" | ||||
| 							 data-page="{{ $firstPage.PageNumber }}" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
|  | ||||
| 			<!-- Middle pages (double spread) --> | ||||
| 			{{ if ge $pageCount 4 }} | ||||
| 				{{ $middlePage1 := index $pages 1 }} | ||||
| 				{{ $middlePage2 := index $pages 2 }} | ||||
| 				{{ if and $middlePage1.Available $middlePage2.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<div class="mb-3"> | ||||
| 						<div class="flex items-center gap-2 mb-2"> | ||||
| 							<i class="ri-file-copy-2-line text-green-600"></i> | ||||
| <span class="text-sm font-medium text-slate-600 bg-green-50 px-2 py-1 rounded">{{ $middlePage1.PageNumber }}-{{ $middlePage2.PageNumber }}</span> | ||||
| 						</div> | ||||
| 					</div> | ||||
| <div class="double-spread bg-white p-4 rounded-lg border border-slate-200 hover:border-slate-300 transition-colors duration-200"> | ||||
| 						<img src="{{ $middlePage1.ImagePath }}" | ||||
| 							 alt="Seite {{ $middlePage1.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer rounded-md hover:scale-[1.02] transition-transform duration-200" | ||||
| 							 onclick="enlargePage(this, {{ $middlePage1.PageNumber }}, true)" | ||||
| 							 data-page="{{ $middlePage1.PageNumber }}" | ||||
| 							 loading="lazy"> | ||||
| 						<img src="{{ $middlePage2.ImagePath }}" | ||||
| 							 alt="Seite {{ $middlePage2.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer rounded-md hover:scale-[1.02] transition-transform duration-200" | ||||
| 							 onclick="enlargePage(this, {{ $middlePage2.PageNumber }}, true)" | ||||
| 							 data-page="{{ $middlePage2.PageNumber }}" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
|  | ||||
| 			<!-- Last page (single) --> | ||||
| 			{{ if ge $pageCount 4 }} | ||||
| 				{{ $lastPage := index $pages 3 }} | ||||
| 				{{ if $lastPage.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<div class="mb-3"> | ||||
| 						<div class="flex items-center gap-2 mb-2"> | ||||
| 							<i class="ri-file-image-line text-blue-600"></i> | ||||
| 							<span class="text-sm font-medium text-slate-600 bg-blue-50 px-3 py-1 rounded-full">Seite {{ $lastPage.PageNumber }}</span> | ||||
| 						</div> | ||||
| 					</div> | ||||
| <div class="single-page bg-white p-4 rounded-lg border border-slate-200 hover:border-slate-300 transition-colors duration-200"> | ||||
| 						<img src="{{ $lastPage.ImagePath }}" | ||||
| 							 alt="Seite {{ $lastPage.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer rounded-md hover:scale-[1.02] transition-transform duration-200" | ||||
| 							 onclick="enlargePage(this, {{ $lastPage.PageNumber }}, false)" | ||||
| 							 data-page="{{ $lastPage.PageNumber }}" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
| 		</div> | ||||
| 	{{ end }} | ||||
|  | ||||
| 	<!-- Beilage Pages --> | ||||
| 	{{ range $beilageNum, $beilagePages := $images.AdditionalPages }} | ||||
| 		{{ if $beilagePages }} | ||||
| 		<div class="space-y-6 mt-12 pt-8 border-t-2 border-amber-200"> | ||||
| 			<!-- Header for beilage --> | ||||
| 			<div class="flex items-center gap-3 mb-6"> | ||||
| 				<i class="ri-attachment-line text-2xl text-amber-600"></i> | ||||
| 				<h2 class="text-xl font-semibold text-slate-800">Beilage {{ $beilageNum }}</h2> | ||||
| 			</div> | ||||
| 			{{ $pageCount := len $beilagePages }} | ||||
|  | ||||
| 			<!-- First page of beilage --> | ||||
| 			{{ if ge $pageCount 1 }} | ||||
| 				{{ $firstPage := index $beilagePages 0 }} | ||||
| 				{{ if $firstPage.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<div class="mb-3"> | ||||
| 						<div class="flex items-center gap-2 mb-2"> | ||||
| 							<i class="ri-file-image-line text-amber-600"></i> | ||||
| <span class="text-sm font-medium text-slate-600 bg-amber-50 px-2 py-1 rounded">{{ $firstPage.PageNumber }}</span> | ||||
| 						</div> | ||||
| 					</div> | ||||
| <div class="single-page bg-white p-4 rounded-lg border border-amber-200 hover:border-amber-300 transition-colors duration-200"> | ||||
| 						<img src="{{ $firstPage.ImagePath }}" | ||||
| 							 alt="Beilage {{ $beilageNum }}, Seite {{ $firstPage.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer rounded-md hover:scale-[1.02] transition-transform duration-200" | ||||
| 							 onclick="enlargePage(this, {{ $firstPage.PageNumber }}, false)" | ||||
| 							 data-page="{{ $firstPage.PageNumber }}" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
|  | ||||
| 			<!-- If beilage has 4+ pages, show middle spread --> | ||||
| 			{{ if ge $pageCount 4 }} | ||||
| 				{{ $middlePage1 := index $beilagePages 1 }} | ||||
| 				{{ $middlePage2 := index $beilagePages 2 }} | ||||
| 				{{ if and $middlePage1.Available $middlePage2.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<h4 class="text-sm font-medium mb-2">Beilage {{ $beilageNum }}, Seiten {{ $middlePage1.PageNumber }}-{{ $middlePage2.PageNumber }}</h4> | ||||
| 					<div class="double-spread"> | ||||
| 						<img src="{{ $middlePage1.ImagePath }}" | ||||
| 							 alt="Beilage {{ $beilageNum }}, Seite {{ $middlePage1.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer border shadow-md" | ||||
| 							 onclick="enlargePage(this, {{ $middlePage1.PageNumber }}, true)" | ||||
| 							 loading="lazy"> | ||||
| 						<img src="{{ $middlePage2.ImagePath }}" | ||||
| 							 alt="Beilage {{ $beilageNum }}, Seite {{ $middlePage2.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer border shadow-md" | ||||
| 							 onclick="enlargePage(this, {{ $middlePage2.PageNumber }}, true)" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ else if eq $pageCount 2 }} | ||||
| 				<!-- If only 2 pages, show as spread --> | ||||
| 				{{ $page2 := index $beilagePages 1 }} | ||||
| 				{{ if $page2.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<h4 class="text-sm font-medium mb-2">Beilage {{ $beilageNum }}, Seite {{ $page2.PageNumber }}</h4> | ||||
| 					<div class="single-page"> | ||||
| 						<img src="{{ $page2.ImagePath }}" | ||||
| 							 alt="Beilage {{ $beilageNum }}, Seite {{ $page2.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer border shadow-md" | ||||
| 							 onclick="enlargePage(this, {{ $page2.PageNumber }}, false)" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
|  | ||||
| 			<!-- Last page of beilage (if 4+ pages) --> | ||||
| 			{{ if ge $pageCount 4 }} | ||||
| 				{{ $lastPage := index $beilagePages 3 }} | ||||
| 				{{ if $lastPage.Available }} | ||||
| 				<div class="newspaper-page-container"> | ||||
| 					<h4 class="text-sm font-medium mb-2">Beilage {{ $beilageNum }}, Seite {{ $lastPage.PageNumber }}</h4> | ||||
| 					<div class="single-page"> | ||||
| 						<img src="{{ $lastPage.ImagePath }}" | ||||
| 							 alt="Beilage {{ $beilageNum }}, Seite {{ $lastPage.PageNumber }}" | ||||
| 							 class="newspaper-page-image cursor-pointer border shadow-md" | ||||
| 							 onclick="enlargePage(this, {{ $lastPage.PageNumber }}, false)" | ||||
| 							 loading="lazy"> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				{{ end }} | ||||
| 			{{ end }} | ||||
| 		</div> | ||||
| 		{{ end }} | ||||
| 	{{ end }} | ||||
| </div> | ||||
|  | ||||
| <!-- Modal for enlarged view - positioned within newspaper content --> | ||||
| <div id="pageModal" class="absolute inset-0 bg-black bg-opacity-75 hidden z-50 flex items-center justify-center backdrop-blur-sm" onclick="closeModal()"> | ||||
| 	<div class="relative max-w-full max-h-full p-4"> | ||||
| <img id="modalImage" src="" alt="" class="max-w-full max-h-full object-contain rounded-lg"> | ||||
| 		<button onclick="closeModal()" class="absolute top-2 right-2 text-white bg-slate-800 bg-opacity-80 rounded-full w-10 h-10 flex items-center justify-center hover:bg-opacity-100 transition-all duration-200"> | ||||
| 			<i class="ri-close-line text-xl"></i> | ||||
| 		</button> | ||||
| 	</div> | ||||
| </div> | ||||
|  | ||||
| <style> | ||||
| .newspaper-page-container { | ||||
| 	margin-bottom: 2rem; | ||||
| } | ||||
|  | ||||
| .single-page { | ||||
| 	display: flex; | ||||
| 	justify-content: center; | ||||
| } | ||||
|  | ||||
| .single-page .newspaper-page-image { | ||||
| 	max-width: min(400px, 100%); | ||||
| 	width: 100%; | ||||
| 	height: auto; | ||||
| } | ||||
|  | ||||
| .double-spread { | ||||
| 	display: flex; | ||||
| 	gap: 1rem; | ||||
| 	justify-content: center; | ||||
| 	width: 100%; | ||||
| } | ||||
|  | ||||
| .double-spread .newspaper-page-image { | ||||
| 	max-width: min(350px, 48%); | ||||
| 	width: 100%; | ||||
| 	height: auto; | ||||
| 	flex: 1; | ||||
| } | ||||
|  | ||||
| /* Larger screens - maximize available space */ | ||||
| @media (min-width: 1280px) { | ||||
| 	.single-page .newspaper-page-image { | ||||
| 		max-width: min(600px, 100%); | ||||
| 	} | ||||
|  | ||||
| 	.double-spread .newspaper-page-image { | ||||
| 		max-width: min(500px, 48%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Very wide screens - take advantage of the full width */ | ||||
| @media (min-width: 1536px) { | ||||
| 	.single-page .newspaper-page-image { | ||||
| 		max-width: min(700px, 100%); | ||||
| 	} | ||||
|  | ||||
| 	.double-spread .newspaper-page-image { | ||||
| 		max-width: min(600px, 48%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Medium screens */ | ||||
| @media (max-width: 1024px) { | ||||
| 	.double-spread { | ||||
| 		flex-direction: column; | ||||
| 		align-items: center; | ||||
| 	} | ||||
|  | ||||
| 	.double-spread .newspaper-page-image { | ||||
| 		max-width: 400px; | ||||
| 		width: 100%; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Mobile */ | ||||
| @media (max-width: 640px) { | ||||
| 	.single-page .newspaper-page-image, | ||||
| 	.double-spread .newspaper-page-image { | ||||
| 		max-width: 100%; | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
|  | ||||
| <script> | ||||
| function enlargePage(imgElement, pageNumber, isFromSpread) { | ||||
| 	const modal = document.getElementById('pageModal'); | ||||
| 	const modalImage = document.getElementById('modalImage'); | ||||
|  | ||||
| 	modalImage.src = imgElement.src; | ||||
| 	modalImage.alt = imgElement.alt; | ||||
|  | ||||
| 	modal.classList.remove('hidden'); | ||||
|  | ||||
| 	// Highlight current page in Inhaltsverzeichnis if you implement that | ||||
| 	// markCurrentPage(pageNumber); | ||||
| } | ||||
|  | ||||
| function closeModal() { | ||||
| 	const modal = document.getElementById('pageModal'); | ||||
| 	modal.classList.add('hidden'); | ||||
| } | ||||
|  | ||||
| // Close modal on Escape key | ||||
| document.addEventListener('keydown', function(e) { | ||||
| 	if (e.key === 'Escape') { | ||||
| 		closeModal(); | ||||
| 	} | ||||
| }); | ||||
| </script> | ||||
							
								
								
									
										39
									
								
								views/routes/ausgabe/components/_title_nav.gohtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								views/routes/ausgabe/components/_title_nav.gohtml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| {{ $model := .model }} | ||||
| {{ $date := .model.Datum.When }} | ||||
| <div class="sticky top-4 bg-white border border-slate-200 rounded-lg p-4 mb-6 z-10"> | ||||
| 	<!-- Header with year link left, nav buttons right --> | ||||
| 	<div class="flex items-center justify-between mb-3"> | ||||
| 		<a href="/jahrgang/{{- $date.Year -}}" | ||||
| 		   class="inline-flex items-center gap-1 text-blue-600 hover:text-blue-800 text-base font-medium"> | ||||
| 			<i class="ri-calendar-line"></i> | ||||
| 			{{ $date.Year }} | ||||
| 		</a> | ||||
|  | ||||
| 		<div class="flex flex-row gap-x-1"> | ||||
| 			{{ if $model.Prev }} | ||||
| 				<a href="/{{- $model.Prev.Datum.When.Year -}}/{{- $model.Prev.Number.No -}}" | ||||
| 				   class="inline-flex items-center justify-center w-7 h-7 bg-slate-100 text-slate-700 rounded hover:bg-slate-200 transition-colors"> | ||||
| 					<i class="ri-arrow-left-line text-sm"></i> | ||||
| 				</a> | ||||
| 			{{ end }} | ||||
|  | ||||
| 			{{ if $model.Next }} | ||||
| 				<a href="/{{- $model.Next.Datum.When.Year -}}/{{- $model.Next.Number.No -}}" | ||||
| 				   class="inline-flex items-center justify-center w-7 h-7 bg-slate-100 text-slate-700 rounded hover:bg-slate-200 transition-colors"> | ||||
| 					<i class="ri-arrow-right-line text-sm"></i> | ||||
| 				</a> | ||||
| 			{{ end }} | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | ||||
| 	<!-- Issue title and date --> | ||||
| 	<div class="border-t border-slate-200 pt-3"> | ||||
| 		<div class="flex items-center justify-between"> | ||||
| 			<div class="flex items-center gap-1"> | ||||
| 				<i class="ri-newspaper-line text-lg text-slate-600"></i> | ||||
| 				<h1 class="text-lg font-semibold text-slate-800">{{ $date.Year }} / {{ $model.Number.No }}</h1> | ||||
| 			</div> | ||||
| 			<div class="text-base font-medium text-slate-700 bg-slate-100 px-2 py-1 rounded">{{ printf "%.2s" (WeekdayName $date.Weekday) }} {{ $date.Day }}.{{ $date.Month }}.</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
		Reference in New Issue
	
	Block a user
	 Simon Martens
					Simon Martens