Vorbereitung Webseitenstruktur HKB & HKW. Ordnerstruktur unt unrterschiedliche Layouts angelegt. Alle Views werden manuell in den Controllern angegeben.

This commit is contained in:
schnulller
2022-07-15 14:08:04 +02:00
parent fbd5a94ca1
commit 410d67ca08
30 changed files with 193774 additions and 298 deletions

View File

@@ -75,7 +75,7 @@ public class Briefecontroller : Controller {
} }
// Return // Return
return View(model); return View("~/Views/HKB/Dynamic/Briefe.cshtml", model);
} }
private IActionResult error404() { private IActionResult error404() {

View File

@@ -11,26 +11,22 @@ public class EditionController : Controller {
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
} }
public IActionResult Kontakt() { public IActionResult Kontakt() {
return View(); return View("~/Views/HKB/Static/Kontakt.cshtml");
} }
public IActionResult Mitwirkende() { public IActionResult Mitwirkende() {
return View(); return View("~/Views/HKB/Static/Mitwirkende.cshtml");
} }
public IActionResult Richtlinien() { public IActionResult Richtlinien() {
return View(); return View("~/Views/HKB/Static/Richtlinien.cshtml");
} }
public IActionResult Werkausgabe() { public IActionResult Werkausgabe() {
return View(); return View("~/Views/HKB/Static/Werkausgabe.cshtml");
} }
public IActionResult Editionsgeschichte() { public IActionResult Editionsgeschichte() {
return View(); return View("~/Views/HKB/Static/Editionsgeschichte.cshtml");
}
public IActionResult Datenschutzerklaerung() {
return View();
} }
} }

View File

@@ -68,7 +68,7 @@ public class RegisterController : Controller {
}; };
// Return // Return
return View("Index", model); return View("~/Views/HKB/Dynamic/Register.cshtml", model);
} }
[HttpGet] [HttpGet]
@@ -101,7 +101,7 @@ public class RegisterController : Controller {
}; };
// Return // Return
return View("Index", model); return View("~/Views/HKB/Dynamic/Register.cshtml", model);
} }
[HttpGet] [HttpGet]
@@ -143,7 +143,7 @@ public class RegisterController : Controller {
}; };
// Return // Return
return View("Index", model); return View("~/Views/HKB/Dynamic/Register.cshtml", model);
} }
[HttpPost] [HttpPost]

View File

@@ -175,7 +175,7 @@ public class SucheController : Controller {
zhvolume = zhvolume == null ? "1" : zhvolume; zhvolume = zhvolume == null ? "1" : zhvolume;
var model = new SucheViewModel(letters, page, pages, _getAvailablePersons(lib), availablePages.OrderBy(x => x.Volume).ToList(), zhvolume, zhpage, activeSearch, searchResults); var model = new SucheViewModel(letters, page, pages, _getAvailablePersons(lib), availablePages.OrderBy(x => x.Volume).ToList(), zhvolume, zhpage, activeSearch, searchResults);
if (person != null) model.ActivePerson = person; if (person != null) model.ActivePerson = person;
return View("Index", model); return View("~/Views/HKB/Dynamic/Suche.cshtml", model);
} }
private IActionResult _error404() { private IActionResult _error404() {

View File

@@ -87,13 +87,13 @@ public class UploadController : Controller {
model.HamannFiles = hamannFiles; model.HamannFiles = hamannFiles;
model.AvailableFiles = XMLFileHelpers.ToFileModel(_xmlProvider.GetFiles(id), pF, uF); model.AvailableFiles = XMLFileHelpers.ToFileModel(_xmlProvider.GetFiles(id), pF, uF);
return View("../Admin/Upload/Index", model); return View("~/Views/Admin/Dynamic/Upload.cshtml", model);
} else { } else {
var model = new UploadViewModel("Upload & Veröffentlichen", id, roots, usedFiles); var model = new UploadViewModel("Upload & Veröffentlichen", id, roots, usedFiles);
model.ProductionFiles = productionFiles; model.ProductionFiles = productionFiles;
model.HamannFiles = hamannFiles; model.HamannFiles = hamannFiles;
return View("../Admin/Upload/Index", model); return View("~/Views/Admin/Dynamic/Upload.cshtml", model);
} }
} }

View File

@@ -45,6 +45,7 @@ Veränderungenen in der Funktionalität für den Benutzer
- Bibellinks in Bibelkommentaren - Bibellinks in Bibelkommentaren
- Verbesserte Ladezeiten - Verbesserte Ladezeiten
- Startseite für die Briefausgebe / Werkausgabe. Unterschiedliche Menüs für die Ausgaben - Startseite für die Briefausgebe / Werkausgabe. Unterschiedliche Menüs für die Ausgaben
- URL für die Register hat sich geändert, bleibt aber weiter unter `/Supplementa/` zugängig.
- Anzeige Briefe beim Namen (?) - Anzeige Briefe beim Namen (?)
- GeoCities und Personen-Verweise (?) - GeoCities und Personen-Verweise (?)

View File

@@ -22,6 +22,7 @@ public static class StringHelpers {
bool skipped = false; bool skipped = false;
foreach (char c in input) { foreach (char c in input) {
// TODO: punctuation
if (char.IsWhiteSpace(c)) { if (char.IsWhiteSpace(c)) {
if (!skipped) { if (!skipped) {
output.Append(normalizeTo); output.Append(normalizeTo);

View File

@@ -0,0 +1,3 @@
@{
Layout = "_LettersLayout";
}

View File

@@ -1,220 +1,220 @@
@model SucheViewModel; @model SucheViewModel;
@{ @{
ViewData["Title"] = "Briefauswahl & Suche"; ViewData["Title"] = "Briefauswahl & Suche";
ViewData["SEODescription"] = "Johann Georg Hamann: Kommentierte Briefausgabe, Hg. v. Leonard Keidel und Janina Reibold. Durchsuchbare Online-Ausgabe der Briefe von und an Johann Georg Hamann."; ViewData["SEODescription"] = "Johann Georg Hamann: Kommentierte Briefausgabe, Hg. v. Leonard Keidel und Janina Reibold. Durchsuchbare Online-Ausgabe der Briefe von und an Johann Georg Hamann.";
ViewData["showCredits"] = "true"; ViewData["showCredits"] = "true";
} }
<div class="ha-search"> <div class="ha-search">
@if (Model.Letters != null) { @if (Model.Letters != null) {
<div class="ha-searchhead"> <div class="ha-searchhead">
<h1>Briefauswahl</h1> <h1>Briefauswahl</h1>
<div class="ha-searchnav"> <div class="ha-searchnav">
@if (Model.AvailableYears != null && Model.AvailableYears.Any() && Model.AvailableYears.Count > 1) { @if (Model.AvailableYears != null && Model.AvailableYears.Any() && Model.AvailableYears.Count > 1) {
@for(var i = 0; i < Model.AvailableYears.Count; i++) { @for(var i = 0; i < Model.AvailableYears.Count; i++) {
<a class="@(Model.ActiveYear == i ? "active" : "")" asp-route-person="@Model.ActivePerson" asp-route-search="@Model.ActiveSearch" asp-controller="Suche" asp-route-page="@i"> <a class="@(Model.ActiveYear == i ? "active" : "")" asp-route-person="@Model.ActivePerson" asp-route-search="@Model.ActiveSearch" asp-controller="Suche" asp-route-page="@i">
@if (Model.AvailableYears[i].StartYear != Model.AvailableYears[i].EndYear) { @if (Model.AvailableYears[i].StartYear != Model.AvailableYears[i].EndYear) {
<span> <span>
@Model.AvailableYears[i].StartYear-@Model.AvailableYears[i].EndYear @Model.AvailableYears[i].StartYear-@Model.AvailableYears[i].EndYear
</span> </span>
} }
else { else {
<span> <span>
@Model.AvailableYears[i].StartYear @Model.AvailableYears[i].StartYear
</span> </span>
} }
</a> </a>
} }
} }
</div> </div>
</div> </div>
<div class="ha-searchbody"> <div class="ha-searchbody">
<div class="ha-letterlist"> <div class="ha-letterlist">
@* Letter Loop *@ @* Letter Loop *@
@foreach (var year in Model.Letters) { @foreach (var year in Model.Letters) {
foreach (var letter in year.LetterList) { foreach (var letter in year.LetterList) {
<div class="ha-letterlistentry"> <div class="ha-letterlistentry">
<a asp-controller="Briefe" asp-action="Index" asp-route-id="@letter.Meta.Autopsic"> <a asp-controller="Briefe" asp-action="Index" asp-route-id="@letter.Meta.Autopsic">
<div class="ha-letterlistentryheader"> <div class="ha-letterlistentryheader">
<div class="ha-letterlistautopsic">@letter.Meta.Autopsic</div> <div class="ha-letterlistautopsic">@letter.Meta.Autopsic</div>
<div class="ha-letterlistpills">@await Html.PartialAsync("/Views/Shared/_Pills.cshtml", (letter, true))</div> <div class="ha-letterlistpills">@await Html.PartialAsync("/Views/Shared/_Pills.cshtml", (letter, true))</div>
</div> </div>
<div class="ha-letterlistletterdata"> <div class="ha-letterlistletterdata">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", (letter, true, true)) @await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", (letter, true, true))
</div> </div>
</a> </a>
@if (Model.SearchResults != null && Model.SearchResults.ContainsKey(letter.Meta.Index)) { @if (Model.SearchResults != null && Model.SearchResults.ContainsKey(letter.Meta.Index)) {
<div class="ha-letterlistsearchresults"> <div class="ha-letterlistsearchresults">
@foreach (var sr in Model.SearchResults[letter.Meta.Index]) @foreach (var sr in Model.SearchResults[letter.Meta.Index])
{ {
<div class="ha-letterlistsearchresult"> <div class="ha-letterlistsearchresult">
<div class="ha-searchresultlocation"> <div class="ha-searchresultlocation">
@sr.Page/@sr.Line @sr.Page/@sr.Line
</div> </div>
<div class="ha-searchresultpreview"> <div class="ha-searchresultpreview">
@sr.Preview @sr.Preview
</div> </div>
</div> </div>
} }
</div> </div>
} }
</div> </div>
} }
} }
</div> </div>
<div class="ha-filterlist"> <div class="ha-filterlist">
@* Go To Letter *@ @* Go To Letter *@
<div class="ha-gotofilter"> <div class="ha-gotofilter">
<div class="ha-filtertitle">H&hairsp;K&hairsp;B</div> <div class="ha-filtertitle">H&hairsp;K&hairsp;B</div>
<form class="ha-gotoform" id="ha-gotoform"> <form class="ha-gotoform" id="ha-gotoform">
<div class="ha-gototext"> <div class="ha-gototext">
Briefnummer Briefnummer
</div> </div>
<input type="text" id="ha-gotoletternumber" class="ha-gotoletternumber" /> <input type="text" id="ha-gotoletternumber" class="ha-gotoletternumber" />
<button type="submit" id="ha-gotoformsubmit">Nachschlagen</button> <button type="submit" id="ha-gotoformsubmit">Nachschlagen</button>
</form> </form>
</div> </div>
<script> <script>
const ACTIVATEGOTOFILTER = function(filter, button) { const ACTIVATEGOTOFILTER = function(filter, button) {
let f = filter.value; let f = filter.value;
if (f === "") { if (f === "") {
button.disabled = true; button.disabled = true;
return; return;
} }
button.disabled = false; button.disabled = false;
} }
const SUBMITGOTO = function(filter) { const SUBMITGOTO = function(filter) {
let f = filter.value; let f = filter.value;
window.location.href = "/Suche/" + f; window.location.href = "/Suche/" + f;
} }
window.addEventListener("load", () => { window.addEventListener("load", () => {
let gotofilter = document.getElementById("ha-gotoletternumber"); let gotofilter = document.getElementById("ha-gotoletternumber");
let gotosubmitbtn = document.getElementById("ha-gotoformsubmit"); let gotosubmitbtn = document.getElementById("ha-gotoformsubmit");
let gotoform = document.getElementById("ha-gotoform"); let gotoform = document.getElementById("ha-gotoform");
ACTIVATEGOTOFILTER(gotofilter, gotosubmitbtn); ACTIVATEGOTOFILTER(gotofilter, gotosubmitbtn);
gotofilter.addEventListener("input", () => ACTIVATEGOTOFILTER(gotofilter, gotosubmitbtn)); gotofilter.addEventListener("input", () => ACTIVATEGOTOFILTER(gotofilter, gotosubmitbtn));
gotoform.addEventListener("submit", (ev) => { gotoform.addEventListener("submit", (ev) => {
ev.preventDefault(); ev.preventDefault();
SUBMITGOTO(gotofilter); SUBMITGOTO(gotofilter);
}); });
}); });
</script> </script>
@* ZH Loopkup *@ @* ZH Loopkup *@
@if (Model.AvailablePages != null) { @if (Model.AvailablePages != null) {
<div class="ha-zhsearchfilter"> <div class="ha-zhsearchfilter">
<div class="ha-filtertitle"> <div class="ha-filtertitle">
Suche in Z&hairsp;H Suche in Z&hairsp;H
@if (Model.ActivePage != null) { @if (Model.ActivePage != null) {
<a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a> <a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a>
} }
</div> </div>
<form class="ha-zhform" id="ha-zhform"> <form class="ha-zhform" id="ha-zhform">
<span>Z&hairsp;H Band</span> <span>Z&hairsp;H Band</span>
<select id="ha-zhformvolume"> <select id="ha-zhformvolume">
@foreach (var volume in Model.AvailablePages) { @foreach (var volume in Model.AvailablePages) {
<option>@volume.Volume</option> <option>@volume.Volume</option>
} }
</select> </select>
<span>, Seite</span> <span>, Seite</span>
<input id="ha-zhformpage" type="text" value="@Model.ActivePage"/> <input id="ha-zhformpage" type="text" value="@Model.ActivePage"/>
<button id="ha-zhformsubmit" type="submit">Nachschlagen</button> <button id="ha-zhformsubmit" type="submit">Nachschlagen</button>
</form> </form>
</div> </div>
<script> <script>
const ACTIVATEZHSEARCH = function(volume, page, button) { const ACTIVATEZHSEARCH = function(volume, page, button) {
let vol = volume.options[volume.selectedIndex].value; let vol = volume.options[volume.selectedIndex].value;
let pg = page.value; let pg = page.value;
if (pg === "") { if (pg === "") {
button.disabled = true; button.disabled = true;
return; return;
} }
button.disabled = false; button.disabled = false;
} }
const SUBMITZHSEARCH = function(volume, page) { const SUBMITZHSEARCH = function(volume, page) {
let vol = volume.options[volume.selectedIndex].value; let vol = volume.options[volume.selectedIndex].value;
let pg = page.value; let pg = page.value;
window.location.href = "/Suche/" + vol + "/" + pg; window.location.href = "/Suche/" + vol + "/" + pg;
} }
window.addEventListener("load", () => { window.addEventListener("load", () => {
let vol = document.getElementById("ha-zhformvolume"); let vol = document.getElementById("ha-zhformvolume");
let pg = document.getElementById("ha-zhformpage"); let pg = document.getElementById("ha-zhformpage");
let zhsubmitbtn = document.getElementById("ha-zhformsubmit"); let zhsubmitbtn = document.getElementById("ha-zhformsubmit");
let zhsearchform = document.getElementById("ha-zhform"); let zhsearchform = document.getElementById("ha-zhform");
ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn); ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn);
vol.addEventListener("change", () => ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn)); vol.addEventListener("change", () => ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn));
pg.addEventListener("input", () => ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn)); pg.addEventListener("input", () => ACTIVATEZHSEARCH(vol, pg, zhsubmitbtn));
zhsearchform.addEventListener("submit", (ev) => { zhsearchform.addEventListener("submit", (ev) => {
ev.preventDefault(); ev.preventDefault();
SUBMITZHSEARCH(vol, pg); SUBMITZHSEARCH(vol, pg);
}); });
}); });
</script> </script>
} }
@* Full-Text-Search *@ @* Full-Text-Search *@
<div class="ha-searchfilter"> <div class="ha-searchfilter">
<div class="ha-filtertitle"> <div class="ha-filtertitle">
Volltextsuche Volltextsuche
@if (Model.ActiveSearch != null) { @if (Model.ActiveSearch != null) {
<a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a> <a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a>
} }
</div> </div>
<form class="ha-searchform" id="ha-searchform" asp-controller="Suche" asp-action="Index" method="get"> <form class="ha-searchform" id="ha-searchform" asp-controller="Suche" asp-action="Index" method="get">
<input id="ha-searchformtext" name="search" type="text" placeholder="Suchbegriff" value="@Model.ActiveSearch"/> <input id="ha-searchformtext" name="search" type="text" placeholder="Suchbegriff" value="@Model.ActiveSearch"/>
<button id="ha-searchformsubmit" type="submit">Suchen</button> <button id="ha-searchformsubmit" type="submit">Suchen</button>
</form> </form>
</div> </div>
<script> <script>
const ACTIVATESEARCHFILTER = function(filter, button) { const ACTIVATESEARCHFILTER = function(filter, button) {
let f = filter.value; let f = filter.value;
if (f === "") { if (f === "") {
button.disabled = true; button.disabled = true;
return; return;
} }
button.disabled = false; button.disabled = false;
} }
window.addEventListener("load", () => { window.addEventListener("load", () => {
let searchfilter = document.getElementById("ha-searchformtext"); let searchfilter = document.getElementById("ha-searchformtext");
let searchsubmitbtn = document.getElementById("ha-searchformsubmit"); let searchsubmitbtn = document.getElementById("ha-searchformsubmit");
let searchform = document.getElementById("ha-searchform"); let searchform = document.getElementById("ha-searchform");
ACTIVATESEARCHFILTER(searchfilter, searchsubmitbtn); ACTIVATESEARCHFILTER(searchfilter, searchsubmitbtn);
searchfilter.addEventListener("input", () => ACTIVATESEARCHFILTER(searchfilter, searchsubmitbtn)); searchfilter.addEventListener("input", () => ACTIVATESEARCHFILTER(searchfilter, searchsubmitbtn));
}); });
</script> </script>
@* Person Filter *@ @* Person Filter *@
@if(Model.AvailablePersons != null) { @if(Model.AvailablePersons != null) {
<div class="ha-personfilter"> <div class="ha-personfilter">
<div class="ha-filtertitle"> <div class="ha-filtertitle">
Korrespondenzpartner:innen Korrespondenzpartner:innen
@if (Model.ActivePerson != null) { @if (Model.ActivePerson != null) {
<a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a> <a class="ha-reversefilter" asp-controller="Suche" asp-action="index">← Auswahl aufheben</a>
} }
</div> </div>
<div class="ha-personlist"> <div class="ha-personlist">
<a class="ha-personlistperson @(Model.ActivePerson == null ? "active" : "")" asp-controller="Suche" asp-action="Index">Alle</a> <a class="ha-personlistperson @(Model.ActivePerson == null ? "active" : "")" asp-controller="Suche" asp-action="Index">Alle</a>
@foreach (var person in Model.AvailablePersons) { @foreach (var person in Model.AvailablePersons) {
<a class="ha-personlistperson @(Model.ActivePerson == person.Key ? "active" : "")" asp-controller="Suche" asp-action="Person" asp-route-person="@person.Key" asp-route-page="@null"> <a class="ha-personlistperson @(Model.ActivePerson == person.Key ? "active" : "")" asp-controller="Suche" asp-action="Person" asp-route-person="@person.Key" asp-route-page="@null">
@person.Name @person.Name
</a> </a>
} }
</div> </div>
</div> </div>
} }
</div> </div>
</div> </div>
} }
</div> </div>

View File

@@ -0,0 +1,3 @@
@{
Layout = "_LettersLayout";
}

View File

@@ -0,0 +1,3 @@
@{
Layout = "_HKWLayout";
}

View File

@@ -1,59 +1,59 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de" id="top"> <html lang="de" id="top">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="@ViewData["SEODescription"]"> <meta name="description" content="@ViewData["SEODescription"]">
<title>HKB: @ViewData["Title"]</title> <title>HKB: @ViewData["Title"]</title>
<!-- crossorigin is a workaround to prevent double downloading bugs in chrome --> <!-- crossorigin is a workaround to prevent double downloading bugs in chrome -->
<!-- also, the graphite versions of the font are available for use: <!-- also, the graphite versions of the font are available for use:
<link rel="preload" href="/fonts/LinLibertine_R_G.ttf" as="font" crossorigin/> <link rel="preload" href="/fonts/LinLibertine_R_G.ttf" as="font" crossorigin/>
<link rel="preload" href="/fonts/LinBiolinum_R_G.ttf" as="font" crossorigin/> <link rel="preload" href="/fonts/LinBiolinum_R_G.ttf" as="font" crossorigin/>
--> -->
<link rel="preload" href="/css/output.css" as="style" asp-append-version="true"/> <link rel="preload" href="/css/output.css" as="style" asp-append-version="true"/>
<link rel="preload" href="/img/subtlenet2.png" as="image" /> <link rel="preload" href="/img/subtlenet2.png" as="image" />
<link rel="preload" href="/fonts/LinBiolinum_R.woff" as="font" crossorigin/> <link rel="preload" href="/fonts/LinBiolinum_R.woff" as="font" crossorigin/>
<link rel="preload" href="/fonts/LinLibertine_R.woff" as="font" crossorigin/> <link rel="preload" href="/fonts/LinLibertine_R.woff" as="font" crossorigin/>
<link rel="preload" href="/fonts/LinLibertine_RI.woff" as="font" crossorigin/> <link rel="preload" href="/fonts/LinLibertine_RI.woff" as="font" crossorigin/>
<link rel="preload" href="/fonts/LinLibertine_RB.woff" as="font" crossorigin/> <link rel="preload" href="/fonts/LinLibertine_RB.woff" as="font" crossorigin/>
<link rel="stylesheet" href="/css/output.css" asp-append-version="true" /> <link rel="stylesheet" href="/css/output.css" asp-append-version="true" />
<environment include="Development"> <environment include="Development">
<script src="~/js/site.js" asp-append-version="true"></script> <script src="~/js/site.js" asp-append-version="true"></script>
</environment> </environment>
</head> </head>
<body class="w-full "> <body class="w-full ">
<div class="relative min-h-screen"> <div class="relative min-h-screen">
<div class="pb-24"> <div class="pb-24">
@await Html.PartialAsync("/Views/Shared/_Menu.cshtml") @await Html.PartialAsync("/Views/Shared/_Menu.cshtml")
<main role="main" class="pb-3 w-full desktop:max-w-screen-desktop mx-auto h-full"> <main role="main" class="pb-3 w-full desktop:max-w-screen-desktop mx-auto h-full">
@RenderBody() @RenderBody()
</main> </main>
</div> </div>
<div class="absolute bottom-0 w-full"> <div class="absolute bottom-0 w-full">
@await Html.PartialAsync("/Views/Shared/_Footer.cshtml") @await Html.PartialAsync("/Views/Shared/_Footer.cshtml")
</div> </div>
</div> </div>
<environment exclude="Development"> <environment exclude="Development">
@await Html.PartialAsync("/Views/Shared/_Javascript.cshtml") @await Html.PartialAsync("/Views/Shared/_Javascript.cshtml")
</environment> </environment>
<a class="ha-scrollbutton" id="ha-scrollbutton"> <a class="ha-scrollbutton" id="ha-scrollbutton">
<svg class="ha-scrollbuttonarrow" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> <svg class="ha-scrollbuttonarrow" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path strokeLinecap="round" strokeLinejoin="round" stroke-width="2" d="M5 11l7-7 7 7M5 19l7-7 7 7" /> <path strokeLinecap="round" strokeLinejoin="round" stroke-width="2" d="M5 11l7-7 7 7M5 19l7-7 7 7" />
</svg> </svg>
</div> </div>
@RenderSection("Scripts", required: false) @RenderSection("Scripts", required: false)
</body> </body>
</html> </html>

View File

@@ -1,3 +1 @@
@{ 
Layout = "_Layout";
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="utf-8"?>
<opus>
<data>
<definitions>
<structureDefs>
<structureDef index="1" level="1" type="volume" friendlyName="Band {1}" />
<structureDef index="2" level="2" type="letter" friendlyName="Brief {2}" />
<structureDef index="3" level="3" type="letterSection" friendlyName="Abschnitt {3}" />
</structureDefs>
<personDefs>
<personDef index="-1" name="Unbekannt" />
<personDef index="1" name="Johann Georg Hamann" vorname="Johann Georg" nachname="Hamann" />
<personDef index="2" name="Gottlob Jacob Sahme" vorname="Gottlob Jacob" nachname="Sahme" />
<personDef index="3" name="Philipp Belger" vorname="Philipp" nachname="Belger" />
<personDef index="4" name="Ein Studienfreund" nachname="Studienfreund"/>
<personDef index="5" name="Johann Christoph Hamann (Vater)" vorname="Johann Christoph" nachname="Hamann" />
<personDef index="6" name="Maria Magdalena Hamann (Mutter)" vorname="Maria Magdalena" nachname="Hamann" />
<personDef index="7" name="Johann Gottlieb Kreutzfeld" vorname="Johann Gottlieb" nachname="Kreutzfeld" />
<personDef index="8" name="Johann Gotthelf Lindner" vorname="Johann Gotthelf" nachname="Lindner" />
<personDef index="9" name="Daniel Pegelow" vorname="Daniel" nachname="Pegelow" />
<personDef index="10" name="Johann Christoph Hamann (Bruder)" vorname="Johann Christoph" nachname="Hamann" />
<personDef index="11" name="Barbara Helena von Budberg, geb. von Zimmermann" vorname="Barbara Helena von" nachname="Budberg" />
<personDef index="12" name="Marianne Lindner, geb. Courtan" vorname="Marianne" nachname="Lindner" />
<personDef index="13" name="Arnold Corman" vorname="Arnold" nachname="Corman" />
<personDef index="14" name="George Bassa" vorname="George" nachname="Bassa" />
<personDef index="15" name="Johann Ehregott Friedrich Lindner" vorname="Johann Ehregott Friedrich" nachname="Lindner" />
<personDef index="16" name="Johann Christoph Berens" vorname="Johann Christoph" nachname="Berens" />
<personDef index="17" name="Arend Berens" vorname="Arend" nachname="Berens" />
<personDef index="18" name="Johann Christoph Ruprecht" vorname="Johann Christoph" nachname="Ruprecht" />
<personDef index="19" name="Senel" vorname="[unbek. Vorname]" nachname="Senel"/>
<personDef index="20" name="" />
<personDef index="21" name="Gottlob Immanuel Lindner" vorname="Gottlob Immanuel" nachname="Lindner" />
<personDef index="22" name="Peter Christoph Baron von Witten" vorname="Peter Christoph Baron von" nachname="Witten"/>
<personDef index="23" name="Joseph Johann Baron von Witten" vorname="Joseph Johann Baron von" nachname="Witten" />
<personDef index="24" name="" />
<personDef index="25" name="" />
<personDef index="26" name="" />
<personDef index="27" name="" />
<personDef index="28" name="" />
<personDef index="29" name="" />
<personDef index="30" name="" />
<personDef index="31" name="Immanuel Kant" vorname="Immanuel" nachname="Kant" />
<personDef index="32" name="" />
<personDef index="33" name="Georg David Kypke" vorname="Georg David" nachname="Kypke" />
<personDef index="34" name="" />
<personDef index="35" name="Christ Anton Tottien" vorname="Christ Anton" nachname="Tottien" />
<personDef index="36" name="Moses Mendelssohn" vorname="Moses" nachname="Mendelssohn" />
<personDef index="37" name="Friedrich Nicolai" vorname="Friedrich" nachname="Nicolai" />
<personDef index="38" name="Sebastian Friedrich Trescho" vorname="Sebastian Friedrich" nachname="Trescho" />
<personDef index="39" name="Friedrich Carl von Moser" vorname="Friedrich Carl von" nachname="Moser" />
<personDef index="40" name="Die Königlich Preußische Kriegs- und Domänen-Kammer zu Königsberg i. Pr." nachname="Kriegs- und Domänenkammer"/>
<personDef index="41" name="Johann Gottfried Herder" vorname="Johann Gottfried" nachname="Herder" />
<personDef index="42" name="Die Königlich Preußische Regierung zu Königsberg in Preußen" nachname="Regierung" />
<personDef index="43" name="" />
<personDef index="44" name="Christian Gottlieb Arndt" vorname="Christian Gottlieb" nachname="Arndt" />
<personDef index="45" name="Johann Christian Buchholtz" vorname="Johann Christian" nachname="Buchholtz" />
<personDef index="46" name="Das Königliche Pupillen-Kollegium" nachname="Pupillen-Kollegium" />
<personDef index="47" name="Friedrich II. (Preußen)" nachname="Friedrich II."/>
<personDef index="48" name="Kriegsrat Hindersin" nachname="Hindersin"/>
<personDef index="49" name="Johann Friedrich Hartknoch" vorname="Johann Friedrich" nachname="Hartknoch" />
<personDef index="50" name="Johann August Eberhard" vorname="Johann August" nachname="Eberhard" />
<personDef index="51" name="Johann Jakob Kanter" vorname="Johann Jakob" nachname="Kanter"/>
<personDef index="52" name="Der Geheime Ausschuß der G. v. V. Frey Mäurer Loge zu Königsberg in Preußen" nachname="Frey Mäurer Loge"/>
<personDef index="53" name="Jacob Friedrich Hinz" vorname="Jacob Friedrich" nachname="Hinz" />
<personDef index="54" name="Carl Theophilus Guichard" vorname="Carl Theophilus" nachname="Guichard" />
<personDef index="55" name="Johann Joachim Christoph Bode" vorname="Johann Joachim Christoph" nachname="Bode" />
<personDef index="56" name="Accise und Zoll-Direktor Stockmar" nachname="Stockmar"/>
<personDef index="57" name="" />
<personDef index="58" name="" />
<personDef index="59" name="Albertine Hartknoch, geb. Toussaint" vorname="Albertine" nachname="Hartknoch" />
<personDef index="60" name="Johann Friedrich Reichardt" vorname="Johann Friedrich" nachname="Reichardt" />
<personDef index="61" name="Matthias Claudius" vorname="Matthias" nachname="Claudius" />
<personDef index="62" name="Johann August Starck" vorname="Johann August" nachname="Starck" />
<personDef index="63" name="Catharina Dorothea Güldenhorn, geb. Herder" vorname="Catharina Dorothea" nachname="Güldenhorn"/>
<personDef index="64" name="Rebecca Claudius" vorname="Rebecca" nachname="Claudius"/>
<personDef index="65" name="" />
<personDef index="66" name="" />
<personDef index="67" name="Sophie Marianne Courtan, geb. Toussaint" vorname="Sophie Marianne" nachname="Courtan"/>
<personDef index="68" name="Die General-Administration" nachname="General-Administration" />
<personDef index="69" name="Witwe Blom" nachname="Blom" />
<personDef index="70" name="" />
<personDef index="71" name="Dr. Laubmeyer" nachname="Laubmeyer"/>
<personDef index="72" name="Christoph Kaufmann" vorname="Christoph" nachname="Kaufmann" />
<personDef index="73" name="Johann Ehrmann" vorname="Johann" nachname="Ehrmann" />
<personDef index="74" name="" />
<personDef index="75" name="vmtl. Samuel Lippmann Löwen" vorname="Samuel Lippmann" nachname="Löwen" />
<personDef index="76" name="Johann Caspar Lavater" vorname="Johann Caspar" nachname="Lavater" />
<personDef index="77" name="Elise Kaufmann, geb. Ziegler" vorname="Elise" nachname="Kaufmann"/>
<personDef index="78" name="Caroline Charlotte Amalie Reichsgräfin von Keyserling, geb. von Truchseß-Waldburg" vorname="Caroline Charlotte Amalie Reichsgräfin von" nachname="Keyserling"/>
<personDef index="79" name="" />
<personDef index="80" name="" />
<personDef index="81" name="" />
<personDef index="82" name="" />
<personDef index="83" name="Hans Jacob von Auerswald" vorname="Hans Jacob von" nachname="Auerswald"/>
<personDef index="84" name="" />
<personDef index="85" name="Caroline Stoltz" vorname="Caroline" nachname="Stoltz"/>
<personDef index="86" name="Johann Caspar Häfeli" vorname="Johann Caspar" nachname="Häfeli"/>
<personDef index="87" name="Christian Jakob Kraus" vorname="Christian Jakob" nachname="Kraus" />
<personDef index="88" name="Friedrich Gottlieb Klopstock" vorname="Friedrich Gottlieb" nachname="Klopstock" />
<personDef index="89" name="Caroline Herder, geb. Flachsland" vorname="Caroline" nachname="Herder"/>
<personDef index="90" name="Johann Friedrich Kleuker" vorname="Johann Friedrich" nachname="Kleuker" />
<personDef index="91" name="Heinrich Christian Reichsgraf von Keyserling" vorname="Heinrich Christian Reichsgraf von" nachname="Keyserling"/>
<personDef index="92" name="Johann Heinrich Voß" vorname="Johann Heinrich" nachname="Voß"/>
<personDef index="93" name="August Herder" vorname="August" nachname="Herder"/>
<personDef index="94" name="Johann Georg Müller" vorname="Johann Georg" nachname="Müller" />
<personDef index="95" name="Friedrich Heinrich Jacobi" vorname="Friedrich Heinrich" nachname="Jacobi" />
<personDef index="96" name="" />
<personDef index="97" name="Johann George Scheffner" vorname="Johann George" nachname="Scheffner" />
<personDef index="98" name="Johann Michael Hamann (Sohn)" vorname="Johann Michael" nachname="Hamann" />
<personDef index="99" name="" />
<personDef index="100" name="Dirk Graf van Hogendorp" vorname="Hogendorp" nachname="Dirk Graf van" />
<personDef index="101" name="Samuel Wolff Friedländer" vorname="Samuel Wolff" nachname="Friedländer" />
<personDef index="102" name="" />
<personDef index="103" name="Susanne Elisabeth Scheffner" vorname="Susanne Elisabeth" nachname="Scheffner" />
<personDef index="104" name="Eberhard Gaupp" vorname="Eberhard" nachname="Gaupp" />
<personDef index="105" name="Christian Hill" vorname="Christian" nachname="Hill" />
<personDef index="106" name="Franz Kaspar Bucholtz" vorname="Franz Kaspar" nachname="Bucholtz" />
<personDef index="107" name="Elisabeth Regina Hamann (Tochter)" vorname="Elisabeth Regina" nachname="Hamann" />
<personDef index="108" name="Die Provinzial-Direktion" nachname="Provinzial-Direktion" />
<personDef index="109" name="" />
<personDef index="110" name="Elisa von der Recke" vorname="Elisa von der" nachname="Recke"/>
<personDef index="111" name="Die Königliche General-Accise- und Zoll-Administration" nachname="General-Accise- und Zoll-Administration"/>
<personDef index="112" name="Heinrich Schenk" vorname="Heinrich" nachname="Schenk"/>
<personDef index="113" name="" />
<personDef index="114" name="Thomas Wizenmann" vorname="Thomas" nachname="Wizenmann"/>
<personDef index="115" name="" />
<personDef index="116" name="Gottfried Leberecht Masius" vorname="Gottfried Leberecht" nachname="Masius" />
<personDef index="117" name="" />
<personDef index="118" name="Finanzrat von Köpke" nachname="Köpke" />
<personDef index="119" name="Minister von Werder" nachname="Werder"/>
<personDef index="120" name="Johann Ernst von Druffel" vorname="Johann Ernst von" nachname="Druffel" />
<personDef index="121" name="Finanzbeamter Gomm" nachname="Gomm"/>
<personDef index="122" name="Fürstin Amalia von Gallitzin" vorname="Fürstin Amalia von" nachname="Gallitzin"/>
<personDef index="123" name="" />
<personDef index="124" name="" />
<personDef index="125" name="Johann Gottlieb Steudel" vorname="Johann Gottlieb" nachname="Steudel" />
<personDef index="126" name="" />
<personDef index="127" name="Abraham Jakob Penzel" vorname="Abraham Jakob" nachname="Penzel"/>
<personDef index="129" name="Martinus Maletius" vorname="Martinus" nachname="Maletius"/>
</personDefs>
<handDefs>
<handDef index="-1" name="Unbekannt" />
<handDef index="1" name="Johann Christoph Hamann (Bruder)" />
<handDef index="2" name="Johann Christoph Hamann (Vater)" />
<handDef index="3" name="Gottlob Immanuel Lindner" />
<handDef index="4" name="Johann Christoph Berens" />
<handDef index="5" name="Georg David Kypke" />
<handDef index="6" name="Moses Mendelssohn" />
<handDef index="7" name="Johann Friedrich Hartknoch" />
<handDef index="8" name="Johann Georg Hamann" />
<handDef index="9" name="Johann Jakob Kanter" />
<handDef index="10" name="Johann Gottlieb Kreutzfeld" />
<handDef index="11" name="Johann Caspar Lavater" />
<handDef index="12" name="Christoph Kaufmann" />
<handDef index="13" name="Elise Kaufmann, geb. Ziegler" />
<handDef index="14" name="Johann Gottfried Herder" />
<handDef index="15" name="Caroline Herder" />
<handDef index="16" name="Johann Ehrmann" />
<handDef index="17" name="Matthias Claudius" />
<handDef index="18" name="Johann Friedrich Kleuker" />
<handDef index="19" name="Friedrich Heinrich Jacobi" />
<handDef index="20" name="Friedrich Nicolai" />
<handDef index="21" name="Daniel Pegelow" />
<handDef index="22" name="Johann Ehrmann oder eine Schreibhilfe Johann Caspar Lavaters" />
<handDef index="23" name="Johann Michael Hamann (Sohn)" />
<handDef index="24" name="Arnold Corman" />
<handDef index="25" name="Franz Kaspar Bucholtz" />
<handDef index="26" name="vermutlich George Bassa" />
<handDef index="27" name="Sophie Marianne Courtan" />
<handDef index="28" name="Christian Jakob Kraus" />
<handDef index="29" name="Helene Jacobi" />
<handDef index="30" name="David Friedländer" />
<handDef index="31" name="August Herder" />
<handDef index="32" name="Heinrich Schenk" />
<handDef index="33" name="Johann Konrad Pfenninger" />
</handDefs>
<locationDefs>
<locationDef index="-1" name="unbekannt" />
<locationDef index="1" name="Berlin" />
<locationDef index="2" name="Königsberg" />
<locationDef index="3" name="Memel" />
<locationDef index="4" name="Mitau" />
<locationDef index="5" name="Kegeln" />
<locationDef index="6" name="Riga" />
<locationDef index="7" name="Grünhof" />
<locationDef index="8" name="Meyhof" />
<locationDef index="9" name="Berlin" />
<locationDef index="10" name="London" />
<locationDef index="11" name="Berenshof" />
<locationDef index="12" name="Trutenau" />
<locationDef index="13" name="Elbing" />
<locationDef index="14" name="Frankfurt am Main" />
<locationDef index="15" name="Lübeck" />
<locationDef index="16" name="Warschau" />
<locationDef index="17" name="St. Petersburg" />
<locationDef index="18" name="Nantes" />
<locationDef index="19" name="Zürich" />
<locationDef index="20" name="Mohrungen" />
<locationDef index="21" name="Schloß Hegi bei Winterthur" />
<locationDef index="22" name="Weimar" />
<locationDef index="23" name="Bückeburg" />
<locationDef index="24" name="Potsdam" />
<locationDef index="25" name="Hamburg" />
<locationDef index="26" name="Darmstadt" />
<locationDef index="27" name="Narva" />
<locationDef index="28" name="Dessau" />
<locationDef index="29" name="Wandsbeck" />
<locationDef index="30" name="Krappitz" />
<locationDef index="31" name="Leipzig" />
<locationDef index="32" name="Drubenalken" />
<locationDef index="33" name="Eutin" />
<locationDef index="34" name="Pempelfort" />
<locationDef index="35" name="Kapstadt" />
<locationDef index="36" name="Richterswil" />
<locationDef index="37" name="Düsseldorf" />
<locationDef index="38" name="Schaffhausen" />
<locationDef index="39" name="Münster" />
<locationDef index="40" name="Osnabrück" />
<locationDef index="41" name="Richmont" />
<locationDef index="42" name="Magdeburg" />
<locationDef index="43" name="Welbergen" />
</locationDefs>
<sourceDefs>
<!-- Quelle für den gesetzten Text bei Emmendationen.
Wird referenziert durch ref="" in <recte>
Nächstes Mal mit ausgeben! -->
<sourceDef index="1" name="Ohne Beleg emendiert" />
<sourceDef index="2" name="BdI, 1940" />
<sourceDef index="3" name="nur BdI Aufl. 1 (1955): Berichtigungen [abgekürzt: BdI1]" /> <!-- Zum Zeitpunkt des Anlegens der Korrekturverzeichnisse zum 1. Band waren bis auf Brief 111 alle autographen Briefe verschollen. -->
<sourceDef index="4" name="nur BdI Aufl. 2 (1988): Berichtigungen [abgekürzt: BdI2]" />
<sourceDef index="5" name="beide: BdI1 und BdI2 Berichtigungen" />
<sourceDef index="6" name="Autograph" />
<sourceDef index="7" name="Apograph" />
<sourceDef index="8" name="BdII, 1940" />
<sourceDef index="9" name="nur BdII Aufl. 1: Berichtigungen [abgekürzt: BdII1]" />
<sourceDef index="10" name="nur BdII Aufl. 2: Berichtigungen [abgekürzt: BdII2]" />
<sourceDef index="11" name="beide: BdII1 und BdII2 Berichtigungen" />
<sourceDef index="12" name="BdIII: Nachtrag zu BdII [aus einer Abschrift Lavaters] betrifft nur BdII 221f" />
</sourceDefs>
</definitions>
</data>
</opus>

128112
XML/XML/2022-07-12briefe.xml Normal file

File diff suppressed because it is too large Load Diff

22243
XML/XML/2022-07-12edits.xml Normal file

File diff suppressed because it is too large Load Diff

23906
XML/XML/2022-07-12meta.xml Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff