44f0b4beef
Originally I changed the compiled output of TinyMCE from es2015 to es6 to try and allow our own requirejs system to serve the content. This is a change in the TinyMCE repository (or our copy of it). Unfortunately this turned out to not be possible, but I never got around to updating the configuration to stop doing so. Whilst working on this issue, I've removed this change to module compilation, which brings us closer in line to Tiny core, and simplifies the upgrade process.
124 lines
3.5 KiB
JavaScript
124 lines
3.5 KiB
JavaScript
/**
|
|
* TinyMCE version 6.6.2 (2023-08-09)
|
|
*/
|
|
|
|
(function () {
|
|
'use strict';
|
|
|
|
var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
|
|
|
|
const isSimpleType = type => value => typeof value === type;
|
|
const isBoolean = isSimpleType('boolean');
|
|
const isNumber = isSimpleType('number');
|
|
|
|
const option = name => editor => editor.options.get(name);
|
|
const register$2 = editor => {
|
|
const registerOption = editor.options.register;
|
|
registerOption('nonbreaking_force_tab', {
|
|
processor: value => {
|
|
if (isBoolean(value)) {
|
|
return {
|
|
value: value ? 3 : 0,
|
|
valid: true
|
|
};
|
|
} else if (isNumber(value)) {
|
|
return {
|
|
value,
|
|
valid: true
|
|
};
|
|
} else {
|
|
return {
|
|
valid: false,
|
|
message: 'Must be a boolean or number.'
|
|
};
|
|
}
|
|
},
|
|
default: false
|
|
});
|
|
registerOption('nonbreaking_wrap', {
|
|
processor: 'boolean',
|
|
default: true
|
|
});
|
|
};
|
|
const getKeyboardSpaces = option('nonbreaking_force_tab');
|
|
const wrapNbsps = option('nonbreaking_wrap');
|
|
|
|
const stringRepeat = (string, repeats) => {
|
|
let str = '';
|
|
for (let index = 0; index < repeats; index++) {
|
|
str += string;
|
|
}
|
|
return str;
|
|
};
|
|
const isVisualCharsEnabled = editor => editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;
|
|
const insertNbsp = (editor, times) => {
|
|
const classes = () => isVisualCharsEnabled(editor) ? 'mce-nbsp-wrap mce-nbsp' : 'mce-nbsp-wrap';
|
|
const nbspSpan = () => `<span class="${ classes() }" contenteditable="false">${ stringRepeat(' ', times) }</span>`;
|
|
const shouldWrap = wrapNbsps(editor);
|
|
const html = shouldWrap || editor.plugins.visualchars ? nbspSpan() : stringRepeat(' ', times);
|
|
editor.undoManager.transact(() => editor.insertContent(html));
|
|
};
|
|
|
|
const register$1 = editor => {
|
|
editor.addCommand('mceNonBreaking', () => {
|
|
insertNbsp(editor, 1);
|
|
});
|
|
};
|
|
|
|
var global = tinymce.util.Tools.resolve('tinymce.util.VK');
|
|
|
|
const setup = editor => {
|
|
const spaces = getKeyboardSpaces(editor);
|
|
if (spaces > 0) {
|
|
editor.on('keydown', e => {
|
|
if (e.keyCode === global.TAB && !e.isDefaultPrevented()) {
|
|
if (e.shiftKey) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
e.stopImmediatePropagation();
|
|
insertNbsp(editor, spaces);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
const onSetupEditable = editor => api => {
|
|
const nodeChanged = () => {
|
|
api.setEnabled(editor.selection.isEditable());
|
|
};
|
|
editor.on('NodeChange', nodeChanged);
|
|
nodeChanged();
|
|
return () => {
|
|
editor.off('NodeChange', nodeChanged);
|
|
};
|
|
};
|
|
const register = editor => {
|
|
const onAction = () => editor.execCommand('mceNonBreaking');
|
|
editor.ui.registry.addButton('nonbreaking', {
|
|
icon: 'non-breaking',
|
|
tooltip: 'Nonbreaking space',
|
|
onAction,
|
|
onSetup: onSetupEditable(editor)
|
|
});
|
|
editor.ui.registry.addMenuItem('nonbreaking', {
|
|
icon: 'non-breaking',
|
|
text: 'Nonbreaking space',
|
|
onAction,
|
|
onSetup: onSetupEditable(editor)
|
|
});
|
|
};
|
|
|
|
var Plugin = () => {
|
|
global$1.add('nonbreaking', editor => {
|
|
register$2(editor);
|
|
register$1(editor);
|
|
register(editor);
|
|
setup(editor);
|
|
});
|
|
};
|
|
|
|
Plugin();
|
|
|
|
})();
|