function registerEditorShortcuts(editor) {
// Headers
for (let i = 1; i < 5; i++) {
- editor.addShortcut('meta+' + i, '', ['FormatBlock', false, 'h' + i]);
+ editor.shortcuts.add('meta+' + i, '', ['FormatBlock', false, 'h' + (i+1)]);
}
// Other block shortcuts
- editor.addShortcut('meta+q', '', ['FormatBlock', false, 'blockquote']);
- editor.addShortcut('meta+d', '', ['FormatBlock', false, 'p']);
- editor.addShortcut('meta+e', '', ['codeeditor', false, 'pre']);
- editor.addShortcut('meta+shift+E', '', ['FormatBlock', false, 'code']);
+ editor.shortcuts.add('meta+5', '', ['FormatBlock', false, 'p']);
+ editor.shortcuts.add('meta+d', '', ['FormatBlock', false, 'p']);
+ editor.shortcuts.add('meta+6', '', ['FormatBlock', false, 'blockquote']);
+ editor.shortcuts.add('meta+q', '', ['FormatBlock', false, 'blockquote']);
+ editor.shortcuts.add('meta+7', '', ['codeeditor', false, 'pre']);
+ editor.shortcuts.add('meta+e', '', ['codeeditor', false, 'pre']);
+ editor.shortcuts.add('meta+8', '', ['FormatBlock', false, 'code']);
+ editor.shortcuts.add('meta+shift+E', '', ['FormatBlock', false, 'code']);
+ // Loop through callout styles
+ editor.shortcuts.add('meta+9', '', function() {
+ let selectedNode = editor.selection.getNode();
+ let formats = ['info', 'success', 'warning', 'danger'];
+
+ if (!selectedNode || selectedNode.className.indexOf('callout') === -1) {
+ editor.formatter.apply('calloutinfo');
+ return;
+ }
+
+ for (let i = 0; i < formats.length; i++) {
+ if (selectedNode.className.indexOf(formats[i]) === -1) continue;
+ let newFormat = (i === formats.length -1) ? formats[0] : formats[i+1];
+ editor.formatter.apply('callout' + newFormat);
+ return;
+ }
+ editor.formatter.apply('p');
+ });
}
function showPopup(editor) {
let selectedNode = editor.selection.getNode();
- console.log('show ppoe');
if (!elemIsCodeBlock(selectedNode)) {
let providedCode = editor.selection.getNode().textContent;
$codeMirrorContainer.replaceWith($pre);
}
- window.tinymce.PluginManager.add('codeeditor', (editor, url) => {
+ window.tinymce.PluginManager.add('codeeditor', function(editor, url) {
let $ = editor.$;
$('.CodeMirrorContainer').filter((index ,elem) => {
return typeof elem.querySelector('.CodeMirror').CodeMirror === 'undefined';
}).each((index, elem) => {
- console.log('COVERT');
codeMirrorContainerToPre($(elem));
});
});
}
+function hrPlugin() {
+ window.tinymce.PluginManager.add('customhr', function (editor) {
+ editor.addCommand('InsertHorizontalRule', function () {
+ let hrElem = document.createElement('hr');
+ let cNode = editor.selection.getNode();
+ let parentNode = cNode.parentNode;
+ parentNode.insertBefore(hrElem, cNode);
+ });
+
+ editor.addButton('hr', {
+ icon: 'hr',
+ tooltip: 'Horizontal line',
+ cmd: 'InsertHorizontalRule'
+ });
+
+ editor.addMenuItem('hr', {
+ icon: 'hr',
+ text: 'Horizontal line',
+ cmd: 'InsertHorizontalRule',
+ context: 'insert'
+ });
+ });
+}
+
module.exports = function() {
+ hrPlugin();
codePlugin();
let settings = {
selector: '#html-editor',
{title: "Code Block", icon: "code", cmd: 'codeeditor', format: 'codeeditor'},
{title: "Inline Code", icon: "code", inline: "code"},
{title: "Callouts", items: [
- {title: "Success", block: 'p', exact: true, attributes : {'class' : 'callout success'}},
- {title: "Info", block: 'p', exact: true, attributes : {'class' : 'callout info'}},
- {title: "Warning", block: 'p', exact: true, attributes : {'class' : 'callout warning'}},
- {title: "Danger", block: 'p', exact: true, attributes : {'class' : 'callout danger'}}
+ {title: "Info", format: 'calloutinfo'},
+ {title: "Success", format: 'calloutsuccess'},
+ {title: "Warning", format: 'calloutwarning'},
+ {title: "Danger", format: 'calloutdanger'}
]},
],
style_formats_merge: false,
alignleft: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-left'},
aligncenter: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-center'},
alignright: {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes: 'align-right'},
+ calloutsuccess: {block: 'p', exact: true, attributes: {class: 'callout success'}},
+ calloutinfo: {block: 'p', exact: true, attributes: {class: 'callout info'}},
+ calloutwarning: {block: 'p', exact: true, attributes: {class: 'callout warning'}},
+ calloutdanger: {block: 'p', exact: true, attributes: {class: 'callout danger'}}
},
file_browser_callback: function (field_name, url, type, win) {
if (type === 'file') {
- window.showEntityLinkSelector(function(entity) {
+ window.EntitySelectorPopup.show(function(entity) {
let originalField = win.document.getElementById(field_name);
originalField.value = entity.link;
$(originalField).closest('.mce-form').find('input').eq(2).val(entity.name);
if (type === 'image') {
// Show image manager
- window.ImageManager.showExternal(function (image) {
+ window.ImageManager.show(function (image) {
// Set popover link input to image url then fire change event
// to ensure the new value sticks
icon: 'image',
tooltip: 'Insert an image',
onclick: function () {
- window.ImageManager.showExternal(function (image) {
+ window.ImageManager.show(function (image) {
let html = `<a href="${image.url}" target="_blank">`;
html += `<img src="${image.thumbs.display}" alt="${image.name}">`;
html += '</a>';