mirror of
https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
synced 2025-10-29 01:05:32 +00:00
TOns of stuff, made letters more reactive, introduced dark theme toggle
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
@@ -151,7 +151,7 @@ public static class EditRules {
|
||||
})};
|
||||
|
||||
public static readonly TagFuncList STagRules = new TagFuncList() {
|
||||
( ( x, _) => x.Name == "line", (sb, tag, _) => sb.Append(" ") )
|
||||
( ( x, _) => x.Name == "line", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")) )
|
||||
};
|
||||
|
||||
public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() {
|
||||
|
||||
@@ -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 ");
|
||||
sb.Append(HaWeb.HTMLHelpers.ConversionHelpers.ToRoman(Int32.Parse(reader.State.Meta.ZH.Volume)));
|
||||
sb.Append(" ");
|
||||
}
|
||||
sb.Append("S." + " ");
|
||||
if (tag["index"] != "1")
|
||||
sb.Append(reader.State.currpage + " / " + 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. " + reader.State.currpage);
|
||||
}
|
||||
// Fall 1: Neue Seite
|
||||
if (reader.State.currline == "1") {
|
||||
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
|
||||
sb.Append("S. " + 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"]);
|
||||
// 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));
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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)'
|
||||
|
||||
Reference in New Issue
Block a user