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 |
|
11 /*global tinymce:true */ |
|
12 |
|
13 tinymce.PluginManager.add('contextmenu', function(editor) { |
|
14 var menu, contextmenuNeverUseNative = editor.settings.contextmenu_never_use_native; |
|
15 |
|
16 editor.on('contextmenu', function(e) { |
|
17 var contextmenu, doc = editor.getDoc(); |
|
18 |
|
19 // Block TinyMCE menu on ctrlKey |
|
20 if (e.ctrlKey && !contextmenuNeverUseNative) { |
|
21 return; |
|
22 } |
|
23 |
|
24 e.preventDefault(); |
|
25 |
|
26 /** |
|
27 * WebKit/Blink on Mac has the odd behavior of selecting the target word or line this causes |
|
28 * issues when for example inserting images see: #7022 |
|
29 */ |
|
30 if (tinymce.Env.mac && tinymce.Env.webkit) { |
|
31 if (e.button == 2 && doc.caretRangeFromPoint) { |
|
32 editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y)); |
|
33 } |
|
34 } |
|
35 |
|
36 contextmenu = editor.settings.contextmenu || 'link image inserttable | cell row column deletetable'; |
|
37 |
|
38 // Render menu |
|
39 if (!menu) { |
|
40 var items = []; |
|
41 |
|
42 tinymce.each(contextmenu.split(/[ ,]/), function(name) { |
|
43 var item = editor.menuItems[name]; |
|
44 |
|
45 if (name == '|') { |
|
46 item = {text: name}; |
|
47 } |
|
48 |
|
49 if (item) { |
|
50 item.shortcut = ''; // Hide shortcuts |
|
51 items.push(item); |
|
52 } |
|
53 }); |
|
54 |
|
55 for (var i = 0; i < items.length; i++) { |
|
56 if (items[i].text == '|') { |
|
57 if (i === 0 || i == items.length - 1) { |
|
58 items.splice(i, 1); |
|
59 } |
|
60 } |
|
61 } |
|
62 |
|
63 menu = new tinymce.ui.Menu({ |
|
64 items: items, |
|
65 context: 'contextmenu' |
|
66 }).addClass('contextmenu').renderTo(); |
|
67 |
|
68 editor.on('remove', function() { |
|
69 menu.remove(); |
|
70 menu = null; |
|
71 }); |
|
72 } else { |
|
73 menu.show(); |
|
74 } |
|
75 |
|
76 // Position menu |
|
77 var pos = {x: e.pageX, y: e.pageY}; |
|
78 |
|
79 if (!editor.inline) { |
|
80 pos = tinymce.DOM.getPos(editor.getContentAreaContainer()); |
|
81 pos.x += e.clientX; |
|
82 pos.y += e.clientY; |
|
83 } |
|
84 |
|
85 menu.moveTo(pos.x, pos.y); |
|
86 }); |
|
87 }); |
|