diff --git a/ccm-cms-editor/package-lock.json b/ccm-cms-editor/package-lock.json index 2fc550751..e77df16d7 100644 --- a/ccm-cms-editor/package-lock.json +++ b/ccm-cms-editor/package-lock.json @@ -1,12 +1,12 @@ { "name": "@librecms/ccm-cms-editor", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-04-28T183714", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms-editor", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-04-28T183714", "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", diff --git a/ccm-cms-editor/package.json b/ccm-cms-editor/package.json index 8ad5e1fc4..1a62aa9dd 100644 --- a/ccm-cms-editor/package.json +++ b/ccm-cms-editor/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms-editor", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-04-28T183714", "description": "HTML WYSIWYG editor for LibreCMS based on TipTap", "main": "target/generated-resources/assets/ccm-cms-editor.js", "types": "target/generated-resources/assets/ccm-cms-editor.d.ts", diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index c3a91b439..7b127f685 100644 --- a/ccm-cms/package-lock.json +++ b/ccm-cms/package-lock.json @@ -1,15 +1,22 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-05-03T181122", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-05-03T181122", "license": "LGPL-3.0-or-later", "dependencies": { - "@librecms/ccm-cms-editor": "../ccm-cms-editor", + "@tiptap/core": "^2.0.0-beta.127", + "@tiptap/extension-subscript": "^2.0.0-beta.4", + "@tiptap/extension-superscript": "^2.0.0-beta.4", + "@tiptap/extension-table": "^2.0.0-beta.35", + "@tiptap/extension-table-cell": "^2.0.0-beta.15", + "@tiptap/extension-table-header": "^2.0.0-beta.17", + "@tiptap/extension-table-row": "^2.0.0-beta.14", + "@tiptap/starter-kit": "^2.0.0-beta.129", "acorn": "^8.5.0", "bootstrap": "^4.6.0", "bootstrap-icons": "^1.5.0", @@ -31,7 +38,8 @@ }, "../ccm-cms-editor": { "name": "@librecms/ccm-cms-editor", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-04-28T183714", + "extraneous": true, "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", @@ -67,9 +75,370 @@ "node": ">=10.0.0" } }, - "node_modules/@librecms/ccm-cms-editor": { - "resolved": "../ccm-cms-editor", - "link": true + "node_modules/@tiptap/core": { + "version": "2.0.0-beta.175", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.175.tgz", + "integrity": "sha512-dDf+2GtifskNLysn49kaCIz0o5hf6VDZ8J7jSQAfoPDEkEkfw9OKhWrR7NzWW6J34CSJreFDRiWkGt8Qz283Vg==", + "dependencies": { + "@types/prosemirror-commands": "^1.0.4", + "@types/prosemirror-keymap": "^1.0.4", + "@types/prosemirror-model": "^1.16.0", + "@types/prosemirror-schema-list": "^1.0.3", + "@types/prosemirror-state": "^1.2.8", + "@types/prosemirror-transform": "^1.1.5", + "@types/prosemirror-view": "^1.23.1", + "prosemirror-commands": "^1.2.1", + "prosemirror-keymap": "^1.1.5", + "prosemirror-model": "^1.16.1", + "prosemirror-schema-list": "^1.1.6", + "prosemirror-state": "^1.3.4", + "prosemirror-transform": "^1.3.3", + "prosemirror-view": "^1.23.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz", + "integrity": "sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.26.tgz", + "integrity": "sha512-pnO0I5sEQM3pmowjMGQ74adLzvc6HqGyLyqMizaGMicPu9uTYlSdId+qckYEEgPwPMaEShtv2Vg+ZHs7KVqfcg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.26.tgz", + "integrity": "sha512-1n5HV8gY1tLjPk4x48nva6SZlFHoPlRfF6pqSu9JcJxPO7FUSPxUokuz4swYNe0LRrtykfyNz44dUcxKVhoFow==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.26.tgz", + "integrity": "sha512-QcFWdEFfbJ1n5UFFBD17QPPAJ3J5p/b7XV484u0shCzywO7aNPV32QeHy1z0eMoyZtCbOWf6hg/a7Ugv8IwpHw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.0.0-beta.37", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.37.tgz", + "integrity": "sha512-mJAM+PHaNoKRYwM3D36lZ51/aoPxxvZNQn3UBnZ6G7l0ZJSgB3JvBEzqK6S8nNFeYIIxGwv4QF6vXe4MG9ie2g==", + "dependencies": { + "prosemirror-state": "^1.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.15.tgz", + "integrity": "sha512-ypENC+xUYD5m2t+KOKNYqyXnanXd5fxyIyhR1qeEEwwQwMXGNrO3kCH6O4mIDCpy+/WqHvVay2tV5dVsXnvY8w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.0.0-beta.25", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.25.tgz", + "integrity": "sha512-GYf5s6dkZtsDy+TEkrQK6kLbfbitG4qnk02D+FlhlJMI/Nnx8rYCRJbwEHDdqrfX7XwZzULMqqqHvzxZYrEeNg==", + "dependencies": { + "@types/prosemirror-dropcursor": "^1.0.3", + "prosemirror-dropcursor": "^1.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.0.0-beta.34", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.34.tgz", + "integrity": "sha512-Vm8vMWWQ2kJcUOLfB5CEo5pYgyudI7JeeiZvX9ScPmUmgKVYhEpt3EAICY9pUYJ41aAVH35gZLXkUtsz2f9GHw==", + "dependencies": { + "@types/prosemirror-gapcursor": "^1.0.4", + "prosemirror-gapcursor": "^1.2.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.0.0-beta.30", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz", + "integrity": "sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz", + "integrity": "sha512-nR6W/3rjnZH1Swo7tGBoYsmO6xMvu9MGq6jlm3WVHCB7B3CsrRvCkTwGjVIbKTaZC4bQfx5gvAUpQFvwuU+M5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.21.tgz", + "integrity": "sha512-0v8Cl30V4dsabdpspLdk+f+lMoIvLFlJN5WRxtc7RRZ5gfJVxPHwooIKdvC51brfh/oJtWFCNMRjhoz0fRaF9A==", + "dependencies": { + "@types/prosemirror-history": "^1.0.3", + "prosemirror-history": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.0.0-beta.31", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.31.tgz", + "integrity": "sha512-MNc4retfjRgkv3qxqGya0+/BEd1Kmn+oMsCRvE+8x3sXyKIse+vdqMuG5qUcA6np0ZD/9hh1riiQ1GQdgc23Ng==", + "dependencies": { + "prosemirror-state": "^1.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz", + "integrity": "sha512-vejGe2ra4K5ipFOn1U9viqF9X9nPTX8WSJpSOux+9UbKjHpANy7bz69tp66OIi/Wh5L/MMDc+luH/04qfVnpZw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.20.tgz", + "integrity": "sha512-5IPEspJt38t9ROj4xLUesOVEYlTT/R9Skd9meHRxJQZX1qrzBICs5PC/WRIsnexrvTBhdxpYgCYjpvpsJBlKuQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.27.tgz", + "integrity": "sha512-apFDeignxdZb3cA3p1HJu0zw1JgJdBYUBz1r7f99qdNybYuk3I/1MPUvlOuOgvIrBB/wydoyVDP+v9F7QN3tfQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.0.0-beta.23", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.23.tgz", + "integrity": "sha512-VWAxyzecErYWk97Kv/Gkghh97zAQTcaVOisEnYYArZAlyYDaYM48qVssAC/vnRRynP2eQxb1EkppbAxE+bMHAA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.27.tgz", + "integrity": "sha512-2dmCgtesuDdivM/54Q+Y6Tc3JbGz1SkHP6c62piuqBiYLWg3xa16zChZOhfN8szbbQlBgLT6XRTDt3c2Ux+Dug==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-subscript": { + "version": "2.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.0.0-beta.10.tgz", + "integrity": "sha512-er8/1lp0Rb+SKwEioW0w4oVf3EkdQZ0WS/5kPBG4W0DncfUMT+bw5de76S3kRL9PLZ9UShAL7wuXtuiSi5QsMw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-superscript": { + "version": "2.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.0.0-beta.10.tgz", + "integrity": "sha512-TUUBS8XsD2MorGORYVlhGDH7wcc9diSbHscD4Dnz8pKWVR0JPUd/od4h5qSffDzAOKxtphTiX9LOFWk6zVooKg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-table": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.0.0-beta.48.tgz", + "integrity": "sha512-Hcx3kOBQyazQ3dV0Oq4zKIl1og4EqUuZ5nEWxwcb8HgxSUYIhAJQ7pujPZiRLfkoFy92oVwmh9KhBRfQqRkUpQ==", + "dependencies": { + "prosemirror-tables": "^1.1.1", + "prosemirror-view": "^1.23.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-table-cell": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.0.0-beta.20.tgz", + "integrity": "sha512-IllQyxLQvgm1FAewz3U+DkgNHRthmuVrtUQnG6la45qdUOLCOrpFbRRaQ1LJ/BpbvZ2Xs1o2yAa97BqZOPwovQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-table-header": { + "version": "2.0.0-beta.22", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.0.0-beta.22.tgz", + "integrity": "sha512-nMrghrfl+ZS4EDixs3lgXnHw1Q+ECyTugpRvS36rP7b8GFp3GXm9DfbIAUzwGGfcq1D7DwRnJUDM6ARdWXyw0w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-table-row": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.0.0-beta.19.tgz", + "integrity": "sha512-ldEVDpIUX7ZqbViTy4c/RfyNGRv++O/r3A/Ivuon1PykaDDTbPlp5JM89FunAD39cLAbo2HKtweqdmzCMlZsqA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.15.tgz", + "integrity": "sha512-S3j2+HyV2gsXZP8Wg/HA+YVXQsZ3nrXgBM9HmGAxB0ESOO50l7LWfip0f3qcw1oRlh5H3iLPkA6/f7clD2/TFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0-beta.1" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.0.0-beta.184", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.184.tgz", + "integrity": "sha512-FgF94i5RQzXiGAIkaubnXEaYwJfiZRbMPZcmarwNo8IyqPnLT34Q1yjw/qZ3nv7rDehWV5l/zenbrrNtPYVCkA==", + "dependencies": { + "@tiptap/core": "^2.0.0-beta.175", + "@tiptap/extension-blockquote": "^2.0.0-beta.26", + "@tiptap/extension-bold": "^2.0.0-beta.26", + "@tiptap/extension-bullet-list": "^2.0.0-beta.26", + "@tiptap/extension-code": "^2.0.0-beta.26", + "@tiptap/extension-code-block": "^2.0.0-beta.37", + "@tiptap/extension-document": "^2.0.0-beta.15", + "@tiptap/extension-dropcursor": "^2.0.0-beta.25", + "@tiptap/extension-gapcursor": "^2.0.0-beta.34", + "@tiptap/extension-hard-break": "^2.0.0-beta.30", + "@tiptap/extension-heading": "^2.0.0-beta.26", + "@tiptap/extension-history": "^2.0.0-beta.21", + "@tiptap/extension-horizontal-rule": "^2.0.0-beta.31", + "@tiptap/extension-italic": "^2.0.0-beta.26", + "@tiptap/extension-list-item": "^2.0.0-beta.20", + "@tiptap/extension-ordered-list": "^2.0.0-beta.27", + "@tiptap/extension-paragraph": "^2.0.0-beta.23", + "@tiptap/extension-strike": "^2.0.0-beta.27", + "@tiptap/extension-text": "^2.0.0-beta.15" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } }, "node_modules/@types/eslint": { "version": "7.28.0", @@ -112,6 +481,104 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, + "node_modules/@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-dropcursor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz", + "integrity": "sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==", + "dependencies": { + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-gapcursor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz", + "integrity": "sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-history": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz", + "integrity": "sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "dependencies": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-model": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.16.2.tgz", + "integrity": "sha512-1XPJopkKP3oHSBP61uuSuW13DIDZPWvAzP6Pv2/6mixk8EBPUeRGIW548DjJTicMo23gEg1zvCZy9asblQdWag==", + "dependencies": { + "@types/orderedmap": "*" + } + }, + "node_modules/@types/prosemirror-schema-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz", + "integrity": "sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA==", + "dependencies": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "node_modules/@types/prosemirror-state": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.3.0.tgz", + "integrity": "sha512-nMdUF6w8B++NH4V54X+4GvDty7M02UfuHQW0s1AS25Z4ZrOW4RSY2+s57doXBbeMSjzYV/QoMxCY2sT3KQ2VdQ==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "node_modules/@types/prosemirror-transform": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.4.0.tgz", + "integrity": "sha512-ntfuTl9nJWHvFykCmqJj4YQMws6G5H9nBaxHW0xRqfTxDxUvX2bCloqRN7bQTWg9h3VSP2lx45UuET1fn/oQ9Q==", + "dependencies": { + "@types/prosemirror-model": "*" + } + }, + "node_modules/@types/prosemirror-view": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.23.2.tgz", + "integrity": "sha512-P/qlXsUAZeZVJQkIy6hzc1RBWbeQIN01jtUo686ou7O8RDXWVKpVYMa1soR8nfUfKE8QHvCjCVe+7u6V3C/1fw==", + "dependencies": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "node_modules/@types/sizzle": { "version": "2.3.3", "dev": true, @@ -1483,6 +1950,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/orderedmap": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.5.tgz", + "integrity": "sha512-/fzlCGKRmfayGoI9UUXvJfc2nMZlJHW30QqEvwPvlg8tsX7jyiUSomYie6mYqx7Z9bOMGoag0H/q1PS/0PjYkg==" + }, "node_modules/p-limit": { "version": "3.1.0", "dev": true, @@ -1623,6 +2095,112 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/prosemirror-commands": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz", + "integrity": "sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.4.0.tgz", + "integrity": "sha512-6+YwTjmqDwlA/Dm+5wK67ezgqgjA/MhSDgaNxKUzH97SmeuWFXyLeDRxxOPZeSo7yTxcDGUCWTEjmQZsVBuMrQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.2.tgz", + "integrity": "sha512-7YzuRBbu9W7HGQde84kCHfIjaRLNcAdeijbgqrm/R9dsdTWkV+rrdcmic/sCc+bptiNpvjCEE+R6hrbT8zFQeQ==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.2.0.tgz", + "integrity": "sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.5.tgz", + "integrity": "sha512-8SZgPH3K+GLsHL2wKuwBD9rxhsbnVBTwpHCO4VUO5GmqUQlxd/2GtBVWTsyLq4Dp3N9nGgPd3+lZFKUDuVp+Vw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.16.1.tgz", + "integrity": "sha512-r1/w0HDU40TtkXp0DyKBnFPYwd8FSlUSJmGCGFv4DeynfeSlyQF2FD0RQbVEMOe6P3PpUSXM6LZBV7W/YNZ4mA==", + "dependencies": { + "orderedmap": "^1.1.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz", + "integrity": "sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.1.1.tgz", + "integrity": "sha512-LmCz4jrlqQZRsYRDzCRYf/pQ5CUcSOyqZlAj5kv67ZWBH1SVLP2U9WJEvQfimWgeRlIz0y0PQVqO1arRm1+woA==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.4.2.tgz", + "integrity": "sha512-bcIsf3uRZhfab0xRfyyxOEh6eqSszq/hJbDbmUumFnbHBoWhB/uXbpz6vvUxfk0XiEvrZDJ+5pXRrNDc1Hu3vQ==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.23.13", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.23.13.tgz", + "integrity": "sha512-X/NcwZv8pgcEWfs3n++Wz4nDgqDIeDvJ9kfCk6DCoC9XUlDekqJLFt9wCcCUBXedb8hs/dmd+JmcaLgbr67XZw==", + "dependencies": { + "prosemirror-model": "^1.16.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/punycode": { "version": "2.1.1", "dev": true, @@ -1709,6 +2287,11 @@ "node": ">=8" } }, + "node_modules/rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "dev": true, @@ -2165,6 +2748,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "node_modules/watchpack": { "version": "2.2.0", "dev": true, @@ -2347,30 +2935,211 @@ "version": "0.5.3", "dev": true }, - "@librecms/ccm-cms-editor": { - "version": "file:../ccm-cms-editor", + "@tiptap/core": { + "version": "2.0.0-beta.175", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.175.tgz", + "integrity": "sha512-dDf+2GtifskNLysn49kaCIz0o5hf6VDZ8J7jSQAfoPDEkEkfw9OKhWrR7NzWW6J34CSJreFDRiWkGt8Qz283Vg==", "requires": { - "@tiptap/core": "^2.0.0-beta.127", - "@tiptap/extension-subscript": "^2.0.0-beta.4", - "@tiptap/extension-superscript": "^2.0.0-beta.4", - "@tiptap/extension-table": "^2.0.0-beta.35", - "@tiptap/extension-table-cell": "^2.0.0-beta.15", - "@tiptap/extension-table-header": "^2.0.0-beta.17", - "@tiptap/extension-table-row": "^2.0.0-beta.14", - "@tiptap/starter-kit": "^2.0.0-beta.129", - "@types/jquery": "^3.5.6", - "acorn": "^8.5.0", - "bootstrap": "^4.6.0", - "bootstrap-icons": "^1.5.0", - "jquery": "^3.6.0", - "npm-run-all": "^4.1.5", - "popper.js": "^1.16.1", - "remixicon": "^2.5.0", - "sortablejs": "^1.14.0", - "ts-loader": "^9.2.6", - "typescript": "^4.4.3", - "webpack": "^5.55.1", - "webpack-cli": "^4.8.0" + "@types/prosemirror-commands": "^1.0.4", + "@types/prosemirror-keymap": "^1.0.4", + "@types/prosemirror-model": "^1.16.0", + "@types/prosemirror-schema-list": "^1.0.3", + "@types/prosemirror-state": "^1.2.8", + "@types/prosemirror-transform": "^1.1.5", + "@types/prosemirror-view": "^1.23.1", + "prosemirror-commands": "^1.2.1", + "prosemirror-keymap": "^1.1.5", + "prosemirror-model": "^1.16.1", + "prosemirror-schema-list": "^1.1.6", + "prosemirror-state": "^1.3.4", + "prosemirror-transform": "^1.3.3", + "prosemirror-view": "^1.23.6" + } + }, + "@tiptap/extension-blockquote": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.26.tgz", + "integrity": "sha512-A6yjcYovONJfOjQFk6vDYXswaCdCtCwjL7w9VTB0R2DLTuJvvRt9DWN0IDcMrj5G+aMgDq4GUUTitv+2Y8krDg==", + "requires": {} + }, + "@tiptap/extension-bold": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.26.tgz", + "integrity": "sha512-pnO0I5sEQM3pmowjMGQ74adLzvc6HqGyLyqMizaGMicPu9uTYlSdId+qckYEEgPwPMaEShtv2Vg+ZHs7KVqfcg==", + "requires": {} + }, + "@tiptap/extension-bullet-list": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.26.tgz", + "integrity": "sha512-1n5HV8gY1tLjPk4x48nva6SZlFHoPlRfF6pqSu9JcJxPO7FUSPxUokuz4swYNe0LRrtykfyNz44dUcxKVhoFow==", + "requires": {} + }, + "@tiptap/extension-code": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.26.tgz", + "integrity": "sha512-QcFWdEFfbJ1n5UFFBD17QPPAJ3J5p/b7XV484u0shCzywO7aNPV32QeHy1z0eMoyZtCbOWf6hg/a7Ugv8IwpHw==", + "requires": {} + }, + "@tiptap/extension-code-block": { + "version": "2.0.0-beta.37", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.37.tgz", + "integrity": "sha512-mJAM+PHaNoKRYwM3D36lZ51/aoPxxvZNQn3UBnZ6G7l0ZJSgB3JvBEzqK6S8nNFeYIIxGwv4QF6vXe4MG9ie2g==", + "requires": { + "prosemirror-state": "^1.3.4" + } + }, + "@tiptap/extension-document": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.15.tgz", + "integrity": "sha512-ypENC+xUYD5m2t+KOKNYqyXnanXd5fxyIyhR1qeEEwwQwMXGNrO3kCH6O4mIDCpy+/WqHvVay2tV5dVsXnvY8w==", + "requires": {} + }, + "@tiptap/extension-dropcursor": { + "version": "2.0.0-beta.25", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.25.tgz", + "integrity": "sha512-GYf5s6dkZtsDy+TEkrQK6kLbfbitG4qnk02D+FlhlJMI/Nnx8rYCRJbwEHDdqrfX7XwZzULMqqqHvzxZYrEeNg==", + "requires": { + "@types/prosemirror-dropcursor": "^1.0.3", + "prosemirror-dropcursor": "^1.4.0" + } + }, + "@tiptap/extension-gapcursor": { + "version": "2.0.0-beta.34", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.34.tgz", + "integrity": "sha512-Vm8vMWWQ2kJcUOLfB5CEo5pYgyudI7JeeiZvX9ScPmUmgKVYhEpt3EAICY9pUYJ41aAVH35gZLXkUtsz2f9GHw==", + "requires": { + "@types/prosemirror-gapcursor": "^1.0.4", + "prosemirror-gapcursor": "^1.2.1" + } + }, + "@tiptap/extension-hard-break": { + "version": "2.0.0-beta.30", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz", + "integrity": "sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw==", + "requires": {} + }, + "@tiptap/extension-heading": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz", + "integrity": "sha512-nR6W/3rjnZH1Swo7tGBoYsmO6xMvu9MGq6jlm3WVHCB7B3CsrRvCkTwGjVIbKTaZC4bQfx5gvAUpQFvwuU+M5w==", + "requires": {} + }, + "@tiptap/extension-history": { + "version": "2.0.0-beta.21", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.21.tgz", + "integrity": "sha512-0v8Cl30V4dsabdpspLdk+f+lMoIvLFlJN5WRxtc7RRZ5gfJVxPHwooIKdvC51brfh/oJtWFCNMRjhoz0fRaF9A==", + "requires": { + "@types/prosemirror-history": "^1.0.3", + "prosemirror-history": "^1.2.0" + } + }, + "@tiptap/extension-horizontal-rule": { + "version": "2.0.0-beta.31", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.31.tgz", + "integrity": "sha512-MNc4retfjRgkv3qxqGya0+/BEd1Kmn+oMsCRvE+8x3sXyKIse+vdqMuG5qUcA6np0ZD/9hh1riiQ1GQdgc23Ng==", + "requires": { + "prosemirror-state": "^1.3.4" + } + }, + "@tiptap/extension-italic": { + "version": "2.0.0-beta.26", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.26.tgz", + "integrity": "sha512-vejGe2ra4K5ipFOn1U9viqF9X9nPTX8WSJpSOux+9UbKjHpANy7bz69tp66OIi/Wh5L/MMDc+luH/04qfVnpZw==", + "requires": {} + }, + "@tiptap/extension-list-item": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.20.tgz", + "integrity": "sha512-5IPEspJt38t9ROj4xLUesOVEYlTT/R9Skd9meHRxJQZX1qrzBICs5PC/WRIsnexrvTBhdxpYgCYjpvpsJBlKuQ==", + "requires": {} + }, + "@tiptap/extension-ordered-list": { + "version": "2.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.27.tgz", + "integrity": "sha512-apFDeignxdZb3cA3p1HJu0zw1JgJdBYUBz1r7f99qdNybYuk3I/1MPUvlOuOgvIrBB/wydoyVDP+v9F7QN3tfQ==", + "requires": {} + }, + "@tiptap/extension-paragraph": { + "version": "2.0.0-beta.23", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.23.tgz", + "integrity": "sha512-VWAxyzecErYWk97Kv/Gkghh97zAQTcaVOisEnYYArZAlyYDaYM48qVssAC/vnRRynP2eQxb1EkppbAxE+bMHAA==", + "requires": {} + }, + "@tiptap/extension-strike": { + "version": "2.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.27.tgz", + "integrity": "sha512-2dmCgtesuDdivM/54Q+Y6Tc3JbGz1SkHP6c62piuqBiYLWg3xa16zChZOhfN8szbbQlBgLT6XRTDt3c2Ux+Dug==", + "requires": {} + }, + "@tiptap/extension-subscript": { + "version": "2.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.0.0-beta.10.tgz", + "integrity": "sha512-er8/1lp0Rb+SKwEioW0w4oVf3EkdQZ0WS/5kPBG4W0DncfUMT+bw5de76S3kRL9PLZ9UShAL7wuXtuiSi5QsMw==", + "requires": {} + }, + "@tiptap/extension-superscript": { + "version": "2.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.0.0-beta.10.tgz", + "integrity": "sha512-TUUBS8XsD2MorGORYVlhGDH7wcc9diSbHscD4Dnz8pKWVR0JPUd/od4h5qSffDzAOKxtphTiX9LOFWk6zVooKg==", + "requires": {} + }, + "@tiptap/extension-table": { + "version": "2.0.0-beta.48", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-2.0.0-beta.48.tgz", + "integrity": "sha512-Hcx3kOBQyazQ3dV0Oq4zKIl1og4EqUuZ5nEWxwcb8HgxSUYIhAJQ7pujPZiRLfkoFy92oVwmh9KhBRfQqRkUpQ==", + "requires": { + "prosemirror-tables": "^1.1.1", + "prosemirror-view": "^1.23.6" + } + }, + "@tiptap/extension-table-cell": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-2.0.0-beta.20.tgz", + "integrity": "sha512-IllQyxLQvgm1FAewz3U+DkgNHRthmuVrtUQnG6la45qdUOLCOrpFbRRaQ1LJ/BpbvZ2Xs1o2yAa97BqZOPwovQ==", + "requires": {} + }, + "@tiptap/extension-table-header": { + "version": "2.0.0-beta.22", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-2.0.0-beta.22.tgz", + "integrity": "sha512-nMrghrfl+ZS4EDixs3lgXnHw1Q+ECyTugpRvS36rP7b8GFp3GXm9DfbIAUzwGGfcq1D7DwRnJUDM6ARdWXyw0w==", + "requires": {} + }, + "@tiptap/extension-table-row": { + "version": "2.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-2.0.0-beta.19.tgz", + "integrity": "sha512-ldEVDpIUX7ZqbViTy4c/RfyNGRv++O/r3A/Ivuon1PykaDDTbPlp5JM89FunAD39cLAbo2HKtweqdmzCMlZsqA==", + "requires": {} + }, + "@tiptap/extension-text": { + "version": "2.0.0-beta.15", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.15.tgz", + "integrity": "sha512-S3j2+HyV2gsXZP8Wg/HA+YVXQsZ3nrXgBM9HmGAxB0ESOO50l7LWfip0f3qcw1oRlh5H3iLPkA6/f7clD2/TFA==", + "requires": {} + }, + "@tiptap/starter-kit": { + "version": "2.0.0-beta.184", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.184.tgz", + "integrity": "sha512-FgF94i5RQzXiGAIkaubnXEaYwJfiZRbMPZcmarwNo8IyqPnLT34Q1yjw/qZ3nv7rDehWV5l/zenbrrNtPYVCkA==", + "requires": { + "@tiptap/core": "^2.0.0-beta.175", + "@tiptap/extension-blockquote": "^2.0.0-beta.26", + "@tiptap/extension-bold": "^2.0.0-beta.26", + "@tiptap/extension-bullet-list": "^2.0.0-beta.26", + "@tiptap/extension-code": "^2.0.0-beta.26", + "@tiptap/extension-code-block": "^2.0.0-beta.37", + "@tiptap/extension-document": "^2.0.0-beta.15", + "@tiptap/extension-dropcursor": "^2.0.0-beta.25", + "@tiptap/extension-gapcursor": "^2.0.0-beta.34", + "@tiptap/extension-hard-break": "^2.0.0-beta.30", + "@tiptap/extension-heading": "^2.0.0-beta.26", + "@tiptap/extension-history": "^2.0.0-beta.21", + "@tiptap/extension-horizontal-rule": "^2.0.0-beta.31", + "@tiptap/extension-italic": "^2.0.0-beta.26", + "@tiptap/extension-list-item": "^2.0.0-beta.20", + "@tiptap/extension-ordered-list": "^2.0.0-beta.27", + "@tiptap/extension-paragraph": "^2.0.0-beta.23", + "@tiptap/extension-strike": "^2.0.0-beta.27", + "@tiptap/extension-text": "^2.0.0-beta.15" } }, "@types/eslint": { @@ -2408,6 +3177,104 @@ "version": "16.10.2", "dev": true }, + "@types/orderedmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", + "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==" + }, + "@types/prosemirror-commands": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.4.tgz", + "integrity": "sha512-utDNYB3EXLjAfYIcRWJe6pn3kcQ5kG4RijbT/0Y/TFOm6yhvYS/D9eJVnijdg9LDjykapcezchxGRqFD5LcyaQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-dropcursor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz", + "integrity": "sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==", + "requires": { + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-gapcursor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz", + "integrity": "sha512-9xKjFIG5947dzerFvkLWp6F53JwrUYoYwh3SgcTFEp8SbSfNNrez/PFYVZKPnoqPoaK5WtTdQTaMwpCV9rXQIg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-history": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.3.tgz", + "integrity": "sha512-5TloMDRavgLjOAKXp1Li8u0xcsspzbT1Cm9F2pwHOkgvQOz1jWQb2VIXO7RVNsFjLBZdIXlyfSLivro3DuMWXg==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-keymap": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.4.tgz", + "integrity": "sha512-ycevwkqUh+jEQtPwqO7sWGcm+Sybmhu8MpBsM8DlO3+YTKnXbKA6SDz/+q14q1wK3UA8lHJyfR+v+GPxfUSemg==", + "requires": { + "@types/prosemirror-commands": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-model": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.16.2.tgz", + "integrity": "sha512-1XPJopkKP3oHSBP61uuSuW13DIDZPWvAzP6Pv2/6mixk8EBPUeRGIW548DjJTicMo23gEg1zvCZy9asblQdWag==", + "requires": { + "@types/orderedmap": "*" + } + }, + "@types/prosemirror-schema-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-list/-/prosemirror-schema-list-1.0.3.tgz", + "integrity": "sha512-uWybOf+M2Ea7rlbs0yLsS4YJYNGXYtn4N+w8HCw3Vvfl6wBAROzlMt0gV/D/VW/7J/LlAjwMezuGe8xi24HzXA==", + "requires": { + "@types/orderedmap": "*", + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*" + } + }, + "@types/prosemirror-state": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.3.0.tgz", + "integrity": "sha512-nMdUF6w8B++NH4V54X+4GvDty7M02UfuHQW0s1AS25Z4ZrOW4RSY2+s57doXBbeMSjzYV/QoMxCY2sT3KQ2VdQ==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-transform": "*", + "@types/prosemirror-view": "*" + } + }, + "@types/prosemirror-transform": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.4.0.tgz", + "integrity": "sha512-ntfuTl9nJWHvFykCmqJj4YQMws6G5H9nBaxHW0xRqfTxDxUvX2bCloqRN7bQTWg9h3VSP2lx45UuET1fn/oQ9Q==", + "requires": { + "@types/prosemirror-model": "*" + } + }, + "@types/prosemirror-view": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.23.2.tgz", + "integrity": "sha512-P/qlXsUAZeZVJQkIy6hzc1RBWbeQIN01jtUo686ou7O8RDXWVKpVYMa1soR8nfUfKE8QHvCjCVe+7u6V3C/1fw==", + "requires": { + "@types/prosemirror-model": "*", + "@types/prosemirror-state": "*", + "@types/prosemirror-transform": "*" + } + }, "@types/sizzle": { "version": "2.3.3", "dev": true @@ -3284,6 +4151,11 @@ "mimic-fn": "^2.1.0" } }, + "orderedmap": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.1.5.tgz", + "integrity": "sha512-/fzlCGKRmfayGoI9UUXvJfc2nMZlJHW30QqEvwPvlg8tsX7jyiUSomYie6mYqx7Z9bOMGoag0H/q1PS/0PjYkg==" + }, "p-limit": { "version": "3.1.0", "dev": true, @@ -3360,6 +4232,112 @@ "popper.js": { "version": "1.16.1" }, + "prosemirror-commands": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.2.2.tgz", + "integrity": "sha512-TX+KpWudMon06frryfpO/u7hsQv2hu8L4VSVbCpi3/7wXHBgl+35mV85qfa3RpT8xD2f3MdeoTqH0vy5JdbXPg==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-dropcursor": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.4.0.tgz", + "integrity": "sha512-6+YwTjmqDwlA/Dm+5wK67ezgqgjA/MhSDgaNxKUzH97SmeuWFXyLeDRxxOPZeSo7yTxcDGUCWTEjmQZsVBuMrQ==", + "requires": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "prosemirror-gapcursor": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.2.2.tgz", + "integrity": "sha512-7YzuRBbu9W7HGQde84kCHfIjaRLNcAdeijbgqrm/R9dsdTWkV+rrdcmic/sCc+bptiNpvjCEE+R6hrbT8zFQeQ==", + "requires": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "prosemirror-history": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.2.0.tgz", + "integrity": "sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==", + "requires": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "rope-sequence": "^1.3.0" + } + }, + "prosemirror-keymap": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.1.5.tgz", + "integrity": "sha512-8SZgPH3K+GLsHL2wKuwBD9rxhsbnVBTwpHCO4VUO5GmqUQlxd/2GtBVWTsyLq4Dp3N9nGgPd3+lZFKUDuVp+Vw==", + "requires": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "prosemirror-model": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.16.1.tgz", + "integrity": "sha512-r1/w0HDU40TtkXp0DyKBnFPYwd8FSlUSJmGCGFv4DeynfeSlyQF2FD0RQbVEMOe6P3PpUSXM6LZBV7W/YNZ4mA==", + "requires": { + "orderedmap": "^1.1.0" + } + }, + "prosemirror-schema-list": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.1.6.tgz", + "integrity": "sha512-aFGEdaCWmJzouZ8DwedmvSsL50JpRkqhQ6tcpThwJONVVmCgI36LJHtoQ4VGZbusMavaBhXXr33zyD2IVsTlkw==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-state": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.3.4.tgz", + "integrity": "sha512-Xkkrpd1y/TQ6HKzN3agsQIGRcLckUMA9u3j207L04mt8ToRgpGeyhbVv0HI7omDORIBHjR29b7AwlATFFf2GLA==", + "requires": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "prosemirror-tables": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.1.1.tgz", + "integrity": "sha512-LmCz4jrlqQZRsYRDzCRYf/pQ5CUcSOyqZlAj5kv67ZWBH1SVLP2U9WJEvQfimWgeRlIz0y0PQVqO1arRm1+woA==", + "requires": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "prosemirror-transform": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.4.2.tgz", + "integrity": "sha512-bcIsf3uRZhfab0xRfyyxOEh6eqSszq/hJbDbmUumFnbHBoWhB/uXbpz6vvUxfk0XiEvrZDJ+5pXRrNDc1Hu3vQ==", + "requires": { + "prosemirror-model": "^1.0.0" + } + }, + "prosemirror-view": { + "version": "1.23.13", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.23.13.tgz", + "integrity": "sha512-X/NcwZv8pgcEWfs3n++Wz4nDgqDIeDvJ9kfCk6DCoC9XUlDekqJLFt9wCcCUBXedb8hs/dmd+JmcaLgbr67XZw==", + "requires": { + "prosemirror-model": "^1.16.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "punycode": { "version": "2.1.1", "dev": true @@ -3416,6 +4394,11 @@ "version": "5.0.0", "dev": true }, + "rope-sequence": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.2.tgz", + "integrity": "sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg==" + }, "safe-buffer": { "version": "5.2.1", "dev": true @@ -3688,6 +4671,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "w3c-keyname": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", + "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" + }, "watchpack": { "version": "2.2.0", "dev": true, diff --git a/ccm-cms/package.json b/ccm-cms/package.json index d706c3e45..a612702ec 100644 --- a/ccm-cms/package.json +++ b/ccm-cms/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-04-28T174914", + "version": "7.0.0-SNAPSHOT.2022-05-03T181122", "description": "JavaScript stuff for ccm-cms", "main": "target/generated-resources/assets/@content-sections/cms-admin.js", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", @@ -23,7 +23,14 @@ "webpack-cli": "^4.8.0" }, "dependencies": { - "@librecms/ccm-cms-editor": "../ccm-cms-editor", + "@tiptap/core": "^2.0.0-beta.127", + "@tiptap/extension-subscript": "^2.0.0-beta.4", + "@tiptap/extension-superscript": "^2.0.0-beta.4", + "@tiptap/extension-table": "^2.0.0-beta.35", + "@tiptap/extension-table-cell": "^2.0.0-beta.15", + "@tiptap/extension-table-header": "^2.0.0-beta.17", + "@tiptap/extension-table-row": "^2.0.0-beta.14", + "@tiptap/starter-kit": "^2.0.0-beta.129", "acorn": "^8.5.0", "bootstrap": "^4.6.0", "bootstrap-icons": "^1.5.0", diff --git a/ccm-cms/pom.xml b/ccm-cms/pom.xml index 8ed31e071..8a3a80d6d 100644 --- a/ccm-cms/pom.xml +++ b/ccm-cms/pom.xml @@ -42,12 +42,6 @@ provided - - org.librecms - ccm-cms-editor - ${project.parent.version} - - org.hibernate hibernate-core @@ -243,16 +237,7 @@ pkg set version=${project.version}.${timestamp} - - + npm install npm diff --git a/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor.xhtml b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor.xhtml index 9bf67a6ca..0a0a16aed 100644 --- a/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor.xhtml +++ b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditor.xhtml @@ -305,6 +305,7 @@ data-baseUrl="#{cc.attrs.baseUrl}" data-contentsection="#{cc.attrs.contentSection}" data-locale="#{cc.attrs.selectedLocale}" + data-save-button="##{cc.attrs.editorId}-save-button" data-save-url="#{cc.attrs.editMethod}/#{cc.attrs.selectedLocale}" data-variant-url="#{cc.attrs.variantUrl}/#{cc.attrs.selectedLocale}" id="#{cc.attrs.editorId}" @@ -1021,6 +1022,7 @@ diff --git a/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditorVariants.xhtml b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditorVariants.xhtml index d084b0477..b59a1f018 100644 --- a/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditorVariants.xhtml +++ b/ccm-cms/src/main/resources/META-INF/resources/components/librecms/cmsEditorVariants.xhtml @@ -204,7 +204,7 @@ /> -
+

#{cc.attrs.title}

diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contenttypes/article/article-text/edit.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contenttypes/article/article-text/edit.xhtml index de78a8267..0b2dc0e3d 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contenttypes/article/article-text/edit.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contenttypes/article/article-text/edit.xhtml @@ -35,7 +35,7 @@ - + diff --git a/ccm-cms/src/main/typescript/content-sections/article-text-step.ts b/ccm-cms/src/main/typescript/content-sections/article-text-step.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/article-text-step.ts rename to ccm-cms/src/main/typescript/content-sections/article-text-step.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor.ts b/ccm-cms/src/main/typescript/content-sections/cms-editor.ts new file mode 100644 index 000000000..f9031d795 --- /dev/null +++ b/ccm-cms/src/main/typescript/content-sections/cms-editor.ts @@ -0,0 +1,889 @@ +import "bootstrap"; +import * as $ from "jquery"; +import { ChainedCommands, Editor, Node, mergeAttributes } from "@tiptap/core"; +// import Gapcursor from "@tiptap/extension-gapcursor"; +import StarterKit from "@tiptap/starter-kit"; +import Subscript from "@tiptap/extension-subscript"; +import Superscript from "@tiptap/extension-superscript"; +import Table from "@tiptap/extension-table"; +import TableRow from "@tiptap/extension-table-row"; +import TableCell from "@tiptap/extension-table-cell"; +import TableHeader from "@tiptap/extension-table-header"; + +import AudioNode from "./cms-editor/audio-node"; +import ImageNode from "./cms-editor/image-node"; +import VideoNode from "./cms-editor/video-node"; + +const BUTTONS: CmsEditorButton[] = [ + { + selector: ".tiptap-emph", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().toggleItalic().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleItalic() + .run(); + }, + }, + { + selector: ".tiptap-strong-emph", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().toggleBold().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleBold() + .run(); + }, + }, + { + selector: ".tiptap-code", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().toggleCode().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleCode() + .run(); + }, + }, + { + selector: ".tiptap-strikethrough", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().toggleStrike().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleStrike() + .run(); + }, + }, + { + selector: ".tiptap-subscript", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleSubscript() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleSubscript() + .run(); + }, + }, + { + selector: ".tiptap-superscript", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleSuperscript() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleSuperscript() + .run(); + }, + }, + { + selector: ".tiptap-h1", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeading({ level: 1 }) + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeading({ level: 1 }) + .run(); + }, + }, + { + selector: ".tiptap-h2", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeading({ level: 2 }) + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeading({ level: 2 }) + .run(); + }, + }, + { + selector: ".tiptap-h3", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeading({ level: 3 }) + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeading({ level: 3 }) + .run(); + }, + }, + { + selector: ".tiptap-h5", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeading({ level: 5 }) + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeading({ level: 5 }) + .run(); + }, + }, + { + selector: ".tiptap-h6", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeading({ level: 6 }) + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeading({ level: 6 }) + .run(); + }, + }, + { + selector: ".tiptap-paragraph", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().clearNodes().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .clearNodes() + .run(); + }, + }, + { + selector: ".tiptap-blockquote", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleBlockquote() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleBlockquote() + .run(); + }, + }, + { + selector: ".tiptap-codeblock", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleCodeBlock() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleCodeBlock() + .run(); + }, + }, + { + selector: ".tiptap-ul", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleBulletList() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleBulletList() + .run(); + }, + }, + { + selector: ".tiptap-ol", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleOrderedList() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleOrderedList() + .run(); + }, + }, + { + selector: ".cms-editor-insert-table-dialog", + command: (cmsEditor) => { + return true; + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .insertTable() + .run(); + }, + }, + { + selector: ".cms-editor-insert-table-dialog .btn-success", + command: (cmsEditor) => { + const dialog = cmsEditor + .getEditorElem() + .querySelector(".cms-editor-insert-table-dialog"); + if (!dialog) { + return false; + } + const rowsInput = dialog.querySelector( + "input#rows" + ) as HTMLInputElement; + const colsInput = dialog.querySelector( + "input#cols" + ) as HTMLInputElement; + const headerRowInput = dialog.querySelector( + "input#headerRow" + ) as HTMLInputElement; + // console.log(`rowsInput = ${rowsInput}`); + // console.log(`colsInput = ${colsInput}`); + // console.log(`headerRowInput = ${headerRowInput}`); + const rows = parseInt(rowsInput.value, 10); + const cols = parseInt(colsInput.value, 10); + const headerRow = JSON.parse(headerRowInput.value) as Boolean; + const insertTableDialog = $("#insert-table-dialog") as any; + insertTableDialog.modal("hide"); + return cmsEditor + .getEditor() + .chain() + .focus() + .insertTable({ + // allowTableNodeSelection: true, + // cellMinWidth: 150, + cols: cols, + // headerRow: headerRow, + // resizable: true, + rows: rows, + }) + .run(); + }, + can: (cmsEditor) => { + return true; + }, + }, + { + selector: ".tiptap-insert-table-row-before", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().addRowBefore().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .addRowBefore() + .run(); + }, + }, + { + selector: ".tiptap-insert-table-row-after", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().addRowAfter().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .addRowAfter() + .run(); + }, + }, + { + selector: ".tiptap-insert-table-column-before", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .addColumnBefore() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .addColumnBefore() + .run(); + }, + }, + { + selector: ".tiptap-insert-table-column-after", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().addColumnAfter().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .addColumnAfter() + .run(); + }, + }, + { + selector: ".tiptap-remove-table-row", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().deleteRow().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .deleteRow() + .run(); + }, + }, + { + selector: ".tiptap-remove-table-column", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().deleteColumn().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .deleteColumn() + .run(); + }, + }, + { + selector: ".tiptap-remove-table", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().deleteTable().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .deleteTable() + .run(); + }, + }, + { + selector: ".tiptap-toggle-table-header-row", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeaderRow() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeaderRow() + .run(); + }, + }, + { + selector: ".tiptap-toggle-table-header-column", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .toggleHeaderColumn() + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .toggleHeaderColumn() + .run(); + }, + }, + { + selector: ".tiptap-merge-table-cells", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().mergeCells().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .mergeCells() + .run(); + }, + }, + { + selector: ".tiptap-split-table-cell", + command: (cmsEditor) => { + return cmsEditor.getEditor().chain().focus().splitCell().run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .splitCell() + .run(); + }, + }, + { + selector: ".tiptap-insert-audio", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .setLibreCmsAudio() + .insertContent("

") + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .setLibreCmsAudio() + .run(); + }, + }, + { + selector: ".tiptap-insert-image", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .setLibreCmsImage() + .insertContent("

") + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .setLibreCmsImage() + .run(); + }, + }, + { + selector: ".tiptap-insert-video", + command: (cmsEditor) => { + return cmsEditor + .getEditor() + .chain() + .focus() + .setLibreCmsVideo() + .insertContent("

") + .run(); + }, + can: (cmsEditor) => { + return cmsEditor + .getEditor() + .can() + .chain() + .focus() + .setLibreCmsVideo() + .run(); + }, + }, + // { + // selector: "", + // command: cmsEditor => {}, + // can: cmsEditor => {} + // }, + // { + // selector: "", + // command: cmsEditor => {}, + // can: cmsEditor => {} + // }, + // { + // selector: "", + // command: cmsEditor => {}, + // can: cmsEditor => {} + // } +]; + +export class CmsEditor { + private editor: Editor; + private editorElem: HTMLElement; + private saveUrl: string; + + public constructor( + editor: Editor, + editorElem: HTMLElement, + saveUrl: string + ) { + this.editor = editor; + this.editorElem = editorElem; + this.saveUrl = saveUrl; + + // console.log("initializing editor buttons"); + const buttonsElem = editorElem.querySelector( + ".cms-tiptap-editor-buttons" + ); + if (buttonsElem) { + for (const button of BUTTONS) { + const buttonElem = buttonsElem.querySelector(button.selector); + if (buttonElem) { + buttonElem.addEventListener("click", (event) => { + event.preventDefault(); + button.command(this); + }); + } else { + continue; + } + } + } else { + console.error("editorButtonsElem not found."); + return; + } + + editor.on("selectionUpdate", ({ editor }: { editor: Editor }) => { + // console.log(`checkButton - this.editorElem = ${this.editorElem}`); + const buttonsElem = editorElem.querySelector( + ".cms-tiptap-editor-buttons" + ); + if (!buttonsElem) { + return; + } + for (const button of BUTTONS) { + const elem = buttonsElem.querySelector(button.selector); + if (elem) { + const buttonElem = elem as HTMLButtonElement; + if (button.can(this)) { + buttonElem.removeAttribute("disabled"); + } else { + buttonElem.setAttribute("disabled", "disabled"); + } + } else { + continue; + } + } + }); + + // console.log(`editorElem = ${editorElem}`); + + const saveButton = editorElem.querySelector(".cms-editor-save-button"); + saveButton?.addEventListener("click", (event) => this.save(event)); + } + + protected async save(event: Event) { + event.preventDefault(); + + const params = new URLSearchParams(); + params.append("value", this.editor.getHTML()); + + try { + const response = await fetch(this.saveUrl, { + method: "POST", + credentials: "include", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: params, + }); + if (response.ok) { + console.log(`Save response status: ${response.status}`); + window.location.href = response.url; + // const location = response.headers.get("Location"); + // if (location) { + // window.location.href = location; + // } else { + // this.showMessage("#cms-editor-msg-save-successful"); + // } + } else { + this.showSaveFailedMessage( + response.status, + response.statusText + ); + } + } catch (error) { + console.error(error); + console.trace(error); + this.showSaveFailedErrMessage(error as string); + } + } + + protected showSaveFailedMessage(status: number, statusText: string) { + this.showMessage("#cms-editor-msg-save-failed"); + console.error( + `Failed to save text. Status: ${statusText}. Status Text: ${statusText}` + ); + } + + protected showSaveFailedErrMessage(error: string) { + this.showMessage("#cms-editor-msg-save-failed"); + console.error(error); + } + + protected showMessage(messageId: string) { + const template = this.editorElem.querySelector( + messageId + ) as HTMLTemplateElement; + const message = template.content.cloneNode(true); + this.editorElem.querySelector(".cms-editor-messages")?.append(message); + } + + public getEditor(): Editor { + return this.editor; + } + + public getEditorElem(): HTMLElement { + return this.editorElem; + } +} + +function buildCmsEditor(editorElement: HTMLElement) { + const saveButtonSelector = editorElement.getAttribute("data-save-button"); + const saveUrl = editorElement.getAttribute("data-save-url"); + const variantUrl = editorElement.getAttribute("data-variant-url"); + + if (!saveButtonSelector) { + console.error( + `Element ${editorElement} has no value for data-save-button.` + ); + return; + } + + if (!saveUrl) { + console.error( + `Element ${editorElement} has no value of data-save-url.` + ); + return; + } + + if (!variantUrl) { + console.error( + `Element ${editorElement} has not value for data-variant-url.` + ); + return; + } + + const canvasElement = editorElement.querySelector( + ".cms-tiptap-editor-canvas" + ); + if (!canvasElement) { + const template = editorElement.querySelector( + "#cms-editor-msg-canvas-element-not-found" + ) as HTMLTemplateElement; + const message = template.content.cloneNode(true); + editorElement.querySelector(".cms-editor-messages")?.append(message); + console.error("canvasElem not found."); + throw "canvasElem not found."; + } + + fetch(variantUrl, { method: "GET", credentials: "include" }) + .then((response) => { + if (response.ok) { + const text = response.text().then((variant) => { + try { + const editor: Editor = new Editor({ + element: canvasElement, + extensions: [ + AudioNode, + // Gapcursor, + ImageNode, + StarterKit, + Subscript, + Superscript, + Table.configure({ + allowTableNodeSelection: true, + cellMinWidth: 100, + handleWidth: 25, + resizable: true, + }), + TableRow, + TableHeader, + TableCell, + VideoNode, + ], + content: variant, + }); + + const cmsEditor = new CmsEditor( + editor, + editorElement, + saveUrl + ); + + const saveButtons = + document.querySelectorAll(saveButtonSelector); + for (let i = 0; i < saveButtons.length; i++) { + const saveButton = saveButtons[i]; + saveButton.addEventListener("click", (event) => { + event.preventDefault(); + + console.log("HTML output of editor: "); + console.log(cmsEditor.getEditor().getHTML()); + }); + } + } catch (error) { + console.error(error); + console.trace(error); + } + }); + } else { + const template = editorElement.querySelector( + "#cms-editor-msg-variant-load-failed" + ) as HTMLTemplateElement; + const message = template.content.cloneNode(true); + editorElement + .querySelector(".cms-editor-messages") + ?.append(message); + console.error( + `Failed to load variant. Status: ${response.status}, Status Text: ${response.statusText}` + ); + } + }) + .catch((error) => { + console.error(error); + console.trace(error); + const template = editorElement.querySelector( + "#cms-editor-msg-variant-load-failed" + ) as HTMLTemplateElement; + const message = template.content.cloneNode(true); + editorElement + .querySelector(".cms-editor-messages") + ?.append(message); + }); +} + +interface CmsEditorButton { + selector: string; + command: (cmsEditor: CmsEditor) => boolean; + can: (cmsEditor: CmsEditor) => boolean; +} + +document.addEventListener("DOMContentLoaded", (event) => { + const editorElements = document.querySelectorAll(".cms-editor"); + + for (let i = 0; i < editorElements.length; i++) { + buildCmsEditor(editorElements[i] as HTMLElement); + } +}); diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/audio-node.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/audio-node.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/audio-node.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/audio-node.ts diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/index.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/index.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/index.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/audio-node/index.ts diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/image-node.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/image-node.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/image-node.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/image-node.ts diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/index.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/index.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/index.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/image-node/index.ts diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/index.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/index.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/index.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/index.ts diff --git a/ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/video-node.ts.off b/ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/video-node.ts similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/video-node.ts.off rename to ccm-cms/src/main/typescript/content-sections/cms-editor/video-node/video-node.ts diff --git a/ccm-cms/src/main/typescript/content-sections/event-info-step-eventdate.ts b/ccm-cms/src/main/typescript/content-sections/event-info-step-eventdate.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/event-info-step-eventdate.ts rename to ccm-cms/src/main/typescript/content-sections/event-info-step-eventdate.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/event-info-step-eventtype.ts b/ccm-cms/src/main/typescript/content-sections/event-info-step-eventtype.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/event-info-step-eventtype.ts rename to ccm-cms/src/main/typescript/content-sections/event-info-step-eventtype.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/event-info-step-location.ts b/ccm-cms/src/main/typescript/content-sections/event-info-step-location.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/event-info-step-location.ts rename to ccm-cms/src/main/typescript/content-sections/event-info-step-location.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/event-info-step-maincontributor.ts b/ccm-cms/src/main/typescript/content-sections/event-info-step-maincontributor.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/event-info-step-maincontributor.ts rename to ccm-cms/src/main/typescript/content-sections/event-info-step-maincontributor.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/mpa-section-edit-text.ts b/ccm-cms/src/main/typescript/content-sections/mpa-section-edit-text.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/mpa-section-edit-text.ts rename to ccm-cms/src/main/typescript/content-sections/mpa-section-edit-text.ts.off diff --git a/ccm-cms/src/main/typescript/content-sections/news-text-step.ts b/ccm-cms/src/main/typescript/content-sections/news-text-step.ts.off similarity index 100% rename from ccm-cms/src/main/typescript/content-sections/news-text-step.ts rename to ccm-cms/src/main/typescript/content-sections/news-text-step.ts.off diff --git a/ccm-cms/webpack.config.js b/ccm-cms/webpack.config.js index 6b2626055..5ef24522e 100644 --- a/ccm-cms/webpack.config.js +++ b/ccm-cms/webpack.config.js @@ -6,13 +6,14 @@ module.exports = { }, entry: { "cms-admin": "./src/main/typescript/content-sections/cms-admin.ts", - "article-text-step": "./src/main/typescript/content-sections/article-text-step.ts", - "event-info-step-eventdate": "./src/main/typescript/content-sections/event-info-step-eventdate.ts", - "event-info-step-eventtype": "./src/main/typescript/content-sections/event-info-step-eventtype.ts", - "event-info-step-location": "./src/main/typescript/content-sections/event-info-step-location.ts", - "event-info-step-maincontributor": "./src/main/typescript/content-sections/event-info-step-maincontributor.ts", - "mpa-section-edit-text": "./src/main/typescript/content-sections/mpa-section-edit-text.ts", - "news-text-step": "./src/main/typescript/content-sections/news-text-step.ts" + "cms-editor": "./src/main/typescript/content-sections/cms-editor.ts" + // "article-text-step": "./src/main/typescript/content-sections/article-text-step.ts", + // "event-info-step-eventdate": "./src/main/typescript/content-sections/event-info-step-eventdate.ts", + // "event-info-step-eventtype": "./src/main/typescript/content-sections/event-info-step-eventtype.ts", + // "event-info-step-location": "./src/main/typescript/content-sections/event-info-step-location.ts", + // "event-info-step-maincontributor": "./src/main/typescript/content-sections/event-info-step-maincontributor.ts", + // "mpa-section-edit-text": "./src/main/typescript/content-sections/mpa-section-edit-text.ts", + // "news-text-step": "./src/main/typescript/content-sections/news-text-step.ts" }, output: { filename: "[name].js", diff --git a/pom.xml b/pom.xml index 45617f172..e11b6c79e 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,6 @@ - ccm-cms-editor ccm-cms-types-agenda ccm-cms-types-bookmark