diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json
index 1bdaf855b..d6175d880 100644
--- a/ccm-cms/package-lock.json
+++ b/ccm-cms/package-lock.json
@@ -10,10 +10,40 @@
"integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
"dev": true
},
+ "@editorjs/editorjs": {
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.22.2.tgz",
+ "integrity": "sha512-rPCv7Z5LZebreQaaL4DZuWzoVGEqwB+P7BF1dsefGQNBmLyeLF412topeW2b6e+g4l1oQ7t75kCOACNTEyYYIA==",
+ "requires": {
+ "codex-notifier": "^1.1.2",
+ "codex-tooltip": "^1.0.2",
+ "nanoid": "^3.1.22"
+ }
+ },
+ "@editorjs/header": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/@editorjs/header/-/header-2.6.1.tgz",
+ "integrity": "sha512-EsnyVFv5uThpU9tbQ/dUPFCQoa/sBFy2n+9tN3wOXJGx7sjea4fdcacJ2UYhO+7pCgZ+aSgmMOyGLYHUFbchvA=="
+ },
+ "@editorjs/nested-list": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@editorjs/nested-list/-/nested-list-1.0.2.tgz",
+ "integrity": "sha512-NumQfEivI29lOAuDMyVhn+VXUDGvWUPJMkjgKlUYRbnwgnPL4tK007+UzoVPLxv/f6lPOqeKcApvCj/MfskPNw=="
+ },
+ "@editorjs/quote": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@editorjs/quote/-/quote-2.4.0.tgz",
+ "integrity": "sha512-IWOBWjL2ngPP63GcIAltyD9kc7OVZFma4kS+T5JRHvKKDspYsnmrxsbRmCPc+coZQzqPxXHkiOZuNMdmGX/Y3w=="
+ },
+ "@editorjs/table": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@editorjs/table/-/table-2.0.1.tgz",
+ "integrity": "sha512-PB8VM+GPRwGy7IlF+WrEQw2A2c36xEXBnYIvf2VGNJo8A7PjYHtuWrlyHHCnGpY4lHXYnavZ/U8pKAfXv86XjA=="
+ },
"@tiptap/core": {
- "version": "2.0.0-beta.102",
- "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.102.tgz",
- "integrity": "sha512-ykSAyYfyb14xiYWQ6mTaa+GF6j5dQvSDgeXQDNcy8xvBjZHm1g+51D0jm9FF/dsrY0rEps5h8yX883h7MaGFHA==",
+ "version": "2.0.0-beta.104",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.104.tgz",
+ "integrity": "sha512-eGmHljAgGFcIFHTykBaxOCUOeGJoZOJOwa3il7ci2GxrrMyvhvU421mv5njFoHxAiNQJEgdu+kWitDGYuxbixg==",
"requires": {
"@types/prosemirror-commands": "^1.0.4",
"@types/prosemirror-inputrules": "^1.0.4",
@@ -22,7 +52,7 @@
"@types/prosemirror-schema-list": "^1.0.3",
"@types/prosemirror-state": "^1.2.7",
"@types/prosemirror-transform": "^1.1.4",
- "@types/prosemirror-view": "^1.17.2",
+ "@types/prosemirror-view": "^1.19.0",
"prosemirror-commands": "^1.1.10",
"prosemirror-inputrules": "^1.1.3",
"prosemirror-keymap": "^1.1.3",
@@ -30,7 +60,7 @@
"prosemirror-schema-list": "^1.1.5",
"prosemirror-state": "^1.3.4",
"prosemirror-transform": "^1.3.2",
- "prosemirror-view": "^1.19.3"
+ "prosemirror-view": "^1.20.0"
}
},
"@tiptap/extension-blockquote": {
@@ -60,9 +90,9 @@
"integrity": "sha512-Kakg/RMiVrxjzIkLVDXtbCzRh/9W8dgSG04IhMZNOI8N9vWn8Z78jdUyxEEDTcL/JyWWcMxn9AsJw2U5ajO3pA=="
},
"@tiptap/extension-code-block": {
- "version": "2.0.0-beta.17",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.17.tgz",
- "integrity": "sha512-u3RY991mXtjuw+trVaDwbAhuPPlU8l6kS4rXIxWJ5W/sNElbmfHLVu7RP++YwM8KOQrCrQl8TJbZTEIekMw61w==",
+ "version": "2.0.0-beta.18",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.18.tgz",
+ "integrity": "sha512-E2gz7ovl9nXLZzheqLyN3hi7A10fCaodDn4DvIl4wiEbKZpF7WFBNeb+FQetWNay9UWNeDO94SCX9+rT9H+yHA==",
"requires": {
"prosemirror-inputrules": "^1.1.3"
}
@@ -91,9 +121,9 @@
}
},
"@tiptap/extension-hard-break": {
- "version": "2.0.0-beta.15",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.15.tgz",
- "integrity": "sha512-MS7MjGOtKtC1bVNAShwCetFRuk8nPr/j18OOzKChNrJFrZXWNJrid3dUojwDLqCraYdzSTmiOmMgU+yoUe/gnw=="
+ "version": "2.0.0-beta.16",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.16.tgz",
+ "integrity": "sha512-vRw8OIJlvlr17Y7mtJGL/dWbotX9fjgmA/zYqL//UIXQjp1FWW5JMh5E1Z5+jlJpGWjsWGH8fHpGSM2JCZVPRw=="
},
"@tiptap/extension-heading": {
"version": "2.0.0-beta.15",
@@ -131,9 +161,9 @@
"integrity": "sha512-t6xwEqP+d5443Ul2Jvqz9kXb3ro7bA7yY9HA0vskm3120WxxHW9jxgxZN+82Ot5Tm7nXOAlsN6vuqnt4idnxZQ=="
},
"@tiptap/extension-ordered-list": {
- "version": "2.0.0-beta.15",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.15.tgz",
- "integrity": "sha512-j9Xh8CYtV+C/wrTXEWN+U7NJIQ/cQrjta80Mm2hFiE2KDtFNkpsPqG6UBoky04EPFphR5xDUsO1nCT7T7Tei5A==",
+ "version": "2.0.0-beta.16",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.16.tgz",
+ "integrity": "sha512-3n0h5FBfQqBrN/zqF/Ngoyd1bZxeIRLwWI7ak4KulpvOg5V/yw3sw5CSxr2f13ZI9AgGaTq8yOsTYs9dkCCnsQ==",
"requires": {
"prosemirror-inputrules": "^1.1.3"
}
@@ -159,12 +189,12 @@
"integrity": "sha512-rTQCnSnloSf6UN1y3zhu6j41MxrcCVWm5JIPX8VEt60WsOXJLAc/YJHLYi2FWhh/Psq8k78sPrmZbjYUrj3Dkw=="
},
"@tiptap/extension-table": {
- "version": "2.0.0-beta.29",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.0.0-beta.29.tgz",
- "integrity": "sha512-2yK4dZboe7+KQoJeM0p6v7xx+G/yKDWbbtDtYRnFecD2Oiz1u44DeMKGzVqPXcMYWxmCnAeUK0kcbmwnPYyBTg==",
+ "version": "2.0.0-beta.30",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.0.0-beta.30.tgz",
+ "integrity": "sha512-s6+HRo3sFv7SUprsUAAF27hg7inITpzl78If3XdrpscuzTVuRmd7GsFnY+aZGPVikekwCMjp/0klE92P4A7w0w==",
"requires": {
"prosemirror-tables": "^1.1.1",
- "prosemirror-view": "^1.19.3"
+ "prosemirror-view": "^1.20.0"
}
},
"@tiptap/extension-table-cell": {
@@ -188,31 +218,36 @@
"integrity": "sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw=="
},
"@tiptap/starter-kit": {
- "version": "2.0.0-beta.101",
- "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.101.tgz",
- "integrity": "sha512-1SoVrPe2JMPo5/Je0NprZWN8G0q0EOTpoVHQ/+VwthectJBz1TyCuNOqoR1WNL9II6Fj9AZelyhPWacw7vM27A==",
+ "version": "2.0.0-beta.103",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.103.tgz",
+ "integrity": "sha512-Kmd7hLCc2JmmMijc6ng7u+OQBJYZBQJKznjgiUSuwJhAkROVdjgx7mz8p2J+tl81QpM4yHVBpj4W9Al2kiFRng==",
"requires": {
- "@tiptap/core": "^2.0.0-beta.102",
+ "@tiptap/core": "^2.0.0-beta.104",
"@tiptap/extension-blockquote": "^2.0.0-beta.15",
"@tiptap/extension-bold": "^2.0.0-beta.15",
"@tiptap/extension-bullet-list": "^2.0.0-beta.15",
"@tiptap/extension-code": "^2.0.0-beta.16",
- "@tiptap/extension-code-block": "^2.0.0-beta.17",
+ "@tiptap/extension-code-block": "^2.0.0-beta.18",
"@tiptap/extension-document": "^2.0.0-beta.13",
"@tiptap/extension-dropcursor": "^2.0.0-beta.19",
"@tiptap/extension-gapcursor": "^2.0.0-beta.19",
- "@tiptap/extension-hard-break": "^2.0.0-beta.15",
+ "@tiptap/extension-hard-break": "^2.0.0-beta.16",
"@tiptap/extension-heading": "^2.0.0-beta.15",
"@tiptap/extension-history": "^2.0.0-beta.16",
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.19",
"@tiptap/extension-italic": "^2.0.0-beta.15",
"@tiptap/extension-list-item": "^2.0.0-beta.14",
- "@tiptap/extension-ordered-list": "^2.0.0-beta.15",
+ "@tiptap/extension-ordered-list": "^2.0.0-beta.16",
"@tiptap/extension-paragraph": "^2.0.0-beta.17",
"@tiptap/extension-strike": "^2.0.0-beta.17",
"@tiptap/extension-text": "^2.0.0-beta.13"
}
},
+ "@types/editorjs__header": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@types/editorjs__header/-/editorjs__header-2.6.0.tgz",
+ "integrity": "sha512-J9TyO/BjNVddi+syyXpvMRMtVz5Z62pwmFKynWsgP+wnJYdWF8ABqgomokIsAvuEwH5NHa/YxsTltYcPPGCRRQ=="
+ },
"@types/eslint": {
"version": "7.28.0",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
@@ -358,9 +393,9 @@
}
},
"@types/prosemirror-view": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.18.0.tgz",
- "integrity": "sha512-7NBy7qIV/ig49ThfkrIJrvW8E+HwumMgmpopUTYJlKwOh/fQ6SVUG/RtdnAIBLD+4uK0R2SMObbGZm06x6OwbA==",
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.19.0.tgz",
+ "integrity": "sha512-Y8OX9L+Yni0HgXAN9wcNSf61IId13uqpURnRC5WkmCOlVDsr35vfGjj+tcaQL4dZzblsu3bRkXI/c0oGXp+xgw==",
"requires": {
"@types/prosemirror-model": "*",
"@types/prosemirror-state": "*",
@@ -726,6 +761,16 @@
"shallow-clone": "^3.0.0"
}
},
+ "codex-notifier": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/codex-notifier/-/codex-notifier-1.1.2.tgz",
+ "integrity": "sha512-DCp6xe/LGueJ1N5sXEwcBc3r3PyVkEEDNWCVigfvywAkeXcZMk9K41a31tkEFBW0Ptlwji6/JlAb49E3Yrxbtg=="
+ },
+ "codex-tooltip": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/codex-tooltip/-/codex-tooltip-1.0.2.tgz",
+ "integrity": "sha512-oC+Bu5X/zyhbPydgMSLWKoM/+vkJMqaLWu3Dt/jZgXS3MWK23INwC5DMBrVXZSufAFk0i0SUni38k9rLMyZn/w=="
+ },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -781,6 +826,11 @@
"object-keys": "^1.0.12"
}
},
+ "editorjs-latex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/editorjs-latex/-/editorjs-latex-1.0.0.tgz",
+ "integrity": "sha512-HIfVZFy4CJpLQk6xgNUmftxzTo5p4POFFEnW3cPUAKoqcL9FhLPr3vm8Yll+qirHla1b8okNmyw8lPIfUtXLaw=="
+ },
"electron-to-chromium": {
"version": "1.3.830",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz",
@@ -1416,6 +1466,11 @@
"brace-expansion": "^1.1.7"
}
},
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q=="
+ },
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -1734,9 +1789,9 @@
}
},
"prosemirror-view": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.20.0.tgz",
- "integrity": "sha512-OqU/bHUIiJhpyb2ytX4fLalYAJJOyZ0k5H0AibP/WPsdHq9CqmJFU676gO+N8WWhR5tVz1NxsqMZgEBy5Lc6GQ==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.20.1.tgz",
+ "integrity": "sha512-djWORhy3a706mUH4A2dgEEV0IPZqQd1tFyz/ZVHJNoqhSgq82FwG6dq7uqHeUB2KdVSNfI2yc3rwfqlC/ll2pA==",
"requires": {
"prosemirror-model": "^1.14.3",
"prosemirror-state": "^1.0.0",
diff --git a/ccm-cms/package.json b/ccm-cms/package.json
index 9987adc99..24f32b5c6 100644
--- a/ccm-cms/package.json
+++ b/ccm-cms/package.json
@@ -22,17 +22,24 @@
"webpack-cli": "^4.8.0"
},
"dependencies": {
- "@tiptap/core": "^2.0.0-beta.102",
+ "@editorjs/editorjs": "^2.22.2",
+ "@editorjs/header": "^2.6.1",
+ "@editorjs/nested-list": "^1.0.2",
+ "@editorjs/quote": "^2.4.0",
+ "@editorjs/table": "^2.0.1",
+ "@tiptap/core": "^2.0.0-beta.103",
"@tiptap/extension-subscript": "^2.0.0-beta.4",
"@tiptap/extension-superscript": "^2.0.0-beta.4",
- "@tiptap/extension-table": "^2.0.0-beta.29",
+ "@tiptap/extension-table": "^2.0.0-beta.30",
"@tiptap/extension-table-cell": "^2.0.0-beta.14",
"@tiptap/extension-table-header": "^2.0.0-beta.16",
"@tiptap/extension-table-row": "^2.0.0-beta.14",
- "@tiptap/starter-kit": "^2.0.0-beta.101",
+ "@tiptap/starter-kit": "^2.0.0-beta.102",
+ "@types/editorjs__header": "^2.6.0",
"acorn": "^8.4.1",
"bootstrap": "^4.6.0",
"bootstrap-icons": "^1.5.0",
+ "editorjs-latex": "^1.0.0",
"jquery": "^3.6.0",
"popper.js": "^1.16.1",
"sortablejs": "^1.14.0"
diff --git a/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor-tiptap.xhtml b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor-tiptap.xhtml
new file mode 100644
index 000000000..eeb024410
--- /dev/null
+++ b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor-tiptap.xhtml
@@ -0,0 +1,659 @@
+]>
+
+ #{cc.attrs.title}
+ #{cc.attrs.title}
+ #{cc.attrs.title}
+ #{cc.attrs.title}
+ #{cc.attrs.title}
+ #{cc.attrs.title}
+
+ #{cc.attrs.editDialogTitle} #{cc.attrs.selectedLocale}
+
+
+ #{cc.attrs.editDialogTitle} #{cc.attrs.selectedLocale}
+
+
+ #{cc.attrs.editDialogTitle} #{cc.attrs.selectedLocale}
+
+
+ #{cc.attrs.editDialogTitle} #{cc.attrs.selectedLocale}
+
+
+ #{cc.attrs.editDialogTitle} #{cc.attrs.selectedLocale}
+
+ #{cc.attrs.title}
- #{cc.attrs.title}
- #{cc.attrs.title}
- #{cc.attrs.title}
- #{cc.attrs.title}
- #{cc.attrs.title}
-