plugin.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * plugin.js
  3. *
  4. * Copyright, Moxiecode Systems AB
  5. * Released under LGPL License.
  6. *
  7. * License: http://www.tinymce.com/license
  8. * Contributing: http://www.tinymce.com/contributing
  9. */
  10. /*global tinymce:true */
  11. tinymce.PluginManager.add('contextmenu', function(editor) {
  12. var menu, contextmenuNeverUseNative = editor.settings.contextmenu_never_use_native;
  13. editor.on('contextmenu', function(e) {
  14. var contextmenu;
  15. // Block TinyMCE menu on ctrlKey
  16. if (e.ctrlKey && !contextmenuNeverUseNative) {
  17. return;
  18. }
  19. e.preventDefault();
  20. contextmenu = editor.settings.contextmenu || 'link image inserttable | cell row column deletetable';
  21. // Render menu
  22. if (!menu) {
  23. var items = [];
  24. tinymce.each(contextmenu.split(/[ ,]/), function(name) {
  25. var item = editor.menuItems[name];
  26. if (name == '|') {
  27. item = {text: name};
  28. }
  29. if (item) {
  30. item.shortcut = ''; // Hide shortcuts
  31. items.push(item);
  32. }
  33. });
  34. for (var i = 0; i < items.length; i++) {
  35. if (items[i].text == '|') {
  36. if (i === 0 || i == items.length - 1) {
  37. items.splice(i, 1);
  38. }
  39. }
  40. }
  41. menu = new tinymce.ui.Menu({
  42. items: items,
  43. context: 'contextmenu'
  44. }).addClass('contextmenu').renderTo();
  45. editor.on('remove', function() {
  46. menu.remove();
  47. menu = null;
  48. });
  49. } else {
  50. menu.show();
  51. }
  52. // Position menu
  53. var pos = {x: e.pageX, y: e.pageY};
  54. if (!editor.inline) {
  55. pos = tinymce.DOM.getPos(editor.getContentAreaContainer());
  56. pos.x += e.clientX;
  57. pos.y += e.clientY;
  58. }
  59. menu.moveTo(pos.x, pos.y);
  60. });
  61. });