Line Numbers on <page>

This commit is contained in:
Simon Martens
2022-11-22 12:34:55 +01:00
parent 5e90e917f1
commit 3523dfb92c
16 changed files with 457 additions and 60 deletions

View File

@@ -71,8 +71,8 @@ public class Briefecontroller : Controller {
(model.ParsedText, model.MinWidth) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.minwidth);
if (model.ParsedMarginals != null && parsedLetter.ParsedMarginals != null) model.ParsedMarginals.AddRange(parsedLetter.ParsedMarginals);
else model.ParsedMarginals = parsedLetter.ParsedMarginals;
if (parsedLetter.Startline != "-1" && parsedLetter.Startline != "1" && model.MetaData.ParsedZHString != null)
model.MetaData.ParsedZHString += " / " + parsedLetter.Startline;
model.MetaData.Startline = parsedLetter.Startline;
model.MetaData.Startpage = parsedLetter.Startpage;
if (String.IsNullOrWhiteSpace(model.ParsedText))
model.MetaData.HasText = false;
}

View File

@@ -9,6 +9,8 @@ public class BriefeMetaViewModel {
private string? _ParsedSenders;
private string? _ParsedReceivers;
private string? _ParsedZHString;
private string? _Startline;
private string? _Startpage;
public string? ParsedSenders {
get => _ParsedSenders;
@@ -42,6 +44,26 @@ public class BriefeMetaViewModel {
}
}
public string? Startline {
get => _Startline;
set {
if (value != null)
_Startline = HttpUtility.HtmlEncode(value);
else
_Startline = value;
}
}
public string? Startpage {
get => _Startpage;
set {
if (value != null)
_Startpage = HttpUtility.HtmlEncode(value);
else
_Startpage = value;
}
}
public (BriefeMetaViewModel, string)? Next { get; set; }
public (BriefeMetaViewModel, string)? Prev { get; set; }

View File

@@ -66,38 +66,27 @@ Veränderungen im Code
- Code wird open source zugänglich
Ästhetisch unzufriedenstellend, aber funktional:
TODO pills are not mobile friendly (hover / click), Pills allgemein Ästhetik
TODO High Contrast Mode manchmal komisch
TODO Kein High Contrast Mode für den Upload
TODO High Contrast Mode: Kursiv und ausgegraut (Herausgeberanmerkungen) schwer sichtbar
TODO 400: Traditions nicht genug Abstand
TODO Word-wrap before align, tabs
B TODO pills are not mobile friendly (hover / click), Pills allgemein Ästhetik
D TODO High Contrast Mode manchmal komisch
D TODO Kein High Contrast Mode für den Upload
D TODO High Contrast Mode: Kursiv und ausgegraut (Herausgeberanmerkungen) schwer sichtbar
D TODO 400: Traditions nicht genug Abstand
Technische Details:
TODO Move ILibrary -> neuer Parser
TODO Hochstellungen nach mediaevalziffern
TODO Syntax-Check
TODO Datum im Footer Edierdatum der Hamann-Datei
TODO Fußnoten in Editionsgeschichte als Marginalkommentare
TODO Navigation auf die Startseite / von Kontakt
D TODO Move ILibrary -> neuer Parser
C TODO Syntax-Check
B TODO Datum im Footer Edierdatum der Hamann-Datei
A TODO Fußnoten in Editionsgeschichte als Marginalkommentare
Vor dem internen release:
TODO Jahreszahlen auf der Startseite
TODO Suchergebnisse beschränken
TODO Mobile Menüs bei der Seitennavigation (Jahrszahlen, Buchstabenindex usw)
TODO Fehlerseiten bei nicht gefundenen Seiten
TODO Traditions durchsuchen
TODO Briefe, in welchen Sender / Empfänger jeweils doppelt / getauscht sind 876
TODO SEO Description & Titel
A TODO Jahreszahlen auf der Startseite
B TODO Suchergebnisse beschränken
B TODO Mobile Menüs bei der Seitennavigation (Jahrszahlen, Buchstabenindex usw)
A TODO Fehlerseiten bei nicht gefundenen Seiten
C TODO Traditions durchsuchen
A TODO Briefe, in welchen Sender / Empfänger jeweils doppelt / getauscht sind 876
A TODO SEO Description & Titel
A TODO fixed width briefe kommentar bisschen nach links 306, 309
Liste für Janina/Luca:
KEIN brief für Bassa
Editionsgeschichte erste Fußnote
tabellen ok, ausser 939, 806 falsch geschachtelt: dort sind htabs geschachtelt
Fehlende Seiten auf HKW
vmtl bei sendern und empfängern
theophrast-abschilderungen: Link mit linktext
tabellen ok, ausser 939

View File

@@ -161,7 +161,8 @@ public class LetterRules {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
// Fall 1: Neue Seite
if (reader.State.currline == "1") {
if (reader.State.pagebreak == true) {
reader.State.pagebreak = false;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + reader.State.currpage);
}
@@ -184,6 +185,7 @@ public class LetterRules {
} else if (reader.State.currline == "-1" && !String.IsNullOrWhiteSpace(tag["index"])) {
reader.State.Startline = tag["index"];
reader.State.currline = tag["index"];
reader.State.pagebreak = false;
}
// Marginalien, only for lines with a linenumber

View File

@@ -26,14 +26,25 @@ public class LetterState : HaWeb.HTMLParser.IState {
// What's the current line?
internal string currline;
// What's the current page?
internal string currpage;
// Does the container need a min-widt, so percentages are useful (tables)
private string? _currpage;
internal string? currpage {
get => _currpage;
set {
if (Startpage == null)
Startpage = value;
_currpage = value;
pagebreak = true;
}}
// Does the container need a min-width, so percentages are useful (tables)
internal bool minwidth;
// Did a pagebreak just occur?
internal bool pagebreak = false;
// Results
internal StringBuilder sb_lettertext;
internal List<(string, string, string)>? ParsedMarginals;
internal string Startline;
internal string? Startline;
internal string? Startpage = null;
public LetterState(ILibrary lib, IReaderService readerService, Meta meta, IEnumerable<Marginal>? marginals, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits) {
Lib = lib;
@@ -50,12 +61,11 @@ public class LetterState : HaWeb.HTMLParser.IState {
sb_lettertext = new StringBuilder();
active_skipwhitespace = true;
currline = "-1";
currpage = string.Empty;
mustwrap = (false, false);
minwidth = false;
// Initialize State
if (Meta.ZH != null) {
if (Meta.ZH != null && !String.IsNullOrWhiteSpace(Meta.ZH.Page)) {
currpage = Meta.ZH.Page;
}
}

View File

@@ -11,7 +11,7 @@
<script defer src="/js/briefe.js" asp-append-version="true"></script>
<div class="ha-letterheader">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", (Model.MetaData, false, false))
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", (Model.MetaData, true, false))
<div class="ha-letterheadernav">
<div class="ha-lettertabs">
@if (!String.IsNullOrWhiteSpace(Model.ParsedText))
@@ -54,11 +54,13 @@
<div class="ha-letterbody " id="ha-letterbody">
<div class="ha-lettertext @minwidth" id="ha-lettertext">
@if (Model.MetaData.ParsedZHString != null) {
<div class="ha-linecount ha-firstline">
<span>@Html.Raw(Model.MetaData.ParsedZHString)</span>
</div>
<div class="ha-linecount">
@if (Model.MetaData.Startline == "1") {
<div id="@Model.MetaData.Startpage-@Model.MetaData.Startline" class="ha-zhpage">S. @Html.Raw(Model.MetaData.Startpage)</div>
} else {
<div id="@Model.MetaData.Startpage-@Model.MetaData.Startline" class="ha-zhpage">@Html.Raw(Model.MetaData.Startpage)/@Html.Raw(Model.MetaData.Startline)</div>
}
</div>
@Html.Raw(@Model.ParsedText)
@* It's not beautiful but it's a hack to keep the last comment within parent element boundaries: *@
<br>
@@ -99,11 +101,7 @@
<tr class="ha-handentry">
<td>
@* Not beautiful, but here's whitespace in between otherwise *@
<div class="ha-handfrom">@hand.Item1</div>@if (!String.IsNullOrEmpty(hand.Item2))
{
<div
class="ha-handto">@hand.Item2</div>
}
<div class="ha-handfrom">@hand.Item1</div>@if(!String.IsNullOrEmpty(hand.Item2)){<div class="ha-handto">@hand.Item2</div>}
</td>
<td class="ha-handperson">@Html.Raw(@hand.Item3)</td>
</tr>
@@ -128,11 +126,7 @@
{
<tr>
<td class="ha-editfromto">
<div class="ha-editfrom">@edit.Item1</div>@if (!String.IsNullOrEmpty(edit.Item2))
{
<div
class="ha-editto">@edit.Item2</div>
}
<div class="ha-editfrom">@edit.Item1</div>@if(!String.IsNullOrEmpty(edit.Item2)){<div class="ha-editto">@edit.Item2</div>}
</td>
<td class="ha-editreference">
@if (!String.IsNullOrWhiteSpace(edit.Item3))

View File

@@ -24,7 +24,7 @@
: "ha-bibel";
}
<script defer src="/js/register.js"></script>
<script defer src="/js/register.js" asp-append-version="true"></script>
<div class="ha-register">
<div class="@commentClass">

View File

@@ -5,7 +5,7 @@
ViewData["showCredits"] = "false";
ViewData["Mark"] = Model.ActiveSearch;
}
<script defer src="/js/search.js"></script>
<script defer src="/js/search.js" asp-append-version="true"></script>
<div class="ha-search">
<div class="ha-searchhead">

View File

@@ -1 +1,361 @@
Hello from Datenschutzerklaerung
@await Html.PartialAsync("/Views/Shared/_HKBHKWChooser.cshtml")
<div class="ha-static">
<div class="desktop:pr-72">
<div class="mb-6" style='mso-element:para-border-div;border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;padding:12.0pt 4.0pt 1.0pt 12.0pt'>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:
normal'>Telemedienanbieter im Sinne des § 5 TMG</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Theodor Springmann
Stiftung<br>
Hirschgasse 2<br>
69120 Heidelberg</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Telefon +49 6221 436235<br>
Email info@theodor-springmann-stiftung.de</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b>Rechtsform und Sitz</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Die Theodor Springmann
Stiftung ist eine rechtsfähige Stiftung bürgerlichen Rechts.<br>
Sitz der Stiftung ist Heidelberg.</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:
normal'>Vorstand der Theodor Springmann Stiftung</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Dr. Randolf Straky
(Präsident)</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:
normal'>Geschäftsführung</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Dr. Randolf Straky<br>
Theodor Springmann Stiftung<br>
Hirschgasse 2<br>
69120 Heidelberg</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:
normal'>Zuständige Aufsichtsbehörde</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Regierungspräsidium
Karlsruhe<br>
Schlossplatz 13<br>
76131 Karlsruhe</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>https://rp.baden-wuerttemberg.de/Themen/Stiftung/Seiten/Ansprechpartner.aspx</p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><b style='mso-bidi-font-weight:
normal'>Redaktionelle Verantwortung nach § 55 Abs. 2 RStV</b></p>
<p style='border:none;mso-border-alt:solid windowtext .5pt;
padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'>Janina Reibold<br>
Theodor Springmann Stiftung<br>
Hirschgasse 2<br>
69120 Heidelberg</p>
</div>
<h1>Datenschutzerklärung</h1>
<h2>Präambel</h2>
<p>Diese Datenschutzerklärung informiert Sie über die Art, den
Umfang und den Zweck der personenbezogenen Daten, die im Rahmen dieser
Onlinepräsenz von Ihnen erhoben und von uns verarbeitet werden, sowie die Ihnen
zustehenden Rechte.</p>
<p>Personenbezogene Daten sind alle Informationen, die sich auf
eine identifizierte oder identifizierbare natürliche Person beziehen. Als
identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt
identifiziert werden kann. Im Hinblick auf weitere verwendete Begrifflichkeiten
verweisen wir auf die Definitionen der Datenschutz-Grundverordnung (DSGVO),
Artikel 4.</p>
<p>Erfolgt die Verarbeitung personenbezogener Daten auf
Grundlage des Art. 6 Abs. 1 <span class=SpellE>lit</span>. f DSGVO, so besteht
unser berechtigtes Interesse in der Erfüllung unseres satzungsgemäßen
Stiftungszwecks. Zweck der Stiftung ist es, in gemeinnütziger Weise
Wissenschaft und Kunst, Völkerverständigung und Entwicklungshilfe zu fördern
und zum menschlichen Selbstverständnis sowie zum Erkennen und Lindern strukturell
bedingter Not und Bedürftigkeit von Menschen in aller Welt beizutragen.</p>
<h2>Verantwortlicher</h2>
<p>Verantwortlich im Sinne von Art. 4 Abs. 7 DSGVO für die
Verarbeitung personenbezogener Daten ist:</p>
<p>Theodor Springmann Stiftung<br>
Hirschgasse 2<br>
69120 Heidelberg</p>
<p>www.theodor-springmann-stiftung.de<br>
info@theodor-springmann-stiftung.de</p>
<h2>Automatisch bei Nutzung unserer Onlinepräsenz erfasste Daten</h2>
<p>Mit der Nutzung unserer Onlinepräsenz werden automatisch
personenbezogene und allgemeine Daten vom Nutzer übermittelt und von uns
erfasst und gespeichert. Die von uns erhobenen Daten umfassen:</p>
<p class=MsoListParagraphCxSpFirst style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die IP-Adresse des ans Internet angeschlossenen
Netzwerkgeräts (Computer oder Router des Nutzers),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>den verwendeten Browsertyp und dessen Version,</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>das verwendete Betriebssystem und dessen
Version,</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>4)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die Internetseite, die den Nutzer auf unsere
Onlinepräsenz verweist (<span class=SpellE>Referrer</span>),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>5)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die Unterwebseiten, die der Nutzer auf unserer
Onlinepräsenz aufruft,</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>6)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>das Datum und die Uhrzeit des Aufrufs,</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>7)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>den Internet-Service-Provider des Nutzers,</p>
<p class=MsoListParagraphCxSpLast style='text-indent:-18.0pt;mso-list:l2 level1 lfo1'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>8)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sonstige ähnliche Daten.</p>
<p>Die Theodor Springmann Stiftung zieht aus diesen Daten keine
Rückschlüsse auf die betroffenen Nutzer. Diese Informationen werden benötigt,
um</p>
<p class=MsoListParagraphCxSpFirst style='text-indent:-18.0pt;mso-list:l4 level1 lfo2'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die vom Nutzer angeforderten Inhalte korrekt
auszuliefern,</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l4 level1 lfo2'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>technische Probleme zu diagnostizieren, unsere
IT-Systeme vor Angriffen zu schützen und im Falle eines Angriffs den
zuständigen Behörden notwendige Informationen zur Strafverfolgung bereitstellen
zu können,</p>
<p class=MsoListParagraphCxSpLast style='text-indent:-18.0pt;mso-list:l4 level1 lfo2'><![if !supportLists]><span
style='mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin'><span
style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die Inhalte und die Bedienung unserer
Onlinepräsenz zu optimieren.</p>
<p>Die oben genannten Verarbeitungszwecke werden von Subsystemen
erfüllt, die unabhängig von anderen Subsystemen ihre jeweils eigene Kopie der
vom Nutzer erhobenen Daten erhalten, verarbeiten und löschen. Dabei werden den
Subsystemen lediglich die zur Ausführung ihrer Aufgabe erforderlichen Daten übergeben.
Alle Subsysteme befinden sich auf Servern der Theodor Springmann Stiftung.</p>
<h3>Auslieferung der vom Nutzer angeforderten Inhalte</h3>
<p>Mit der Anforderung einer Seite dieser Onlinepräsenz
übermittelt der Browser des Nutzers automatisch die IP-Adresse seines ans
Internet angeschlossenen Netzwerkgeräts (Computer oder Router) und andere Daten.
Ohne diese IP-Adresse können die Inhalte dieser Online-Präsenz nicht an den
Nutzer zurückgesendet werden. Daher ist die Speicherung und Verarbeitung der
IP-Adresse für den Betrieb dieser Onlinepräsenz notwendig. Ebenfalls
übermittelte Daten über den verwendeten Browser usw. werden gegebenenfalls
verwendet, um die Anzeige der Webseite an das Anzeigegerät oder den Browser
anzupassen. Die zum Zwecke der Auslieferung von Inhalten gesammelten Daten
werden direkt nach Übertragung der Inhalte vom Subsystem gelöscht. Die
Verarbeitung dieser Daten erfolgt auf der Grundlage eines berechtigten
Interesses nach Art. 6 Abs. 1 <span class=SpellE>lit</span>. f DSGVO.</p>
<h3>Diagnose und Schutz der IT-Systeme</h3>
<p>Daneben erfolgt eine Speicherung der oben genannten Daten in
Diagnose-Protokollen. Die Protokollierung ist notwendig, um etwaige technische
Probleme analysieren oder Angriffe erkennen und abwehren zu können. Bei
Angriffen auf unsere IT-Systeme übergeben wir die Diagnose-Protokolle den
zuständigen Strafverfolgungsbehörden. Die Diagnose-Protokolle werden nach 14
Tagen automatisch gelöscht. Die Speicherung und Verarbeitung dieser Daten
erfolgt auf Grundlage eines berechtigten Interesses nach Art. 6 Abs. 1 <span
class=SpellE>lit</span>. f DSGVO.</p>
<h3>Analyse zur Optimierung der Inhalte und der Bedienung</h3>
<p>Die oben genannten Daten werden von einem Webanalyseprogramm
verarbeitet. Dabei werden die Daten pseudonymisiert und aggregiert, so dass sie
einzelnen Nutzern nicht mehr zugeordnet werden können. Das Analyseprogramm wird
auf einem von uns betriebenen Server ausgeführt, daher werden keine Daten an
Dritte übermittelt. Der Zweck dieser Erfassung besteht in der Analyse der
Nutzung unseres Angebots, durch die eine Verbesserung unserer Webseiten, der
Inhalte und der Bedienung ermöglicht wird. Das Analyseprogramm speichert die
anonymisierten Daten ohne zeitliche Begrenzung. Die Verarbeitung dieser Daten
erfolgt auf der Grundlage eines berechtigten Interesses (Art. 6 Abs. 1 <span
class=SpellE>lit</span>. f DSGVO).</p>
<h2>Weitere auf der Onlinepräsenz erfasste Daten</h2>
<p>Neben den oben aufgeführten Daten können weitere Daten von
uns erfasst, gespeichert und verarbeitet werden.</p>
<h3>Sonstige Daten</h3>
<p>Sämtliche Daten, die mit dem Aufruf einer Webseite von
unserer Onlinepräsenz an den Nutzer übertragen werden, werden von unseren
Servern bereitgestellt. Wir nutzen kein von Dritten bereitgestelltes Content <span
class=SpellE>Delivery</span> Network (CDN), um Teile unserer Onlinepräsenz (z.
B. <span class=SpellE>Javascript</span>- oder <span class=SpellE>Webfont</span>-Dateien)
von dort an den Nutzer zu übermitteln. Wir verlinken auch nicht in soziale
Netzwerke. Insofern können von Dritten keine personenbezogenen Daten über
unsere Onlinepräsenz erhoben werden, es sei denn, die Datenerfassung durch
Dritte basiert auf einer gesetzlichen Grundlage und/oder wurde behördlich
angeordnet.</p>
<p>In unseren Inhalten können sich jedoch Hyperlinks („Links“)
auf fremde Onlineangebote befinden. Mit dem Anklicken eines solchen Links
verlässt der Nutzer unsere Onlinepräsenz und damit den Geltungsbereich dieser
Datenschutzerklärung.</p>
<h2>Erhobene Daten bei Kontakt</h2>
<p>Unsere Onlinepräsenz hält unter anderem aufgrund gesetzlicher
Vorgaben verschiedene Möglichkeiten bereit, mit uns in Kontakt zu treten. Sofern
eine betroffene Person Kontakt zu uns aufnimmt, werden die von der betroffenen
Person übermittelten personenbezogenen Daten automatisch gespeichert (z. B.
Telefonnummer, E-Mail-Adresse). Diese Angaben werden zum Zwecke der Bearbeitung
sowie für sich möglicherweise anschließende Kommunikation von uns gespeichert. Sobald
die Speicherung dieser Daten nicht mehr erforderlich ist und keine gesetzlichen
Archivierungsgründe vorliegen, werden die Daten gelöscht. Die Erforderlichkeit
wird alle zwei Jahre überprüft. Es erfolgt keine Weitergabe dieser
personenbezogenen Daten an Dritte.</p>
<p>Von betroffenen Personen übermittelte Informationen zur
Bearbeitung einer Kontaktanfrage werden gemäß Art. 6 Abs. 1 <span class=SpellE>lit</span>.
b (vertragliche und vorvertragliche Beziehungen) oder <span class=SpellE>lit</span>.
f (andere Anfragen) der DSGVO verarbeitet.</p>
<h2>Speicherung und Löschung von personenbezogenen Daten</h2>
<p>Personenbezogene Daten werden von uns für die Dauer der
entsprechenden gesetzlichen Aufbewahrungspflichten oder für den zur
Vertragserfüllung erforderlichen Zeitraum gespeichert. Liegen solche Gründe
nicht vor, werden personenbezogene Daten für den Zeitraum, der zur Erreichung
des Speicherzwecks erforderlich ist, verarbeitet und gespeichert, sofern in
dieser Datenschutzerklärung nicht ausdrücklich anderes angegeben ist. Sobald die
Daten für ihre Zweckbestimmung nicht mehr erforderlich sind oder der
Speicherungszweck entfällt, werden sie nach Maßgabe der gesetzlichen Vorschriften
gelöscht oder in ihrer Verarbeitung eingeschränkt.</p>
<p>Sollten die Daten nicht gelöscht werden dürfen, weil sie
einer gesetzlichen Aufbewahrungspflicht unterliegen, wird deren Verarbeitung durch
Archivierung eingeschränkt. Die Daten werden erst nach Ablauf der gesetzlich vorgeschriebenen
Speicherfrist gelöscht.</p>
<p>Alle sechs Monate wird routinemäßig geprüft, ob der Speicherungszweck
weggefallen bzw. die Aufbewahrungspflicht abgelaufen ist. Anschließend wird gegebenenfalls
die Löschung durchgeführt.</p>
<h2>Rechte der betroffenen Personen</h2>
<p>Unter den angegebenen Kontaktdaten können betroffene
Personen jederzeit nachgenannte Rechte ausüben. Eine betroffene Person kann von
uns verlangen, dass</p>
<p class=MsoListParagraphCxSpFirst style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Auskunft über sie betreffende, bei uns
gespeicherte Daten und deren Verarbeitung erteilt wird (Art. 15 DSGVO),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sie betreffende unrichtige personenbezogene
Daten berichtigt werden (Art. 16 DSGVO),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sie betreffende, bei uns gespeicherte
personenbezogene Daten gelöscht werden (Art. 17 DSGVO),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>die Verarbeitung sie betreffender, bei uns gespeicherter
Daten, die aufgrund gesetzlicher Vorschriften oder anderer Gründe nicht
gelöscht werden dürfen, eingeschränkt wird (Art. 18 DSGVO),</p>
<p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sie betreffende Daten übertragbar sind, soweit
sie in die Datenverarbeitung eingewilligt oder einen Vertrag mit uns
geschlossen hat (Art. 20 DSGVO)</p>
<p class=MsoListParagraphCxSpLast style='text-indent:-18.0pt;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sie betreffende Daten nach einem Widerspruch
nicht weiter von uns verarbeitet werden (Art. 21 DSGVO),</p>
<p>Eine betroffene Person hat ferner jederzeit das Recht,</p>
<p class=MsoListParagraphCxSpFirst style='text-indent:-18.0pt;mso-list:l1 level1 lfo5'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>eine erteilte Einwilligung in die Erhebung und
Verarbeitung personenbezogener Daten nach Art. 6 Abs. 1 <span class=SpellE>lit</span>.
a oder Art. 9 Abs. 2 lit. a DSGVO für die Zukunft zu widerrufen (Art. 7 Abs. 3
DSGVO),</p>
<p class=MsoListParagraphCxSpLast style='text-indent:-18.0pt;mso-list:l1 level1 lfo5'><![if !supportLists]><span
style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>sich mit einer Beschwerde an eine
Aufsichtsbehörde zu wenden (Art. 15 Abs. 1 <span class=SpellE>lit</span>. f
DSGVO). Eine Liste der Aufsichtsbehörden lässt sich unter <a href="https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html" target="blank">https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html</a></span>
abrufen.</p>
<h2>Änderung unserer Datenschutzerklärung</h2>
<p>Wir behalten uns vor, diese Datenschutzerklärung ohne vorherige
Ankündigung an neue rechtliche oder technische Sachverhalte sowie an Änderungen
unserer Leistungen oder Prozesse anzupassen. Es gilt die jeweils auf der
Onlinepräsenz veröffentlichte Version der Datenschutzerklärung.</p>
</div>
</div>

View File

@@ -3,6 +3,8 @@
ViewData["SEODescription"] = "Johann Georg Hamann: Kommentierte Briefausgabe. Durchsuchbare Online-Ausgabe der Briefe von und an Johann Georg Hamann. Kontakt.";
}
@await Html.PartialAsync("/Views/Shared/_HKBHKWChooser.cshtml")
<div class="ha-static">
<div class="ha-static-right-margin">
<h1>Kontakt</h1>

View File

@@ -1,7 +1,7 @@
@model (List<FileModel>? files, string title, string aspcontrolller, string aspaction, string id, string downloadprefix, bool multipleallowed);
<script defer src="/js/filelistform.js"></script>
<script defer src="/js/filelistform.js" asp-append-version="true"></script>
<fieldset class="ha-filelistfieldset">
<legend class="ha-filelistlegend">@Model.title</legend>

View File

@@ -0,0 +1,18 @@
<div class="md:flex md:flex-row md:items-stretch md:gap-x-10 mb-4 desktop:mb-8">
<div class="bg-slate-50 dark:bg-slate-900 border border-solid border-gray-300 px-9 py-6 mb-6 md:mb-0 md:basis-1/2 md:grow-1 md:shrink-1">
<a asp-controller="Index" asp-action="Index" class="no-underline hover:underline">
<div class="flex flex-row gap-x-3 pb-1">
<img src="/img/HKB.png" class="w-10 h-10 md:w-16 md:h-16 mr-2 border dark:border-none border-gray-300 shadow-sm" alt="HKB-Logo" />
<h2 class="!mt-0 !mb-0 text-xl desktop:text-2xl">Kommentierte Briefausgabe →</h2>
</div>
</a>
</div>
<div class="bg-slate-50 dark:bg-slate-900 border border-solid border-gray-300 px-9 py-6 mb-10 md:mb-0 md:basis-1/2 md:grow-1 md:shrink-1">
<a asp-controller="HKW" asp-action="Index" class="no-underline hover:underline">
<div class="flex flex-row gap-x-3 pb-1">
<img src="/img/HKW.png" class="w-10 h-10 md:w-16 md:h-16 mr-2 border dark:border-none border-gray-300 shadow-sm" alt="HKW-Logo" />
<h2 class="!mt-0 !mb-0 text-xl desktop:text-2xl">Historisch-kritische und kommentierte Edition ausgewählter Werke →</h2>
</div>
</a>
</div>
</div>

View File

@@ -12,7 +12,7 @@
@* This uses Razor Syntax so it is inlined into this razor file *@
<script>
document.addEventListener("DOMContentLoaded", (event) => {
var elements = document.querySelectorAll(".ha-register-body, .ha-searchresultpreview, .ha-comment");
var elements = document.querySelectorAll(".ha-register-body, .ha-searchresultpreview, .ha-commenthead, .ha-entry");
if (elements.length < 1000) {
var instancesearch = new Mark(elements);
instancesearch.mark('@ViewData["Mark"]', { "element": "span", "className": "ha-found", "acrossElements": true, "separateWordSearch": false, "exclude": [".ha-searchresultcommentpill", ".ha-letlink", ".ha-letlinks", ".ha-hkb"] });

View File

@@ -1,5 +1,5 @@
@model UploadViewModel;
<script defer src="/js/publishform.js"></script>
<script defer src="/js/publishform.js" asp-append-version="true"></script>
@if (Model.UsedFiles != null && Model.UsedFiles.Any()) {
<div class="ha-publishfilelisttitle">Aktuell geladene Dateien</div>

View File

@@ -1,6 +1,6 @@
@model UploadViewModel;
<script defer src="/js/uploadform.js"></script>
<script defer src="/js/uploadform.js" asp-append-version="true"></script>
<form class="ha-uploadform" id="uploadForm" asp-controller="API" asp-action="Upload" method="post" enctype="multipart/form-data">
<label class="ha-uploadfilelabel" id="dropzone">

File diff suppressed because one or more lines are too long