Use TinyMCE as a module to avoid conflicts when used globally

This commit is contained in:
Jan Jakeš
2019-05-22 14:58:41 +02:00
committed by M. Shull
parent 5e0ac5579e
commit c9ff9be7ec
6 changed files with 29 additions and 6 deletions

View File

@ -1 +0,0 @@
../../../node_modules/tinymce

View File

@ -6,6 +6,16 @@
import Marionette from 'backbone.marionette'; import Marionette from 'backbone.marionette';
import BehaviorsLookup from 'newsletter_editor/behaviors/BehaviorsLookup'; import BehaviorsLookup from 'newsletter_editor/behaviors/BehaviorsLookup';
import App from 'newsletter_editor/App'; import App from 'newsletter_editor/App';
import tinymce from 'tinymce/tinymce';
// TinyMCE theme and plugins
import 'tinymce/themes/modern';
import 'tinymce/plugins/code';
import 'tinymce/plugins/colorpicker';
import 'tinymce/plugins/link';
import 'tinymce/plugins/lists';
import 'tinymce/plugins/paste';
import 'tinymce/plugins/textcolor';
var BL = BehaviorsLookup; var BL = BehaviorsLookup;
@ -35,6 +45,8 @@ BL.TextEditorBehavior = Marionette.Behavior.extend({
} }
this.$(this.options.selector).tinymce(this.options.configurationFilter({ this.$(this.options.selector).tinymce(this.options.configurationFilter({
tinymce.init(this.options.configurationFilter({
target: this.el.querySelector(this.options.selector),
inline: true, inline: true,
menubar: false, menubar: false,

View File

@ -75,6 +75,7 @@
"chai": "2.2.0", "chai": "2.2.0",
"chai-jq": "0.0.8", "chai-jq": "0.0.8",
"clean-webpack-plugin": "^1.0.0", "clean-webpack-plugin": "^1.0.0",
"copy-webpack-plugin": "^5.0.3",
"cross-env": "^5.1.5", "cross-env": "^5.1.5",
"eslint": "^5.15.3", "eslint": "^5.15.3",
"eslint-config-airbnb": "^17.1.0", "eslint-config-airbnb": "^17.1.0",

View File

@ -4,15 +4,19 @@ var sinonChai = require('sinon-chai');
var chaiJq = require('chai-jq'); var chaiJq = require('chai-jq');
var _ = require('underscore'); var _ = require('underscore');
var jsdom = require('jsdom/lib/old-api.js').jsdom; var jsdom = require('jsdom/lib/old-api.js').jsdom;
var URL = require('url').URL;
chai.use(sinonChai); chai.use(sinonChai);
chai.use(chaiJq); chai.use(chaiJq);
global.expect = chai.expect; global.expect = chai.expect;
global.sinon = sinon; global.sinon = sinon;
global.URL = URL;
if (!global.document || !global.window) { if (!global.document || !global.window) {
global.document = jsdom('<html><head><script></script></head><body></body></html>', {}, { global.document = jsdom('<html><head><script></script></head><body></body></html>', {
url: 'http://example.com',
}, {
FetchExternalResources: ['script'], FetchExternalResources: ['script'],
ProcessExternalResources: ['script'], ProcessExternalResources: ['script'],
MutationEvents: '2.0', MutationEvents: '2.0',

View File

@ -424,8 +424,6 @@
<% block after_javascript %> <% block after_javascript %>
<%= javascript( <%= javascript(
'lib/tinymce/tinymce.min.js',
'lib/tinymce/jquery.tinymce.min.js',
'lib/mailpoet_shortcodes/plugin.js', 'lib/mailpoet_shortcodes/plugin.js',
'lib/wplink/plugin.js', 'lib/wplink/plugin.js',
'newsletter_editor.js' 'newsletter_editor.js'

View File

@ -2,6 +2,7 @@ const webpack = require('webpack');
const webpackManifestPlugin = require('webpack-manifest-plugin'); const webpackManifestPlugin = require('webpack-manifest-plugin');
const webpackCleanPlugin = require('clean-webpack-plugin'); const webpackCleanPlugin = require('clean-webpack-plugin');
const webpackTerserPlugin = require('terser-webpack-plugin'); const webpackTerserPlugin = require('terser-webpack-plugin');
const webpackCopyPlugin = require('copy-webpack-plugin');
const path = require('path'); const path = require('path');
const globalPrefix = 'MailPoetLib'; const globalPrefix = 'MailPoetLib';
const PRODUCTION_ENV = process.env.NODE_ENV === 'production'; const PRODUCTION_ENV = process.env.NODE_ENV === 'production';
@ -277,6 +278,16 @@ const adminConfig = {
form_editor: 'form_editor/webpack_index.jsx', form_editor: 'form_editor/webpack_index.jsx',
newsletter_editor: 'newsletter_editor/webpack_index.jsx', newsletter_editor: 'newsletter_editor/webpack_index.jsx',
}, },
plugins: [
...baseConfig.plugins,
new webpackCopyPlugin([
{
from: 'node_modules/tinymce/skins/lightgray',
to: 'skins/lightgray'
},
])
],
optimization: { optimization: {
runtimeChunk: { runtimeChunk: {
name: 'vendor', name: 'vendor',
@ -315,7 +326,6 @@ const adminConfig = {
}, },
externals: { externals: {
'jquery': 'jQuery', 'jquery': 'jQuery',
'tinymce': 'tinymce'
} }
}; };
@ -414,7 +424,6 @@ const testConfig = {
}, },
externals: { externals: {
'jquery': 'jQuery', 'jquery': 'jQuery',
'tinymce': 'tinymce',
'interact': 'interact', 'interact': 'interact',
'spectrum': 'spectrum', 'spectrum': 'spectrum',
} }