diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ff2ced6a8..b6ce82605 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ Change Log ========== +4.17.3 +------ + +- chore: Use self-hosted tinyMCE + 4.17.2 ------ diff --git a/geniza/__init__.py b/geniza/__init__.py index 0a50aed54..2e74208ce 100644 --- a/geniza/__init__.py +++ b/geniza/__init__.py @@ -1,4 +1,4 @@ -__version_info__ = (4, 17, 2, None) +__version_info__ = (4, 17, 3, None) # Dot-connect all but the last. Last is dash-connected if not None. diff --git a/package-lock.json b/package-lock.json index 5bd0eab47..e88732ac0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,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" @@ -8068,6 +8069,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", @@ -15148,6 +15154,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 42d3d640a..a2486181a 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,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