diff --git a/HaWeb/Controllers/BriefeContoller.cs b/HaWeb/Controllers/BriefeContoller.cs index 32814ca..0ada1f2 100644 --- a/HaWeb/Controllers/BriefeContoller.cs +++ b/HaWeb/Controllers/BriefeContoller.cs @@ -59,8 +59,7 @@ public class Briefecontroller : Controller if (hands != null && hands.Any()) model.ParsedHands = HaWeb.HTMLHelpers.BriefeHelpers.CreateHands(_lib, hands); if (editreasons != null && editreasons.Any()) model.ParsedEdits = HaWeb.HTMLHelpers.BriefeHelpers.CreateEdits(_lib, _readerService, editreasons); if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) model.ParsedTradition = HaWeb.HTMLHelpers.BriefeHelpers.CreateTraditions(_lib, _readerService, marginals, tradition); - if (text != null && !String.IsNullOrWhiteSpace(text.Element)) - (model.ParsedLineCount, model.ParsedText, model.ParsedMarginals) = HaWeb.HTMLHelpers.BriefeHelpers.CreateLetter(_lib, _readerService, meta, text, marginals); + if (text != null && !String.IsNullOrWhiteSpace(text.Element)) model.ParsedText = HaWeb.HTMLHelpers.BriefeHelpers.CreateLetter(_lib, _readerService, meta, text, marginals); // Return return View(model); diff --git a/HaWeb/Controllers/RegisterController.cs b/HaWeb/Controllers/RegisterController.cs index c00c622..de2caab 100644 --- a/HaWeb/Controllers/RegisterController.cs +++ b/HaWeb/Controllers/RegisterController.cs @@ -54,14 +54,14 @@ public class RegisterController : Controller var res = new List(); foreach (var comm in comments) { - var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm); + var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm, category, Settings.ParsingState.CommentType.Comment); List? parsedSubComments = null; if (comm.Kommentare != null) { parsedSubComments = new List(); foreach (var subcomm in comm.Kommentare.OrderBy(x => x.Value.Order)) { - parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value)); + parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value, category, Settings.ParsingState.CommentType.Subcomment)); } } res.Add(new CommentModel(parsedComment, parsedSubComments)); @@ -101,14 +101,14 @@ public class RegisterController : Controller var res = new List(); foreach (var comm in comments) { - var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm); + var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm, category, Settings.ParsingState.CommentType.Comment); List? parsedSubComments = null; if (comm.Kommentare != null) { parsedSubComments = new List(); foreach (var subcomm in comm.Kommentare.OrderBy(x => x.Value.Lemma.Length).ThenBy(x => x.Value.Lemma)) { - parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value)); + parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value, category, Settings.ParsingState.CommentType.Subcomment)); } } res.Add(new CommentModel(parsedComment, parsedSubComments)); @@ -156,14 +156,14 @@ public class RegisterController : Controller var res = new List(); foreach (var comm in comments) { - var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm); + var parsedComment = HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, comm, category, Settings.ParsingState.CommentType.Comment); List? parsedSubComments = null; if (comm.Kommentare != null) { parsedSubComments = new List(); foreach (var subcomm in comm.Kommentare.OrderBy(x => x.Value.Order)) { - parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value)); + parsedSubComments.Add(HTMLHelpers.CommentHelpers.CreateHTML(_lib, _readerService, subcomm.Value, category, Settings.ParsingState.CommentType.Subcomment)); } } res.Add(new CommentModel(parsedComment, parsedSubComments)); diff --git a/HaWeb/HTMLHelpers/BriefeHelpers.cs b/HaWeb/HTMLHelpers/BriefeHelpers.cs index c1264dc..3a96bf2 100644 --- a/HaWeb/HTMLHelpers/BriefeHelpers.cs +++ b/HaWeb/HTMLHelpers/BriefeHelpers.cs @@ -13,20 +13,20 @@ using HaWeb.Settings.ParsingRules; public static class BriefeHelpers { - public static (string, string, string) CreateLetter(ILibrary lib, IReaderService readerService, Meta meta, Letter letter, IEnumerable? marginals) + public static string CreateLetter(ILibrary lib, IReaderService readerService, Meta meta, Letter letter, IEnumerable? marginals) { var rd = readerService.RequestStringReader(letter.Element); var letterState = new LetterState(lib, readerService, meta, marginals); new HaWeb.HTMLParser.XMLHelper(letterState, rd, letterState.sb_lettertext, LetterRules.OTagRules, LetterRules.STagRules, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); - new HaWeb.HTMLParser.XMLHelper(letterState, rd, letterState.sb_linecount, null, LetterRules.STagRulesLineCount); + // new HaWeb.HTMLParser.XMLHelper(letterState, rd, letterState.sb_lettertext, null, LetterRules.STagRulesLineCount); - if (marginals != null && marginals.Any()) - { - new HaWeb.HTMLParser.XMLHelper(letterState, rd, letterState.sb_marginals, null, LetterRules.STagRulesMarginals); - } + // if (marginals != null && marginals.Any()) + // { + // new HaWeb.HTMLParser.XMLHelper(letterState, rd, letterState.sb_lettertext, null, LetterRules.STagRulesMarginals); + // } rd.Read(); - return (letterState.sb_linecount.ToString(), letterState.sb_lettertext.ToString(), letterState.sb_marginals.ToString()); + return letterState.sb_lettertext.ToString(); } public static string CreateTraditions(ILibrary lib, IReaderService readerService, IEnumerable? marginals, Tradition tradition) diff --git a/HaWeb/HTMLHelpers/CommentHelper.cs b/HaWeb/HTMLHelpers/CommentHelper.cs index 1e08ffa..dd55d99 100644 --- a/HaWeb/HTMLHelpers/CommentHelper.cs +++ b/HaWeb/HTMLHelpers/CommentHelper.cs @@ -15,11 +15,11 @@ public static class CommentHelpers private static readonly string COMMENTHEADCLASS = HaWeb.Settings.CSSClasses.COMMENTHEADCLASS; private static readonly string BACKLINKSHKBCLASS = HaWeb.Settings.CSSClasses.BACKLINKSHKBCLASS; - public static string CreateHTML(ILibrary lib, IReaderService readerService, Comment comment) + public static string CreateHTML(ILibrary lib, IReaderService readerService, Comment comment, string category, CommentType type) { var sb = new StringBuilder(); var rd = readerService.RequestStringReader(comment.Lemma); - var commentState = new CommentState(); + var commentState = new CommentState(category, type); new HTMLParser.XMLHelper(commentState, rd, sb, CommentRules.OTagRules, CommentRules.STagRules, CommentRules.CTagRules, CommentRules.TextRules, CommentRules.WhitespaceRules); sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTHEADCLASS, comment.Index)); new HTMLHelpers.LinkHelper(lib, rd, sb); diff --git a/HaWeb/README.md b/HaWeb/README.md new file mode 100644 index 0000000..e192dc8 --- /dev/null +++ b/HaWeb/README.md @@ -0,0 +1,26 @@ +# Redesign der Hamann-Vebseite, drittes Major Upadte +Veränderungenen in der Funktionalität für den Benutzer +- Behutsames Redesign der Webseite: + - Schrift wird minimal größer auf großen Bildschirmen + - Redesign der Marginalspalte, sodass keine Überschneidungen vorkommen + - Leichtes Redesign der Zusatzinformationen für einen Brief (Tradition, Edits) an etwas prominenterer Stelle + - Anpassung der Webseite an Mobilgeräte und Tablets + +- Suche im Brieftext wird gefixt +- Seite wird zugänglich für Menschen mit eingeschränktem Sehvermögen / Screenreadern + +Veränderungen in der Funktionalität für die Forscher +- Online-Syntaxcheck für XML-Dateien +- Online-Cross-Dateien-Check (bsp. verweist jede Marginalie auf eine existierende Zeile)? +- Erstellung einer HAMANN.xml-Datei +- Hochladen der HAMANN.xml-Datei auf die Plattform + +Veränderungen im Code +- Anpassung des Codes an .NET 6 (Kopieren / Einfügen) +- Umzug nach CSS Framework Tailwind +- Code wird aufgeräumt und sortiert +- Leichtere Anpassungen an zukünftige Bedütfnisse (Wartungszeiten minimieren) +- Auslagerungen einzelner Einstellungen in Einstellungsdateien +- Code open source zugänglich machen? + +Für diese Anpassungen sind in etwa 3-4 Monate eingeplant. \ No newline at end of file diff --git a/HaWeb/Settings/CSSClassesSettings.cs b/HaWeb/Settings/CSSClassesSettings.cs index fb6d4c3..59fcde6 100644 --- a/HaWeb/Settings/CSSClassesSettings.cs +++ b/HaWeb/Settings/CSSClassesSettings.cs @@ -55,17 +55,20 @@ public static class CSSClasses { public const string EMPHCLASS = "ha-emph"; public const string APPCLASS = "ha-app"; public const string MARGINGALBOXCLASS = "ha-marginalbox"; - public const string TRADLINECOUNTCLASS = "ha-tradlinecount"; public const string TRADCOMMENTCOLUMNCLASS = "ha-tradcommentcolumn"; public const string TRADZHTEXTCLASS = "ha-tradzhtext"; public const string TRADZHTEXTBOXCLASS = "ha-tradtextbox"; // Zeilen: + public const string ZHLINECLASS = "ha-zhline"; + public const string FIRSTLINECLASS ="ha-firstline"; public const string ZHBREAKCLASS = "ha-zhbreak"; public const string LINELINECLASS = "ha-hr"; public const string LINEINDENTCLASS = "ha-indent-"; // TODO: GEN public const string ZHPAGECLASS = "ha-zhpage"; + public const string ZHLINECOUNTCLASS = "ha-linecount"; + public const string HIDDENZHLINECOUNT = "ha-hiddenlinecount"; public const string FIRSTPAGECLASS = "ha-firstpage"; public const string EMPTYLINECLASS = "ha-emptyline"; diff --git a/HaWeb/Settings/ParsingRules/CommentRules.cs b/HaWeb/Settings/ParsingRules/CommentRules.cs index 3afcbf5..836edc5 100644 --- a/HaWeb/Settings/ParsingRules/CommentRules.cs +++ b/HaWeb/Settings/ParsingRules/CommentRules.cs @@ -1,5 +1,6 @@ namespace HaWeb.Settings.ParsingRules; using System.Text; +using System.Text.RegularExpressions; using TagFuncList = List<(Func, bool>, Action>)>; using TextFuncList = List<(Func, bool>, Action>)>; @@ -30,8 +31,20 @@ public static class CommentRules { }; public static readonly TextFuncList TextRules = new TextFuncList() { - ( (x, _) => true, ( sb, txt, _) => sb.Append(txt.Value) ) - }; + ( (x, _) => true, ( sb, txt, reader) => { + sb.Append(txt.Value); + if (reader.State.Category == "bibel" && reader.State.Type == HaWeb.Settings.ParsingState.CommentType.Subcomment && + reader.OpenTags.Any() && reader.OpenTags.Last().Name == "lemma" && + !txt.Value.Contains("Stücke zu") && !txt.Value.Contains("ZusDan")) { + var lnkstring = Regex.Replace(txt.Value, @"\s+", ""); + sb.Append(HTMLHelpers.TagHelpers.CreateCustomElement("a", + new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "href", Value = "https://www.bibleserver.com/LUT/" + lnkstring}, + new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "target", Value = "_blank"}, + new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "rel", Value = "noopener noreferrer"})); + sb.Append(""); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("a")); + } + })}; public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() { ( (x, _) => true, ( sb, txt, _) => sb.Append(txt.Value) ) diff --git a/HaWeb/Settings/ParsingRules/LetterRules.cs b/HaWeb/Settings/ParsingRules/LetterRules.cs index bc0910d..73967c2 100644 --- a/HaWeb/Settings/ParsingRules/LetterRules.cs +++ b/HaWeb/Settings/ParsingRules/LetterRules.cs @@ -45,12 +45,16 @@ public class LetterRules private static readonly string MARGINGALBOXCLASS = HaWeb.Settings.CSSClasses.MARGINGALBOXCLASS; // Zeilen: + private static readonly string ZHLINECLASS = HaWeb.Settings.CSSClasses.ZHLINECLASS; + private static readonly string FIRSTLINECLASS = HaWeb.Settings.CSSClasses.FIRSTLINECLASS; private static readonly string ZHBREAKCLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS; private static readonly string LINELINECLASS = HaWeb.Settings.CSSClasses.LINELINECLASS; private static readonly string LINEINDENTCLASS = HaWeb.Settings.CSSClasses.LINEINDENTCLASS; - private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS; + private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHPAGECLASS; + private static readonly string ZHLINECOUNTCLASS = HaWeb.Settings.CSSClasses.ZHLINECOUNTCLASS; private static readonly string FIRSTPAGECLASS = HaWeb.Settings.CSSClasses.FIRSTPAGECLASS; private static readonly string EMPTYLINECLASS = HaWeb.Settings.CSSClasses.EMPTYLINECLASS; + private static readonly string HIDDENZHLINECOUNT = HaWeb.Settings.CSSClasses.HIDDENZHLINECOUNT; // Root-Elemente private static readonly string COMMENTCLASS = HaWeb.Settings.CSSClasses.COMMENTCLASS; @@ -155,14 +159,90 @@ public class LetterRules })}; public static readonly TagFuncList STagRules = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS)); + ( (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
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)); + } + + // 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)); + + // Linecount + 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 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)); + } + + // Marginalien + if(reader.State.Marginals != null) { + var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); + if (margs != null && margs.Any()) + { + margs = margs.OrderBy(x => Int32.Parse(x.Index)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS)); + foreach (var marginal in margs) + { + // In Marginal, the Root-Element () is somehow parsed, + // so we don't need to enclose it in a seperate div. + var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); + new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); + new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); + rd.Read(); + } + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } + } + + // Line type=line if(tag["type"] == "line") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS)); - } ), - ( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"])); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - })}; + + // Line tab= + if(!String.IsNullOrWhiteSpace(tag["tab"])) { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"])); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } + } + )}; + public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() { ( ( _, _) => true, ( sb, txt, reader) => { @@ -171,64 +251,4 @@ public class LetterRules else reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace; })}; - - // Rules for the left sidebar - public static readonly TagFuncList STagRulesLineCount = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1") { - if (reader.State.currpage == reader.State.oldpage) - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.currpage + "-" + reader.State.currline)); - else { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.oldpage + "-" + reader.State.currline)); - reader.State.oldpage = reader.State.currpage; - } - } - else { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTPAGECLASS, reader.State.currpage + "-" + tag["index"])); - sb.Append("S." + " "); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - if (tag["index"] != "1") - sb.Append(reader.State.currpage + " / " + tag["index"]); - else - sb.Append(reader.State.currpage); - reader.State.oldpage = reader.State.currpage; - } - }), - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1" && Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) - sb.Append(tag["index"]); - }), - ( ( x, reader) => x.Name == "line" && x["index"] == "1" && reader.State.currline != "-1", (sb, tag, reader) => { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, "")); - sb.Append("S. " + reader.State.currpage); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - }), - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { reader.State.currline = tag["index"]; } ), - ( ( x, _) => x.Name == "page", (sb, tag, reader) => { reader.State.currpage = tag["index"]; } ) - }; - - // Rules for the right sidebar - public static readonly TagFuncList STagRulesMarginals = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1" && reader.State.Marginals != null) { - var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); - if (margs != null && margs.Any()) - { - margs = margs.OrderBy(x => Int32.Parse(x.Index)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS, reader.State.commid.ToString())); - foreach (var marginal in margs) - { - var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); - new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); - new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); - rd.Read(); - } - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); - } - else - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS)); - } - reader.State.commid++; - })}; } \ No newline at end of file diff --git a/HaWeb/Settings/ParsingRules/TraditionRules.cs b/HaWeb/Settings/ParsingRules/TraditionRules.cs index 9f27f5a..0adbce9 100644 --- a/HaWeb/Settings/ParsingRules/TraditionRules.cs +++ b/HaWeb/Settings/ParsingRules/TraditionRules.cs @@ -47,9 +47,11 @@ public static class TraditionRules private static readonly string ZHBREAKCLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS; private static readonly string LINELINECLASS = HaWeb.Settings.CSSClasses.LINELINECLASS; private static readonly string LINEINDENTCLASS = HaWeb.Settings.CSSClasses.LINEINDENTCLASS; - private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS; + private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHPAGECLASS; + private static readonly string ZHLINECOUNTCLASS = HaWeb.Settings.CSSClasses.ZHLINECOUNTCLASS; private static readonly string FIRSTPAGECLASS = HaWeb.Settings.CSSClasses.FIRSTPAGECLASS; private static readonly string EMPTYLINECLASS = HaWeb.Settings.CSSClasses.EMPTYLINECLASS; + private static readonly string HIDDENZHLINECOUNT = HaWeb.Settings.CSSClasses.HIDDENZHLINECOUNT; // Root-Elemente private static readonly string COMMENTCLASS = HaWeb.Settings.CSSClasses.COMMENTCLASS; @@ -160,14 +162,82 @@ public static class TraditionRules })}; public static readonly TagFuncList STagRules = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS)); + ( (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
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("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)); + } + + // 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)); + + // Linecount + 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 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, ZHPAGECLASS, "")); + sb.Append(tag["index"]); + } + + // Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt + else { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + HIDDENZHLINECOUNT, "")); + sb.Append(tag["index"]); + } + + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } + + // Marginalien + if(reader.State.Marginals != null) { + var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); + if (margs != null && margs.Any()) + { + margs = margs.OrderBy(x => Int32.Parse(x.Index)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS)); + foreach (var marginal in margs) + { + // In Marginal, the Root-Element () is somehow parsed, + // so we don't need to enclose it in a seperate div. + var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); + new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules); + new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); + rd.Read(); + } + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } + } + + // Line type=line if(tag["type"] == "line") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS)); - } ), - ( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"])); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - })}; + + // Line tab= + if(!String.IsNullOrWhiteSpace(tag["tab"])) { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"])); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } + } + )}; public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() { ( ( _, _) => true, ( sb, txt, reader) => { @@ -178,67 +248,8 @@ public static class TraditionRules })}; - // Rules for the left sidebar - public static readonly TagFuncList STagRulesLineCount = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1") { - if (reader.State.currpage == reader.State.oldpage) - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.currpage + "-" + reader.State.currline)); - else { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.oldpage + "-" + reader.State.currline)); - reader.State.oldpage = reader.State.currpage; - } - } - else { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTPAGECLASS, reader.State.currpage + "-" + tag["index"])); - sb.Append("S." + " "); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - if (tag["index"] != "1") - sb.Append(reader.State.currpage + " / " + tag["index"]); - else - sb.Append(reader.State.currpage); - reader.State.oldpage = reader.State.currpage; - } - }), - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1" && Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) - sb.Append(tag["index"]); - }), - ( ( x, reader) => x.Name == "line" && x["index"] == "1" && reader.State.currline != "-1", (sb, tag, reader) => { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, "")); - sb.Append("S. " + reader.State.currpage); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - }), - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { reader.State.currline = tag["index"]; } ), - ( ( x, _) => x.Name == "page", (sb, tag, reader) => { reader.State.currpage = tag["index"]; } ) - }; - // Rules for the right sidebar - public static readonly TagFuncList STagRulesMarginals = new TagFuncList() { - ( ( x, _) => x.Name == "line", (sb, tag, reader) => { - if(reader.State.currline != "-1" && reader.State.Marginals != null) { - var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); - if (margs != null && margs.Any()) - { - margs = margs.OrderBy(x => Int32.Parse(x.Index)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS, reader.State.commid.ToString())); - foreach (var marginal in margs) - { - var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); - new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules); - new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); - rd.Read(); - } - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); - } - else - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS)); - } - reader.State.commid++; - })}; - public static readonly TagFuncList OTagRulesInitial = new TagFuncList() { ( ( x, _) => x.Name == "app", (sb, tag, reader) => { if (!reader.State.active_firstedit) @@ -247,29 +258,14 @@ public static class TraditionRules reader.State.active_firstedit = false; }), ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { - reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "row zhtext")); - reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "trad-text col order-2 letterbox")); - reader.State.sb_trad_left = new StringBuilder(); - reader.State.sb_trad_right = new StringBuilder(); + reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADZHTEXTCLASS)); reader.State.currline = "-1"; reader.State.currpage = ""; reader.State.active_trad = true; - reader.State.sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "trad-linecount countbox nnumber d-none d-lg-block order-1")); - reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "commentColumn trad-comm col-4 d-none d-lg-block order-3")); - reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS)); - if (reader.State.rd_tradition != null) { - new HaWeb.HTMLParser.XMLHelper(reader.State, reader.State.rd_tradition, reader.State.sb_trad_left, null, TraditionRules.STagRulesLineCount); - new HaWeb.HTMLParser.XMLHelper(reader.State, reader.State.rd_tradition, reader.State.sb_trad_right, null, TraditionRules.STagRulesMarginals); - } })}; public static readonly TagFuncList CTagRulesInitial = new TagFuncList() { ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { - reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - reader.State.sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - reader.State.sb_tradition.Append(reader.State.sb_trad_left.ToString()); - reader.State.sb_tradition.Append(reader.State.sb_trad_right.ToString()); reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); reader.State.active_trad = false; })}; diff --git a/HaWeb/Settings/ParsingState/CommentState.cs b/HaWeb/Settings/ParsingState/CommentState.cs index bdb93ad..b281f50 100644 --- a/HaWeb/Settings/ParsingState/CommentState.cs +++ b/HaWeb/Settings/ParsingState/CommentState.cs @@ -1,6 +1,19 @@ namespace HaWeb.Settings.ParsingState; using System.Text; +public enum CommentType { + Comment, + Subcomment +} + public class CommentState : HaWeb.HTMLParser.IState { + internal string Category; + internal CommentType Type; + + public CommentState(string category, CommentType type) { + this.Category = category; + this.Type = type; + } + public void SetupState() { } } \ No newline at end of file diff --git a/HaWeb/Settings/ParsingState/LetterState.cs b/HaWeb/Settings/ParsingState/LetterState.cs index da7acb4..3f3823d 100644 --- a/HaWeb/Settings/ParsingState/LetterState.cs +++ b/HaWeb/Settings/ParsingState/LetterState.cs @@ -22,13 +22,9 @@ public class LetterState : HaWeb.HTMLParser.IState { internal bool active_skipwhitespace; internal string currline; internal string currpage; - internal string oldpage; - internal int commid; // Parsing-Combinations - internal StringBuilder sb_lettertext; // Hauptext - internal StringBuilder sb_linecount; // Linke Spalte (Zeilenzählung) - internal StringBuilder sb_marginals; // Rechte Spalte (Kommentare) + internal StringBuilder sb_lettertext; public LetterState(ILibrary lib, IReaderService readerService, Meta meta, IEnumerable? marginals) { @@ -43,14 +39,9 @@ public class LetterState : HaWeb.HTMLParser.IState { public void SetupState() { sb_lettertext = new StringBuilder(); - sb_linecount = new StringBuilder(); - sb_marginals = new StringBuilder(); - active_skipwhitespace = true; currline = "-1"; currpage = ""; - oldpage = ""; - commid = 1; // Initialize State if (Meta.ZH != null) { diff --git a/HaWeb/Settings/ParsingState/TraditionState.cs b/HaWeb/Settings/ParsingState/TraditionState.cs index efb38d1..b7baf5f 100644 --- a/HaWeb/Settings/ParsingState/TraditionState.cs +++ b/HaWeb/Settings/ParsingState/TraditionState.cs @@ -17,14 +17,10 @@ public class TraditionState : HaWeb.HTMLParser.IState { internal bool active_firstedit; internal string currline; internal string currpage; - internal string oldpage; - internal int commid; internal bool active_trad; internal StringBuilder sb_tradition; // Überlieferung internal StringBuilder sb_trad_zhtext; // Überlieferung, ZHText - internal StringBuilder sb_trad_left; // Überlieferung ZHText linke Spalte (zeilenzählung) - internal StringBuilder sb_trad_right; // Überlieferung ZHText rechte Spalte (Kommentare) internal IReader rd_tradition; @@ -39,8 +35,6 @@ public class TraditionState : HaWeb.HTMLParser.IState { public void SetupState() { sb_tradition = new StringBuilder(); sb_trad_zhtext = new StringBuilder(); - sb_trad_left = new StringBuilder(); - sb_trad_right = new StringBuilder(); active_trad = false; active_del = false; @@ -48,7 +42,5 @@ public class TraditionState : HaWeb.HTMLParser.IState { active_firstedit = true; currline = "-1"; currpage = ""; - oldpage = ""; - commid = 1; } } \ No newline at end of file diff --git a/HaWeb/Views/Briefe/Index.cshtml b/HaWeb/Views/Briefe/Index.cshtml index 226587e..3d7bc91 100644 --- a/HaWeb/Views/Briefe/Index.cshtml +++ b/HaWeb/Views/Briefe/Index.cshtml @@ -2,16 +2,39 @@
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", Model.MetaData) +
+ + + @if (Model.MetaData.Next != null || Model.MetaData.Prev != null) { + + } +
-@if (Model.ParsedText != null) { - @Html.Raw(@Model.ParsedText) -} +
+
+ @if (Model.ParsedText != null) { + @Html.Raw(@Model.ParsedText) + } +
+
-@if (Model.ParsedLineCount != null) { - @Html.Raw(@Model.ParsedLineCount) -} -@if (Model.ParsedMarginals != null) { - @Html.Raw(@Model.ParsedMarginals) -} diff --git a/HaWeb/Views/Register/Index.cshtml b/HaWeb/Views/Register/Index.cshtml index f635bd8..45d140a 100644 --- a/HaWeb/Views/Register/Index.cshtml +++ b/HaWeb/Views/Register/Index.cshtml @@ -59,4 +59,16 @@ } - \ No newline at end of file + + + diff --git a/HaWeb/Views/Shared/_LetterHead.cshtml b/HaWeb/Views/Shared/_LetterHead.cshtml index a5374be..97f7f6d 100644 --- a/HaWeb/Views/Shared/_LetterHead.cshtml +++ b/HaWeb/Views/Shared/_LetterHead.cshtml @@ -2,19 +2,18 @@
- @Model.Meta.Autopsic +
+ @Model.Meta.Autopsic +