Fixed marginals; fixed Tables

This commit is contained in:
schnulller
2022-05-31 21:05:55 +02:00
parent 72a9e61065
commit 1bfc24cec5
14 changed files with 5483 additions and 425 deletions

View File

@@ -60,10 +60,15 @@ public class Briefecontroller : Controller
if (prevmeta != null) model.MetaData.Prev = (generateMetaViewModel(prevmeta, false), url + prevmeta.Autopsic); 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 (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 (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).sb_tradition.ToString(); if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) {
var parsedTraditions = HaWeb.HTMLHelpers.LetterHelpers.CreateTraditions(_lib, _readerService, marginals, tradition, hands, editreasons);
(model.ParsedTradition, model.ParsedMarginals, model.MinWidthTrad) = (parsedTraditions.sb_tradition.ToString(), parsedTraditions.ParsedMarginals, parsedTraditions.minwidth);
}
if (text != null && !String.IsNullOrWhiteSpace(text.Element)) { if (text != null && !String.IsNullOrWhiteSpace(text.Element)) {
var parsedLetter = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(_lib, _readerService, meta, text, marginals, hands, editreasons); var parsedLetter = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(_lib, _readerService, meta, text, marginals, hands, editreasons);
(model.ParsedText, model.ParsedMarginals, model.MinWidth) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.ParsedMarginals, parsedLetter.minwidth); (model.ParsedText, model.MinWidth) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.minwidth);
if (model.ParsedMarginals != null && parsedLetter.ParsedMarginals != null) model.ParsedMarginals.AddRange(parsedLetter.ParsedMarginals);
else model.ParsedMarginals = parsedLetter.ParsedMarginals;
if (parsedLetter.Startline != "-1" && parsedLetter.Startline != "1" && model.MetaData.ParsedZHString != null) if (parsedLetter.Startline != "-1" && parsedLetter.Startline != "1" && model.MetaData.ParsedZHString != null)
model.MetaData.ParsedZHString += " / " + parsedLetter.Startline; model.MetaData.ParsedZHString += " / " + parsedLetter.Startline;
if (model.ParsedText == null || String.IsNullOrWhiteSpace(model.ParsedText)) if (model.ParsedText == null || String.IsNullOrWhiteSpace(model.ParsedText))

View File

@@ -23,10 +23,10 @@ public static class LetterHelpers
return letterState; return letterState;
} }
public static TraditionState CreateTraditions(ILibrary lib, IReaderService readerService, IEnumerable<Marginal>? marginals, Tradition tradition) public static TraditionState CreateTraditions(ILibrary lib, IReaderService readerService, IEnumerable<Marginal>? marginals, Tradition tradition, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits)
{ {
var rd = readerService.RequestStringReader(tradition.Element); var rd = readerService.RequestStringReader(tradition.Element);
var traditionState = new TraditionState(lib, rd, readerService, marginals); var traditionState = new TraditionState(lib, rd, readerService, marginals, hands, edits);
new HaWeb.HTMLParser.XMLHelper<TraditionState>(traditionState, rd, traditionState.sb_tradition, TraditionRules.OTagRules, TraditionRules.STagRules, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules); 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); new HaWeb.HTMLHelpers.LinkHelper(lib, rd, traditionState.sb_tradition);
rd.Read(); rd.Read();

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@ public class BriefeViewModel
public string? ParsedText { get; set; } public string? ParsedText { get; set; }
public string? ParsedTradition { get; set; } public string? ParsedTradition { get; set; }
public bool MinWidth { get; set; } = false; public bool MinWidth { get; set; } = false;
public bool MinWidthTrad { get; set; } = false;
// From, Until, Reference, Edit, sartpage, startline // From, Until, Reference, Edit, sartpage, startline
public List<(string, string, string, string, string, string)>? ParsedEdits public List<(string, string, string, string, string, string)>? ParsedEdits

View File

@@ -36,9 +36,7 @@ Briefe beim Namen
- GND Normdaten der Namen - GND Normdaten der Namen
TODO 367 684 708 tabellen, min-size für ha-lettertext TODO tabellen ok, ausser 939: dort sind htabs geschachtelt
TODO 682 kein word-wrap, max-size für ha-lettertext
TODO Regeln nach tradition übertragen, mit min-width
TODO Word-wrap before align, tabs TODO Word-wrap before align, tabs
TODO blinken before js TODO blinken before js

View File

@@ -55,6 +55,7 @@ public static class CSSClasses {
public const string EMPHCLASS = "ha-emph"; public const string EMPHCLASS = "ha-emph";
public const string APPCLASS = "ha-app"; public const string APPCLASS = "ha-app";
public const string MARGINGALBOXCLASS = "ha-marginalbox"; public const string MARGINGALBOXCLASS = "ha-marginalbox";
public const string MARGINALLISTCLASS = "ha-marginallist";
public const string TRADLINECOUNTCLASS = "ha-tradlinecount"; public const string TRADLINECOUNTCLASS = "ha-tradlinecount";
public const string TRADCOMMENTCOLUMNCLASS = "ha-tradcommentcolumn"; public const string TRADCOMMENTCOLUMNCLASS = "ha-tradcommentcolumn";
public const string TRADZHTEXTCLASS = "ha-tradzhtext"; public const string TRADZHTEXTCLASS = "ha-tradzhtext";

View File

@@ -44,6 +44,7 @@ public class LetterRules
private static readonly string EMPHCLASS = HaWeb.Settings.CSSClasses.EMPHCLASS; private static readonly string EMPHCLASS = HaWeb.Settings.CSSClasses.EMPHCLASS;
private static readonly string APPCLASS = HaWeb.Settings.CSSClasses.APPCLASS; private static readonly string APPCLASS = HaWeb.Settings.CSSClasses.APPCLASS;
private static readonly string MARGINGALBOXCLASS = HaWeb.Settings.CSSClasses.MARGINGALBOXCLASS; private static readonly string MARGINGALBOXCLASS = HaWeb.Settings.CSSClasses.MARGINGALBOXCLASS;
private static readonly string MARGINALLISTCLASS = HaWeb.Settings.CSSClasses.MARGINALLISTCLASS;
// Zeilen: // Zeilen:
private static readonly string ZHLINECLASS = HaWeb.Settings.CSSClasses.ZHLINECLASS; private static readonly string ZHLINECLASS = HaWeb.Settings.CSSClasses.ZHLINECLASS;
@@ -254,6 +255,7 @@ public class LetterRules
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINALLISTCLASS));
foreach (var marginal in margs) foreach (var marginal in margs)
{ {
// In Marginal, the Root-Element (<marginal>) is somehow parsed, // In Marginal, the Root-Element (<marginal>) is somehow parsed,
@@ -266,6 +268,7 @@ public class LetterRules
rd.Read(); rd.Read();
} }
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.ParsedMarginals.Add((reader.State.currpage, reader.State.currline, sb2.ToString())); reader.State.ParsedMarginals.Add((reader.State.currpage, reader.State.currline, sb2.ToString()));
} }
} }

View File

@@ -1,5 +1,6 @@
namespace HaWeb.Settings.ParsingRules; namespace HaWeb.Settings.ParsingRules;
using System.Text; using System.Text;
using System.Web;
using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>>)>; using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>>)>;
using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>>)>; using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>>)>;
@@ -61,6 +62,7 @@ public static class TraditionRules
private static readonly string SUBSECTIONCLASS = HaWeb.Settings.CSSClasses.SUBSECTIONCLASS; private static readonly string SUBSECTIONCLASS = HaWeb.Settings.CSSClasses.SUBSECTIONCLASS;
private static readonly string TRADITIONCLASS = HaWeb.Settings.CSSClasses.TRADITIONCLASS; private static readonly string TRADITIONCLASS = HaWeb.Settings.CSSClasses.TRADITIONCLASS;
private static readonly string MARGINALCLASS = HaWeb.Settings.CSSClasses.MARGINALCLASS; private static readonly string MARGINALCLASS = HaWeb.Settings.CSSClasses.MARGINALCLASS;
private static readonly string MARGINALLISTCLASS = HaWeb.Settings.CSSClasses.MARGINALLISTCLASS;
private static readonly string LETTERCLASS = HaWeb.Settings.CSSClasses.LETTERCLASS; private static readonly string LETTERCLASS = HaWeb.Settings.CSSClasses.LETTERCLASS;
// Tradition-spezifische Elemente // Tradition-spezifische Elemente
@@ -78,16 +80,22 @@ public static class TraditionRules
// Parsing Rules for Letters // Parsing Rules for Letters
// General rules (for the lettertext column, also for parsing the marginals, awa tradtions and editreasons) // General rules (for the lettertext column, also for parsing the marginals, awa tradtions and editreasons)
public static readonly TagFuncList OTagRules = new TagFuncList() { 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"] == "center", (sb, tag, reader) => {
( ( x, _) => x.Name == "align" && x["pos"] == "right", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNRIGHTCLASS)) ), sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNCENTERCLASS));
reader.State.mustwrap = (true, true);
} ),
( ( x, _) => x.Name == "align" && x["pos"] == "right", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNRIGHTCLASS));
reader.State.mustwrap = (true, true);
}),
( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ADDEDCLASS)) ), ( ( 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, true);
}),
( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, AQCLASS)) ), ( ( 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 == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUPERCLASS)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => { ( ( x, _) => x.Name == "del", (sb, tag, reader) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, DELCLASS)) ),
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, DELCLASS));
reader.State.active_del = true;
}),
( ( x, _) => x.Name == "nr", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, NRCLASS)) ), ( ( x, _) => x.Name == "nr", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, NRCLASS)) ),
( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, NOTECLASS)) ), ( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, NOTECLASS)) ),
( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ULCLASS)) ), ( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ULCLASS)) ),
@@ -98,44 +106,66 @@ public static class TraditionRules
( ( x, _) => x.Name == "up", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, UPCLASS)) ), ( ( 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 == "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 == "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) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HEADERCLASS));
reader.State.mustwrap = (true, true);
}),
( ( x, _) => x.Name == "lemma", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LEMMACLASS)) ), ( ( 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 == "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)) ), ( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ),
( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, BZGCLASS)) ), ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, BZGCLASS)) ),
( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHCLASS)) ), ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHCLASS)) ),
( ( x, _) => x.Name == "emph", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, EMPHCLASS)); } ), ( ( x, _) => x.Name == "emph", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, EMPHCLASS)); } ),
( ( x, _) => x.Name == "app", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, APPCLASS)); } ),
( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUBSECTIONCLASS, tag["id"])) ), ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUBSECTIONCLASS, tag["id"])) ),
( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTCLASS, tag["id"])) ), ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTCLASS, tag["id"])) ),
( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, EDITREASONCLASS)) ), ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, EDITREASONCLASS)) ),
( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LETTERCLASS)) ), ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LETTERCLASS)) ),
( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADITIONCLASS)) ), ( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADITIONCLASS)) ),
( ( x, _) => x.Name == "marginal", (sb, tag, reader) => { ( ( x, _) => x.Name == "marginal", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINALCLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINALCLASS, "m-" + tag["index"]));
reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace; reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace;
}), }),
( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HANDCLASS)) ), ( ( x, _) => x.Name == "tabs", (sb, tag, reader) => {
( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABLECLASS)) ), 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"]))), // Tabs work with percentages, so we need a static width of the conttainer:
reader.State.minwidth = true;
} ),
( ( x, _) => x.Name == "tab" && !String.IsNullOrWhiteSpace(x["value"]), (sb, tag, reader) => {
reader.State.mustwrap = (true, 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));
}),
( ( x, _) => x.Name == "hand", (sb, tag, _) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HANDMARKERCLASS, "ha-" + tag["ref"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, HANDCLASS));
}),
// Tradition specific:
// Tradition specific:
( ( x, _) => x.Name == "app", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, APPCLASS)); } ), ( ( x, _) => x.Name == "app", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, APPCLASS)); } ),
( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => {
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADZHTEXTCLASS)); reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADZHTEXTCLASS));
reader.State.active_trad = true; reader.State.active_trad = true;
})}; })
};
public static readonly TagFuncList CTagRules = new TagFuncList() { 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, true);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "added", (sb, tag, _) => 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, true);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "aq", (sb, tag, _) => 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 == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => { ( ( x, _) => x.Name == "del", (sb, tag, reader) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.active_del = false; // TODO SMTH IS FISHY HERE!
}),
( ( x, _) => x.Name == "nr", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "nr", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
@@ -146,13 +176,17 @@ public static class TraditionRules
( ( x, _) => x.Name == "ful", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( 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 == "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 == "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, true);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "lemma", (sb, tag, _) => 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 == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "emph", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "emph", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "app", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
@@ -160,7 +194,10 @@ public static class TraditionRules
( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( 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 == "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 == "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, true);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
// Tradition specifics // Tradition specifics
@@ -168,105 +205,113 @@ public static class TraditionRules
( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => {
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.active_trad = false; reader.State.active_trad = false;
})}; })
};
public static readonly TextFuncList TextRules = new TextFuncList() { public static readonly TextFuncList TextRules = new TextFuncList() {
( ( x, _) => true, (sb, txt, reader) => { ( ( x, _) => true, (sb, txt, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TEXTCLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TEXTCLASS));
if (reader.State.active_del) if (reader.OpenTags.Where(x => x.Name == "del").Any())
sb.Append(txt.Value.Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">")); sb.Append(HttpUtility.HtmlEncode(txt.Value).Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">"));
else else
sb.Append(txt.Value); sb.Append(HttpUtility.HtmlEncode(txt.Value));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
})}; })};
public static readonly TagFuncList STagRules = new TagFuncList() { public static readonly TagFuncList STagRules = new TagFuncList() {
( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ), ( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ),
( (x, _) => x.Name == "line", (sb, tag, reader) => { ( (x, _) => x.Name == "line", (sb, tag, reader) => {
// This is the beginning of the Text, so no <br> needed, just a special linecount if(!String.IsNullOrWhiteSpace(tag["tab"]) || !String.IsNullOrWhiteSpace(tag["type"])) {
// Tradition specific: only do this if in ZHText reader.State.mustwrap = (false, true);
}
// Tradition specific: only if in zhtext
if (reader.State.active_trad) { if (reader.State.active_trad) {
if(reader.State.currline == "-1") { // This is NOT the beginning of the text, so we set a br, and then, linecount
reader.State.currline = tag["index"]; if(reader.State.currline != "-1") {
if (!reader.State.mustwrap.Item2)
// First Linecount sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTLINECLASS, ""));
sb.Append("S." + "&nbsp;");
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else else
sb.Append(reader.State.currpage); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br"));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); reader.State.mustwrap = (false, false);
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 // 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 // Fall 1: Neue Seite
if (reader.State.currline == "1") { if (reader.State.currline == "1") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, "")); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + reader.State.currpage); 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));
} }
} else if (reader.State.currline == "-1" && !String.IsNullOrWhiteSpace(tag["index"])) {
reader.State.Startline = tag["index"];
reader.State.currline = tag["index"];
// Fall 2: Neue Zeile, teilbar durch 5 // Tradition specifics: the first linecount must be shown
else if (Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS + " " + FIRSTLINECLASS, reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS, "")); sb.Append("S. " + reader.State.currpage + "&thinsp;/&thinsp;" + reader.State.currline);
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));
} }
// Marginalien // Marginalien, only for lines with a linenumber
if(reader.State.Marginals != null) { if(reader.State.Marginals != null && !String.IsNullOrWhiteSpace(tag["index"])) {
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any()) 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)); margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINALLISTCLASS));
foreach (var marginal in margs) foreach (var marginal in margs)
{ {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTMARKERCLASS, marginal.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
// In Marginal, the Root-Element (<marginal>) is somehow parsed, // In Marginal, the Root-Element (<marginal>) is somehow parsed,
// so we don't need to enclose it in a seperate div. // so we don't need to enclose it in a seperate div.
if (marginal.Element != null) { var rd = reader.State.ReaderService.RequestStringReader(marginal.Element);
var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules);
new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules); new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false);
new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, rd, sb2, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules);
rd.Read(); new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb2, false);
} rd.Read();
} }
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.ParsedMarginals.Add((reader.State.currpage, reader.State.currline, sb2.ToString()));
} }
} }
// Line type=line // Line type=line
if(tag["type"] == "line") { if(tag["type"] == "line") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.mustwrap = (false, true);
} }
// Line tab= // Line tab=
if(!String.IsNullOrWhiteSpace(tag["tab"])) { if(!String.IsNullOrWhiteSpace(tag["tab"])) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"])); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
if (tag["tab"] != "1") reader.State.mustwrap = (false, true);
} }
} }

View File

@@ -11,36 +11,45 @@ public class TraditionState : HaWeb.HTMLParser.IState {
internal IReaderService ReaderService; internal IReaderService ReaderService;
internal IEnumerable<Marginal>? Marginals; internal IEnumerable<Marginal>? Marginals;
internal IEnumerable<Hand>? Hands;
internal IEnumerable<Editreason>? Edits;
internal bool active_del; // State
// Must we skip all of the upcoming whitespace?
internal bool active_skipwhitespace; internal bool active_skipwhitespace;
internal bool active_firstedit; // Is there a semantically important line break, left or right of the current line?
internal (bool, bool) mustwrap;
// What's the current line?
internal string currline; internal string currline;
// What's the current page?
internal string currpage; internal string currpage;
// Does the container need a min-widt, so percentages are useful (tables)
internal bool minwidth;
// Is there an active_zhtext
internal bool active_trad; internal bool active_trad;
internal StringBuilder sb_tradition; // Überlieferung internal StringBuilder sb_tradition; // Überlieferung
internal StringBuilder sb_trad_zhtext; // Überlieferung, ZHText internal List<(string, string, string)>? ParsedMarginals;
internal string Startline;
internal IReader rd_tradition; internal IReader rd_tradition;
public TraditionState(ILibrary lib, IReader reader, IReaderService readerService, IEnumerable<Marginal>? marginals) public TraditionState(ILibrary lib, IReader reader, IReaderService readerService, IEnumerable<Marginal>? marginals, IEnumerable<Hand>? hands, IEnumerable<Editreason>? edits)
{ {
Lib = lib; Lib = lib;
rd_tradition = reader; rd_tradition = reader;
Marginals = marginals; Marginals = marginals;
ReaderService = readerService; ReaderService = readerService;
Hands = hands;
Edits = edits;
SetupState(); SetupState();
} }
public void SetupState() { public void SetupState() {
sb_tradition = new StringBuilder(); sb_tradition = new StringBuilder();
sb_trad_zhtext = new StringBuilder();
active_trad = false; active_trad = false;
active_del = false;
active_skipwhitespace = true; active_skipwhitespace = true;
active_firstedit = true;
currline = "-1"; currline = "-1";
currpage = ""; currpage = "";
} }

View File

@@ -3,6 +3,9 @@
var minwidth = ""; var minwidth = "";
if (Model.MinWidth) if (Model.MinWidth)
minwidth = "ha-minwidth"; minwidth = "ha-minwidth";
var minwidthtrads = "";
if (Model.MinWidthTrad)
minwidthtrads = "ha-minwidth";
} }
<div class="ha-twilighttogglebar"> <div class="ha-twilighttogglebar">
<div class="ha-letterheader"> <div class="ha-letterheader">
@@ -86,10 +89,12 @@
} }
<div class="ha-additions" id="ha-additions"> <div class="ha-additions" id="ha-additions">
<div class="@minwidthtrads">
@if (Model.ParsedTradition != null) @if (Model.ParsedTradition != null)
{ {
@Html.Raw(Model.ParsedTradition) @Html.Raw(Model.ParsedTradition)
} }
</div>
@if (Model.ParsedHands != null && Model.ParsedHands.Any()) @if (Model.ParsedHands != null && Model.ParsedHands.Any())
{ {

View File

@@ -96,17 +96,17 @@
<div class="ha-metadatapersons"> <div class="ha-metadatapersons">
@if (!String.IsNullOrWhiteSpace(Model.ParsedReceivers)) { @if (!String.IsNullOrWhiteSpace(Model.ParsedReceivers)) {
@if (Model.Meta.isDraft == HaDocument.Models.OptionalBool.True) { @if (Model.Meta.isDraft == HaDocument.Models.OptionalBool.True) {
<span>@Model.ParsedSenders</span> <span>@Html.Raw(Model.ParsedSenders)</span>
<div class="ha-tooltip"> <div class="ha-tooltip">
<div class="ha-tooltiptext" style="bottom: 100%;"> <div class="ha-tooltiptext" style="bottom: 100%;">
Entwurf Entwurf
</div> </div>
</div> </div>
<span>@Model.ParsedReceivers</span> <span>@Html.Raw(Model.ParsedReceivers)</span>
} }
else { else {
<span>@Model.ParsedSenders → @Model.ParsedReceivers</span> <span>@Html.Raw(Model.ParsedSenders) → @Html.Raw(Model.ParsedReceivers)</span>
} }
} }
</div> </div>

View File

@@ -1390,16 +1390,6 @@ body {
} }
} }
.ha-lettertext.ha-minwidth {
min-width: 38rem;
}
@media (min-width: 1190px) {
.ha-lettertext.ha-minwidth {
min-width: 45rem;
}
}
.ha-marginals { .ha-marginals {
position: relative; position: relative;
margin-left: 1rem; margin-left: 1rem;
@@ -1510,51 +1500,6 @@ body {
hyphens: none; hyphens: none;
} }
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
position: absolute;
right: -20rem;
margin-top: 0.25rem;
display: none;
width: 19rem;
flex-wrap: wrap;
border-radius: 0.125rem;
border-left-width: 2px;
--tw-border-opacity: 1;
border-color: rgb(203 213 225 / var(--tw-border-opacity));
--tw-bg-opacity: 1;
background-color: rgb(248 250 252 / var(--tw-bg-opacity));
padding-left: 0.5rem;
padding-right: 0.25rem;
font-family: Biolinum, sans-serif;
font-size: 0.875rem;
line-height: 1.25rem;
line-height: 1.25;
-webkit-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
}
@media (min-width: 960px) {
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
display: flex;
}
}
@media (min-width: 1190px) {
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
right: -26rem;
width: 23rem;
}
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal {
display: inline-block;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox.ha-expanded-box {
padding-bottom: 0.25rem;
}
.ha-additions .ha-tradition a { .ha-additions .ha-tradition a {
-webkit-text-decoration-line: underline !important; -webkit-text-decoration-line: underline !important;
text-decoration-line: underline !important; text-decoration-line: underline !important;
@@ -1567,50 +1512,6 @@ body {
text-decoration-style: solid; text-decoration-style: solid;
} }
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal {
padding-right: 1.5rem;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal a {
-webkit-text-decoration-line: underline !important;
text-decoration-line: underline !important;
-webkit-text-decoration-style: dotted;
text-decoration-style: dotted;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal a:hover {
-webkit-text-decoration-style: solid;
text-decoration-style: solid;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-btn-collapsed-box {
position: absolute;
right: -0.5rem;
margin-top: 2px;
display: none;
cursor: pointer;
line-height: 1;
--tw-text-opacity: 1;
color: rgb(71 85 105 / var(--tw-text-opacity));
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-btn-collapsed-box:hover {
--tw-text-opacity: 1;
color: rgb(15 23 42 / var(--tw-text-opacity));
}
@media (min-width: 960px) {
.ha-additions .ha-tradition .ha-tradzhtext .ha-btn-collapsed-box {
display: block;
}
}
@media (min-width: 1190px) {
.ha-additions .ha-tradition .ha-tradzhtext .ha-btn-collapsed-box {
right: -2.5rem;
}
}
.ha-additions .ha-hands { .ha-additions .ha-hands {
padding-top: 1.5rem; padding-top: 1.5rem;
} }
@@ -1814,21 +1715,29 @@ body {
display: none !important; display: none !important;
} }
.ha-lettertext .ha-marginalbox { .ha-tradzhtext .ha-marginal::before, .ha-lettertext .ha-marginal:before {
position: absolute; position: absolute;
right: -20rem; top: 0.1rem;
bottom: 0.1rem;
left: 0px;
width: 0.125rem;
--tw-bg-opacity: 1;
background-color: rgb(148 163 184 / var(--tw-bg-opacity));
--tw-content: '';
content: var(--tw-content);
}
.ha-tradzhtext .ha-marginalbox, .ha-lettertext .ha-marginalbox {
position: absolute;
left: 100%;
margin-left: 1.5rem;
margin-top: 0.25rem; margin-top: 0.25rem;
display: none; display: none;
width: 19rem; width: 16rem;
flex-wrap: wrap;
border-radius: 0.125rem; border-radius: 0.125rem;
border-left-width: 2px;
--tw-border-opacity: 1;
border-color: rgb(203 213 225 / var(--tw-border-opacity));
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(248 250 252 / var(--tw-bg-opacity)); background-color: rgb(248 250 252 / var(--tw-bg-opacity));
padding-left: 0.5rem; padding-left: 0.5rem;
padding-right: 0.25rem;
font-family: Biolinum, sans-serif; font-family: Biolinum, sans-serif;
font-size: 0.875rem; font-size: 0.875rem;
line-height: 1.25rem; line-height: 1.25rem;
@@ -1839,49 +1748,57 @@ body {
} }
@media (min-width: 960px) { @media (min-width: 960px) {
.ha-lettertext .ha-marginalbox { .ha-tradzhtext .ha-marginalbox, .ha-lettertext .ha-marginalbox {
display: flex; display: block;
} }
} }
@media (min-width: 1190px) { @media (min-width: 1190px) {
.ha-lettertext .ha-marginalbox { .ha-tradzhtext .ha-marginalbox, .ha-lettertext .ha-marginalbox {
right: -26rem; width: 24rem;
width: 23rem;
} }
} }
.ha-lettertext .ha-marginalbox .ha-marginal { .ha-tradzhtext .ha-marginalbox.ha-expanded-box .ha-marginallist, .ha-lettertext .ha-marginalbox.ha-expanded-box .ha-marginallist {
display: inline-block; --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
.ha-lettertext .ha-marginalbox.ha-expanded-box { .ha-tradzhtext .ha-marginalbox .ha-marginallist, .ha-lettertext .ha-marginalbox .ha-marginallist {
padding-bottom: 0.25rem; display: flex;
flex-wrap: wrap;
-moz-column-gap: 1rem;
column-gap: 1rem;
font-size: 0.875rem;
line-height: 1.25rem;
line-height: 1.25;
} }
.ha-lettertext .ha-marginalbox .ha-marginal { .ha-tradzhtext .ha-marginalbox .ha-marginallist .ha-marginal, .ha-lettertext .ha-marginalbox .ha-marginallist .ha-marginal {
padding-right: 1.5rem; position: relative;
display: inline;
flex-grow: 1;
padding-left: 0.5rem;
} }
.ha-lettertext .ha-marginalbox .ha-marginal .ha-text { .ha-tradzhtext .ha-marginalbox .ha-marginallist .ha-marginal a, .ha-lettertext .ha-marginalbox .ha-marginallist .ha-marginal a {
}
.ha-lettertext .ha-marginalbox .ha-marginal a {
-webkit-text-decoration-line: underline !important; -webkit-text-decoration-line: underline !important;
text-decoration-line: underline !important; text-decoration-line: underline !important;
-webkit-text-decoration-style: dotted; -webkit-text-decoration-style: dotted;
text-decoration-style: dotted; text-decoration-style: dotted;
} }
.ha-lettertext .ha-marginalbox .ha-marginal a:hover { .ha-tradzhtext .ha-marginalbox .ha-marginallist .ha-marginal a:hover, .ha-lettertext .ha-marginalbox .ha-marginallist .ha-marginal a:hover {
-webkit-text-decoration-style: solid; -webkit-text-decoration-style: solid;
text-decoration-style: solid; text-decoration-style: solid;
} }
.ha-lettertext .ha-btn-collapsed-box { .ha-tradzhtext .ha-btn-collapsed-box, .ha-lettertext .ha-btn-collapsed-box {
position: absolute; position: absolute;
right: -0.5rem; left: 100%;
margin-top: 2px; margin-left: 1rem;
margin-top: 0.125rem;
display: none; display: none;
cursor: pointer; cursor: pointer;
line-height: 1; line-height: 1;
@@ -1889,23 +1806,40 @@ body {
color: rgb(51 65 85 / var(--tw-text-opacity)); color: rgb(51 65 85 / var(--tw-text-opacity));
} }
.ha-lettertext .ha-btn-collapsed-box:hover { .ha-tradzhtext .ha-btn-collapsed-box:hover, .ha-lettertext .ha-btn-collapsed-box:hover {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(15 23 42 / var(--tw-text-opacity)); color: rgb(15 23 42 / var(--tw-text-opacity));
} }
@media (min-width: 960px) { @media (min-width: 960px) {
.ha-lettertext .ha-btn-collapsed-box { .ha-tradzhtext .ha-btn-collapsed-box, .ha-lettertext .ha-btn-collapsed-box {
display: block; display: block;
} }
} }
.ha-minwidth .ha-tradzhtext, .ha-lettertext.ha-minwidth {
min-width: 38rem;
}
@media (min-width: 1190px) { @media (min-width: 1190px) {
.ha-lettertext .ha-btn-collapsed-box { .ha-minwidth .ha-tradzhtext, .ha-lettertext.ha-minwidth {
right: -2.5rem; min-width: 55rem;
} }
} }
.ha-minwidth .ha-tradzhtext .ha-alignright, .ha-lettertext.ha-minwidth .ha-alignright {
float: right;
margin-right: 20%;
}
.ha-lettertext.ha-minwidth .ha-aligncenter {
position: absolute;
left: 33.333333%;
--tw-translate-x: -50%;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
white-space: nowrap;
}
/* Classes from the General parser */ /* Classes from the General parser */
/* Classes from .NET */ /* Classes from .NET */
@@ -2301,16 +2235,16 @@ body {
.ha-collapsed-box { .ha-collapsed-box {
z-index: 0; z-index: 0;
cursor: default;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis;
} }
.ha-expanded-box { .ha-expanded-box {
z-index: 1000; z-index: 1000;
height: auto !important; height: auto !important;
max-height: 100vh !important; max-height: 100vh !important;
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); padding-bottom: 0.25rem;
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
/* .ha-register .ha-neuzeit .ha-register-body .ha-commenthead .ha-collapsed-box:hover, /* .ha-register .ha-neuzeit .ha-register-body .ha-commenthead .ha-collapsed-box:hover,
@@ -2644,6 +2578,10 @@ body {
font-style: normal; font-style: normal;
} }
.ha-lettertext .ha-marginalbox:before {
content: "";
}
.ha-lettertext .ha-marginalbox .ha-marginal::after { .ha-lettertext .ha-marginalbox .ha-marginal::after {
content: ""; content: "";
} }

View File

@@ -489,10 +489,6 @@
@apply max-w-[38rem] desktop:max-w-[45rem] sm:shrink-0 sm:border-l-2 ml-4 sm:ml-12 px-4 pt-4 pb-8 relative font-serif leading-[1.48] bg-slate-50 numeric-mediaeval; @apply max-w-[38rem] desktop:max-w-[45rem] sm:shrink-0 sm:border-l-2 ml-4 sm:ml-12 px-4 pt-4 pb-8 relative font-serif leading-[1.48] bg-slate-50 numeric-mediaeval;
} }
.ha-lettertext.ha-minwidth {
@apply min-w-[38rem] desktop:min-w-[45rem]
}
.ha-marginals { .ha-marginals {
@apply max-w-3xl ml-4 md:ml-12 px-4 py-4 relative leading-[1.48] bg-slate-50 numeric-mediaeval; @apply max-w-3xl ml-4 md:ml-12 px-4 py-4 relative leading-[1.48] bg-slate-50 numeric-mediaeval;
} }
@@ -545,34 +541,10 @@
@apply !block font-serif relative w-fit -ml-4 pl-4 unhyphenate; @apply !block font-serif relative w-fit -ml-4 pl-4 unhyphenate;
} }
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
@apply absolute -right-[20rem] desktop:-right-[26rem] w-[19rem] desktop:w-[23rem] text-sm border-l-2 border-slate-300 leading-tight pl-2 bg-slate-50 pr-1 hyphenate mt-1 rounded-sm font-sans hidden md:flex flex-wrap;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal {
@apply inline-block;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox.ha-expanded-box {
@apply pb-1;
}
.ha-additions .ha-tradition a { .ha-additions .ha-tradition a {
@apply !underline decoration-dotted hover:decoration-solid @apply !underline decoration-dotted hover:decoration-solid
} }
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal {
@apply pr-6;
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox .ha-marginal a {
@apply !underline decoration-dotted hover:decoration-solid
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-btn-collapsed-box {
@apply hidden md:block absolute text-slate-600 hover:text-slate-900 cursor-pointer -right-[0.5rem] desktop:-right-[2.5rem] leading-none mt-[2px];
}
.ha-additions .ha-hands { .ha-additions .ha-hands {
@apply pt-6; @apply pt-6;
} }
@@ -692,32 +664,53 @@
@apply !hidden; @apply !hidden;
} }
.ha-tradzhtext .ha-marginal::before,
.ha-lettertext .ha-marginal:before {
@apply absolute top-[0.1rem] bottom-[0.1rem] left-0 w-0.5 bg-slate-400 content-['']
}
.ha-tradzhtext .ha-marginalbox,
.ha-lettertext .ha-marginalbox { .ha-lettertext .ha-marginalbox {
@apply absolute -right-[20rem] desktop:-right-[26rem] w-[19rem] desktop:w-[23rem] text-sm border-l-2 border-slate-300 leading-tight pl-2 bg-slate-50 pr-1 hyphenate mt-1 rounded-sm font-sans hidden md:flex flex-wrap; @apply hidden pl-2 md:block absolute left-full ml-6 mt-1 w-[16rem] desktop:w-[24rem] text-sm leading-tight bg-slate-50 hyphenate rounded-sm font-sans
} }
.ha-lettertext .ha-marginalbox .ha-marginal { .ha-tradzhtext .ha-marginalbox.ha-expanded-box .ha-marginallist,
@apply inline-block; .ha-lettertext .ha-marginalbox.ha-expanded-box .ha-marginallist {
@apply shadow-md
} }
.ha-lettertext .ha-marginalbox.ha-expanded-box { .ha-tradzhtext .ha-marginalbox .ha-marginallist,
@apply pb-1; .ha-lettertext .ha-marginalbox .ha-marginallist {
@apply text-sm leading-tight flex flex-wrap gap-x-4
} }
.ha-lettertext .ha-marginalbox .ha-marginal { .ha-tradzhtext .ha-marginalbox .ha-marginallist .ha-marginal,
@apply pr-6; .ha-lettertext .ha-marginalbox .ha-marginallist .ha-marginal {
@apply pl-2 inline grow relative
} }
.ha-lettertext .ha-marginalbox .ha-marginal .ha-text { .ha-tradzhtext .ha-marginalbox .ha-marginallist .ha-marginal a,
.ha-lettertext .ha-marginalbox .ha-marginallist .ha-marginal a {
}
.ha-lettertext .ha-marginalbox .ha-marginal a {
@apply !underline decoration-dotted hover:decoration-solid @apply !underline decoration-dotted hover:decoration-solid
} }
.ha-tradzhtext .ha-btn-collapsed-box,
.ha-lettertext .ha-btn-collapsed-box { .ha-lettertext .ha-btn-collapsed-box {
@apply hidden md:block absolute text-slate-700 hover:text-slate-900 cursor-pointer -right-[0.5rem] desktop:-right-[2.5rem] leading-none mt-[2px]; @apply absolute left-full ml-4 hidden md:block text-slate-700 hover:text-slate-900 cursor-pointer leading-none mt-0.5;
}
.ha-minwidth .ha-tradzhtext,
.ha-lettertext.ha-minwidth {
@apply min-w-[38rem] desktop:min-w-[55rem]
}
.ha-minwidth .ha-tradzhtext .ha-alignright,
.ha-lettertext.ha-minwidth .ha-alignright {
@apply float-right mr-[20%];
}
.ha-lettertext.ha-minwidth .ha-aligncenter {
@apply absolute left-1/3 whitespace-nowrap -translate-x-1/2;
} }
/* Classes from the General parser */ /* Classes from the General parser */
@@ -926,11 +919,11 @@
} }
.ha-collapsed-box { .ha-collapsed-box {
@apply z-0 overflow-hidden; @apply z-0 overflow-hidden overflow-ellipsis cursor-default
} }
.ha-expanded-box { .ha-expanded-box {
@apply shadow-md z-[1000] !h-auto !max-h-screen; @apply pb-1 z-[1000] !h-auto !max-h-screen;
} }
/* .ha-register .ha-neuzeit .ha-register-body .ha-commenthead .ha-collapsed-box:hover, /* .ha-register .ha-neuzeit .ha-register-body .ha-commenthead .ha-collapsed-box:hover,
@@ -939,6 +932,10 @@
} */ } */
} }
.ha-lettertext .ha-marginalbox:before {
content: "";
}
.ha-lettertext .ha-marginalbox .ha-marginal::after { .ha-lettertext .ha-marginalbox .ha-marginal::after {
content: ""; content: "";
} }

View File

@@ -48,11 +48,9 @@ const getLineHeight = function (element) {
ret; ret;
temp.setAttribute("class", element.className); temp.setAttribute("class", element.className);
temp.innerHTML = "Ü"; temp.innerHTML = "Ü";
element.parentNode.appendChild(temp); element.parentNode.appendChild(temp);
ret = temp.clientHeight; ret = temp.getBoundingClientRect().height;
temp.parentNode.removeChild(temp); temp.parentNode.removeChild(temp);
return ret; return ret;
}; };
@@ -68,7 +66,7 @@ const uncollapsebox = function (element) {
}; };
const addbuttoncaollapsebox = function (element, height, hoverfunction) { const addbuttoncaollapsebox = function (element, height, hoverfunction) {
const btn = document.createElement("div"); let btn = document.createElement("div");
btn.classList.add("ha-btn-collapsed-box"); btn.classList.add("ha-btn-collapsed-box");
if (element.classList.contains("ha-collapsed-box")) { if (element.classList.contains("ha-collapsed-box")) {
@@ -125,37 +123,26 @@ const addbuttoncaollapsebox = function (element, height, hoverfunction) {
}; };
/* TODO: need a resize watcher to undo and reapply the effect on breakpoint */ /* TODO: need a resize watcher to undo and reapply the effect on breakpoint */
const overlappingcollapsebox = function (selector, hoverfunction, parentbox) { const overlappingcollapsebox = function (selector, hoverfunction) {
let boxes = document.querySelectorAll(selector); let boxes = document.querySelectorAll(selector);
let clientrects = [];
let lineheight = 1; let lineheight = 1;
if (boxes.length >= 1) { if (boxes.length >= 1) {
lineheight = getLineHeight(boxes[0]); lineheight = getLineHeight(boxes[0]);
} }
for (element of boxes) { for (var i = 0; i < boxes.length; i++) {
clientrects.push([element, element.getBoundingClientRect()]); if (i < boxes.length - 1) {
} let element = boxes[i];
let thisrect = element.getBoundingClientRect();
let boundigparent = null; let nextrect = boxes[i+1].getBoundingClientRect();
let pb = null; let overlap = thisrect.bottom - nextrect.top;
if (parentbox !== null) { if (overlap >= 0 && !(window.getComputedStyle(element).display === "none")) {
pb = document.getElementById(parentbox); let newlength = thisrect.height - overlap;
if (pb !== null) {
boundigparent = pb.getBoundingClientRect();
}
}
for (var i = 0; i < clientrects.length; i++) {
if (i < clientrects.length - 1) {
let overlap = clientrects[i][1].bottom - clientrects[i + 1][1].top;
if (overlap >= 0) {
let newlength = clientrects[i][1].height - overlap;
let remainder = newlength % lineheight; let remainder = newlength % lineheight;
newlength = newlength - remainder - 1; newlength = newlength - remainder - 1;
collapsebox(clientrects[i][0], newlength); requestAnimationFrame(() => { collapsebox(element, newlength) });
addbuttoncaollapsebox(clientrects[i][0], newlength, hoverfunction); requestAnimationFrame(() => { addbuttoncaollapsebox(element, newlength, hoverfunction) });
} }
} }
} }
@@ -230,26 +217,12 @@ const get_theme_settings = function(standard) {
} }
const collapseboxes = function() { 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-neuzeit .ha-letlinks", true);
overlappingcollapsebox(".ha-forschung .ha-letlinks", true); overlappingcollapsebox(".ha-forschung .ha-letlinks", true);
overlappingcollapsebox(".ha-lettertext .ha-marginalbox", true, "ha-letterbody"); overlappingcollapsebox(".ha-lettertext .ha-marginalbox", true);
} }
//////////////////////////////// ONLOAD //////////////////////////////////// //////////////////////////////// ONLOAD ////////////////////////////////////
window.addEventListener("load", function () { window.addEventListener("load", function () {
// Menu: Show / Hide Buttons for mobile View // Menu: Show / Hide Buttons for mobile View
@@ -271,9 +244,13 @@ window.addEventListener("load", function () {
if (document.getElementById("ha-register-nav") != null) if (document.getElementById("ha-register-nav") != null)
markactive_exact(document.getElementById("ha-register-nav")); markactive_exact(document.getElementById("ha-register-nav"));
// Letter / Register View: Collapse all unfit boxes // Letter / Register View: Collapse all unfit boxes + resize observer
collapseboxes(); collapseboxes();
//this.window.addEventListener('resize', collapseboxes); var doit;
this.window.addEventListener('resize', function() {
this.clearTimeout(doit);
this.setTimeout(collapseboxes, 250);
});
// Letter View: Show / Hide Tabs // Letter View: Show / Hide Tabs