Added a lot of stuff

This commit is contained in:
schnulller
2022-05-29 20:27:34 +02:00
parent 9504b89f30
commit 7929a34f5a
14 changed files with 308 additions and 143 deletions

View File

@@ -63,9 +63,11 @@ public class Briefecontroller : Controller
if (tradition != null && !String.IsNullOrWhiteSpace(tradition.Element)) model.ParsedTradition = HaWeb.HTMLHelpers.LetterHelpers.CreateTraditions(_lib, _readerService, marginals, tradition).sb_tradition.ToString();
if (text != null && !String.IsNullOrWhiteSpace(text.Element)) {
var parsedLetter = HaWeb.HTMLHelpers.LetterHelpers.CreateLetter(_lib, _readerService, meta, text, marginals, hands, editreasons);
(model.ParsedText, model.ParsedMarginals) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.ParsedMarginals);
(model.ParsedText, model.ParsedMarginals, model.MinWidth) = (parsedLetter.sb_lettertext.ToString(), parsedLetter.ParsedMarginals, parsedLetter.minwidth);
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))
model.MetaData.HasText = false;
}
// Return

View File

@@ -1,3 +1,5 @@
using System.Web;
namespace HaWeb.HTMLHelpers;
public static class StringHelpers {
public static string GetEnumerationString(IEnumerable<string> strlist)

View File

@@ -1,15 +1,54 @@
namespace HaWeb.Models;
using HaDocument.Models;
using System.Web;
public class BriefeMetaViewModel
{
public Meta Meta { get; private set; }
public bool HasMarginals { get; private set; }
public bool ShowZHData { get; private set; }
public bool HasText { get; set; } = true;
public string? ParsedSenders { get; set; }
public string? ParsedReceivers { get; set; }
public string? ParsedZHString { get; set; }
private string? _ParsedSenders;
private string? _ParsedReceivers;
private string? _ParsedZHString;
public string? ParsedSenders
{
get => _ParsedSenders;
set
{
if (value != null)
_ParsedSenders = HttpUtility.HtmlEncode(value);
else
_ParsedSenders = value;
}
}
public string? ParsedReceivers
{
get => _ParsedReceivers;
set
{
if (value != null)
_ParsedReceivers = HttpUtility.HtmlEncode(value);
else
_ParsedReceivers = value;
}
}
public string? ParsedZHString
{
get => _ParsedZHString;
set
{
if (value != null)
_ParsedZHString = HttpUtility.HtmlEncode(value);
else
_ParsedZHString = value;
}
}
public (BriefeMetaViewModel, string)? Next { get; set; }
public (BriefeMetaViewModel, string)? Prev { get; set; }

View File

@@ -1,4 +1,5 @@
namespace HaWeb.Models;
using System.Web;
public class BriefeViewModel
{
@@ -6,13 +7,69 @@ public class BriefeViewModel
public string Index { get; private set; }
public BriefeMetaViewModel MetaData { get; private set; }
private List<(string, string, string)>? _ParsedMarginals;
private List<(string, string, string, string, string, string)>? _ParsedEdits;
public List<(string, string, string, string, string)>? _ParsedHands;
public string? ParsedText { get; set; }
public List<(string, string, string)>? ParsedMarginals { get; set; }
public string? ParsedTradition { get; set; }
public bool MinWidth { get; set; } = false;
// From, Until, Reference, Edit, sartpage, startline
public List<(string, string, string, string, string, string)>? ParsedEdits { get; set; }
public List<(string, string, string, string, string, string)>? ParsedEdits
{
get => _ParsedEdits;
set
{
if (value != null)
_ParsedEdits = value.Select(x => (
HttpUtility.HtmlEncode(x.Item1),
HttpUtility.HtmlEncode(x.Item2),
x.Item3,
x.Item4,
HttpUtility.HtmlAttributeEncode(x.Item5),
HttpUtility.HtmlAttributeEncode(x.Item6)
)).ToList();
else
_ParsedEdits = null;
}
}
// From, Until, Person, startpage, startline
public List<(string, string, string, string, string)>? ParsedHands { get; set; }
public List<(string, string, string, string, string)>? ParsedHands
{
get => _ParsedHands;
set
{
if (value != null)
_ParsedHands = value.Select(x => (
HttpUtility.HtmlEncode(x.Item1),
HttpUtility.HtmlEncode(x.Item2),
HttpUtility.HtmlEncode(x.Item3),
HttpUtility.HtmlAttributeEncode(x.Item4),
HttpUtility.HtmlAttributeEncode(x.Item5)
)).ToList();
else
_ParsedHands = null;
}
}
// Page, Line, Element
public List<(string, string, string)>? ParsedMarginals
{
get => _ParsedMarginals;
set
{
if (value != null)
_ParsedMarginals = value.Select(x => (
HttpUtility.HtmlEncode(x.Item1),
HttpUtility.HtmlEncode(x.Item2),
x.Item3
)).ToList();
else
_ParsedMarginals = null;
}
}
public BriefeViewModel(string id, string index, BriefeMetaViewModel meta)
{

View File

@@ -1,20 +1,56 @@
namespace HaWeb.Models;
using System.Web;
public class RegisterViewModel {
public class RegisterViewModel
{
public string Category { get; private set; }
public string Id { get; private set; }
public string Title { get; private set; }
private List<(string, string)>? _AvailableCategories;
private List<(string, string)>? _AvailableSideCategories;
public string? Search { get; set; } = null;
public bool? MaxSearch { get; set; } = null;
public List<CommentModel> ParsedComments { get; private set; }
public List<(string, string)>? AvailableCategories { get; set; } = null;
public List<(string, string)>? AvailableSideCategories { get; set; } = null;
public RegisterViewModel(string category, string id, List<CommentModel> parsedComments, string title) {
this.Category = category;
this.Id = id;
// Title, URL
public List<(string, string)>? AvailableCategories
{
get => _AvailableCategories;
set
{
if (value != null)
_AvailableCategories = value.Select(x => (
HttpUtility.HtmlEncode(x.Item1),
HttpUtility.HtmlAttributeEncode(x.Item2))
).ToList();
else
_AvailableCategories = null;
}
}
// Title, URL
public List<(string, string)>? AvailableSideCategories
{
get => _AvailableSideCategories;
set
{
if (value != null)
_AvailableSideCategories = value.Select(x => (
HttpUtility.HtmlEncode(x.Item1),
HttpUtility.HtmlAttributeEncode(x.Item2))
).ToList();
else
_AvailableSideCategories = null;
}
}
public RegisterViewModel(string category, string id, List<CommentModel> parsedComments, string title)
{
this.Category = HttpUtility.HtmlAttributeEncode(category);
this.Id = HttpUtility.HtmlAttributeEncode(id);
this.ParsedComments = parsedComments;
this.Title = title;
this.Title = HttpUtility.HtmlEncode(title);
}
}

View File

@@ -35,12 +35,10 @@ Briefe beim Namen
- GND Normdaten der Namen
- Esther falsch abgekürzt
- Marginalien in dne Traditions an die falsche Zeile gesetzt
- Lessing-Registereitrag
- 224 erse beidenkomm vertauscht
TODO Letter 41 2x Zeile 25, also auch zwei Mal der Kommentar
TODO 148 153 letzter kommentar
TODO 332
TODO 367
TODO 367 684 708 tabellen, min-size für ha-lettertext
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 blinken before js

View File

@@ -1,6 +1,6 @@
namespace HaWeb.Settings.ParsingRules;
using System.Text;
using System.Web;
using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>>)>;
using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>>)>;
using WhitespaceFuncList = List<(Func<HaXMLReader.EvArgs.Whitespace, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Whitespace, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.EditState>>)>;
@@ -144,9 +144,9 @@ public static class EditRules {
( ( x, _) => true, (sb, txt, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TEXTCLASS));
if (reader.State.active_del)
sb.Append(txt.Value.Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">"));
sb.Append(HttpUtility.HtmlEncode(txt.Value).Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">"));
else
sb.Append(txt.Value);
sb.Append(HttpUtility.HtmlEncode(txt.Value));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
})};

View File

@@ -1,5 +1,6 @@
namespace HaWeb.Settings.ParsingRules;
using System.Text;
using System.Web;
using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.LetterState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.LetterState>>)>;
using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.LetterState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.LetterState>>)>;
@@ -74,23 +75,20 @@ public class LetterRules
public static readonly TagFuncList OTagRules = new TagFuncList() {
( ( x, _) => x.Name == "align" && x["pos"] == "center", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ALIGNCENTERCLASS));
reader.State.mustwrap = true;
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;
reader.State.mustwrap = (true, true);
}),
( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ADDEDCLASS)) ),
( ( x, _) => x.Name == "sal", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SALCLASS));
reader.State.mustwrap = true;
reader.State.mustwrap = (true, true);
}),
( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, AQCLASS)) ),
( ( x, _) => x.Name == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUPERCLASS)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, DELCLASS));
reader.State.active_del = true;
}),
( ( x, _) => x.Name == "del", (sb, tag, reader) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, DELCLASS)) ),
( ( 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 == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ULCLASS)) ),
@@ -102,8 +100,8 @@ public class LetterRules
( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, SUBCLASS)) ),
( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TULCLASS)) ),
( ( x, _) => x.Name == "header", (sb, tag, reader) => {
reader.State.mustwrap = true;
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 == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ENTRYCLASS)) ),
@@ -121,9 +119,13 @@ public class LetterRules
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINALCLASS, "m-" + tag["index"]));
reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace;
}),
( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABLECLASS)) ),
( ( x, _) => x.Name == "tabs", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TABLECLASS));
// 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;
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, _) => {
@@ -139,20 +141,17 @@ public class LetterRules
public static readonly TagFuncList CTagRules = new TagFuncList() {
( ( x, _) => x.Name == "align", (sb, tag, reader) => {
reader.State.mustwrap = true;
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 == "sal", (sb, tag, reader) => {
reader.State.mustwrap = true;
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 == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "del", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.active_del = false; // TODO SMTH IS FISHY HERE!
}),
( ( x, _) => x.Name == "del", (sb, tag, reader) => 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 == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
@@ -164,7 +163,7 @@ public class LetterRules
( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "header", (sb, tag, reader) => {
reader.State.mustwrap = true;
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)) ),
@@ -182,7 +181,7 @@ public class LetterRules
( ( x, _) => x.Name == "marginal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ),
( ( x, _) => x.Name == "tab", (sb, tag, reader) => {
reader.State.mustwrap = true;
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)) )
@@ -191,10 +190,10 @@ public class LetterRules
public static readonly TextFuncList TextRules = new TextFuncList() {
( ( x, _) => true, (sb, txt, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TEXTCLASS));
if (reader.State.active_del)
sb.Append(txt.Value.Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">"));
if (reader.OpenTags.Where(x => x.Name == "del").Any())
sb.Append(HttpUtility.HtmlEncode(txt.Value).Replace("", "<" + DEFAULTELEMENT + " class=\"" + CROSSEDDASHCLASS + "\"></" + DEFAULTELEMENT + ">"));
else
sb.Append(txt.Value);
sb.Append(HttpUtility.HtmlEncode(txt.Value));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
})};
@@ -202,16 +201,16 @@ public class LetterRules
( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ),
( (x, _) => x.Name == "line", (sb, tag, reader) => {
if(!String.IsNullOrWhiteSpace(tag["tab"]) || !String.IsNullOrWhiteSpace(tag["type"])) {
reader.State.mustwrap = true;
reader.State.mustwrap = (false, true);
}
// This is NOT the beginning of the text, so we set a br, and then, linecount
if(reader.State.currline != "-1") {
if (!reader.State.mustwrap)
if (!reader.State.mustwrap.Item2)
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
else
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br"));
reader.State.mustwrap = false;
reader.State.mustwrap = (false, false);
// Linecount
if(!String.IsNullOrWhiteSpace(tag["index"])) {
@@ -244,7 +243,7 @@ public class LetterRules
reader.State.currline = tag["index"];
}
// Marginalien
// Marginalien, only for lines with a linenumber
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);
if (margs != null && margs.Any())
@@ -275,14 +274,14 @@ public class LetterRules
if(tag["type"] == "line") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.mustwrap = true;
reader.State.mustwrap = (false, true);
}
// Line tab=
if(!String.IsNullOrWhiteSpace(tag["tab"])) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
if (tag["tab"] != "1") reader.State.mustwrap = true;
if (tag["tab"] != "1") reader.State.mustwrap = (false, true);
}
}
)};

View File

@@ -19,11 +19,16 @@ public class LetterState : HaWeb.HTMLParser.IState {
internal IEnumerable<Editreason>? Edits;
// State
internal bool active_del;
// Must we skip all of the upcoming whitespace?
internal bool active_skipwhitespace;
internal bool mustwrap;
// 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;
// What's the current page?
internal string currpage;
// Does the container need a min-widt, so percentages are useful (tables)
internal bool minwidth;
// Results
internal StringBuilder sb_lettertext;
@@ -46,7 +51,8 @@ public class LetterState : HaWeb.HTMLParser.IState {
active_skipwhitespace = true;
currline = "-1";
currpage = "";
mustwrap = false;
mustwrap = (false, false);
minwidth = false;
// Initialize State
if (Meta.ZH != null) {

View File

@@ -1,12 +1,22 @@
@model BriefeViewModel;
@{
var minwidth = "";
if (Model.MinWidth)
minwidth = "ha-minwidth";
}
<div class="ha-twilighttogglebar">
<div class="ha-letterheader">
@await Html.PartialAsync("/Views/Shared/_LetterHead.cshtml", Model.MetaData)
<div class="ha-letterheadernav">
<div class="ha-lettertabs">
@if (Model.ParsedText != null && !String.IsNullOrWhiteSpace(Model.ParsedText))
{
<a class="" id="ha-lettertextbtn">Brieftext</a>
@if (Model.ParsedMarginals != null)
{
<a class="ha-marginalsbtn " id="ha-marginalsbtn">Stellenkommentar</a>
}
}
<a class="" id="ha-additionsbtn">Überlieferung & Textkritik</a>
<a class="">PDF</a>
</div>
@@ -37,15 +47,16 @@
</div>
</div>
<div class="ha-letterbody " id="ha-letterbody">
<div class="ha-lettertext" id="ha-lettertext">
@if (Model.ParsedText != null)
{
<div class="ha-lettertext @minwidth" id="ha-lettertext">
<div class="ha-linecount ha-firstline">
@if (Model.MetaData.ParsedZHString != null) {
@if (Model.MetaData.ParsedZHString != null)
{
<span>@Html.Raw(Model.MetaData.ParsedZHString)</span>
}
else {
else
{
<div class="ha-tooltip">
<div class="ha-pill">
<span>Neu</span>
@@ -54,14 +65,15 @@
}
</div>
@Html.Raw(@Model.ParsedText)
}
@* It's not beautiful but it's a hack to keep the last comment within parent element boundaries: *@
<br>
<div class="ha-marginalbox"></div>
</div>
<div class="ha-marginals" id="ha-marginals">
@if (Model.ParsedMarginals != null)
{
<div class="ha-marginals " id="ha-marginals">
<table>
@foreach (var marginal in Model.ParsedMarginals)
{
<tr>
@@ -70,9 +82,8 @@
</tr>
}
</table>
}
</div>
}
<div class="ha-additions" id="ha-additions">
@if (Model.ParsedTradition != null)
@@ -91,7 +102,10 @@
<tr class="ha-handentry">
<td>
@* Not beautiful, but here's whitespace in between otherwise *@
<div class="ha-handfrom">@hand.Item1</div>@if (!String.IsNullOrEmpty(hand.Item2)) {<div class="ha-handto">@hand.Item2</div>
<div class="ha-handfrom">@hand.Item1</div>@if (!String.IsNullOrEmpty(hand.Item2))
{
<div
class="ha-handto">@hand.Item2</div>
}
</td>
<td class="ha-handperson">@hand.Item3</td>
@@ -117,7 +131,10 @@
{
<tr>
<td class="ha-editfromto">
<div class="ha-editfrom">@edit.Item1</div>@if (!String.IsNullOrEmpty(edit.Item2)) {<div class="ha-editto">@edit.Item2</div>
<div class="ha-editfrom">@edit.Item1</div>@if (!String.IsNullOrEmpty(edit.Item2))
{
<div
class="ha-editto">@edit.Item2</div>
}
</td>
<td class="ha-editreference">

View File

@@ -12,6 +12,7 @@
<div class="ha-metadatadate">
@Model.Meta.Date
</div>
@if (Model.HasText) {
@if (Model.ParsedZHString != null && Model.ShowZHData) {
<div class="ha-tooltip">
<div class="ha-pill">
@@ -90,8 +91,10 @@
</div>
</div>
}
}
</div>
<div class="ha-metadatapersons">
@if (!String.IsNullOrWhiteSpace(Model.ParsedReceivers)) {
@if (Model.Meta.isDraft == HaDocument.Models.OptionalBool.True) {
<span>@Model.ParsedSenders</span>
<div class="ha-tooltip">
@@ -105,7 +108,9 @@
else {
<span>@Model.ParsedSenders → @Model.ParsedReceivers</span>
}
</div>
}
</div>
</div>
</div>
</div>

View File

@@ -1364,6 +1364,7 @@ body {
.ha-lettertext {
position: relative;
margin-left: 1rem;
max-width: 38rem;
--tw-bg-opacity: 1;
background-color: rgb(248 250 252 / var(--tw-bg-opacity));
padding-left: 1rem;
@@ -1383,6 +1384,22 @@ body {
}
}
@media (min-width: 1190px) {
.ha-lettertext {
max-width: 45rem;
}
}
.ha-lettertext.ha-minwidth {
min-width: 38rem;
}
@media (min-width: 1190px) {
.ha-lettertext.ha-minwidth {
min-width: 45rem;
}
}
.ha-marginals {
position: relative;
margin-left: 1rem;
@@ -1495,8 +1512,7 @@ body {
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
position: absolute;
right: -21rem;
margin-right: 1rem;
right: -20rem;
margin-top: 0.25rem;
display: none;
width: 19rem;
@@ -1526,8 +1542,8 @@ body {
@media (min-width: 1190px) {
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
right: -28rem;
width: 24rem;
right: -26rem;
width: 23rem;
}
}
@@ -1800,8 +1816,7 @@ body {
.ha-lettertext .ha-marginalbox {
position: absolute;
right: -21rem;
margin-right: 1rem;
right: -20rem;
margin-top: 0.25rem;
display: none;
width: 19rem;
@@ -1831,8 +1846,8 @@ body {
@media (min-width: 1190px) {
.ha-lettertext .ha-marginalbox {
right: -28rem;
width: 24rem;
right: -26rem;
width: 23rem;
}
}

View File

@@ -486,7 +486,11 @@
}
.ha-lettertext {
@apply 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 {
@@ -542,7 +546,7 @@
}
.ha-additions .ha-tradition .ha-tradzhtext .ha-marginalbox {
@apply absolute -right-[21rem] desktop:-right-[28rem] w-[19rem] desktop:w-[24rem] text-sm border-l-2 border-slate-300 leading-tight pl-2 bg-slate-50 mr-4 pr-1 hyphenate mt-1 rounded-sm font-sans hidden md:flex flex-wrap;
@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 {
@@ -689,7 +693,7 @@
}
.ha-lettertext .ha-marginalbox {
@apply absolute -right-[21rem] desktop:-right-[28rem] w-[19rem] desktop:w-[24rem] text-sm border-l-2 border-slate-300 leading-tight pl-2 bg-slate-50 mr-4 pr-1 hyphenate mt-1 rounded-sm font-sans hidden md:flex flex-wrap;
@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-lettertext .ha-marginalbox .ha-marginal {

View File

@@ -157,22 +157,6 @@ const overlappingcollapsebox = function (selector, hoverfunction, parentbox) {
collapsebox(clientrects[i][0], newlength);
addbuttoncaollapsebox(clientrects[i][0], newlength, hoverfunction);
}
} else {
if (boundigparent !== null) {
let overlap = clientrects[i][1].bottom - boundigparent.bottom;
console.log(clientrects[i][0]);
console.log(pb);
console.log(clientrects[i][1].bottom, boundigparent.bottom);
console.log(overlap);
if (overlap >= 0) {
let newlength = clientrects[i][1].height - overlap;
console.log(newlength);
let remainder = newlength % lineheight;
newlength = newlength - remainder;
collapsebox(clientrects[i][0], newlength);
addbuttoncaollapsebox(clientrects[i][0], newlength, hoverfunction);
}
}
}
}
};
@@ -295,15 +279,16 @@ window.addEventListener("load", function () {
// Letter View: Show / Hide Tabs
let buttonlist = ["ha-lettertextbtn", "ha-additionsbtn", "ha-marginalsbtn"];
let divlist = ["ha-lettertext", "ha-additions", "ha-marginals"];
showhidebutton(
"ha-lettertextbtn",
"ha-lettertext",
buttonlist,
divlist,
false
);
if (this.document.getElementById("ha-lettertextbtn") !== null) {
showhidebutton("ha-lettertextbtn", "ha-lettertext", buttonlist, divlist, false);
showhidebutton("ha-additionsbtn", "ha-additions", buttonlist, divlist, true);
showhidebutton("ha-marginalsbtn", "ha-marginals", buttonlist, divlist, true);
} else {
showhidebutton("ha-lettertextbtn", "ha-lettertext", buttonlist, divlist, true);
showhidebutton("ha-additionsbtn", "ha-additions", buttonlist, divlist, false);
showhidebutton("ha-marginalsbtn", "ha-marginals", buttonlist, divlist, true);
}
// Theme: Get saved theme from memory and check the box accordingly
// Register theme toggler