mirror of
https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
synced 2025-10-29 09:15:33 +00:00
Ported libs fo net V6
This commit is contained in:
108
HaWeb/Models/CommentModel.cs
Normal file
108
HaWeb/Models/CommentModel.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
namespace HaWeb.Models;
|
||||
using HaDocument.Models;
|
||||
using HaDocument.Interfaces;
|
||||
using System.Text;
|
||||
using HaXMLReader.Interfaces;
|
||||
using HaXMLReader.EvArgs;
|
||||
|
||||
public class CommentModel
|
||||
{
|
||||
public Comment Comment { get; private set; }
|
||||
public string? ParsedComment { get; private set; }
|
||||
public List<CommentModel>? SubComments { get; private set; }
|
||||
|
||||
// Parsing Rules
|
||||
private static List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _OTagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() {
|
||||
( x => x.Name == "lemma", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement("div", "lemma"))),
|
||||
( x => x.Name == "title", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement("div", "title"))),
|
||||
( x => x.Name == "titel", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement("div", "title")))
|
||||
};
|
||||
|
||||
private static List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _CTagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() {
|
||||
( x => x.Name == "lemma", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("div"))),
|
||||
( x => x.Name == "title", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("div"))),
|
||||
( x => x.Name == "titel", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("div")))
|
||||
};
|
||||
|
||||
private static List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _STagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() {
|
||||
( x => x.Name == "line", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement("br")) )
|
||||
};
|
||||
|
||||
private static List<(Func<Text, bool>, Action<StringBuilder, Text>)> _TextFuncs = new List<(Func<Text, bool>, Action<StringBuilder, Text>)>() {
|
||||
( x => true, ( sb, txt ) => sb.Append(txt.Value) )
|
||||
};
|
||||
|
||||
private static List<(Func<Whitespace, bool>, Action<StringBuilder, Whitespace>)> _WhitespaceFuncs = new List<(Func<Whitespace, bool>, Action<StringBuilder, Whitespace>)>() {
|
||||
( x => true, ( sb, txt ) => sb.Append(txt.Value) )
|
||||
};
|
||||
|
||||
public CommentModel(Comment comment)
|
||||
{
|
||||
this.Comment = comment;
|
||||
if (comment.Kommentare != null && comment.Kommentare.Any())
|
||||
{
|
||||
SubComments = comment.Kommentare.Select(x => new CommentModel(x.Value)).OrderBy(x => x.Comment.Order).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public string returnHTML(ILibrary _lib, IReaderService _readerService)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var rd = _readerService.RequestStringReader(Comment.Lemma);
|
||||
new HTMLHelpers.XMLHelper(rd, sb, _OTagFuncs, _STagFuncs, _CTagFuncs, _TextFuncs, _WhitespaceFuncs);
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateElement("div", "lemma", Comment.Index));
|
||||
new HTMLHelpers.LinkHelper(_lib, rd, sb);
|
||||
rd.Read();
|
||||
var backlinks = _lib.Backlinks.ContainsKey(Comment.Index) ? _lib.Backlinks[Comment.Index]
|
||||
.Where(x => _lib.Metas.ContainsKey(x.Letter))
|
||||
.OrderBy(x => _lib.Metas[x.Letter].Sort)
|
||||
.ThenBy(x => _lib.Metas[x.Letter].Order) : null;
|
||||
if (backlinks != null)
|
||||
{
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateElement("div", "backlinks"));
|
||||
var arrow = false;
|
||||
foreach (var blk in backlinks)
|
||||
{
|
||||
var let = _lib.Metas.ContainsKey(blk.Letter) ? _lib.Metas[blk.Letter] : null;
|
||||
if (let != null)
|
||||
{
|
||||
if (!arrow)
|
||||
{
|
||||
sb.Append(" → ");
|
||||
sb.Append("HKB ");
|
||||
arrow = true;
|
||||
}
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateElement("a", "backlink", "/Briefe/" + let.Autopsic + "#" + blk.Page + "-" + blk.Line));
|
||||
var linkstring = "";
|
||||
var pglnstring = "";
|
||||
linkstring += let.Autopsic;
|
||||
pglnstring += " ( " + blk.Page + "/" + blk.Line + " )";
|
||||
linkstring += pglnstring;
|
||||
sb.Append(linkstring);
|
||||
if (blk != backlinks.Last())
|
||||
sb.Append(", ");
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("a"));
|
||||
}
|
||||
}
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("div"));
|
||||
}
|
||||
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("div"));
|
||||
rd = _readerService.RequestStringReader(Comment.Entry);
|
||||
new HTMLHelpers.XMLHelper(rd, sb, _OTagFuncs, _STagFuncs, _CTagFuncs, _TextFuncs, _WhitespaceFuncs);
|
||||
new HTMLHelpers.LinkHelper(_lib, rd, sb);
|
||||
rd.Read();
|
||||
|
||||
if (SubComments != null && SubComments.Any())
|
||||
{
|
||||
foreach (var k in SubComments)
|
||||
{
|
||||
k.SetHTML(_lib, _readerService);
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public void SetHTML(ILibrary _lib, IReaderService _readerService) {
|
||||
ParsedComment = returnHTML(_lib, _readerService);
|
||||
}
|
||||
}
|
||||
13
HaWeb/Models/RegisterViewModel.cs
Normal file
13
HaWeb/Models/RegisterViewModel.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace HaWeb.Models;
|
||||
using HaDocument.Models;
|
||||
|
||||
public class RegisterViewModel {
|
||||
public string Category { get; set; } = "";
|
||||
public string Id { get; set; } = "";
|
||||
public string Search { get; set; } = "";
|
||||
public bool MaxSearch { get; set; } = false;
|
||||
// TODO: no null-checks in the Page Logic
|
||||
public List<CommentModel>? Comments { get; set; } = null;
|
||||
public List<(string, string)>? AvailableCategories { get; set; } = null;
|
||||
public List<(string, string)>? AvailableSideCategories { get; set; } = null;
|
||||
}
|
||||
36
HaWeb/Models/SearchResult.cs
Normal file
36
HaWeb/Models/SearchResult.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
namespace HaWeb.Models;
|
||||
using HaDocument.Models;
|
||||
using HaDocument.Comparers;
|
||||
using HaDocument.Interfaces;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class DocumentSearchResult {
|
||||
public Meta MetaData { get; }
|
||||
public List<DocumentResult> Results { get; }
|
||||
|
||||
public DocumentSearchResult(Meta meta) {
|
||||
MetaData = meta;
|
||||
Results = new List<DocumentResult>(4);
|
||||
}
|
||||
}
|
||||
|
||||
public class DocumentResult {
|
||||
public string PreviewString { get; }
|
||||
public string Page { get; }
|
||||
public string Line { get; }
|
||||
|
||||
public DocumentResult(string previewstring, string page, string line) {
|
||||
PreviewString = previewstring;
|
||||
Page = page;
|
||||
Line = line;
|
||||
}
|
||||
}
|
||||
|
||||
public class LetterComparer : IComparer<DocumentSearchResult>
|
||||
{
|
||||
public int Compare(DocumentSearchResult first, DocumentSearchResult second)
|
||||
{
|
||||
var cmp = new DefaultComparer();
|
||||
return cmp.Compare(first.MetaData, second.MetaData);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user