From dd82115791973e11a52eff19fd49fa63699c3712 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 10 Jul 2024 15:08:23 -0400 Subject: [PATCH 1/9] Use self-hosted tinyMCE editor (#1615) --- package-lock.json | 11 +++++ package.json | 1 + .../js/controllers/annotation_controller.js | 40 +++++++++++++++++++ webpack.config.js | 24 ++++++++++- 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index e92936cc1..bddd89ff6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "sass-loader": "^12.1.0", "stimulus-use": "^0.50.0-2", "style-loader": "^3.2.1", + "tinymce": "^5.10.9", "webpack": "^5.51.1", "webpack-bundle-tracker": "^1.2.0", "webpack-cli": "^4.8.0" @@ -8062,6 +8063,11 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "node_modules/tinymce": { + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.9.tgz", + "integrity": "sha512-5bkrors87X9LhYX2xq8GgPHrIgJYHl87YNs+kBcjQ5I3CiUgzo/vFcGvT3MZQ9QHsEeYMhYO6a5CLGGffR8hMg==" + }, "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", @@ -15137,6 +15143,11 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "tinymce": { + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.9.tgz", + "integrity": "sha512-5bkrors87X9LhYX2xq8GgPHrIgJYHl87YNs+kBcjQ5I3CiUgzo/vFcGvT3MZQ9QHsEeYMhYO6a5CLGGffR8hMg==" + }, "tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", diff --git a/package.json b/package.json index a9d6c938b..d2dfc84b5 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "sass-loader": "^12.1.0", "stimulus-use": "^0.50.0-2", "style-loader": "^3.2.1", + "tinymce": "^5.10.9", "webpack": "^5.51.1", "webpack-bundle-tracker": "^1.2.0", "webpack-cli": "^4.8.0" diff --git a/sitemedia/js/controllers/annotation_controller.js b/sitemedia/js/controllers/annotation_controller.js index 068e6b028..0bb9fdac0 100644 --- a/sitemedia/js/controllers/annotation_controller.js +++ b/sitemedia/js/controllers/annotation_controller.js @@ -6,6 +6,17 @@ import { AnnotationServerStorage, } from "annotorious-tahqiq"; +// required imports for self-hosted tinyMCE +import "tinymce/tinymce"; +import "tinymce/icons/default"; +import "tinymce/themes/silver"; +import "tinymce/plugins/lists"; +import contentUiCss from "tinymce/skins/ui/oxide/content.css"; +import contentCss from "tinymce/skins/content/default/content.css"; +import skinCss from "tinymce/skins/ui/oxide/skin.min.css"; +import skinShadowDomCss from "tinymce/skins/ui/oxide/skin.shadowdom.min.css"; +import skinContentCss from "tinymce/skins/ui/oxide/content.min.css"; + export default class extends Controller { static targets = ["image", "imageContainer"]; @@ -129,6 +140,35 @@ export default class extends Controller { config.tiny_api_key ); + if (window.tinyConfig) { + // add extra tinyMCE configuration required for self-hosted instance + window.tinyConfig = { + ...window.tinyConfig, + // disable attempts to load tinyMCE css from CDN or server; load as modules insetad + skin: false, + content_css: false, + // use css modules for tinyMCE editor inner content style + content_style: `${contentUiCss} ${contentCss} + ::marker { margin-left: 1em; } + li { padding-right: 1em; } ins { color: gray; }`, + setup: (editor) => { + editor.on("init", () => { + // place imported CSS modules into