diff --git a/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml b/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml index 3beecd4..36a28f6 100644 --- a/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml +++ b/views/routes/components/_inhaltsverzeichnis_eintrag.gohtml @@ -420,7 +420,7 @@ {{- if not $piece.IsContinuation -}} {{- range $annotation := $piece.AnnotationNote.Annotations -}}
- {{ $annotation.Inner.InnerXML }} + {{ Safe $annotation.HTML }}
{{- end -}} {{- end -}} diff --git a/xmlmodels/common.go b/xmlmodels/common.go index 6bbcc61..73f44ce 100644 --- a/xmlmodels/common.go +++ b/xmlmodels/common.go @@ -34,6 +34,14 @@ type URL struct { Inner } +// HTML returns the HTML-transformed version of the URL text +func (u URL) HTML() string { + if u.Inner.InnerXML != "" { + return transformToHTML(u.Inner.InnerXML) + } + return u.Value.Chardata +} + type AnnotationNote struct { Annotations []Annotation `xml:"anmerkung"` Notes []Note `xml:"vermerk"` @@ -57,18 +65,53 @@ func (an AnnotationNote) Readable() map[string]interface{} { return ret } +// ReadableHTML returns HTML versions of annotations and notes +func (an AnnotationNote) ReadableHTML() map[string]interface{} { + ret := make(map[string]interface{}) + annnotations := make([]string, len(an.Annotations)) + for _, a := range an.Annotations { + annnotations = append(annnotations, a.HTML()) + } + + ret["AnnotationsHTML"] = annnotations + + nots := make([]string, len(an.Notes)) + for _, n := range an.Notes { + nots = append(nots, n.HTML()) + } + + ret["NotesHTML"] = nots + return ret +} + type Annotation struct { XMLName xml.Name `xml:"anmerkung"` Value Inner } +// HTML returns the HTML-transformed version of the annotation +func (a Annotation) HTML() string { + if a.Inner.InnerXML != "" { + return transformToHTML(a.Inner.InnerXML) + } + return a.Value.Chardata +} + type Note struct { XMLName xml.Name `xml:"vermerk"` Value Inner } +// HTML returns the HTML-transformed version of the note +func (n Note) HTML() string { + if n.Inner.InnerXML != "" { + return transformToHTML(n.Inner.InnerXML) + } + return n.Value.Chardata +} + type Identifier struct { ID string `xml:"id,attr"` keys []string @@ -88,6 +131,14 @@ type Reference struct { Inner Inner } +// HTML returns the HTML-transformed version of the reference +func (r Reference) HTML() string { + if r.Inner.InnerXML != "" { + return transformToHTML(r.Inner.InnerXML) + } + return "" +} + func (r Reference) Readable(lib *Library) map[string]interface{} { data := make(map[string]interface{}) if r.Category != "" { @@ -98,6 +149,7 @@ func (r Reference) Readable(lib *Library) map[string]interface{} { } data["ReferenceComment"] = r.Inner.InnerXML + data["ReferenceCommentHTML"] = r.HTML() return data } @@ -108,3 +160,31 @@ type Value struct { type Inner struct { InnerXML string `xml:",innerxml"` } + + +// transformToHTML converts XML content to HTML +func transformToHTML(xmlContent string) string { + if xmlContent == "" { + return "" + } + + // Simple string replacements for now + html := xmlContent + + // Transform wwwlink tags to anchor tags + // This is a simple regex replacement - for production you might want more robust parsing + html = strings.ReplaceAll(html, ``, ``) + html = strings.ReplaceAll(html, `">`, `">`) // Keep the closing of the opening tag + + // Transform title tags to em tags + html = strings.ReplaceAll(html, ``, `<em>`) + html = strings.ReplaceAll(html, ``, ``) + + // Remove year tags but keep content + html = strings.ReplaceAll(html, ``, ``) + html = strings.ReplaceAll(html, ``, ``) + + return html +} + diff --git a/xmlmodels/works.go b/xmlmodels/works.go index 13cf87d..167b73c 100644 --- a/xmlmodels/works.go +++ b/xmlmodels/works.go @@ -29,6 +29,14 @@ type Citation struct { Inner } +// HTML returns the HTML-transformed version of the citation +func (c Citation) HTML() string { + if c.Inner.InnerXML != "" { + return transformToHTML(c.Inner.InnerXML) + } + return c.Value.Chardata +} + func (w Work) References() xmlprovider.ResolvingMap[Work] { refs := make(xmlprovider.ResolvingMap[Work]) @@ -57,12 +65,18 @@ func (w Work) Readable(lib *Library) map[string]interface{} { "Title": w.Citation.Title, "Year": w.Citation.Year, "CitationTitle": w.Citation.Title, + "CitationHTML": w.Citation.HTML(), } for k, v := range w.AnnotationNote.Readable() { ret[k] = v } + // Add HTML versions + for k, v := range w.AnnotationNote.ReadableHTML() { + ret[k] = v + } + agents := make([]map[string]interface{}, len(w.AgentRefs)) for k, v := range w.AgentRefs { agents[k] = v.Readable(lib)