TOns of stuff, made letters more reactive, introduced dark theme toggle

This commit is contained in:
schnulller
2022-05-28 21:43:05 +02:00
parent 97a8ccbe88
commit 95918c84d0
14 changed files with 2065 additions and 1488 deletions

View File

@@ -60,8 +60,13 @@ public class Briefecontroller : Controller
if (prevmeta != null) model.MetaData.Prev = (generateMetaViewModel(prevmeta, false), url + prevmeta.Autopsic);
if (hands != null && hands.Any()) model.ParsedHands = HaWeb.HTMLHelpers.LetterHelpers.CreateHands(_lib, hands);
if (editreasons != null && editreasons.Any()) model.ParsedEdits = HaWeb.HTMLHelpers.LetterHelpers.CreateEdits(_lib, _readerService, editreasons);
if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) model.ParsedTradition = HaWeb.HTMLHelpers.LetterHelpers.CreateTraditions(_lib, _readerService, marginals, tradition);
if (text != null && !String.IsNullOrWhiteSpace(text.Element)) model.ParsedText = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(_lib, _readerService, meta, text, marginals, hands, editreasons);
if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) model.ParsedTradition = HaWeb.HTMLHelpers.LetterHelpers.CreateTraditions(_lib, _readerService, marginals, tradition).sb_tradition.ToString();
if (text != null && !String.IsNullOrWhiteSpace(text.Element)) {
var parsedLetter = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(_lib, _readerService, meta, text, marginals, hands, editreasons);
(model.ParsedText, model.ParsedMarginals) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.ParsedMarginals);
if (parsedLetter.Startline != "-1" && parsedLetter.Startline != "1" && model.MetaData.ParsedZHString != null)
model.MetaData.ParsedZHString += " / " + parsedLetter.Startline;
}
// Return
return View(model);
@@ -78,7 +83,7 @@ public class Briefecontroller : Controller
var senders = meta.Senders.Select(x => _lib.Persons[x].Name) ?? new List<string>();
var recivers = meta.Receivers.Select(x => _lib.Persons[x].Name) ?? new List<string>();
var zhstring = meta.ZH != null ? HaWeb.HTMLHelpers.LetterHelpers.CreateZHString(meta) : null;
return new BriefeMetaViewModel(meta, hasMarginals)
return new BriefeMetaViewModel(meta, hasMarginals, false)
{
ParsedZHString = zhstring,
ParsedSenders = HTMLHelpers.StringHelpers.GetEnumerationString(senders),

View File

@@ -13,30 +13,24 @@ using HaWeb.Settings.ParsingRules;
public static class LetterHelpers
{
public static string CreateLetter(ILibrary lib, IReaderService readerService, Meta meta, Letter letter, IEnumerable<Marginal>? marginals, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits)
public static LetterState CreateLetter(ILibrary lib, IReaderService readerService, Meta meta, Letter letter, IEnumerable<Marginal>? marginals, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits)
{
var rd = readerService.RequestStringReader(letter.Element);
var letterState = new LetterState(lib, readerService, meta, marginals, hands, edits);
new HaWeb.HTMLParser.XMLHelper<LetterState>(letterState, rd, letterState.sb_lettertext, LetterRules.OTagRules, LetterRules.STagRules, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules);
// new HaWeb.HTMLParser.XMLHelper<LetterState>(letterState, rd, letterState.sb_lettertext, null, LetterRules.STagRulesLineCount);
// if (marginals != null && marginals.Any())
// {
// new HaWeb.HTMLParser.XMLHelper<LetterState>(letterState, rd, letterState.sb_lettertext, null, LetterRules.STagRulesMarginals);
// }
rd.Read();
return letterState.sb_lettertext.ToString();
return letterState;
}
public static string CreateTraditions(ILibrary lib, IReaderService readerService, IEnumerable<Marginal>? marginals, Tradition tradition)
public static TraditionState CreateTraditions(ILibrary lib, IReaderService readerService, IEnumerable<Marginal>? marginals, Tradition tradition)
{
var rd = readerService.RequestStringReader(tradition.Element);
var traditionState = new TraditionState(lib, rd, readerService, marginals);
new HaWeb.HTMLParser.XMLHelper<TraditionState>(traditionState, rd, traditionState.sb_tradition, TraditionRules.OTagRules, TraditionRules.STagRules, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules);
new HaWeb.HTMLHelpers.LinkHelper(lib, rd, traditionState.sb_tradition);
rd.Read();
return traditionState.sb_tradition.ToString();
return traditionState;
}
public static List<(string, string, string, string, string, string)> CreateEdits(ILibrary lib, IReaderService readerService, IEnumerable<Editreason> editreasons)

View File

@@ -5,6 +5,7 @@ public class BriefeMetaViewModel
{
public Meta Meta { get; private set; }
public bool HasMarginals { get; private set; }
public bool ShowZHData { get; private set; }
public string? ParsedSenders { get; set; }
public string? ParsedReceivers { get; set; }
@@ -14,9 +15,10 @@ public class BriefeMetaViewModel
public (BriefeMetaViewModel, string)? Prev { get; set; }
public BriefeMetaViewModel(Meta meta, bool hasMarginals)
public BriefeMetaViewModel(Meta meta, bool hasMarginals, bool showZHData)
{
Meta = meta;
HasMarginals = hasMarginals;
ShowZHData = showZHData;
}
}

View File

@@ -7,8 +7,7 @@ public class BriefeViewModel
public BriefeMetaViewModel MetaData { get; private set; }
public string? ParsedText { get; set; }
public string? ParsedLineCount { get; set; }
public string? ParsedMarginals { get; set; }
public List<(string, string, string)>? ParsedMarginals { get; set; }
public string? ParsedTradition { get; set; }
// From, Until, Reference, Edit, sartpage, startline
public List<(string, string, string, string, string, string)>? ParsedEdits { get; set; }

View File

@@ -151,7 +151,7 @@ public static class EditRules {
})};
public static readonly TagFuncList STagRules = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, _) => sb.Append("&emsp;") )
( ( x, _) => x.Name == "line", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")) )
};
public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() {

View File

@@ -72,10 +72,19 @@ public class LetterRules
// Parsing Rules for Letters
// General rules (for the lettertext column, also for parsing the marginals, awa tradtions and editreasons)
public static readonly TagFuncList OTagRules = new TagFuncList() {
( ( x, _) => x.Name == "align" && x["pos"] == "center", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNCENTERCLASS)) ),
( ( x, _) => x.Name == "align" && x["pos"] == "right", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNRIGHTCLASS)) ),
( ( x, _) => x.Name == "align" && x["pos"] == "center", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNCENTERCLASS));
reader.State.mustwrap = true;
} ),
( ( x, _) => x.Name == "align" && x["pos"] == "right", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNRIGHTCLASS));
reader.State.mustwrap = true;
}),
( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ADDEDCLASS)) ),
( ( x, _) => x.Name == "sal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SALCLASS)) ),
( ( x, _) => x.Name == "sal", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SALCLASS));
reader.State.mustwrap = true;
}),
( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, AQCLASS)) ),
( ( x, _) => x.Name == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUPERCLASS)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => {
@@ -92,7 +101,10 @@ public class LetterRules
( ( x, _) => x.Name == "up", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, UPCLASS)) ),
( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUBCLASS)) ),
( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TULCLASS)) ),
( ( x, _) => x.Name == "header", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HEADERCLASS)) ),
( ( x, _) => x.Name == "header", (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HEADERCLASS));
}),
( ( x, _) => x.Name == "lemma", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LEMMACLASS)) ),
( ( x, _) => x.Name == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ENTRYCLASS)) ),
( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ),
@@ -110,7 +122,10 @@ public class LetterRules
reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace;
}),
( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABLECLASS)) ),
( ( x, _) => x.Name == "tab" && !String.IsNullOrWhiteSpace(x["value"]), (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABCLASS + tag["value"]))),
( ( x, _) => x.Name == "tab" && !String.IsNullOrWhiteSpace(x["value"]), (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABCLASS + tag["value"]));
}),
( ( x, _) => x.Name == "edit" && !String.IsNullOrWhiteSpace(x["ref"]), (sb, tag, _) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, EDITMARKERCLASS, "ea-" + tag["ref"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
@@ -123,9 +138,15 @@ public class LetterRules
};
public static readonly TagFuncList CTagRules = new TagFuncList() {
( ( x, _) => x.Name == "align", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "align", (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "sal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "sal", (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => {
@@ -142,7 +163,10 @@ public class LetterRules
( ( x, _) => x.Name == "ful", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "header", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "header", (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "lemma", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
@@ -157,7 +181,10 @@ public class LetterRules
( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "marginal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tab", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tab", (sb, tag, reader) => {
reader.State.mustwrap = true;
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) )
};
@@ -174,55 +201,47 @@ public class LetterRules
public static readonly TagFuncList STagRules = new TagFuncList() {
( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ),
( (x, _) => x.Name == "line", (sb, tag, reader) => {
// This is the beginning of the Text, so no <br> needed, just a special linecount
if(reader.State.currline == "-1") {
reader.State.currline = tag["index"];
// First Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTLINECLASS, ""));
if(reader.State.Meta.ZH != null) {
sb.Append("ZH&nbsp;");
sb.Append(HaWeb.HTMLHelpers.ConversionHelpers.ToRoman(Int32.Parse(reader.State.Meta.ZH.Volume)));
sb.Append("&nbsp;");
}
sb.Append("S." + "&nbsp;");
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else
sb.Append(reader.State.currpage);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
if(!String.IsNullOrWhiteSpace(tag["tab"]) || !String.IsNullOrWhiteSpace(tag["type"])) {
reader.State.mustwrap = true;
}
// This is NOT the beginning of the text, so we set a br, and then, linecount
else {
reader.State.currline = tag["index"];
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
if(reader.State.currline != "-1") {
if (!reader.State.mustwrap)
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
else
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br"));
reader.State.mustwrap = false;
// Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
if(!String.IsNullOrWhiteSpace(tag["index"])) {
reader.State.currline = tag["index"];
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
// Fall 1: Neue Seite
if (reader.State.currline == "1") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + reader.State.currpage);
// Fall 1: Neue Seite
if (reader.State.currline == "1") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + reader.State.currpage);
}
// Fall 2: Neue Zeile, teilbar durch 5
else if (Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS, ""));
sb.Append(tag["index"]);
}
// Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS + " " + HIDDENZHLINECOUNT, ""));
sb.Append(tag["index"]);
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
// Fall 2: Neue Zeile, teilbar durch 5
else if (Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS, ""));
sb.Append(tag["index"]);
}
// Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS + " " + HIDDENZHLINECOUNT, ""));
sb.Append(tag["index"]);
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
} else if (reader.State.currline == "-1" && !String.IsNullOrWhiteSpace(tag["index"])) {
reader.State.Startline = tag["index"];
reader.State.currline = tag["index"];
}
// Marginalien
@@ -230,6 +249,7 @@ public class LetterRules
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any())
{
if(reader.State.ParsedMarginals == null) reader.State.ParsedMarginals = new List<(string, string, string)>();
var sb2 = new StringBuilder();
margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline));

View File

@@ -14,22 +14,21 @@ public class LetterState : HaWeb.HTMLParser.IState {
internal ILibrary Lib;
internal IReaderService ReaderService;
internal Meta Meta;
internal IEnumerable<Marginal>? Marginals;
internal IEnumerable<Hand>? Hands;
internal IEnumerable<Editreason>? Edits;
internal List<(string, string, string)> ParsedMarginals;
// State
internal bool active_del;
internal bool active_skipwhitespace;
internal bool mustwrap;
internal string currline;
internal string currpage;
// Parsing-Combinations
// Results
internal StringBuilder sb_lettertext;
internal List<(string, string, string)>? ParsedMarginals;
internal string Startline;
public LetterState(ILibrary lib, IReaderService readerService, Meta meta, IEnumerable<Marginal>? marginals, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits) {
Lib = lib;
@@ -43,11 +42,11 @@ public class LetterState : HaWeb.HTMLParser.IState {
public void SetupState() {
ParsedMarginals = new List<(string, string, string)>();
sb_lettertext = new StringBuilder();
active_skipwhitespace = true;
currline = "-1";
currpage = "";
mustwrap = false;
// Initialize State
if (Meta.ZH != null) {

View File

@@ -1,84 +1,141 @@
@model BriefeViewModel;
<div class="ha-letterheader">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", Model.MetaData)
<div class="ha-letterheadernav">
<div class="ha-lettertabs">
<a class="active" id="ha-lettertextbtn">Brieftext</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 class="ha-twilighttogglebar">
<div class="ha-letterheader">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", Model.MetaData)
<div class="ha-letterheadernav">
<div class="ha-lettertabs">
<a class="" id="ha-lettertextbtn">Brieftext</a>
<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>
<div class="ha-letterbody">
<div class="ha-lettertext" id="ha-lettertext">
@if (Model.ParsedText != null) {
@if (Model.ParsedText != null)
{
<div class="ha-linecount ha-firstline">
@if (Model.MetaData.ParsedZHString != null) {
<span>@Html.Raw(Model.MetaData.ParsedZHString)</span>
}
else {
<div class="ha-tooltip">
<div class="ha-pill">
<span>Neu</span>
</div>
</div>
}
</div>
@Html.Raw(@Model.ParsedText)
}
</div>
<div class="ha-marginals" id="ha-marginals">
@if (Model.ParsedMarginals != null)
{
<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">
@if (Model.ParsedTradition != null) {
@if (Model.ParsedTradition != null)
{
@Html.Raw(Model.ParsedTradition)
}
@if(Model.ParsedHands != null && Model.ParsedHands.Any()) {
@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">
@* Not beautiful, but here's whitespace in between otherwise *@
<td><div class="ha-handfrom">@hand.Item1</div>@if (!String.IsNullOrEmpty(hand.Item2)) {<div class="ha-handto">@hand.Item2</div>
}</td>
<td class="ha-handperson">@hand.Item3</td>
</tr>
}
@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">@hand.Item3</td>
</tr>
}
</table>
</div>
</div>
}
@if (Model.ParsedEdits != null) {
@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-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">@Html.Raw(@edit.Item3)</td>
<td class="ha-editreas">@Html.Raw(@edit.Item4)</td>
</tr>
}
@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

@@ -1,3 +1,20 @@
<div class="ha-footer">
<a href="/Edition/Kontakt">Kontakt</a> · <a href="/Edition/Datenschutzerklaerung">Datenschutzerklärung</a>
</div>
<div class="ha-footertext flex flex-row shrink-0 grow-1">
<div class="flex grow shrink-0">
<div class="ha-themetoggles">
<input type="radio" id="ha-toggledark" name="ha-themetoggle">
<input type="radio" id="ha-toggletwilight" name="ha-themetoggle">
<input type="radio" id="ha-togglebright" name="ha-themetoggle">
<label for="ha-toggledark"></label>
<label for="ha-toggletwilight"></label>
<label for="ha-togglebright"></label>
<div class="ha-themetoggleslider">
</div>
</div>
</div>
<div class="grow-0 shrink-0">
© 2022 Theodor Springmann Stiftung | Stand vom 27.5.2022 | <a href="/Edition/Kontakt">Kontakt</a> ·
<a href="/Edition/Datenschutzerklaerung">Datenschutzerklärung</a>
</div>
</div>
</div>

View File

@@ -12,14 +12,14 @@
<div class="ha-metadatadate">
@Model.Meta.Date
</div>
@if (Model.ParsedZHString != null) {
@if (Model.ParsedZHString != null && Model.ShowZHData) {
<div class="ha-tooltip">
<div class="ha-pill">
<span>@Model.ParsedZHString</span>
<span>@Html.Raw(Model.ParsedZHString)</span>
</div>
</div>
}
else {
else if (Model.ParsedZHString == null && Model.ShowZHData) {
<div class="ha-tooltip">
<div class="ha-pill">
<span>Neu</span>

View File

@@ -1,9 +1,19 @@
module.exports = {
darkMode: 'class',
content: [
"./wwwroot/**/*.{html,js}",
"./Views/**/*.{cshtml,html,js}",
"./Settings/CSSClassesSettings.cs"
],
safelist: [
"ha-indent-1",
"ha-indent-2",
"ha-indent-3",
"ha-indent-4",
"ha-indent-5",
"ha-indent-6",
"ha-indent-7",
],
theme: {
fontFamily: {
sans: ['Biolinum', 'sans-serif'],
@@ -11,7 +21,7 @@ module.exports = {
classy: ['Playfair', 'serif'],
},
screens: {
'sm': '786px',
'sm': '700px',
'md': '960px',
'desktop': '1190px',
'xl': '1440px',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -121,9 +121,6 @@ const addbuttoncaollapsebox = function (element, height, hoverfunction) {
}
});
}
//element.appendChild(btn);
//element.insertBefore(btn, element.firstChild);
element.parentNode.insertBefore(btn, element);
};
@@ -155,41 +152,101 @@ const overlappingcollapsebox = function (selector, hoverfunction) {
}
};
const showhidebutton = function (buttonid, prevbuttonid, hideid, showid, starthidden) {
/* Button to hide / show traditions, marginals and the text of the letter */
const showhidebutton = function (
buttonid,
divid,
buttonlist,
divlist,
starthidden
) {
let button = document.getElementById(buttonid);
let prevbtn = document.getElementById(prevbuttonid);
if (starthidden) {
let hiddenelement = document.getElementById(hideid);
let shownelement = document.getElementById(showid);
if (hiddenelement !== null) {
hiddenelement.classList.add("hide");
}
if (shownelement !== null) {
shownelement.classList.remove("hide");
}
prevbtn.classList.remove("active");
button.classList.add("active");
let div = document.getElementById(divid);
if (starthidden && div !== null) {
div.classList.add("hide");
}
if(button !== null) {
button.addEventListener("click", function() {
let hiddenelement = document.getElementById(hideid);
let shownelement = document.getElementById(showid);
if (hiddenelement !== null) {
hiddenelement.classList.add("hide");
}
if (shownelement !== null) {
shownelement.classList.remove("hide");
}
prevbtn.classList.remove("active");
button.classList.add("active");
})
if (!starthidden && button !== null) {
button.classList.add("active");
}
if (button !== null) {
button.addEventListener("click", function () {
for (let btn of buttonlist) {
let inactivebutton = document.getElementById(btn);
if (inactivebutton !== null) inactivebutton.classList.remove("active");
}
for (let element of divlist) {
let hiddenelement = document.getElementById(element);
if (hiddenelement !== null) hiddenelement.classList.add("hide");
}
if (button !== null) button.classList.add("active");
if (div !== null) div.classList.remove("hide");
});
}
};
// Functions for switching theme
const go_to_dark = function() {
localStorage.setItem('theme', 'ha-toggledark');
document.documentElement.classList.add('dark');
}
const go_to_twilight = function() {
document.documentElement.classList.remove('dark')
let elements = document.getElementsByClassName("ha-twilighttogglebar");
for (let el of elements) {
el.classList.add("dark");
}
localStorage.setItem('theme', 'ha-toggletwilight');
}
const go_to_bright = function() {
document.documentElement.classList.remove('dark');
let elements = document.getElementsByClassName("ha-twilighttogglebar");
for (let el of elements) {
el.classList.remove("dark");
}
localStorage.setItem('theme', 'ha-togglebright');
}
// Functions for reading theme settings
const get_theme_settings = function(standard) {
var theme = localStorage.getItem('theme');
if (theme === null) theme = standard;
let toggleSwitch = document.getElementById(theme).click();
}
const collapseboxes = function() {
for (entry of this.document.getElementsByClassName("ha-letlinks")) {
entry.maxHeight = "auto";
let btns = entry.parentNode.getElementsByClassName("ha-btn-collapsed-box");
for (btn of btns) {
btn.remove();
}
}
for (entry of this.document.getElementsByClassName("ha-marginalbox")) {
entry.maxHeight = "auto";
let btns = entry.parentNode.getElementsByClassName("ha-btn-collapsed-box");
for (btn of btns) {
btn.remove();
}
}
overlappingcollapsebox(".ha-neuzeit .ha-letlinks", true);
overlappingcollapsebox(".ha-forschung .ha-letlinks", true);
overlappingcollapsebox(".ha-lettertext .ha-marginalbox", true);
}
//////////////////////////////// ONLOAD ////////////////////////////////////
window.addEventListener("load", function () {
// Menu: Show / Hide Buttons for mobile View
if (
document.getElementById("openmenubutton") != null &&
document.getElementById("closemenubutton") != null
document.getElementById("openmenubutton") !== null &&
document.getElementById("closemenubutton") !== null
) {
document
.getElementById("openmenubutton")
@@ -198,13 +255,61 @@ window.addEventListener("load", function () {
.getElementById("closemenubutton")
.addEventListener("click", closemenu);
}
// Menu / Register / Search View: Mark active link
if (document.getElementById("ha-topnav") != null)
markactive_startswith(document.getElementById("ha-topnav"));
if (document.getElementById("ha-register-nav") != null)
markactive_exact(document.getElementById("ha-register-nav"));
overlappingcollapsebox(".ha-neuzeit .ha-letlinks", true);
overlappingcollapsebox(".ha-forschung .ha-letlinks", true);
overlappingcollapsebox(".ha-lettertext .ha-marginalbox", true);
showhidebutton("ha-lettertextbtn", "ha-additionsbtn", "ha-additions", "ha-lettertext", false);
showhidebutton("ha-additionsbtn", "ha-lettertextbtn", "ha-lettertext", "ha-additions", true);
// Letter / Register View: Collapse all unfit boxes
collapseboxes();
//this.window.addEventListener('resize', collapseboxes);
// Letter View: Show / Hide Tabs
let buttonlist = ["ha-lettertextbtn", "ha-additionsbtn", "ha-marginalsbtn"];
let divlist = ["ha-lettertext", "ha-additions", "ha-marginals"];
showhidebutton(
"ha-lettertextbtn",
"ha-lettertext",
buttonlist,
divlist,
false
);
showhidebutton("ha-additionsbtn", "ha-additions", buttonlist, divlist, true);
showhidebutton("ha-marginalsbtn", "ha-marginals", buttonlist, divlist, true);
// Theme: Get saved theme from memory and check the box accordingly
// Register theme toggler
if (
document.getElementById("ha-togglebright") !== null &&
document.getElementById("ha-toggletwilight") !== null &&
this.document.getElementById("ha-toggledark") !== null
) {
document
.getElementById("ha-togglebright")
.addEventListener("click", go_to_bright);
document
.getElementById("ha-toggledark")
.addEventListener("click", go_to_dark);
document
.getElementById("ha-toggletwilight")
.addEventListener("click", go_to_twilight);
}
get_theme_settings("ha-togglebright");
});
// import resolveConfig from 'tailwindcss/resolveConfig'
// import tailwindConfig from './tailwind.config.js'
// const fullConfig = resolveConfig(tailwindConfig)
// fullConfig.theme.width[4]
// // => '1rem'
// fullConfig.theme.screens.md
// // => '768px'
// fullConfig.theme.boxShadow['2xl']
// // => '0 25px 50px -12px rgba(0, 0, 0, 0.25)'