PluginProbe ʕ •ᴥ•ʔ
Advanced Editor Tools / 5.5.0
Advanced Editor Tools v5.5.0
trunk 1.0 1.0.1 2.0 2.2 3.0 3.0.1 3.1 3.2 3.2.4 3.2.7 3.3.9 3.3.9.1 3.3.9.2 3.4.2 3.4.2.1 3.4.5 3.4.5.1 3.4.9 3.5.8 3.5.9 3.5.9.1 4.0 4.0.1 4.0.2 4.1 4.1.1 4.1.7 4.1.9 4.2.3 4.2.3.1 4.2.5 4.2.8 4.3.10 4.3.10.1 4.3.8 4.4.1 4.4.3 4.5.6 4.6.3 4.6.7 4.7.11 4.8.0 4.8.1 4.8.2 5.0.0 5.0.1 5.1.0 5.2 5.2.1 5.3 5.4.0 5.5.0 5.5.1 5.6.0 5.9.0 5.9.1 5.9.2
tinymce-advanced / mce / contextmenu / plugin.js
tinymce-advanced / mce / contextmenu Last commit date
plugin.js 7 years ago plugin.min.js 8 years ago
plugin.js
169 lines
1 (function () {
2 var contextmenu = (function () {
3 'use strict';
4
5 var Cell = function (initial) {
6 var value = initial;
7 var get = function () {
8 return value;
9 };
10 var set = function (v) {
11 value = v;
12 };
13 var clone = function () {
14 return Cell(get());
15 };
16 return {
17 get: get,
18 set: set,
19 clone: clone
20 };
21 };
22
23 var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
24
25 var get = function (visibleState) {
26 var isContextMenuVisible = function () {
27 return visibleState.get();
28 };
29 return { isContextMenuVisible: isContextMenuVisible };
30 };
31 var Api = { get: get };
32
33 var shouldNeverUseNative = function (editor) {
34 return editor.settings.contextmenu_never_use_native;
35 };
36 var getContextMenu = function (editor) {
37 return editor.getParam('contextmenu', 'link openlink image inserttable | cell row column deletetable');
38 };
39 var Settings = {
40 shouldNeverUseNative: shouldNeverUseNative,
41 getContextMenu: getContextMenu
42 };
43
44 var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
45
46 var getUiContainer = function (editor) {
47 return global$1.DOM.select(editor.settings.ui_container)[0];
48 };
49
50 var nu = function (x, y) {
51 return {
52 x: x,
53 y: y
54 };
55 };
56 var transpose = function (pos, dx, dy) {
57 return nu(pos.x + dx, pos.y + dy);
58 };
59 var fromPageXY = function (e) {
60 return nu(e.pageX, e.pageY);
61 };
62 var fromClientXY = function (e) {
63 return nu(e.clientX, e.clientY);
64 };
65 var transposeUiContainer = function (element, pos) {
66 if (element && global$1.DOM.getStyle(element, 'position', true) !== 'static') {
67 var containerPos = global$1.DOM.getPos(element);
68 var dx = containerPos.x - element.scrollLeft;
69 var dy = containerPos.y - element.scrollTop;
70 return transpose(pos, -dx, -dy);
71 } else {
72 return transpose(pos, 0, 0);
73 }
74 };
75 var transposeContentAreaContainer = function (element, pos) {
76 var containerPos = global$1.DOM.getPos(element);
77 return transpose(pos, containerPos.x, containerPos.y);
78 };
79 var getPos = function (editor, e) {
80 if (editor.inline) {
81 return transposeUiContainer(getUiContainer(editor), fromPageXY(e));
82 } else {
83 var iframePos = transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));
84 return transposeUiContainer(getUiContainer(editor), iframePos);
85 }
86 };
87 var Coords = { getPos: getPos };
88
89 var global$2 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
90
91 var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');
92
93 var renderMenu = function (editor, visibleState) {
94 var menu, contextmenu;
95 var items = [];
96 contextmenu = Settings.getContextMenu(editor);
97 global$3.each(contextmenu.split(/[ ,]/), function (name) {
98 var item = editor.menuItems[name];
99 if (name === '|') {
100 item = { text: name };
101 }
102 if (item) {
103 item.shortcut = '';
104 items.push(item);
105 }
106 });
107 for (var i = 0; i < items.length; i++) {
108 if (items[i].text === '|') {
109 if (i === 0 || i === items.length - 1) {
110 items.splice(i, 1);
111 }
112 }
113 }
114 menu = global$2.create('menu', {
115 items: items,
116 context: 'contextmenu',
117 classes: 'contextmenu'
118 });
119 menu.uiContainer = getUiContainer(editor);
120 menu.renderTo(getUiContainer(editor));
121 menu.on('hide', function (e) {
122 if (e.control === this) {
123 visibleState.set(false);
124 }
125 });
126 editor.on('remove', function () {
127 menu.remove();
128 menu = null;
129 });
130 return menu;
131 };
132 var show = function (editor, pos, visibleState, menu) {
133 if (menu.get() === null) {
134 menu.set(renderMenu(editor, visibleState));
135 } else {
136 menu.get().show();
137 }
138 menu.get().moveTo(pos.x, pos.y);
139 visibleState.set(true);
140 };
141 var ContextMenu = { show: show };
142
143 var isNativeOverrideKeyEvent = function (editor, e) {
144 return e.ctrlKey && !Settings.shouldNeverUseNative(editor);
145 };
146 var setup = function (editor, visibleState, menu) {
147 editor.on('contextmenu', function (e) {
148 if (isNativeOverrideKeyEvent(editor, e)) {
149 return;
150 }
151 e.preventDefault();
152 ContextMenu.show(editor, Coords.getPos(editor, e), visibleState, menu);
153 });
154 };
155 var Bind = { setup: setup };
156
157 global.add('contextmenu', function (editor) {
158 var menu = Cell(null), visibleState = Cell(false);
159 Bind.setup(editor, visibleState, menu);
160 return Api.get(visibleState);
161 });
162 function Plugin () {
163 }
164
165 return Plugin;
166
167 }());
168 })();
169