implemented the Ticker module with a native ProseMirror document renderer and integrated API support for structured content, navigation trees, and proxied files

This commit is contained in:
2026-07-09 00:51:08 +02:00
parent 1114291313
commit cedeb06569
57 changed files with 4758 additions and 43 deletions
@@ -0,0 +1,10 @@
# ProseMirror contract fixtures
These JSON files are copied verbatim from the MarianumConnect backend test
resources, which are the canonical source:
backend/services/ticker/src/test/resources/prosemirror-fixtures/
They pin the wire format shared between the backend content validator and this
app's renderer. When the backend fixtures change, re-copy them here — do not
hand-edit these files.
@@ -0,0 +1,51 @@
{
"type": "doc",
"content": [
{
"type": "callout",
"attrs": {
"variant": "info"
},
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Ein wichtiger Hinweis."
}
]
}
]
},
{
"type": "callout",
"attrs": {
"variant": "warning"
},
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Achtung."
}
]
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": null
}
}
]
}
@@ -0,0 +1,33 @@
{
"type": "doc",
"content": [
{
"type": "image",
"attrs": {
"src": "https://example.org/bild.png",
"alt": "Beschreibung",
"title": "Titel",
"width": "50%",
"align": "center",
"href": "https://example.org"
}
},
{
"type": "image",
"attrs": {
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"alt": "Einzelpixel",
"title": null,
"width": null,
"align": "left",
"href": null
}
},
{
"type": "paragraph",
"attrs": {
"textAlign": null
}
}
]
}
@@ -0,0 +1,113 @@
{
"type": "doc",
"content": [
{
"type": "heading",
"attrs": {
"textAlign": "left",
"level": 1
},
"content": [
{
"type": "text",
"text": "Vollständiges Dokument"
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": "justify"
},
"content": [
{
"type": "text",
"text": "Absatz mit "
},
{
"type": "text",
"marks": [
{
"type": "bold"
},
{
"type": "italic"
}
],
"text": "fett-kursivem"
},
{
"type": "text",
"text": " Text"
},
{
"type": "hardBreak"
},
{
"type": "text",
"text": "nach einem Umbruch."
}
]
},
{
"type": "blockquote",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Ein Zitat."
}
]
}
]
},
{
"type": "codeBlock",
"attrs": {
"language": "java"
},
"content": [
{
"type": "text",
"text": "System.out.println(\"Hallo\");"
}
]
},
{
"type": "horizontalRule"
},
{
"type": "bulletList",
"content": [
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Letzter Punkt"
}
]
}
]
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": null
}
}
]
}
@@ -0,0 +1,92 @@
{
"type": "doc",
"content": [
{
"type": "bulletList",
"content": [
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Erster Punkt"
}
]
}
]
},
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Zweiter Punkt"
}
]
}
]
}
]
},
{
"type": "orderedList",
"attrs": {
"start": 1
},
"content": [
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Eins"
}
]
}
]
},
{
"type": "listItem",
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Zwei"
}
]
}
]
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": null
}
}
]
}
@@ -0,0 +1,99 @@
{
"type": "doc",
"content": [
{
"type": "table",
"content": [
{
"type": "tableRow",
"content": [
{
"type": "tableHeader",
"attrs": {
"colspan": 2,
"rowspan": 1,
"colwidth": [
120,
200
]
},
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Überschrift"
}
]
}
]
}
]
},
{
"type": "tableRow",
"content": [
{
"type": "tableCell",
"attrs": {
"colspan": 1,
"rowspan": 1,
"colwidth": [
120
]
},
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Zelle A"
}
]
}
]
},
{
"type": "tableCell",
"attrs": {
"colspan": 1,
"rowspan": 1,
"colwidth": [
200
]
},
"content": [
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Zelle B"
}
]
}
]
}
]
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": null
}
}
]
}
@@ -0,0 +1,141 @@
{
"type": "doc",
"content": [
{
"type": "heading",
"attrs": {
"textAlign": "center",
"level": 2
},
"content": [
{
"type": "text",
"text": "Überschrift"
}
]
},
{
"type": "paragraph",
"attrs": {
"textAlign": "left"
},
"content": [
{
"type": "text",
"text": "Normal "
},
{
"type": "text",
"marks": [
{
"type": "bold"
}
],
"text": "fett"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "italic"
}
],
"text": "kursiv"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "strike"
}
],
"text": "durchgestrichen"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "underline"
}
],
"text": "unterstrichen"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "code"
}
],
"text": "code()"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "highlight",
"attrs": {
"color": "#fef08a"
}
}
],
"text": "markiert"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "textStyle",
"attrs": {
"fontSize": "20px"
}
}
],
"text": "größer"
},
{
"type": "text",
"text": " "
},
{
"type": "text",
"marks": [
{
"type": "link",
"attrs": {
"href": "https://example.org",
"target": "_blank",
"rel": "noopener noreferrer"
}
}
],
"text": "Verweis"
}
]
}
]
}