mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-09 03:01:18 +02:00
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
|
/**
|
||
|
* plugin.js
|
||
|
*
|
||
|
* Released under LGPL License.
|
||
|
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
|
||
|
*
|
||
|
* License: http://www.tinymce.com/license
|
||
|
* Contributing: http://www.tinymce.com/contributing
|
||
|
*/
|
||
|
|
||
|
/*global tinymce:true */
|
||
|
|
||
|
tinymce.PluginManager.add('contextmenu', function(editor) {
|
||
|
var menu, contextmenuNeverUseNative = editor.settings.contextmenu_never_use_native;
|
||
|
|
||
|
editor.on('contextmenu', function(e) {
|
||
|
var contextmenu, doc = editor.getDoc();
|
||
|
|
||
|
// Block TinyMCE menu on ctrlKey
|
||
|
if (e.ctrlKey && !contextmenuNeverUseNative) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
e.preventDefault();
|
||
|
|
||
|
/**
|
||
|
* WebKit/Blink on Mac has the odd behavior of selecting the target word or line this causes
|
||
|
* issues when for example inserting images see: #7022
|
||
|
*/
|
||
|
if (tinymce.Env.mac && tinymce.Env.webkit) {
|
||
|
if (e.button == 2 && doc.caretRangeFromPoint) {
|
||
|
editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
contextmenu = editor.settings.contextmenu || 'link image inserttable | cell row column deletetable';
|
||
|
|
||
|
// Render menu
|
||
|
if (!menu) {
|
||
|
var items = [];
|
||
|
|
||
|
tinymce.each(contextmenu.split(/[ ,]/), function(name) {
|
||
|
var item = editor.menuItems[name];
|
||
|
|
||
|
if (name == '|') {
|
||
|
item = {text: name};
|
||
|
}
|
||
|
|
||
|
if (item) {
|
||
|
item.shortcut = ''; // Hide shortcuts
|
||
|
items.push(item);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
for (var i = 0; i < items.length; i++) {
|
||
|
if (items[i].text == '|') {
|
||
|
if (i === 0 || i == items.length - 1) {
|
||
|
items.splice(i, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
menu = new tinymce.ui.Menu({
|
||
|
items: items,
|
||
|
context: 'contextmenu',
|
||
|
classes: 'contextmenu'
|
||
|
}).renderTo();
|
||
|
|
||
|
editor.on('remove', function() {
|
||
|
menu.remove();
|
||
|
menu = null;
|
||
|
});
|
||
|
} else {
|
||
|
menu.show();
|
||
|
}
|
||
|
|
||
|
// Position menu
|
||
|
var pos = {x: e.pageX, y: e.pageY};
|
||
|
|
||
|
if (!editor.inline) {
|
||
|
pos = tinymce.DOM.getPos(editor.getContentAreaContainer());
|
||
|
pos.x += e.clientX;
|
||
|
pos.y += e.clientY;
|
||
|
}
|
||
|
|
||
|
menu.moveTo(pos.x, pos.y);
|
||
|
});
|
||
|
});
|