diff --git a/package-lock.json b/package-lock.json index 9a91eebb352185e8021386ca761986d9b2114e27..a06d9642d075497d731df6ebe34cda66a619cd31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,29 +16,35 @@ "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@babel/register": "^7.12.1", - "@ckeditor/ckeditor5-alignment": "34.2.0", - "@ckeditor/ckeditor5-autoformat": "34.2.0", - "@ckeditor/ckeditor5-basic-styles": "34.2.0", - "@ckeditor/ckeditor5-build-classic": "34.2.0", - "@ckeditor/ckeditor5-build-decoupled-document": "34.2.0", - "@ckeditor/ckeditor5-build-inline": "34.2.0", - "@ckeditor/ckeditor5-code-block": "34.2.0", - "@ckeditor/ckeditor5-dev-utils": "^30.5.0", - "@ckeditor/ckeditor5-dev-webpack-plugin": "^30.5.0", - "@ckeditor/ckeditor5-essentials": "34.2.0", - "@ckeditor/ckeditor5-find-and-replace": "34.2.0", - "@ckeditor/ckeditor5-font": "34.2.0", - "@ckeditor/ckeditor5-horizontal-line": "34.2.0", - "@ckeditor/ckeditor5-html-support": "34.2.0", - "@ckeditor/ckeditor5-indent": "34.2.0", - "@ckeditor/ckeditor5-paragraph": "34.2.0", - "@ckeditor/ckeditor5-remove-format": "34.2.0", - "@ckeditor/ckeditor5-source-editing": "34.2.0", - "@ckeditor/ckeditor5-special-characters": "34.2.0", - "@ckeditor/ckeditor5-table": "34.2.0", - "@ckeditor/ckeditor5-theme-lark": "34.2.0", - "@ckeditor/ckeditor5-typing": "34.2.0", - "@ckeditor/ckeditor5-upload": "34.2.0", + "@ckeditor/ckeditor5-alignment": "^36.x", + "@ckeditor/ckeditor5-autoformat": "^36.x", + "@ckeditor/ckeditor5-basic-styles": "^36.x", + "@ckeditor/ckeditor5-block-quote": "^36.x", + "@ckeditor/ckeditor5-code-block": "^36.x", + "@ckeditor/ckeditor5-core": "^36.x", + "@ckeditor/ckeditor5-dev-translations": "^36.x", + "@ckeditor/ckeditor5-dev-utils": "^36.x", + "@ckeditor/ckeditor5-easy-image": "^36.x", + "@ckeditor/ckeditor5-editor-balloon": "^36.x", + "@ckeditor/ckeditor5-editor-classic": "^36.x", + "@ckeditor/ckeditor5-essentials": "^36.x", + "@ckeditor/ckeditor5-find-and-replace": "^36.x", + "@ckeditor/ckeditor5-font": "^36.x", + "@ckeditor/ckeditor5-heading": "^36.x", + "@ckeditor/ckeditor5-horizontal-line": "^36.x", + "@ckeditor/ckeditor5-html-support": "^36.x", + "@ckeditor/ckeditor5-image": "^36.x", + "@ckeditor/ckeditor5-indent": "^36.x", + "@ckeditor/ckeditor5-link": "^36.x", + "@ckeditor/ckeditor5-list": "^36.x", + "@ckeditor/ckeditor5-paragraph": "^36.x", + "@ckeditor/ckeditor5-remove-format": "^36.x", + "@ckeditor/ckeditor5-source-editing": "^36.x", + "@ckeditor/ckeditor5-special-characters": "^36.x", + "@ckeditor/ckeditor5-table": "^36.x", + "@ckeditor/ckeditor5-theme-lark": "^36.x", + "@ckeditor/ckeditor5-typing": "^36.x", + "@ckeditor/ckeditor5-upload": "^36.x", "@ckeditor/ckeditor5-vue2": "^3.0.1", "@elan-ev/reststate-vuex": "~1.0.5", "@fullcalendar/core": "^4.3.1", @@ -62,7 +68,7 @@ "buffer": "^6.0.3", "chart.js": "^2.9.4", "chartist": "0.11.4", - "ckeditor5-math": "34.1.1", + "ckeditor5-math": "^36.x", "colorpare": "^2.2.0", "cropperjs": "1.5.9", "css-loader": "^5.0.1", @@ -1998,26 +2004,13 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-34.2.0.tgz", - "integrity": "sha512-KsEYApU2VCmUsF2Np5VD657dzrvMZTBUgbPAjedghmFvPidpbuhj/fyvdbafbbHMaBhF9uXFTucXqnR7wq4bRw==", - "dev": true, - "dependencies": { - "ckeditor5": "^34.2.0" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" - } - }, "node_modules/@ckeditor/ckeditor5-alignment": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-34.2.0.tgz", - "integrity": "sha512-LpkTL67oaqB2ADLwBPXIFM2iqWSZnCG8OhEjjs7Piuyy7aUudShkbhKwqAhvb37b+MiGYCwuz/HnJlIWAD407Q==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-36.0.1.tgz", + "integrity": "sha512-9JfoV6hlJap3Ympgf3nlNQwj+yJMc0GtGoY3LUC6rg+snPJGjDhjJNBqM5rhr/+HWKOCMrx7OaczS3yJArXW5g==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2025,12 +2018,12 @@ } }, "node_modules/@ckeditor/ckeditor5-autoformat": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-34.2.0.tgz", - "integrity": "sha512-751X2LplWs690MoNA97oXNEk/ZKWgO/iDXFM0peD2dN7X51pSG6Ats6WYAxrkVltCZB60ZbpQ7XEeCrbhxmrlw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-36.0.1.tgz", + "integrity": "sha512-kve+Ergl40L6DzbtvyTMhbwfMZgpl0SJgsAzukQ72OyvJykQywworJ3zt/PgLCJKD+EKN80X9nR8kfBzXRG/vw==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2038,12 +2031,12 @@ } }, "node_modules/@ckeditor/ckeditor5-basic-styles": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-34.2.0.tgz", - "integrity": "sha512-tnfs5K17cY25DrAuFg6owJQYtZ/+cC9er7KfswL5DVWLZSkHHYnt3Yhx6zhhws4mnQf4ETxG9WKWq5JqXu/5lA==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-36.0.1.tgz", + "integrity": "sha512-5qbgzsgmJP7lecf78sy6QpqbsF2BLs7WxziMrJUXQytgq4S7o+Q/uqGF/itpkQMBBnLulRFJ8/x055iOBugreQ==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2051,220 +2044,160 @@ } }, "node_modules/@ckeditor/ckeditor5-block-quote": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-34.2.0.tgz", - "integrity": "sha512-W6ht+2eO/qV4lwEwV7tEWvNxXfj1HIia7GrSjT2z2gyUYLwhjZQDIc1x4ds6517znBgMfLiDU1tH3JzqBaFQqw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-36.0.1.tgz", + "integrity": "sha512-kLvkHGiu5lAnPiUnRUc0M0Nlls179PmcOvX+YIIp62YBYTxG/R6oCC5clnnhodNiDQBEgwbxqoqTKNSkOX0VWw==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-build-classic": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-34.2.0.tgz", - "integrity": "sha512-nXpZWEkHPX0VgFaf1tk4EwcrvPD6MF7ZvRQDm9WdOp8LvMX/pRqvJFbXxKkqPEB4ROrpDKZ0NEs+IdkhiY92zg==", - "dev": true, - "dependencies": { - "@ckeditor/ckeditor5-adapter-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-autoformat": "^34.2.0", - "@ckeditor/ckeditor5-basic-styles": "^34.2.0", - "@ckeditor/ckeditor5-block-quote": "^34.2.0", - "@ckeditor/ckeditor5-ckbox": "^34.2.0", - "@ckeditor/ckeditor5-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-cloud-services": "^34.2.0", - "@ckeditor/ckeditor5-easy-image": "^34.2.0", - "@ckeditor/ckeditor5-editor-classic": "^34.2.0", - "@ckeditor/ckeditor5-essentials": "^34.2.0", - "@ckeditor/ckeditor5-heading": "^34.2.0", - "@ckeditor/ckeditor5-image": "^34.2.0", - "@ckeditor/ckeditor5-indent": "^34.2.0", - "@ckeditor/ckeditor5-link": "^34.2.0", - "@ckeditor/ckeditor5-list": "^34.2.0", - "@ckeditor/ckeditor5-media-embed": "^34.2.0", - "@ckeditor/ckeditor5-paragraph": "^34.2.0", - "@ckeditor/ckeditor5-paste-from-office": "^34.2.0", - "@ckeditor/ckeditor5-table": "^34.2.0", - "@ckeditor/ckeditor5-typing": "^34.2.0" + "node_modules/@ckeditor/ckeditor5-clipboard": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-36.0.1.tgz", + "integrity": "sha512-CFh5oO29dUXwsUf/BPM8g5l8MV3hiG27/h6fpC1qRUTAVXDAj43j+cfYYs8MwNi3hv0c/1KyT1bLySqQ/LZctw==", + "dev": true, + "dependencies": { + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", + "@ckeditor/ckeditor5-widget": "^36.0.1", + "lodash-es": "^4.17.11" }, "engines": { "node": ">=14.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-build-decoupled-document": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-decoupled-document/-/ckeditor5-build-decoupled-document-34.2.0.tgz", - "integrity": "sha512-Y73DYKFK+VwHNcH/9Y0PZCKBnsEkUL4siYwSem7dWG9QxjfWblaSl0dBUpxcEGLInRzfyMDRGl4COttM0vqT+g==", - "dev": true, - "dependencies": { - "@ckeditor/ckeditor5-adapter-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-alignment": "^34.2.0", - "@ckeditor/ckeditor5-autoformat": "^34.2.0", - "@ckeditor/ckeditor5-basic-styles": "^34.2.0", - "@ckeditor/ckeditor5-block-quote": "^34.2.0", - "@ckeditor/ckeditor5-ckbox": "^34.2.0", - "@ckeditor/ckeditor5-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-cloud-services": "^34.2.0", - "@ckeditor/ckeditor5-easy-image": "^34.2.0", - "@ckeditor/ckeditor5-editor-decoupled": "^34.2.0", - "@ckeditor/ckeditor5-essentials": "^34.2.0", - "@ckeditor/ckeditor5-font": "^34.2.0", - "@ckeditor/ckeditor5-heading": "^34.2.0", - "@ckeditor/ckeditor5-image": "^34.2.0", - "@ckeditor/ckeditor5-indent": "^34.2.0", - "@ckeditor/ckeditor5-link": "^34.2.0", - "@ckeditor/ckeditor5-list": "^34.2.0", - "@ckeditor/ckeditor5-media-embed": "^34.2.0", - "@ckeditor/ckeditor5-paragraph": "^34.2.0", - "@ckeditor/ckeditor5-paste-from-office": "^34.2.0", - "@ckeditor/ckeditor5-table": "^34.2.0", - "@ckeditor/ckeditor5-typing": "^34.2.0" + "node_modules/@ckeditor/ckeditor5-code-block": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-36.0.1.tgz", + "integrity": "sha512-jCWIM7WWg2ohC43/3cOKAqBTe2AVBxE3mfpLTqZ7W1TC7RZgRbzsrxzy5ZnjN3Ze9N6e7b+n1cUEMFn+ilhgbw==", + "dev": true, + "dependencies": { + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-build-inline": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-inline/-/ckeditor5-build-inline-34.2.0.tgz", - "integrity": "sha512-Y3EvX5ptWMuSeQG8xDvetrtEV5CPwFmYymbgKK4xRTdmU3J4JKn5jh0vkuqoIh9cSK+mF9NDALptXvaCshkR/g==", - "dev": true, - "dependencies": { - "@ckeditor/ckeditor5-adapter-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-autoformat": "^34.2.0", - "@ckeditor/ckeditor5-basic-styles": "^34.2.0", - "@ckeditor/ckeditor5-block-quote": "^34.2.0", - "@ckeditor/ckeditor5-ckbox": "^34.2.0", - "@ckeditor/ckeditor5-ckfinder": "^34.2.0", - "@ckeditor/ckeditor5-cloud-services": "^34.2.0", - "@ckeditor/ckeditor5-easy-image": "^34.2.0", - "@ckeditor/ckeditor5-editor-inline": "^34.2.0", - "@ckeditor/ckeditor5-essentials": "^34.2.0", - "@ckeditor/ckeditor5-heading": "^34.2.0", - "@ckeditor/ckeditor5-image": "^34.2.0", - "@ckeditor/ckeditor5-indent": "^34.2.0", - "@ckeditor/ckeditor5-link": "^34.2.0", - "@ckeditor/ckeditor5-list": "^34.2.0", - "@ckeditor/ckeditor5-media-embed": "^34.2.0", - "@ckeditor/ckeditor5-paragraph": "^34.2.0", - "@ckeditor/ckeditor5-paste-from-office": "^34.2.0", - "@ckeditor/ckeditor5-table": "^34.2.0", - "@ckeditor/ckeditor5-typing": "^34.2.0" + "node_modules/@ckeditor/ckeditor5-core": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-36.0.1.tgz", + "integrity": "sha512-50O+DYXtaf4dMOn+3mGUvfYiE2qsCgVn114WQj7Tj3pZl5w+pAIv/2P+9cBB2Kb7QxgPZqZ7bvsi9wHqIJ6KCw==", + "dev": true, + "dependencies": { + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", + "lodash-es": "^4.17.15" }, "engines": { "node": ">=14.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-ckbox": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-34.2.0.tgz", - "integrity": "sha512-vjD/i5ya4KbjltjkHVXlNPMo6Gsgm/1Xg6ENdW3SGLmJm9So5M4QqhQZQPEPNISNd5Pu5OVyHmX/F0G/rFUqOA==", + "node_modules/@ckeditor/ckeditor5-dev-translations": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-dev-translations/-/ckeditor5-dev-translations-36.0.1.tgz", + "integrity": "sha512-zFIJRJBqvBTZrmlFTbYGk1Z94KYh2bTm3jmpF5V9ty5Z07o9mLzsXLHbFWBZv5yaF2menNTDhjgATb57kzDrtQ==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "@babel/parser": "^7.18.9", + "@babel/traverse": "^7.18.9", + "chalk": "^4.0.0", + "pofile": "^1.0.9", + "rimraf": "^3.0.2", + "webpack-sources": "^2.0.1" }, "engines": { - "node": ">=14.0.0", + "node": ">=16.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-ckfinder": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-34.2.0.tgz", - "integrity": "sha512-zZfCxjcw+mJGGZaZAgmU8a1iwOsov2T/flT6AxZPVVyTXQlaAN4reQ3MH2K45E/2kSc04QNSfH7iSHubxtfFVA==", + "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ckeditor/ckeditor5-clipboard": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-34.2.0.tgz", - "integrity": "sha512-OcdFj9yT7C5yKPHtTKWvjGMJLpigrkdJN4AZhdJJPigiuYG0c5mnCuTvOYxp2kVijFWRjhPlwIyPVTtDZ0vnzw==", + "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", - "@ckeditor/ckeditor5-widget": "^34.2.0", - "lodash-es": "^4.17.11" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@ckeditor/ckeditor5-cloud-services": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-34.2.0.tgz", - "integrity": "sha512-4ePDTu9TKgQk1duby7Sp8kGct9TzWlZWnE/1IoG6sDUUUF3iVydrc7GlKC5hkB3BsnBChQS24kj8iUrrFFcGnw==", + "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" + "node": ">=7.0.0" } }, - "node_modules/@ckeditor/ckeditor5-code-block": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-34.2.0.tgz", - "integrity": "sha512-jhQ5YBVklVOrjL6G0oYeVMo/2PIryNWXxYuTz8iZuw5ZgONy6AmYrzryN+ej0xFAN3DtmuW58weKR8jxdgW6Nw==", + "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "ckeditor5": "^34.2.0" - }, "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" + "node": ">=8" } }, - "node_modules/@ckeditor/ckeditor5-core": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-34.2.0.tgz", - "integrity": "sha512-6K0aToibRt28sCVYpMqdSKGvMifjwziqxLxyEh38CyDZJBUf7QPEAPlEpKAFTisHNEmC4471tr8UPpvNgqUXGA==", + "node_modules/@ckeditor/ckeditor5-dev-translations/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", - "lodash-es": "^4.17.15" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" + "node": ">=8" } }, "node_modules/@ckeditor/ckeditor5-dev-utils": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-30.5.0.tgz", - "integrity": "sha512-R5oC9ka68X7NwafM5rFvIv6q0qT2kMsBkRikdEygx7cmGkV4dy7uM5HuOBUuIoLW7Md2o3QfkD3dnk6OdzuuJw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-36.0.1.tgz", + "integrity": "sha512-fANvAuQ2s2fixSaerpj3Mb3AYhcapau92vVSvtIgFh3cjLiH1IHomdhnqnhbMajO59LmTqqyFt2G3nKhMuZCng==", "dev": true, "dependencies": { - "@babel/parser": "^7.18.9", - "@babel/traverse": "^7.18.9", - "@ckeditor/ckeditor5-dev-webpack-plugin": "^30.5.0", + "@ckeditor/ckeditor5-dev-translations": "^36.0.1", "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.6.1", "cssnano": "^5.0.0", "del": "^5.0.0", - "escodegen": "^1.9.0", "fs-extra": "^8.1.0", "is-interactive": "^1.0.0", "javascript-stringify": "^1.6.0", - "pofile": "^1.0.9", "postcss": "^8.4.12", "postcss-import": "^14.1.0", "postcss-loader": "^4.3.0", @@ -2278,11 +2211,8 @@ "ts-loader": "^9.3.0" }, "engines": { - "node": ">=14.0.0", + "node": ">=16.0.0", "npm": ">=5.7.1" - }, - "peerDependencies": { - "webpack": "^4.43.0 || ^5.24.0" } }, "node_modules/@ckeditor/ckeditor5-dev-utils/node_modules/ansi-styles": { @@ -2388,111 +2318,26 @@ "node": ">=8" } }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-30.5.0.tgz", - "integrity": "sha512-mErNKfGd8XBjJxB7K7yCDnNq4pLQKbEjwJHf9g2EW4gOD1U55rgPc1XpmgfxhMj44QQ8YOZXAQ/Y/55AN7GATA==", - "deprecated": "This package is no longer maintained. Please, read the migration path: https://github.com/ckeditor/ckeditor5-dev/releases/tag/v32.0.0.", - "dev": true, - "dependencies": { - "@ckeditor/ckeditor5-dev-utils": "^30.5.0", - "chalk": "^4.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "webpack-sources": "^2.0.1" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" - }, - "peerDependencies": { - "webpack": "^4.43.0 || ^5.24.0" - } - }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ckeditor/ckeditor5-dev-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@ckeditor/ckeditor5-easy-image": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-34.2.0.tgz", - "integrity": "sha512-0enLOsyy8cYAb85BA+TxZqg2sDWrup62Ph31dv97EBry0+XjvD5ViEhgpr15WoY/4B3HZZbxy4W+/zJz3GmO5w==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-36.0.1.tgz", + "integrity": "sha512-t74s840xNPaWibgI1YcC/lHcigCY4zUyXzpXhepWe9qw4zfg58H2wK6a0AwBN+yy8mXcotDUmjXkOXgnNkJp0Q==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-editor-classic": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-34.2.0.tgz", - "integrity": "sha512-/iNJixrnmiZOyLb85TkGeWsPMXeKpdsAIa7KX92AxIYhW08UpgFS+X7Cp17nZ7FBNM4nmFarUz7WbGvR0n51ew==", + "node_modules/@ckeditor/ckeditor5-editor-balloon": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-36.0.1.tgz", + "integrity": "sha512-S8fIoqQ/A7lGyvEMUY1paZHVNevBWHJ4AvwRfYSgsG/XNjxLJClD7LRk/vT0btyTUg6KAQ9r7oAiSkaU/MfgFg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2500,27 +2345,13 @@ "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-editor-decoupled": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-34.2.0.tgz", - "integrity": "sha512-1ekbS9ooqRfzMEXcJjytRh/C3zQdSZyUvXv9HU35FtxPKBE1fX1TRfVz/oQw5/NVuC+3DzZSrk+ziwZZzN8U3w==", - "dev": true, - "dependencies": { - "ckeditor5": "^34.2.0", - "lodash-es": "^4.17.15" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" - } - }, - "node_modules/@ckeditor/ckeditor5-editor-inline": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-34.2.0.tgz", - "integrity": "sha512-AakaKeqbDaSjliaXjGvkoC8NSK/o19DI9NEw21cAFqV/fTTaVEx5dv0HUoODLX9dKajvrB6iSCbEkenTEY4CpA==", + "node_modules/@ckeditor/ckeditor5-editor-classic": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-36.0.1.tgz", + "integrity": "sha512-/euO79HzgIxILgxbqpGaMxO3f2BSGazljAGTc+aGJQ4bs9YnkxpeCc2wxYXuUzMNev2vVqhaPTvRJzg2Bb2r9w==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2529,12 +2360,12 @@ } }, "node_modules/@ckeditor/ckeditor5-engine": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-34.2.0.tgz", - "integrity": "sha512-9/i6TZ+Sy5T6hnuCtmeLTfwLSY8LaS7qFkW6gsM9NEB+LSSu930GP0Ss30Nw6dYo/JmYiQEpkiRJzKYIjrH8Pg==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-36.0.1.tgz", + "integrity": "sha512-Ze2omTguUggwiL9vvLvPk+QpjEBbIOPS1Hi/ROYlsW8QSdnPbSTv+6rCIYThqJMFeonxLZWV5XwbcqpgSAs0MA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "^34.2.0", + "@ckeditor/ckeditor5-utils": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2543,14 +2374,13 @@ } }, "node_modules/@ckeditor/ckeditor5-enter": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-34.2.0.tgz", - "integrity": "sha512-QxaT3jH0qsZaE0Egj1D19o6YBz/EJKs0am5ny5hDnd5sntvIUk9PNGEu/v3mRmNqZqrhRu4BuedvdRzYWseUjw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-36.0.1.tgz", + "integrity": "sha512-FHZ43bltDGFyihfBOTwBOgsS2mMU2ATR9xxFEKlDP+8+P1bq4e0YkC3t4PuwtHIZMvNHiFxqvmFtA2eznGS7sQ==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0" + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2558,12 +2388,12 @@ } }, "node_modules/@ckeditor/ckeditor5-essentials": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-34.2.0.tgz", - "integrity": "sha512-1FID6r3CknWPdQQavT5U+OQ9+GwQQNI6hJNhWCfPxtvYhtR/SQp/MV+Lsn2e5Kt9VkCQkN7HdeYp5vumT84BZw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-36.0.1.tgz", + "integrity": "sha512-f6yEeSA75/hAqK+hZ09LnUj+2PSXFSTHFBzC32WKr+e2qlTx3/mArvwnnQcTj7lo7SuUmctpg7X5DD3/Rcg+HA==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2571,14 +2401,14 @@ } }, "node_modules/@ckeditor/ckeditor5-find-and-replace": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-34.2.0.tgz", - "integrity": "sha512-tpIfWGf6CqKtxv5WXNAotaPV1pl+Obwstmk0N81cw7a3pSR5dCs4EiwJMY2n0RrxB4U/IhoEpLXz8Vo9pCUpCw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-36.0.1.tgz", + "integrity": "sha512-UX8sAEpuUy017EMDrQqrKy+T6UkmXOezi1SNdtG/AdxUhvtD4yDjwAaFLnbMTMyDUFor21Tao3Lvs6aj5n4r4w==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", - "ckeditor5": "^34.2.0", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2587,12 +2417,12 @@ } }, "node_modules/@ckeditor/ckeditor5-font": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-34.2.0.tgz", - "integrity": "sha512-hSTxD0D+ad8yNsyM8a3SXvqes7oQah1PEcC3CG3jXmVnVjikWd+iAL959R2UnkJBSY5AZKgF3MCFC69pBIBdxQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-36.0.1.tgz", + "integrity": "sha512-mn6nAG9AQ7bC7ywsEf5+pE09yhPSGupttfZ94bzjqTtQAAEahkiD/ympzfypWyJWCkTUlqa0/ZmF22nqcNlTEQ==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2600,12 +2430,12 @@ } }, "node_modules/@ckeditor/ckeditor5-heading": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-34.2.0.tgz", - "integrity": "sha512-I/0H06LvksVPW99g2uGb6vQUX/T7o9DAUF1dMcCC5SgSXsqDmO3pdC50uKwSeLaqUxUhVFF0mjBo0inQZVX9fQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-36.0.1.tgz", + "integrity": "sha512-elVL6y8kFFB4wCjmVTYsbx5vFoNCsPn9fAJ4/T2tElb9wszs4BsbMjScUNwVomOxuSPy3x6Qt4HG1NFVoh1FKg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2613,12 +2443,12 @@ } }, "node_modules/@ckeditor/ckeditor5-horizontal-line": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-34.2.0.tgz", - "integrity": "sha512-BblqWFHOGB4fcKsHm6uH8gkvKA3+76hEBauovqOQLzgAvfC4zNpvcOVrt24hoF7b818Iisgea88eslljL4yX7A==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-36.0.1.tgz", + "integrity": "sha512-ht3mRhImB4BNVYzr73k8syOiXLM3UNBBvaPGmbFylXiAj9+Hbh4EFR0i8e1v5fFCtGBMilBRZeFN1QlMYXHtvg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2626,12 +2456,12 @@ } }, "node_modules/@ckeditor/ckeditor5-html-support": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-34.2.0.tgz", - "integrity": "sha512-al5WbJ+pMB9YUhOnx9k9haAo28WNe06wZSvDiPL+wpBmZ+Xa9vZnVS4Rf/H4PSZjQT/GnOkeo5vdEhSjd5bA4Q==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-36.0.1.tgz", + "integrity": "sha512-ofOZb+RKKNXikbigyArewijN5lnmCFDUp5k9GTUWpjDCNwEgx+sdBU6qqMKqciJGxY4/gM4qLJ4VQ56dv7r0Wg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2640,13 +2470,13 @@ } }, "node_modules/@ckeditor/ckeditor5-image": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-34.2.0.tgz", - "integrity": "sha512-JY6uETyhIFjOk4kky6HrpNg8JFYVz0mU654qZ7o+a5J+L55cOIC8JDMA8VUa5Opn2XDwZb4Q91ArX1hIJSGRQA==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-36.0.1.tgz", + "integrity": "sha512-HElSvvBXL4kmwtwrAw28oIuJN1gXMr0kOYnR+sLkJGlfeymOQ4RKEqW3vOPMmN6s2RMJVoNkpytPbhzalFn3Sg==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0", - "ckeditor5": "^34.2.0", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2655,12 +2485,12 @@ } }, "node_modules/@ckeditor/ckeditor5-indent": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-34.2.0.tgz", - "integrity": "sha512-6yGuUI06C6bTpNXvUXh5/AbmYoV0FvUW23wIsarml2SgdBi/NCFDHCJsFcJn33uRQgEuZHaO2ORhOe6yQfBBFQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-36.0.1.tgz", + "integrity": "sha512-3E+3UCP9Krr41yP8g5a/QmJEJCChOFWdrLShi0YYODkJlhI/UUJFWVDTx54x1GnnDhXt8HhpOVGHCo14+KuRfA==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2678,13 +2508,13 @@ } }, "node_modules/@ckeditor/ckeditor5-link": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-34.2.0.tgz", - "integrity": "sha512-rqw2Pu3NY2VTE6hpeLoOnH2FOMRZLZgo2biWVitHR9upzv1x50PngJujoaWerTB4dHbWz+W2M1uc+UZADm/P1A==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-36.0.1.tgz", + "integrity": "sha512-u0E22wCzgAWMlg5BemYAUHws6zausSek+tmI6VmTRibogsUsfso3JnWI0RXNiEd4i2w1wRspvb9S/D8iy7n4fA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0", - "ckeditor5": "^34.2.0", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2693,27 +2523,13 @@ } }, "node_modules/@ckeditor/ckeditor5-list": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-34.2.0.tgz", - "integrity": "sha512-mP/XlvFDDQL4PDKOZuFWPHtRikSPbx6vARh/2INTsa41AURN35O86hESTwMhz+ZqmTe4av1KRPZYtVhgS3xGeA==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-36.0.1.tgz", + "integrity": "sha512-v4h5iXCqbOpjaiQRZNp1SExU7BzKfcDU9VUGZpUzFLC0S1JKVO1DAJKMxhqgUCvgGrTOrYHZoGaqNWQZXXwZQg==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0", - "ckeditor5": "^34.2.0" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" - } - }, - "node_modules/@ckeditor/ckeditor5-media-embed": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-34.2.0.tgz", - "integrity": "sha512-XQxTAwtZ0Fe6eph+5equH8DGtcHMj6ktJ54g/aQKyC4UxHb5JFSQ8y9Ud0IQfH12lT1uyagDOnC8rY2AUKGBGA==", - "dev": true, - "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0", - "ckeditor5": "^34.2.0" + "@ckeditor/ckeditor5-ui": "^36.0.1", + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2721,27 +2537,14 @@ } }, "node_modules/@ckeditor/ckeditor5-paragraph": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-34.2.0.tgz", - "integrity": "sha512-xcXUsXz3PY355gJ8u+y0qFLWcScYo0CZPZSbs5YwDz7g9lV8foVVzzdW7ITYwr5/YIpJsjjxYC+dDUqsH6EpBQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-36.0.1.tgz", + "integrity": "sha512-NF1PH9WVfY81vkohj6GV1W/u1ogbZnfy60wrDy8Qp3iaFK1LJBsKNz3q1tf0WkBghaX/MUjR9E06l/OrTtaTZw==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0" - }, - "engines": { - "node": ">=14.0.0", - "npm": ">=5.7.1" - } - }, - "node_modules/@ckeditor/ckeditor5-paste-from-office": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-34.2.0.tgz", - "integrity": "sha512-NT3NYBeQqibswfj5w1WjvaXFk1XPMjiJZQKR8qoi5o5jH7bwmhlnsZM7cZdYgZHS8rX6JSLAtD6A1XRD3deRfQ==", - "dev": true, - "dependencies": { - "ckeditor5": "^34.2.0" + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2749,12 +2552,12 @@ } }, "node_modules/@ckeditor/ckeditor5-remove-format": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-34.2.0.tgz", - "integrity": "sha512-3eYXu5SUusnoqllEJnXN2mvtJW26W73ntNxEj+5JTdZ5TxvZurqSUJM00GQuDXdoyZN52SOFz980rgbszegMEg==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-36.0.1.tgz", + "integrity": "sha512-bOE4s5e+DiTujGm7L2AQLOtv4/hV5dQkv3czrC3OZ6wtXxAnSYHb3wWPUeIrtJTOisri4Pf9oL6If7uFKWkZNg==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2762,14 +2565,14 @@ } }, "node_modules/@ckeditor/ckeditor5-select-all": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-34.2.0.tgz", - "integrity": "sha512-/Va85RwNlmpgQ7vWxiAFLyzXhXrWiA5Pde7yCNcc6hJpqnaGcqvscOJoZLMk5oASTvMnPhQIgNSMDN/oq6ej0Q==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-36.0.1.tgz", + "integrity": "sha512-8rPxcenTAoqXy1gleZvfsc7VD0IltPFq8R+blD4JL+sSMMDUtKhPuok4TA9h6Yh0nP6LfRK2fBUKIWH3xRPABg==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0" + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2777,13 +2580,13 @@ } }, "node_modules/@ckeditor/ckeditor5-source-editing": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-34.2.0.tgz", - "integrity": "sha512-FI/2czbYl58M5mkIOtokeidGTqAcxZyOZ5PsC7Mx06o7PNnNsW7/vjG7U5i2jpnWweSfZPyGVb3P5xLfgJQ0xg==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-36.0.1.tgz", + "integrity": "sha512-8Hxbmt60G530zDhpVHDeY+USdRKrdGn0spx1YREVbWAhQ1kMV6FUWDGtDJx9Rbj8BRe19AtlT40ctSbKS/XVzQ==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-theme-lark": "^34.2.0", - "ckeditor5": "^34.2.0" + "@ckeditor/ckeditor5-theme-lark": "^36.0.1", + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2791,12 +2594,12 @@ } }, "node_modules/@ckeditor/ckeditor5-special-characters": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-34.2.0.tgz", - "integrity": "sha512-7et0PY5MZaPwOpEz7pdajxm3ENVzRAuh4RBG0TyV6aJHbK/Z8d3FJM8S3dse/DiwzOf+oTQVOWALIx2cNYBcUA==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-36.0.1.tgz", + "integrity": "sha512-vYloQvPPU1aGJAkjDWTZvU9BbK7CLsyVg8FV+NSSbdPKAY6K4IPS52jvbCDZBHQqzmeFVEy5U8iMhbZxYdkI6g==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0" + "ckeditor5": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2804,12 +2607,12 @@ } }, "node_modules/@ckeditor/ckeditor5-table": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-34.2.0.tgz", - "integrity": "sha512-ALJAldO7x+gvY7AeOg7j9PuG0ftQekkPTN3QvLHMqDFBfeRh76fK7xPGz+A42DeSFGIcMQ8IS9jpiT4PRKC7cw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-36.0.1.tgz", + "integrity": "sha512-ishbq3Rp8n7aypswmbqAVWT5W0iYZfAfm6wS+dpSoFqzAPX6ko8+bnoTkq+Wbs1S4+JDaua7QOJw9A1L1cv17A==", "dev": true, "dependencies": { - "ckeditor5": "^34.2.0", + "ckeditor5": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2818,12 +2621,12 @@ } }, "node_modules/@ckeditor/ckeditor5-theme-lark": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-34.2.0.tgz", - "integrity": "sha512-oXFtkgUs7g6u9n4KwXflLptsqIh+XMHyuZXq1//iBLKFQKpCM0NVvf7fPM4hZNKB96/khxN238hSH5bHstS6Zw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-36.0.1.tgz", + "integrity": "sha512-R7VnSjET52mxHEAt6+GxSHmBKddsRjkVHDxbd13GTkDl01SKjbYfVF+Ek6iVuf6eVyNu6eedRJugShZSsHhXiA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "^34.2.0" + "@ckeditor/ckeditor5-ui": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2831,14 +2634,14 @@ } }, "node_modules/@ckeditor/ckeditor5-typing": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-34.2.0.tgz", - "integrity": "sha512-Eq8mhb8M7RwUmeVUantN+PrqxDELXCvLCcpixy+ge/5lM8wxVcn/SonfUL9PLqs2eluRc4Bx+mstMQySglkVkw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-36.0.1.tgz", + "integrity": "sha512-NwXQxNxf/LLANiiteEVaLr1ZzvJd7y6+O5a6x0Tv9Uuheu80aw2Axm3icneODt05G/XT+iJmCHzUYdEiCsHUaw==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2847,13 +2650,13 @@ } }, "node_modules/@ckeditor/ckeditor5-ui": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-34.2.0.tgz", - "integrity": "sha512-XL561G/e3b1YLGHNjLxS9IgoVn4BSugHmidEXYNUTMLATRCKld1XMUKFsB/wm3DwLBUfWn4d2j3qdcO2CnDuBg==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-36.0.1.tgz", + "integrity": "sha512-wPqAdXUZnEAD3XPvS5vEGU2kxzTQah3wne3B1esdlbJ7dSLZDdx8r1dyKyp3/WCpCT8G+PqGvSUrlnqcy7WI5A==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -2862,14 +2665,14 @@ } }, "node_modules/@ckeditor/ckeditor5-undo": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-34.2.0.tgz", - "integrity": "sha512-WW3f6ku36DpKhUxXACfNFm2DaKcJ2Rz0EFEkol0+offpOjltJnUEJ7LvfOthGdMvGz+5lmnySTbkvOvNruq1Ew==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-36.0.1.tgz", + "integrity": "sha512-TBm6TAnur59f5hqlgUZ89NV3cPQw0xqqpSuVMFrvFruPmPiIay2E34Mapb5KRXr83AEPhNN8GAE2YM7HmMqKrQ==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0" + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2877,14 +2680,14 @@ } }, "node_modules/@ckeditor/ckeditor5-upload": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-34.2.0.tgz", - "integrity": "sha512-HBJr0/wFE+R13aIXRF/xJVQqo6Yh34EgbnrNYYhlNiHG40Vr6079eCuoZrnY3vwEsjtFNnTRQ433+RqxJ652zw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-36.0.1.tgz", + "integrity": "sha512-932vnvO++SzfZ6EpNkOj6PPKN6vVgn5aW3gu0c1D51cF9KkCFiaMhBDsOzDRVvq/bbnDqUQ9v3j1cNo2UlC8oA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0" + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -2892,9 +2695,9 @@ } }, "node_modules/@ckeditor/ckeditor5-utils": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-34.2.0.tgz", - "integrity": "sha512-jHJV2S8DzmpVvd3jdercY6HsGRAwpm/MK79Rs/Mrc3NNYKzN9SVFs/NLbrELNoMZeJ1WKt5BwKgBY+PEOpfyLw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-36.0.1.tgz", + "integrity": "sha512-TW/YRb0OQe88IyqRoq2xS02iXOG82NQybzMuFDnGyCaFV0hA/9ysOyWwFpxDLcPDhDgVJZIxuwvFaek9x+uCMA==", "dev": true, "dependencies": { "lodash-es": "^4.17.15" @@ -2915,17 +2718,17 @@ } }, "node_modules/@ckeditor/ckeditor5-widget": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-34.2.0.tgz", - "integrity": "sha512-h2iF/RRK+GjvVHb6VY7+slnIV+IdWdLfZS83OECQNYp2e+6kN/JZp+PxiyYC4asPTraL43zJGzlgT53Jof77vw==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-36.0.1.tgz", + "integrity": "sha512-on92cCRYLWTfwrpnFi5z4FY7NDhY+X+p6yuYStnB9d9jM3FJi3/7y2q9ojr8fSMot4pQsXCiFXzaF6yez+77wA==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-enter": "^34.2.0", - "@ckeditor/ckeditor5-typing": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-enter": "^36.0.1", + "@ckeditor/ckeditor5-typing": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", "lodash-es": "^4.17.15" }, "engines": { @@ -6163,23 +5966,23 @@ "dev": true }, "node_modules/ckeditor5": { - "version": "34.2.0", - "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-34.2.0.tgz", - "integrity": "sha512-CxSMAzpN20HYZJQRw0AQJ/saLLXMz3qBywZOo0IKxVwwUE96PZudV08G/OjgciGrzQ/GjhpW/C+wdciMQ4cpzQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-36.0.1.tgz", + "integrity": "sha512-9zKX7WIRKSDviM0s41VvW8JtDiRtNrhwrzYj4XCjGpZyIXsUKttdJYHIP5iP1MdfZU/hCvpgSUn2fmRPxFbg+Q==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "^34.2.0", - "@ckeditor/ckeditor5-core": "^34.2.0", - "@ckeditor/ckeditor5-engine": "^34.2.0", - "@ckeditor/ckeditor5-enter": "^34.2.0", - "@ckeditor/ckeditor5-paragraph": "^34.2.0", - "@ckeditor/ckeditor5-select-all": "^34.2.0", - "@ckeditor/ckeditor5-typing": "^34.2.0", - "@ckeditor/ckeditor5-ui": "^34.2.0", - "@ckeditor/ckeditor5-undo": "^34.2.0", - "@ckeditor/ckeditor5-upload": "^34.2.0", - "@ckeditor/ckeditor5-utils": "^34.2.0", - "@ckeditor/ckeditor5-widget": "^34.2.0" + "@ckeditor/ckeditor5-clipboard": "^36.0.1", + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", + "@ckeditor/ckeditor5-enter": "^36.0.1", + "@ckeditor/ckeditor5-paragraph": "^36.0.1", + "@ckeditor/ckeditor5-select-all": "^36.0.1", + "@ckeditor/ckeditor5-typing": "^36.0.1", + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-undo": "^36.0.1", + "@ckeditor/ckeditor5-upload": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", + "@ckeditor/ckeditor5-widget": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -6187,19 +5990,19 @@ } }, "node_modules/ckeditor5-math": { - "version": "34.1.1", - "resolved": "https://registry.npmjs.org/ckeditor5-math/-/ckeditor5-math-34.1.1.tgz", - "integrity": "sha512-KS0YDwXpqa1oojHVsCQyHZbpM/PJ1sGtHgeWk3yWd/gIICJ1/iDqH9dTycTHJrcCwPoZAfJNC/iPGD732H74XQ==", + "version": "36.0.2", + "resolved": "https://registry.npmjs.org/ckeditor5-math/-/ckeditor5-math-36.0.2.tgz", + "integrity": "sha512-7KZbMxF/yjwZ47xt8U3jgP8xS7cYX9RR991f1FdyI1ThSUBtqWkAJj28xAnE7pOzEzQbBamzzBuhj/vruA00Rg==", "dev": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "^34.1.0", - "@ckeditor/ckeditor5-core": "^34.1.0", - "@ckeditor/ckeditor5-engine": "^34.1.0", + "@ckeditor/ckeditor5-clipboard": "^36.0.1", + "@ckeditor/ckeditor5-core": "^36.0.1", + "@ckeditor/ckeditor5-engine": "^36.0.1", "@ckeditor/ckeditor5-inspector": "^3.0.0", - "@ckeditor/ckeditor5-ui": "^34.1.0", - "@ckeditor/ckeditor5-undo": "^34.1.0", - "@ckeditor/ckeditor5-utils": "^34.1.0", - "@ckeditor/ckeditor5-widget": "^34.1.0" + "@ckeditor/ckeditor5-ui": "^36.0.1", + "@ckeditor/ckeditor5-undo": "^36.0.1", + "@ckeditor/ckeditor5-utils": "^36.0.1", + "@ckeditor/ckeditor5-widget": "^36.0.1" }, "engines": { "node": ">=14.0.0", @@ -8287,27 +8090,35 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -8644,23 +8455,6 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12102,36 +11896,6 @@ "node": ">=0.4.0" } }, - "node_modules/jsdom/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/jsdom/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13031,51 +12795,17 @@ } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -17169,15 +16899,6 @@ "node": ">= 10.0.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index d0d17fc14f7b440745f9c6c81954c05b0f15aaed..37aae5d583c170d78737b3b1e90bf1569a04182e 100644 --- a/package.json +++ b/package.json @@ -26,29 +26,35 @@ "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@babel/register": "^7.12.1", - "@ckeditor/ckeditor5-alignment": "34.2.0", - "@ckeditor/ckeditor5-autoformat": "34.2.0", - "@ckeditor/ckeditor5-basic-styles": "34.2.0", - "@ckeditor/ckeditor5-build-classic": "34.2.0", - "@ckeditor/ckeditor5-build-decoupled-document": "34.2.0", - "@ckeditor/ckeditor5-build-inline": "34.2.0", - "@ckeditor/ckeditor5-code-block": "34.2.0", - "@ckeditor/ckeditor5-dev-utils": "^30.5.0", - "@ckeditor/ckeditor5-dev-webpack-plugin": "^30.5.0", - "@ckeditor/ckeditor5-essentials": "34.2.0", - "@ckeditor/ckeditor5-find-and-replace": "34.2.0", - "@ckeditor/ckeditor5-font": "34.2.0", - "@ckeditor/ckeditor5-horizontal-line": "34.2.0", - "@ckeditor/ckeditor5-html-support": "34.2.0", - "@ckeditor/ckeditor5-indent": "34.2.0", - "@ckeditor/ckeditor5-paragraph": "34.2.0", - "@ckeditor/ckeditor5-remove-format": "34.2.0", - "@ckeditor/ckeditor5-source-editing": "34.2.0", - "@ckeditor/ckeditor5-special-characters": "34.2.0", - "@ckeditor/ckeditor5-table": "34.2.0", - "@ckeditor/ckeditor5-theme-lark": "34.2.0", - "@ckeditor/ckeditor5-typing": "34.2.0", - "@ckeditor/ckeditor5-upload": "34.2.0", + "@ckeditor/ckeditor5-alignment": "^36.x", + "@ckeditor/ckeditor5-autoformat": "^36.x", + "@ckeditor/ckeditor5-basic-styles": "^36.x", + "@ckeditor/ckeditor5-block-quote": "^36.x", + "@ckeditor/ckeditor5-code-block": "^36.x", + "@ckeditor/ckeditor5-core": "^36.x", + "@ckeditor/ckeditor5-dev-translations": "^36.x", + "@ckeditor/ckeditor5-dev-utils": "^36.x", + "@ckeditor/ckeditor5-easy-image": "^36.x", + "@ckeditor/ckeditor5-editor-balloon": "^36.x", + "@ckeditor/ckeditor5-editor-classic": "^36.x", + "@ckeditor/ckeditor5-essentials": "^36.x", + "@ckeditor/ckeditor5-find-and-replace": "^36.x", + "@ckeditor/ckeditor5-font": "^36.x", + "@ckeditor/ckeditor5-heading": "^36.x", + "@ckeditor/ckeditor5-horizontal-line": "^36.x", + "@ckeditor/ckeditor5-html-support": "^36.x", + "@ckeditor/ckeditor5-image": "^36.x", + "@ckeditor/ckeditor5-indent": "^36.x", + "@ckeditor/ckeditor5-link": "^36.x", + "@ckeditor/ckeditor5-list": "^36.x", + "@ckeditor/ckeditor5-paragraph": "^36.x", + "@ckeditor/ckeditor5-remove-format": "^36.x", + "@ckeditor/ckeditor5-source-editing": "^36.x", + "@ckeditor/ckeditor5-special-characters": "^36.x", + "@ckeditor/ckeditor5-table": "^36.x", + "@ckeditor/ckeditor5-theme-lark": "^36.x", + "@ckeditor/ckeditor5-typing": "^36.x", + "@ckeditor/ckeditor5-upload": "^36.x", "@ckeditor/ckeditor5-vue2": "^3.0.1", "@elan-ev/reststate-vuex": "~1.0.5", "@fullcalendar/core": "^4.3.1", @@ -72,7 +78,7 @@ "buffer": "^6.0.3", "chart.js": "^2.9.4", "chartist": "0.11.4", - "ckeditor5-math": "34.1.1", + "ckeditor5-math": "^36.x", "colorpare": "^2.2.0", "cropperjs": "1.5.9", "css-loader": "^5.0.1", diff --git a/resources/assets/javascripts/chunk-loader.js b/resources/assets/javascripts/chunk-loader.js index db613fdebc7abb5fbfd05c796d831c493e9641b1..d2da2a7b14453ceec5d02a63c799c33e0b126611 100644 --- a/resources/assets/javascripts/chunk-loader.js +++ b/resources/assets/javascripts/chunk-loader.js @@ -76,11 +76,9 @@ export const loadChunk = (function () { case 'wysiwyg': promise = import( - /* webpackChunkName: "vue.js" */ + /* webpackChunkName: "wysiwyg.js" */ './chunks/wysiwyg' - ).then(({default: ClassicEditor}) => { - return ClassicEditor; - }); + ); break; default: diff --git a/resources/assets/javascripts/chunks/wysiwyg.js b/resources/assets/javascripts/chunks/wysiwyg.js index b5161b195376c2af9c8b3925a7d7ba8e8b814b29..fa218b2263f1161be9a8564d4796eaf5ee97cb49 100644 --- a/resources/assets/javascripts/chunks/wysiwyg.js +++ b/resources/assets/javascripts/chunks/wysiwyg.js @@ -1,305 +1,14 @@ -/* ckeditor official */ -import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment'; -import Autoformat from '@ckeditor/ckeditor5-autoformat/src/autoformat'; -import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote'; -import BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'; -import ClassicEditorBase from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'; -import CodeBlock from '@ckeditor/ckeditor5-code-block/src/codeblock'; -import EasyImagePlugin from '@ckeditor/ckeditor5-easy-image/src/easyimage'; -import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'; -import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository'; -import FindAndReplace from '@ckeditor/ckeditor5-find-and-replace/src/findandreplace'; -import FontBackgroundColor from '@ckeditor/ckeditor5-font/src/fontbackgroundcolor.js'; -import FontColor from '@ckeditor/ckeditor5-font/src/fontcolor.js'; -import GeneralHtmlSupport from '@ckeditor/ckeditor5-html-support/src/generalhtmlsupport'; -import HeadingPlugin from '@ckeditor/ckeditor5-heading/src/heading'; -import HorizontalLine from '@ckeditor/ckeditor5-horizontal-line/src/horizontalline'; -import HtmlComment from '@ckeditor/ckeditor5-html-support/src/htmlcomment'; -import ImagePlugin from '@ckeditor/ckeditor5-image/src/image'; -import ImageUploadPlugin from '@ckeditor/ckeditor5-image/src/imageupload'; -import ImageCaptionPlugin from '@ckeditor/ckeditor5-image/src/imagecaption'; -import ImageResizePlugin from '@ckeditor/ckeditor5-image/src/imageresize'; -import ImageStylePlugin from '@ckeditor/ckeditor5-image/src/imagestyle'; -import ImageToolbarPlugin from '@ckeditor/ckeditor5-image/src/imagetoolbar'; -import Indent from '@ckeditor/ckeditor5-indent/src/indent'; -import IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock'; -import ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'; -import LanguageDe from '@ckeditor/ckeditor5-build-classic/build/translations/de.js'; -import LinkPlugin from '@ckeditor/ckeditor5-link/src/link'; -import List from '@ckeditor/ckeditor5-list/src/list'; -import ListProperties from '@ckeditor/ckeditor5-list/src/listproperties'; -import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; -import RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat.js'; -import SourceEditing from '@ckeditor/ckeditor5-source-editing/src/sourceediting'; -import SpecialCharacters from '@ckeditor/ckeditor5-special-characters/src/specialcharacters.js'; -import SpecialCharactersCurrency from '@ckeditor/ckeditor5-special-characters/src/specialcharacterscurrency.js'; -import SpecialCharactersEssentials from '@ckeditor/ckeditor5-special-characters/src/specialcharactersessentials.js'; -import SpecialCharactersLatin from '@ckeditor/ckeditor5-special-characters/src/specialcharacterslatin.js'; -import SpecialCharactersMathematical from '@ckeditor/ckeditor5-special-characters/src/specialcharactersmathematical.js'; -import SpecialCharactersText from '@ckeditor/ckeditor5-special-characters/src/specialcharacterstext.js'; -import Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough.js'; -import Subscript from '@ckeditor/ckeditor5-basic-styles/src/subscript.js'; -import Superscript from '@ckeditor/ckeditor5-basic-styles/src/superscript.js'; -import Table from '@ckeditor/ckeditor5-table/src/table.js'; -import TableCaption from '@ckeditor/ckeditor5-table/src/tablecaption.js'; -import TableCellProperties from '@ckeditor/ckeditor5-table/src/tablecellproperties'; -import TableProperties from '@ckeditor/ckeditor5-table/src/tableproperties'; -import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar.js'; -import TextTransformation from '@ckeditor/ckeditor5-typing/src/texttransformation'; -import Underline from '@ckeditor/ckeditor5-basic-styles/src/underline.js'; -/* ckeditor third party */ -import Mathematics from 'ckeditor5-math/src/math'; -/* ckeditor elan */ -import StudipA11YDialog, { updateVoiceLabel } from '../cke/studip-a11y-dialog/a11y-dialog.js'; -import StudipBlockQuote from '../cke/studip-quote/StudipBlockQuote.js'; -import StudipUpload from '../cke/StudipUpload.js'; -import StudipWikiLink from '../cke/wiki-link/wiki-link.js'; -import SpecialCharactersSmiley from '../cke/special_characters/SpecialCharactersSmiley.js'; -import SpecialCharactersGreek from '../cke/special_characters/SpecialCharactersGreek.js'; -import '../../stylesheets/scss/studip-cke-ui.scss'; - -export default class ClassicEditor extends ClassicEditorBase {} - -ClassicEditor.builtinPlugins = [ - ImageUploadPlugin, - Alignment, - Autoformat, - BlockQuote, - BoldPlugin, - CodeBlock, - EssentialsPlugin, - FindAndReplace, - FontColor, - FontBackgroundColor, - GeneralHtmlSupport, - HeadingPlugin, - HorizontalLine, - HtmlComment, - ImageCaptionPlugin, - ImagePlugin, - ImageResizePlugin, - ImageStylePlugin, - ImageToolbarPlugin, - Indent, - IndentBlock, - ItalicPlugin, - LinkPlugin, - ListProperties, - Mathematics, - Paragraph, - RemoveFormat, - SourceEditing, - SpecialCharacters, - SpecialCharactersCurrency, - SpecialCharactersSmiley, - SpecialCharactersEssentials, - SpecialCharactersGreek, - SpecialCharactersLatin, - SpecialCharactersMathematical, - SpecialCharactersText, - Strikethrough, - StudipBlockQuote, - StudipUpload, - Subscript, - Superscript, - Table, - TableCaption, - TableCellProperties, - TableProperties, - TableToolbar, - TextTransformation, - Underline, - FileRepository, - StudipA11YDialog, -]; +import BalloonEditor, { createBalloonEditorFromTextarea } from '../cke/balloon-editor.js'; +import ClassicEditor, { createClassicEditorFromTextarea } from '../cke/classic-editor.js'; +import { updateVoiceLabel } from '../cke/studip-a11y-dialog/a11y-dialog.js'; -const customColorPalette = [ - { color: '#000000' }, - { color: '#6c737a' }, //75% - { color: '#a7abaf' }, //45% - { color: '#c4c7c9' }, //30% - { color: '#ffffff', hasBorder: true }, - - { color: '#cb1800' }, //red - { color: '#f26e00' }, //pumpkin - { color: '#ffbd33' }, //yellow - { color: '#8bbd40' }, // apple green - { color: '#00962d' }, //green - - { color: '#41afaa' }, //verdigris - { color: '#a9b6cb' }, // blue 40% - { color: '#28497c' }, // blue - { color: '#bf5796' }, // mulberry - { color: '#8656a2' }, // royal purple -]; +import '../../stylesheets/scss/studip-cke-ui.scss'; -ClassicEditor.defaultConfig = { - toolbar: { - items: [ - 'undo', - 'redo', - 'findAndReplace', - '|', - 'bold', - 'italic', - 'underline', - 'strikethrough', - 'subscript', - 'superscript', - '|', - 'removeFormat', - '|', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'alignment:left', - 'alignment:right', - 'alignment:center', - 'alignment:justify', - '-', - 'heading', - 'fontColor', - 'fontBackgroundColor', - '|', - 'link', - 'insertTable', - 'uploadImage', - 'codeBlock', - 'math', - 'studip-wiki', - 'specialCharacters', - 'horizontalLine', - '|', - 'insertBlockQuote', - 'splitBlockQuote', - 'removeBlockQuote', - '|', - 'sourceEditing', - ], - shouldNotGroupWhenFull: true, - }, - fontColor: { - colors: customColorPalette, - }, - fontBackgroundColor: { - colors: customColorPalette, - }, - image: { - resizeOptions: [ - { - name: 'resizeImage:original', - value: null, - icon: 'original' - }, - { - name: 'resizeImage:25', - value: '25', - icon: 'small' - }, - { - name: 'resizeImage:50', - value: '50', - icon: 'medium' - }, - { - name: 'resizeImage:75', - value: '75', - icon: 'large' - } - ], - toolbar: [ - 'resizeImage:25', - 'resizeImage:50', - 'resizeImage:75', - 'resizeImage:original', - '|', - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'toggleImageCaption', - 'imageTextAlternative', - ], - }, - heading: { - options: [ - { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' }, - { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' }, - { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' }, - { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' }, - { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' }, - { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' }, - { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' }, - ], - }, - table: { - contentToolbar: [ - 'toggleTableCaption', - 'tableColumn', - 'tableRow', - 'mergeTableCells', - 'tableCellProperties', - 'tableProperties', - ], - tableProperties: { - borderColors: customColorPalette, - backgroundColors: customColorPalette, - defaultProperties: { - alignment: 'left', - borderStyle: 'solid', - borderColor: '#666666', - borderWidth: '1px', - }, - }, - tableCellProperties: { - borderColors: customColorPalette, - backgroundColors: customColorPalette, - defaultProperties: { - borderStyle: 'solid', - borderColor: '#666666', - borderWidth: '1px', - }, - }, - }, - typing: { - transformations: { - remove: ['quotes'], - }, - }, - list: { - properties: { - styles: true, - startIndex: true, - reversed: true, - }, - }, - math: { - engine: 'mathjax', - outputType: 'span', - }, - link: { - defaultProtocol: 'https://', - }, - language: 'de', - htmlSupport: { - allow: [ - /* HTML features to allow */ - { - name: 'div', - classes: 'author', - }, - { - name: 'pre', - classes: 'usercode' - } - ], - disallow: [ - /* HTML features to disallow */ - ], - }, +export { + BalloonEditor, + ClassicEditor, + createBalloonEditorFromTextarea, + createClassicEditorFromTextarea, }; updateVoiceLabel(); diff --git a/resources/assets/javascripts/cke/balloon-editor.js b/resources/assets/javascripts/cke/balloon-editor.js new file mode 100644 index 0000000000000000000000000000000000000000..4eba8868cefc4725078d5d8b6ab98a5e832b7076 --- /dev/null +++ b/resources/assets/javascripts/cke/balloon-editor.js @@ -0,0 +1,53 @@ +import BalloonEditorBase from '@ckeditor/ckeditor5-editor-balloon/src/ballooneditor'; +import { builtinPlugins } from './builtin-plugins.js'; +import { defaultConfig } from './default-config.js'; + +export default class BalloonEditor extends BalloonEditorBase {} +export { createBalloonEditorFromTextarea }; + +BalloonEditor.builtinPlugins = builtinPlugins; +BalloonEditor.defaultConfig = { + ...defaultConfig, + balloonToolbar: { + items: [ + 'bold', + 'italic', + 'underline', + 'subscript', + 'superscript', + '|', + 'removeFormat', + '|', + 'fontColor', + 'fontBackgroundColor', + '|', + 'link', + 'math', + 'specialCharacters', + ], + shouldNotGroupWhenFull: true, + }, + blockToolbar: [ + 'paragraph', + 'heading1', + 'heading2', + '|', + 'bulletedList', + 'numberedList', + '|', + 'alignment:left', + 'alignment:right', + 'alignment:center', + 'alignment:justify', + ], +}; + +function createBalloonEditorFromTextarea(textarea, options) { + const replacement = document.createElement('div'); + replacement.classList.add('wysiwyg-balloon'); + replacement.innerHTML = textarea.value; + textarea.parentNode.insertBefore(replacement, textarea.nextSibling); + textarea.style.display = 'none'; + + return BalloonEditor.create(replacement); +} diff --git a/resources/assets/javascripts/cke/builtin-plugins.js b/resources/assets/javascripts/cke/builtin-plugins.js new file mode 100644 index 0000000000000000000000000000000000000000..3b285df7deb6543447fd0ca2a742f57bdc240bd7 --- /dev/null +++ b/resources/assets/javascripts/cke/builtin-plugins.js @@ -0,0 +1,114 @@ +/* ckeditor official */ +import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment'; +import Autoformat from '@ckeditor/ckeditor5-autoformat/src/autoformat'; +import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote'; +import BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'; +import CodeBlock from '@ckeditor/ckeditor5-code-block/src/codeblock'; +import EasyImagePlugin from '@ckeditor/ckeditor5-easy-image/src/easyimage'; +import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'; +import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository'; +import FindAndReplace from '@ckeditor/ckeditor5-find-and-replace/src/findandreplace'; +import FontBackgroundColor from '@ckeditor/ckeditor5-font/src/fontbackgroundcolor.js'; +import FontColor from '@ckeditor/ckeditor5-font/src/fontcolor.js'; +import GeneralHtmlSupport from '@ckeditor/ckeditor5-html-support/src/generalhtmlsupport'; +import HeadingPlugin from '@ckeditor/ckeditor5-heading/src/heading'; +import HorizontalLine from '@ckeditor/ckeditor5-horizontal-line/src/horizontalline'; +import HtmlComment from '@ckeditor/ckeditor5-html-support/src/htmlcomment'; +import ImagePlugin from '@ckeditor/ckeditor5-image/src/image'; +import ImageUploadPlugin from '@ckeditor/ckeditor5-image/src/imageupload'; +import ImageCaptionPlugin from '@ckeditor/ckeditor5-image/src/imagecaption'; +import ImageResizePlugin from '@ckeditor/ckeditor5-image/src/imageresize'; +import ImageStylePlugin from '@ckeditor/ckeditor5-image/src/imagestyle'; +import ImageToolbarPlugin from '@ckeditor/ckeditor5-image/src/imagetoolbar'; +import Indent from '@ckeditor/ckeditor5-indent/src/indent'; +import IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock'; +import ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'; +import LinkPlugin from '@ckeditor/ckeditor5-link/src/link'; +import List from '@ckeditor/ckeditor5-list/src/list'; +import ListProperties from '@ckeditor/ckeditor5-list/src/listproperties'; +import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; +import RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat.js'; +import SourceEditing from '@ckeditor/ckeditor5-source-editing/src/sourceediting'; +import SpecialCharacters from '@ckeditor/ckeditor5-special-characters/src/specialcharacters.js'; +import SpecialCharactersCurrency from '@ckeditor/ckeditor5-special-characters/src/specialcharacterscurrency.js'; +import SpecialCharactersEssentials from '@ckeditor/ckeditor5-special-characters/src/specialcharactersessentials.js'; +import SpecialCharactersLatin from '@ckeditor/ckeditor5-special-characters/src/specialcharacterslatin.js'; +import SpecialCharactersMathematical from '@ckeditor/ckeditor5-special-characters/src/specialcharactersmathematical.js'; +import SpecialCharactersText from '@ckeditor/ckeditor5-special-characters/src/specialcharacterstext.js'; +import Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough.js'; +import Subscript from '@ckeditor/ckeditor5-basic-styles/src/subscript.js'; +import Superscript from '@ckeditor/ckeditor5-basic-styles/src/superscript.js'; +import Table from '@ckeditor/ckeditor5-table/src/table.js'; +import TableCaption from '@ckeditor/ckeditor5-table/src/tablecaption.js'; +import TableCellProperties from '@ckeditor/ckeditor5-table/src/tablecellproperties'; +import TableProperties from '@ckeditor/ckeditor5-table/src/tableproperties'; +import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar.js'; +import TextTransformation from '@ckeditor/ckeditor5-typing/src/texttransformation'; +import Underline from '@ckeditor/ckeditor5-basic-styles/src/underline.js'; +/* ckeditor third party */ +import Mathematics from 'ckeditor5-math/src/math'; +/* ckeditor elan */ +import StudipA11YDialog, { updateVoiceLabel } from '../cke/studip-a11y-dialog/a11y-dialog.js'; +import StudipBlockQuote from '../cke/studip-quote/StudipBlockQuote.js'; +import StudipUpload from '../cke/StudipUpload.js'; +import StudipWikiLink from '../cke/wiki-link/wiki-link.js'; +import SpecialCharactersSmiley from '../cke/special_characters/SpecialCharactersSmiley.js'; +import SpecialCharactersGreek from '../cke/special_characters/SpecialCharactersGreek.js'; + +import { BlockToolbar } from '@ckeditor/ckeditor5-ui'; + +const builtinPlugins = [ + ImageUploadPlugin, + Alignment, + Autoformat, + BlockQuote, + BoldPlugin, + CodeBlock, + EssentialsPlugin, + FindAndReplace, + FontColor, + FontBackgroundColor, + GeneralHtmlSupport, + HeadingPlugin, + HorizontalLine, + HtmlComment, + ImageCaptionPlugin, + ImagePlugin, + ImageResizePlugin, + ImageStylePlugin, + ImageToolbarPlugin, + Indent, + IndentBlock, + ItalicPlugin, + LinkPlugin, + ListProperties, + Mathematics, + Paragraph, + RemoveFormat, + SourceEditing, + SpecialCharacters, + SpecialCharactersCurrency, + SpecialCharactersSmiley, + SpecialCharactersEssentials, + SpecialCharactersGreek, + SpecialCharactersLatin, + SpecialCharactersMathematical, + SpecialCharactersText, + Strikethrough, + StudipBlockQuote, + StudipUpload, + Subscript, + Superscript, + Table, + TableCaption, + TableCellProperties, + TableProperties, + TableToolbar, + TextTransformation, + Underline, + FileRepository, + StudipA11YDialog, + BlockToolbar, +]; + +export { builtinPlugins }; diff --git a/resources/assets/javascripts/cke/classic-editor.js b/resources/assets/javascripts/cke/classic-editor.js new file mode 100644 index 0000000000000000000000000000000000000000..53154c321dbfdf6e86986e3907de73d335641d27 --- /dev/null +++ b/resources/assets/javascripts/cke/classic-editor.js @@ -0,0 +1,108 @@ +import ClassicEditorBase from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'; +import { builtinPlugins } from './builtin-plugins.js'; +import { defaultConfig } from './default-config.js'; +import eventBus from '../lib/event-bus.ts'; + +export default class ClassicEditor extends ClassicEditorBase {} +export { createClassicEditorFromTextarea }; + +ClassicEditor.builtinPlugins = builtinPlugins; +ClassicEditor.defaultConfig = { + ...defaultConfig, + toolbar: { + items: [ + 'undo', + 'redo', + 'findAndReplace', + '|', + 'bold', + 'italic', + 'underline', + 'strikethrough', + 'subscript', + 'superscript', + '|', + 'removeFormat', + '|', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'alignment:left', + 'alignment:right', + 'alignment:center', + 'alignment:justify', + '-', + 'heading', + 'fontColor', + 'fontBackgroundColor', + '|', + 'link', + 'insertTable', + 'uploadImage', + 'codeBlock', + 'math', + 'studip-wiki', + 'specialCharacters', + 'horizontalLine', + '|', + 'insertBlockQuote', + 'splitBlockQuote', + 'removeBlockQuote', + '|', + 'sourceEditing', + ], + shouldNotGroupWhenFull: true, + }, +}; + +function createClassicEditorFromTextarea(textarea, options) { + return ClassicEditor.create(textarea, options) + .then((editor) => { + const updateOffsetTop = createUpdater(editor); + + updateOffsetTop(); + + eventBus.on('toggle-compact-navigation', updateOffsetTop); + eventBus.on('switch-focus-mode', updateOffsetTop); + + editor.on('destroy', () => { + eventBus.off('toggle-compact-navigation', updateOffsetTop); + eventBus.off('switch-focus-mode', updateOffsetTop); + }); + + return editor; + }) + .then((editor) => { + const button = editor.ui.view.toolbar?.items.find((item) => item.class === 'ck-source-editing-button'); + if (button) { + button.withText = false; + } + + return editor; + }); +} + +function createUpdater(editor) { + // This needs to be delayed since some events will fire before + // changing the DOM + return () => + setTimeout(() => { + editor.ui.viewportOffset = { top: getViewportOffsetTop() }; + editor.ui.update(); + }, 50); +} + +function getViewportOffsetTop() { + const topBar = document.getElementById('top-bar'); + const responsiveContentbar = document.getElementById('responsive-contentbar'); + + let top = topBar.clientHeight + topBar.clientTop; + if (responsiveContentbar) { + top += responsiveContentbar?.clientHeight + responsiveContentbar.clientTop; + } + + return top; +} diff --git a/resources/assets/javascripts/cke/default-config.js b/resources/assets/javascripts/cke/default-config.js new file mode 100644 index 0000000000000000000000000000000000000000..4c71e68d557cd744bdba644f93555ad24e6a37d0 --- /dev/null +++ b/resources/assets/javascripts/cke/default-config.js @@ -0,0 +1,144 @@ +const customColorPalette = [ + { color: '#000000' }, + { color: '#6c737a' }, //75% + { color: '#a7abaf' }, //45% + { color: '#c4c7c9' }, //30% + { color: '#ffffff', hasBorder: true }, + + { color: '#cb1800' }, //red + { color: '#f26e00' }, //pumpkin + { color: '#ffbd33' }, //yellow + { color: '#8bbd40' }, // apple green + { color: '#00962d' }, //green + + { color: '#41afaa' }, //verdigris + { color: '#a9b6cb' }, // blue 40% + { color: '#28497c' }, // blue + { color: '#bf5796' }, // mulberry + { color: '#8656a2' }, // royal purple +]; + +const defaultConfig = { + fontColor: { + colors: customColorPalette, + }, + fontBackgroundColor: { + colors: customColorPalette, + }, + image: { + resizeOptions: [ + { + name: 'resizeImage:original', + value: null, + icon: 'original' + }, + { + name: 'resizeImage:25', + value: '25', + icon: 'small' + }, + { + name: 'resizeImage:50', + value: '50', + icon: 'medium' + }, + { + name: 'resizeImage:75', + value: '75', + icon: 'large' + } + ], + toolbar: [ + 'resizeImage:25', + 'resizeImage:50', + 'resizeImage:75', + 'resizeImage:original', + '|', + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'toggleImageCaption', + 'imageTextAlternative', + ], + }, + heading: { + options: [ + { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' }, + { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' }, + { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' }, + { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' }, + { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' }, + { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' }, + { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' }, + ], + }, + table: { + contentToolbar: [ + 'toggleTableCaption', + 'tableColumn', + 'tableRow', + 'mergeTableCells', + 'tableCellProperties', + 'tableProperties', + ], + tableProperties: { + borderColors: customColorPalette, + backgroundColors: customColorPalette, + defaultProperties: { + alignment: 'left', + borderStyle: 'solid', + borderColor: '#666666', + borderWidth: '1px', + }, + }, + tableCellProperties: { + borderColors: customColorPalette, + backgroundColors: customColorPalette, + defaultProperties: { + borderStyle: 'solid', + borderColor: '#666666', + borderWidth: '1px', + }, + }, + }, + typing: { + transformations: { + remove: ['quotes'], + }, + }, + list: { + properties: { + styles: true, + startIndex: true, + reversed: true, + }, + }, + math: { + engine: 'mathjax', + outputType: 'span', + }, + link: { + defaultProtocol: 'https://', + }, + // This value must be kept in sync with the language defined in webpack.config.js. + language: 'de', + htmlSupport: { + allow: [ + /* HTML features to allow */ + { + name: 'div', + classes: 'author', + }, + { + name: 'pre', + classes: 'usercode', + }, + ], + disallow: [ + /* HTML features to disallow */ + ], + }, +}; + +export { defaultConfig }; diff --git a/resources/assets/javascripts/cke/studip-a11y-dialog/a11y-dialog.js b/resources/assets/javascripts/cke/studip-a11y-dialog/a11y-dialog.js index 1cef6184743b67200ea1c158e5e4dee1483911a7..814e931e67195daa068b514f1a3959a58d85c11c 100644 --- a/resources/assets/javascripts/cke/studip-a11y-dialog/a11y-dialog.js +++ b/resources/assets/javascripts/cke/studip-a11y-dialog/a11y-dialog.js @@ -1,4 +1,4 @@ -import { Plugin } from 'ckeditor5/src/core'; +import { Plugin } from '@ckeditor/ckeditor5-core'; import { add } from '@ckeditor/ckeditor5-utils/src/translation-service'; import { $gettext } from '../../lib/gettext.js'; import A11YDialogEditing from './editing.js'; diff --git a/resources/assets/javascripts/cke/studip-a11y-dialog/command.js b/resources/assets/javascripts/cke/studip-a11y-dialog/command.js index 71c6fe009d1a430003fdc07038d500abcf35b20b..62c8efde5f8cf72452cba93a4cc0c29cac92005c 100644 --- a/resources/assets/javascripts/cke/studip-a11y-dialog/command.js +++ b/resources/assets/javascripts/cke/studip-a11y-dialog/command.js @@ -1,4 +1,4 @@ -import { Command } from 'ckeditor5/src/core'; +import { Command } from '@ckeditor/ckeditor5-core'; import Dialog from '../../lib/dialog.js'; export default class A11YDialogCommand extends Command { diff --git a/resources/assets/javascripts/cke/studip-a11y-dialog/editing.js b/resources/assets/javascripts/cke/studip-a11y-dialog/editing.js index 95c15594a1567610449309b24f2ef9996cbb0b29..4369bb50622beb1fb0a9f0fafb4bccda8d2edbcd 100644 --- a/resources/assets/javascripts/cke/studip-a11y-dialog/editing.js +++ b/resources/assets/javascripts/cke/studip-a11y-dialog/editing.js @@ -1,4 +1,4 @@ -import { Plugin } from 'ckeditor5/src/core'; +import { Plugin } from '@ckeditor/ckeditor5-core'; import A11YDialogCommand from './command.js'; export default class A11YDialogEditing extends Plugin { diff --git a/resources/assets/javascripts/cke/studip-a11y-dialog/ui.js b/resources/assets/javascripts/cke/studip-a11y-dialog/ui.js index 9d2980bf24dc932e6f8af7015e9f119ab2523bed..a2d207fc5f1f29924b59a727c3ce3bc2e910d658 100644 --- a/resources/assets/javascripts/cke/studip-a11y-dialog/ui.js +++ b/resources/assets/javascripts/cke/studip-a11y-dialog/ui.js @@ -1,5 +1,5 @@ import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview'; -import { Plugin } from 'ckeditor5/src/core'; +import { Plugin } from '@ckeditor/ckeditor5-core'; import { $gettext } from '../../lib/gettext.js'; const a11yIcon = diff --git a/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js b/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js index 8b0b739ea80f30592e30de217f0f50f9881dd5e8..e50f8c64d8dcf1685c00c16ecd6821d0cea08969 100644 --- a/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js +++ b/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js @@ -1,7 +1,7 @@ import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview'; import { $gettext } from '../../lib/gettext.js'; -import { Command, icons } from 'ckeditor5/src/core'; +import { Command, icons } from '@ckeditor/ckeditor5-core'; const divideIcon = '<svg version="1.1" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m9.3 2h2v16h-2zm-7.2987 8.423a6.5 6.5 0 0 1 6.056-6.408l0.038 0.67c-2.646 0.738-3.74 2.978-3.874 5.315h3.78c0.552 0 0.5 0.432 0.5 0.986v4.511c0 0.554-0.448 0.503-1 0.503h-5c-0.552 0-0.5-0.449-0.5-1.003zm10 0a6.5 6.5 0 0 1 6.056-6.408l0.038 0.67c-2.646 0.739-3.74 2.979-3.873 5.315h3.779c0.552 0 0.5 0.432 0.5 0.986v4.511c0 0.554-0.448 0.503-1 0.503h-5c-0.552 0-0.5-0.449-0.5-1.003z" stroke-width="1.1664"/></svg>'; diff --git a/resources/assets/javascripts/cke/wiki-link/editing.js b/resources/assets/javascripts/cke/wiki-link/editing.js index 5322694eb8c6a19cfcf316723e9143cc3f62705e..a42461f01ea94d3c4fcf89ed5a512fc3cf8e8316 100644 --- a/resources/assets/javascripts/cke/wiki-link/editing.js +++ b/resources/assets/javascripts/cke/wiki-link/editing.js @@ -1,4 +1,4 @@ -import { Plugin } from 'ckeditor5/src/core'; +import { Plugin } from '@ckeditor/ckeditor5-core'; import InsertCommand from './insertcommand'; export default class WikiLinkEditing extends Plugin { diff --git a/resources/assets/javascripts/cke/wiki-link/formview.js b/resources/assets/javascripts/cke/wiki-link/formview.js index 68f4e0a827f3599d96dcff7f6418543a4b0dc6b0..8d82e25eb204994d36c4a4feb19bd47ae0092aae 100644 --- a/resources/assets/javascripts/cke/wiki-link/formview.js +++ b/resources/assets/javascripts/cke/wiki-link/formview.js @@ -10,8 +10,8 @@ import { injectCssTransitionDisabler, createDropdown, addListToDropdown, -} from 'ckeditor5/src/ui'; -import { FocusTracker, KeystrokeHandler, Collection, Rect, isVisible } from 'ckeditor5/src/utils'; +} from '@ckeditor/ckeditor5-ui'; +import { FocusTracker, KeystrokeHandler, Collection, Rect, isVisible } from '@ckeditor/ckeditor5-utils'; import { $gettext } from '../../lib/gettext.js'; export default class WikiLinkFormView extends View { diff --git a/resources/assets/javascripts/cke/wiki-link/insertcommand.js b/resources/assets/javascripts/cke/wiki-link/insertcommand.js index 1bf36b89350656fc91ddec59b5613e08ae5c945e..2b57cac0e2223c722cfb9d72428e0f5e616be35d 100644 --- a/resources/assets/javascripts/cke/wiki-link/insertcommand.js +++ b/resources/assets/javascripts/cke/wiki-link/insertcommand.js @@ -1,4 +1,4 @@ -import { Command } from 'ckeditor5/src/core'; +import { Command } from '@ckeditor/ckeditor5-core'; export default class InsertCommand extends Command { refresh() { diff --git a/resources/assets/javascripts/cke/wiki-link/ui.js b/resources/assets/javascripts/cke/wiki-link/ui.js index 1765a933008d7bb7ec9c1a82a03366703df85de2..a8e5f89c019046aac6b025d14ee4b963e0cae4f7 100644 --- a/resources/assets/javascripts/cke/wiki-link/ui.js +++ b/resources/assets/javascripts/cke/wiki-link/ui.js @@ -1,5 +1,5 @@ -import { Plugin } from 'ckeditor5/src/core'; -import { createDropdown } from 'ckeditor5/src/ui'; +import { Plugin } from '@ckeditor/ckeditor5-core'; +import { createDropdown } from '@ckeditor/ckeditor5-ui'; import WikiLinkFormView from './formview.js'; import { $gettext } from '../../lib/gettext.js'; diff --git a/resources/assets/javascripts/cke/wiki-link/wiki-link.js b/resources/assets/javascripts/cke/wiki-link/wiki-link.js index 48099777ae91ba25e529ab2646be07cc8a33d0e9..1abf5bfe877575339c6f34890d4ba0a6c113e64f 100644 --- a/resources/assets/javascripts/cke/wiki-link/wiki-link.js +++ b/resources/assets/javascripts/cke/wiki-link/wiki-link.js @@ -1,4 +1,4 @@ -import { Plugin } from 'ckeditor5/src/core'; +import { Plugin } from '@ckeditor/ckeditor5-core'; import WikiLinkUI from './ui.js'; import WikiLinkEditing from './editing.js'; diff --git a/resources/assets/javascripts/lib/wysiwyg.js b/resources/assets/javascripts/lib/wysiwyg.js index 95a4f1ac5c791748c9a04cb1934ae4823a9e5206..6b5f502ed7d89358ac22ba3d2611cf56df59916c 100644 --- a/resources/assets/javascripts/lib/wysiwyg.js +++ b/resources/assets/javascripts/lib/wysiwyg.js @@ -56,169 +56,22 @@ function isEditorHidden(textarea) { return editor && editor.ui && $(editor.ui.element).is(':hidden'); } -function replaceTextarea(textarea) { - setEditor(textarea, {}); - const $textarea = textarea instanceof jQuery ? textarea : $(textarea); - - let options = {}; - - if ($textarea.attr('data-editor')) { - const parsed = parseOptions($textarea.attr('data-editor')); - - if (parsed.toolbar === 'small') { - options.toolbar = { - removeItems: [ - 'undo', - 'redo', - 'findAndReplace', - 'strikethrough', - 'horizontalLine', - 'insertBlockQuote', - 'splitBlockQuote', - 'removeBlockQuote', - ] - }; - } else if (parsed.toolbar === 'minimal') { - options.toolbar = { - items: [ - 'bold', - 'italic', - 'underline', - 'subscript', - 'superscript', - '|', - 'removeFormat', - '|', - 'bulletedList', - 'numberedList', - '|', - 'fontColor', - 'fontBackgroundColor', - '|', - 'link', - 'math', - 'specialCharacters', - ] - }; - } - - if (parsed.removePlugins) { - options.removePlugins = parsed.removePlugins.split(",") - } - - if (parsed.extraPlugins) { - const pluginMap = { WikiLink }; - options.extraPlugins = parsed.extraPlugins.split(",").reduce((memo, plugin) => { - if (plugin in pluginMap) { - memo.push(pluginMap[plugin]); - } - return memo; - }, []); - } - } - - return STUDIP.loadChunk('wysiwyg') - .then(loadMathJax) - .then(createEditor) - .then(setEditorInstance) - .then(enhanceEditor) - .then(emitLoadEvent); - - function createEditor(ClassicEditor) { - return ClassicEditor.create(textarea, options).then(editor => { - function getViewportOffsetTop() { - const topBar = document.getElementById('top-bar'); - const responsiveContentbar = document.getElementById('responsive-contentbar'); - - let top = topBar.clientHeight + topBar.clientTop; - if (responsiveContentbar) { - top += responsiveContentbar?.clientHeight + responsiveContentbar.clientTop; - } - - return top; - } - - function updateOffsetTop() { - // This needs to be delayed since some events will fire before - // changing the DOM - setTimeout(() => { - editor.ui.viewportOffset = {top: getViewportOffsetTop()}; - editor.ui.update(); - }, 50); - } - - // Set initial offset top - updateOffsetTop(); - - // Listen to relevant events that may require the sticky panel to be misplaced - STUDIP.eventBus.on('toggle-compact-navigation', updateOffsetTop); - STUDIP.eventBus.on('switch-focus-mode', updateOffsetTop); +async function replaceTextarea(textarea) { + await loadMathJax(); - // Stop listening if editor is destroyed - editor.on('destroy', () => { - STUDIP.eventBus.off('toggle-compact-navigation', updateOffsetTop); - STUDIP.eventBus.off('switch-focus-mode', updateOffsetTop); - }); - - return editor; - }); - } - - function setEditorInstance(ckeditor) { - setEditor(textarea, ckeditor); - return ckeditor; - } - - function enhanceEditor(ckeditor) { - // make sure HTML marker is always set, in - // case contents are cut-off by the backend - $textarea.closest('form').submit(() => { - ckeditor.setData(wysiwyg.markAsHtml(ckeditor.getData())); - ckeditor.updateSourceElement(); - }); - - // focus the editor if requested - if ($textarea.is('[autofocus]')) { - ckeditor.focus(); - } - - ckeditor.ui.focusTracker.on('change:isFocused', (evt, name, isFocused) => { - if (!isFocused) { - ckeditor.updateSourceElement(wysiwyg.markAsHtml(ckeditor.getData())); - } - }); - - const button = ckeditor.ui.view.toolbar.items.find( item => item.class === "ck-source-editing-button"); - if (button) { - button.withText = false; - } - - // Tell MathJax v2.7 to leave the editor alone - ckeditor.ui.element.classList.add('tex2jax_ignore'); - - return ckeditor; - } - - function emitLoadEvent(ckeditor) { - $textarea.trigger('load.wysiwyg'); - - return ckeditor; - } + setEditor(textarea, {}); - async function loadMathJax(ckeditor) { - let mathjaxP; + const chunk = await STUDIP.loadChunk('wysiwyg'); - if (window.MathJax && window.MathJax.Hub) { - mathjaxP = Promise.resolve(window.MathJax); - } else if (window.STUDIP && window.STUDIP.loadChunk) { - mathjaxP = window.STUDIP.loadChunk('mathjax'); - } + const $textarea = textarea instanceof jQuery ? textarea : $(textarea); + const { options, editorType } = parseEditorOptions($textarea.attr('data-editor')); + const editor = await createEditor(chunk, textarea, editorType, options); + enhanceEditor($textarea, editor); - await mathjaxP; + setEditor(textarea, editor); + $textarea.trigger('load.wysiwyg'); - //console.log('loading MathJaxP...', mathjaxP); - return ckeditor; - } + return editor; } function destroyTextarea(textarea) { @@ -260,3 +113,127 @@ function setEditor(textarea, editor) { function unsetEditor(textarea) { instances.delete(textarea.id); } + +//////////////////////////////////////////////////////////////////////////////// +function parseEditorOptions(data) { + const result = { options: {}, editorType: 'classic' }; + + if (data) { + const parsed = parseOptions(data); + + const toolbar = getToolbarOptions(parsed); + if (toolbar) { + result.options.toolbar = toolbar; + } + + if (parsed.removePlugins) { + result.options.removePlugins = parsed.removePlugins.split(','); + } + + if (parsed.extraPlugins) { + const pluginMap = { WikiLink }; + result.options.extraPlugins = parsed.extraPlugins.split(',').reduce((memo, plugin) => { + return plugin in pluginMap ? [...memo, pluginMap[plugin]] : memo; + }, []); + } + + if (parsed.type) { + if (['balloon', 'classic'].includes(parsed.type)) { + result.editorType = parsed.type; + } + } + } + + return result; +} + +function getToolbarOptions(parsed) { + if (parsed.toolbar === 'small') { + return { + removeItems: [ + 'undo', + 'redo', + 'findAndReplace', + 'strikethrough', + 'horizontalLine', + 'insertBlockQuote', + 'splitBlockQuote', + 'removeBlockQuote', + ], + }; + } else if (parsed.toolbar === 'minimal') { + return { + items: [ + 'bold', + 'italic', + 'underline', + 'subscript', + 'superscript', + '|', + 'removeFormat', + '|', + 'bulletedList', + 'numberedList', + '|', + 'fontColor', + 'fontBackgroundColor', + '|', + 'link', + 'math', + 'specialCharacters', + ], + }; + } + + return null; +} + +function loadMathJax() { + if (window.MathJax && window.MathJax.Hub) { + return Promise.resolve(window.MathJax); + } else if (window.STUDIP && window.STUDIP.loadChunk) { + return window.STUDIP.loadChunk('mathjax'); + } + + return Promise.reject(new Error('Could not load MathJax')); +} + +function createEditor(chunk, textarea, editorType, options) { + switch (editorType) { + case 'classic': + return chunk.createClassicEditorFromTextarea(textarea, options); + case 'balloon': + return chunk.createBalloonEditorFromTextarea(textarea, options); + } + + throw new Error('No such type of WYSIWYG editor.'); +} + +function enhanceEditor($textarea, ckeditor) { + // make sure HTML marker is always set, in + // case contents are cut-off by the backend + $textarea.closest('form').submit(() => { + const data = wysiwyg.markAsHtml(ckeditor.getData()); + ckeditor.setData(data); + ckeditor.updateSourceElement(); + $textarea.get(0).value = data; + }); + + // focus the editor if requested + if ($textarea.is('[autofocus]')) { + ckeditor.focus(); + } + + ckeditor.ui.focusTracker.on('change:isFocused', (evt, name, isFocused) => { + if (!isFocused) { + const data = wysiwyg.markAsHtml(ckeditor.getData()); + ckeditor.updateSourceElement(data); + $textarea.get(0).value = data; + } + }); + + // Tell MathJax v2.7 to leave the editor alone + ckeditor.ui.element.classList.add('tex2jax_ignore'); + + return ckeditor; +} diff --git a/resources/assets/stylesheets/scss/studip-cke-ui.scss b/resources/assets/stylesheets/scss/studip-cke-ui.scss index d2b52b149e696ab60042015179718bde62dc7b71..5e28678235e48080753e67682f5e3ede18c3bfe3 100644 --- a/resources/assets/stylesheets/scss/studip-cke-ui.scss +++ b/resources/assets/stylesheets/scss/studip-cke-ui.scss @@ -60,6 +60,9 @@ /* z-index */ --ck-z-modal: 1003; + + /* tooltips */ + --ck-color-tooltip-text: var(--color-text); } .ck.ck-editor { @@ -78,6 +81,7 @@ /* buttons */ .ck.ck-button, a.ck.ck-button { font-size: 12px; + color: var(--base-color); } .ck.ck-button:hover { @@ -315,22 +319,28 @@ a.ck.ck-button.ck-button_with-text.ck-dropdown__button:not(.ck-disabled):hover { /* tooltips */ +.ck.ck-balloon-panel.ck-tooltip { + background-color: transparent; +} +.ck.ck-balloon-panel.ck-tooltip .ck.ck-tooltip__text, .ck.ck-tooltip .ck-tooltip__text { + background-color: var(--dark-gray-color-5); border: 1px solid var(--dark-gray-color-30); box-shadow: inset 0 1px 0 hsla(0,0%,100%,.5); font-size: 14px; margin-bottom: 8px; - padding: 8px; + padding: 12px; text-align: left; text-shadow: 0 1px 0 hsla(0,0%,100%,.5); white-space: normal; z-index: 10000; word-wrap: break-word; color: var(--black); - top: 4px; + top: 12px; + position: relative; } - +.ck.ck-tooltip__text::after, .ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text::after { content: ""; height: 0; @@ -344,6 +354,7 @@ a.ck.ck-button.ck-button_with-text.ck-dropdown__button:not(.ck-disabled):hover { margin-right: -8px; top: -16px; } +.ck.ck-tooltip__text::before, .ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text::before { content: ""; height: 0; @@ -374,6 +385,15 @@ $editor-min-height: 8em; cursor: text; min-height: $editor-min-height; } +.ck.ck-editor__editable_inline { + border: 1px solid var(--ck-color-base-border); +} +.ck.ck-block-toolbar-button { + background: var(--ck-color-base-background); + border: 1px solid var(--ck-color-base-border); + color: var(--base-color); + z-index: 10000; +} form.default label:not(.undecorated):not(.ck-voice-label) .ck-source-editing-area textarea { margin-top: 0; @@ -391,12 +411,19 @@ form.default .ck-source-editing-area textarea { #forum .ck form { display: inherit; } - +.ck.ck-toolbar { + background-color: var(--dark-gray-color-5); +} /* toolbar fix for dialogs */ .ck.ck-toolbar > .ck-toolbar__items { max-width: calc(100% - 20px); } +/* tooltip fix for balloon panel */ +.ck.ck-balloon-panel.ck-tooltip { + padding: 0; +} + .studip-dialog { .ck-editor { overflow: hidden; @@ -406,3 +433,7 @@ form.default .ck-source-editing-area textarea { } } } +/* balloon editor button*/ +.ck.ck-block-toolbar-button { + background-color: var(--dark-gray-color-5); +} diff --git a/resources/vue/components/StudipWysiwyg.vue b/resources/vue/components/StudipWysiwyg.vue index 086cbe849d5837b1eea1c4f0cfb30441c108bb9c..66f49a1c2fa332b0ce5ab6b7a23c10684f4f855d 100644 --- a/resources/vue/components/StudipWysiwyg.vue +++ b/resources/vue/components/StudipWysiwyg.vue @@ -6,7 +6,7 @@ @ready="prefill" v-model="currentText" @input="onInput" - ></ckeditor> + /> <textarea v-else :value="text" @@ -17,7 +17,7 @@ </template> <script> -import ClassicEditor from '../../assets/javascripts/chunks/wysiwyg.js'; +import { ClassicEditor, BalloonEditor } from '../../assets/javascripts/chunks/wysiwyg.js'; import Toolbar from '../../assets/javascripts/lib/toolbar.js'; export default { @@ -27,16 +27,34 @@ export default { event: 'input', }, props: { - text: String, + text: { + type: String, + required: true, + }, + editorType: { + type: String, + validator: function (value) { + return ['classic', 'balloon'].includes(value); + }, + default: 'classic', + }, }, data() { return { currentText: '', - editor: ClassicEditor, editorConfig: {}, }; }, computed: { + editor() { + switch (this.editorType) { + case 'classic': + return ClassicEditor; + case 'balloon': + return BalloonEditor; + } + throw new Error('Unknown `editorType`'); + }, enabled() { return STUDIP.editor_enabled; }, diff --git a/resources/vue/components/courseware/CoursewareTextBlock.vue b/resources/vue/components/courseware/CoursewareTextBlock.vue index 7367cf82c680018515e746ff2d43c0ac9f37b25d..30eff2fe8f7cef78f0a02ed19f0c4c2d320b65cc 100644 --- a/resources/vue/components/courseware/CoursewareTextBlock.vue +++ b/resources/vue/components/courseware/CoursewareTextBlock.vue @@ -24,7 +24,7 @@ <script> import CoursewareDefaultBlock from './CoursewareDefaultBlock.vue'; import { blockMixin } from './block-mixin.js'; -import ClassicEditor from '../../../assets/javascripts/chunks/wysiwyg.js' +import { ClassicEditor, BalloonEditor } from '@/assets/javascripts/chunks/wysiwyg' import { mapActions } from 'vuex'; export default { diff --git a/webpack.common.js b/webpack.common.js index d71aff6da8a07de8e4e72f4ef372196ae5b69b67..3dd376d6f9391133a510ff002cb261a3b23ecf2e 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -3,7 +3,7 @@ const path = require("path"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const ESLintPlugin = require('eslint-webpack-plugin'); -const CKEditorWebpackPlugin = require( '@ckeditor/ckeditor5-dev-webpack-plugin' ); +const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' ); const { styles } = require('@ckeditor/ckeditor5-dev-utils'); @@ -142,7 +142,7 @@ module.exports = { 'resources/assets/javascripts/jquery/jstree/jquery.jstree.js', ] }), - new CKEditorWebpackPlugin({ + new CKEditorTranslationsPlugin({ language: 'de', addMainLanguageTranslationsToAllAssets: true }),