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

@@ -0,0 +1,157 @@
@model BriefeViewModel;
@{
var minwidth = "";
if (Model.MinWidth)
minwidth = "ha-minwidth";
var minwidthtrads = "";
if (Model.MinWidthTrad)
minwidthtrads = "ha-minwidth";
}
@* No JavaScript Settings *@
<noscript>
@* TODO *@
</noscript>
<div class="ha-letterheader">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", (Model.MetaData, false, false))
<div class="ha-letterheadernav">
<div class="ha-lettertabs">
@if (!String.IsNullOrWhiteSpace(Model.ParsedText))
{
<a class="" id="ha-lettertextbtn">Brieftext</a>
@if (Model.ParsedMarginals != null)
{
<a class="ha-marginalsbtn " id="ha-marginalsbtn">Stellenkommentar</a>
}
}
<a class="" id="ha-additionsbtn">Überlieferung & Textkritik</a>
<a class="">PDF</a>
</div>
@if (Model.MetaData.Next != null || Model.MetaData.Prev != null)
{
<div class="ha-lettermetalinks">
@if (Model.MetaData.Prev != null)
{
<a href="@Model.MetaData.Prev.Value.Item2">
@Model.MetaData.Prev.Value.Item1.Meta.Autopsic ◀
</a>
}
<div class="ha-hkb">
HKB
</div>
@if (Model.MetaData.Next != null)
{
<a href="@Model.MetaData.Next.Value.Item2">
▶ @Model.MetaData.Next.Value.Item1.Meta.Autopsic
</a>
}
</div>
}
</div>
</div>
<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>
}
@Html.Raw(@Model.ParsedText)
@* It's not beautiful but it's a hack to keep the last comment within parent element boundaries: *@
<br>
<div class="ha-marginalbox"></div>
</div>
@if (Model.ParsedMarginals != null)
{
<div class="ha-marginals " id="ha-marginals">
<table>
@foreach (var marginal in Model.ParsedMarginals)
{
<tr>
<td class="ha-marginalfromto">@marginal.Item1/@marginal.Item2</td>
<td class="ha-marginaltext">@Html.Raw(@marginal.Item3)</td>
</tr>
}
</table>
</div>
}
<div class="ha-additions" id="ha-additions">
<div class="@minwidthtrads">
@if (Model.ParsedTradition != null)
{
@Html.Raw(Model.ParsedTradition)
}
</div>
@if (Model.ParsedHands != null && Model.ParsedHands.Any())
{
<div class="ha-hands">
<div class="ha-handstitle">Zusätze fremder Hand</div>
<div class="ha-handentries">
<table>
@foreach (var hand in Model.ParsedHands)
{
<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>
}
</td>
<td class="ha-handperson">@Html.Raw(@hand.Item3)</td>
</tr>
}
</table>
</div>
</div>
}
@if (Model.ParsedEdits != null)
{
<div class="ha-edits">
<div class="ha-editstitle">Textkritische Anmerkungen</div>
<div class="ha-editsinfo">Der Brieftext wurde anhand der überlieferten Quellen (vgl. Provenienz) kritisch
geprüft. Notwendige Korrekturen gegenüber dem in ZH gedruckten Text wurden vorgenommen und sind
vollständig annotiert. Die in den beiden Auflagen von ZH angehängten Korrekturvorschläge werden
vollständig aufgelistet, werden aber nur dann im Text realisiert, sofern diese anhand überlieferter
Quellen verifiziert werden konnten.</div>
<div class="ha-editentries">
<table>
@foreach (var edit in Model.ParsedEdits)
{
<tr>
<td class="ha-editfromto">
<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))
{
<span>
@Html.Raw(@edit.Item3)]
</span>
}
</td>
<td class="ha-editreas">
@Html.Raw(@edit.Item4)
</td>
</tr>
}
</table>
</div>
</div>
}
</div>
</div>

View File

@@ -0,0 +1,76 @@
@model RegisterViewModel;
@* Generated classes by CommentHelper.cs:
- .ha-letlink .ha-wwwlink .ha-reflink: Links to letters, the web, the reference
- .ha-lemma: The lemma
- .ha-title: Name of something
- .ha-reference: Automatically inserted linktext
- .ha-commenthead: Class containing the head of a comment, lemma and backlinks
- .ha-commentbody: Body of a comment, containing the comments text
- .ha-letlinks: Collection of references in the comment within the marginals
- .ha-hkb: HKB that is in front of those links
- .ha-insertedlemma: automatically generated and inserted lemma
Generated classes by JavaScript:
- .ha-collapsed-box, .ha-expanded-box: for an expanded or collapsed comment box
- .ha-open-btn-collapsed-box, ha-close-btn-collapsed-box: for open- & close buttons for the boxes
- .ha-btn-collapsed-box: for the button itself
- .ha-collapsed-box-manually-toggled: for a manually (not on mousehover) toggled button
*@
@{
var commentClass = Model.Category == "neuzeit" ? "ha-neuzeit"
: Model.Category == "forschung" ? "ha-forschung"
: "ha-bibel";
}
<div class="ha-register">
<div class="@commentClass">
<div class="ha-register-head">
<h1>@Model.Title</h1>
@if (Model.AllowSendIn) {
<div class="ha-register-add">
<a href="mailto:post@hamann-ausgabe.de?subject=Publikation%28en%29%20beitragen">
<div class="ha-register-add-plusbutton">+</div>
<div class="ha-register-add-text">Publikation(en) beitragen</div>
</a>
</div>
}
@if (Model.AllowSearch) {
<form asp-controller="Register" asp-action="Search" asp-route-id="@string.Empty" method="GET" >
<input type="text" name="search" placeholder="Suchbegriff" />
<button type="submit">Suchen</button>
</form>
}
<div class="ha-register-nav" id="ha-register-nav">
<div class="ha-register-left-nav">
@if (Model.AvailableCategories != null) {
@foreach (var l in Model.AvailableCategories) {
<a href="@l.Item2">@l.Item1</a>
}
}
</div>
<div class="ha-register-right-nav">
@if (Model.AvailableSideCategories != null) {
foreach (var l in Model.AvailableSideCategories) {
<a href="@l.Item2">@l.Item1</a>
}
}
</div>
</div>
</div>
<div class="ha-register-body">
@foreach (var k in Model.ParsedComments) {
<div class="ha-comment">
<div class="ha-headcomment">@Html.Raw(k.ParsedComment)</div>
@if (k.ParsedSubComments != null ) {
@foreach (var sk in k.ParsedSubComments) {
<div class="ha-subcomment">@Html.Raw(sk)</div>
}
}
</div>
}
</div>
</div>
</div>

View File

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