/wp-content/plugins/tinymce-advanced/mce/contextmenu/plugin.js

https://bitbucket.org/carloskikea/helpet · JavaScript · 168 lines · 154 code · 14 blank · 0 comment · 16 complexity · 83b39a4f0eb41130710d8e8faa830c68 MD5 · raw file

  1. (function () {
  2. var contextmenu = (function () {
  3. 'use strict';
  4. var Cell = function (initial) {
  5. var value = initial;
  6. var get = function () {
  7. return value;
  8. };
  9. var set = function (v) {
  10. value = v;
  11. };
  12. var clone = function () {
  13. return Cell(get());
  14. };
  15. return {
  16. get: get,
  17. set: set,
  18. clone: clone
  19. };
  20. };
  21. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  22. var get = function (visibleState) {
  23. var isContextMenuVisible = function () {
  24. return visibleState.get();
  25. };
  26. return { isContextMenuVisible: isContextMenuVisible };
  27. };
  28. var $_e8837ea6jfuviwq2 = { get: get };
  29. var shouldNeverUseNative = function (editor) {
  30. return editor.settings.contextmenu_never_use_native;
  31. };
  32. var getContextMenu = function (editor) {
  33. return editor.getParam('contextmenu', 'link openlink image inserttable | cell row column deletetable');
  34. };
  35. var $_4c31s3a8jfuviwq5 = {
  36. shouldNeverUseNative: shouldNeverUseNative,
  37. getContextMenu: getContextMenu
  38. };
  39. var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  40. var getUiContainer = function (editor) {
  41. return global$1.DOM.select(editor.settings.ui_container)[0];
  42. };
  43. var nu = function (x, y) {
  44. return {
  45. x: x,
  46. y: y
  47. };
  48. };
  49. var transpose = function (pos, dx, dy) {
  50. return nu(pos.x + dx, pos.y + dy);
  51. };
  52. var fromPageXY = function (e) {
  53. return nu(e.pageX, e.pageY);
  54. };
  55. var fromClientXY = function (e) {
  56. return nu(e.clientX, e.clientY);
  57. };
  58. var transposeUiContainer = function (element, pos) {
  59. if (element && global$1.DOM.getStyle(element, 'position', true) !== 'static') {
  60. var containerPos = global$1.DOM.getPos(element);
  61. var dx = containerPos.x - element.scrollLeft;
  62. var dy = containerPos.y - element.scrollTop;
  63. return transpose(pos, -dx, -dy);
  64. } else {
  65. return transpose(pos, 0, 0);
  66. }
  67. };
  68. var transposeContentAreaContainer = function (element, pos) {
  69. var containerPos = global$1.DOM.getPos(element);
  70. return transpose(pos, containerPos.x, containerPos.y);
  71. };
  72. var getPos = function (editor, e) {
  73. if (editor.inline) {
  74. return transposeUiContainer(getUiContainer(editor), fromPageXY(e));
  75. } else {
  76. var iframePos = transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));
  77. return transposeUiContainer(getUiContainer(editor), iframePos);
  78. }
  79. };
  80. var $_dmx61la9jfuviwq6 = { getPos: getPos };
  81. var global$2 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
  82. var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  83. var renderMenu = function (editor, visibleState) {
  84. var menu, contextmenu;
  85. var items = [];
  86. contextmenu = $_4c31s3a8jfuviwq5.getContextMenu(editor);
  87. global$3.each(contextmenu.split(/[ ,]/), function (name) {
  88. var item = editor.menuItems[name];
  89. if (name === '|') {
  90. item = { text: name };
  91. }
  92. if (item) {
  93. item.shortcut = '';
  94. items.push(item);
  95. }
  96. });
  97. for (var i = 0; i < items.length; i++) {
  98. if (items[i].text === '|') {
  99. if (i === 0 || i === items.length - 1) {
  100. items.splice(i, 1);
  101. }
  102. }
  103. }
  104. menu = global$2.create('menu', {
  105. items: items,
  106. context: 'contextmenu',
  107. classes: 'contextmenu'
  108. });
  109. menu.uiContainer = getUiContainer(editor);
  110. menu.renderTo(getUiContainer(editor));
  111. menu.on('hide', function (e) {
  112. if (e.control === this) {
  113. visibleState.set(false);
  114. }
  115. });
  116. editor.on('remove', function () {
  117. menu.remove();
  118. menu = null;
  119. });
  120. return menu;
  121. };
  122. var show = function (editor, pos, visibleState, menu) {
  123. if (menu.get() === null) {
  124. menu.set(renderMenu(editor, visibleState));
  125. } else {
  126. menu.get().show();
  127. }
  128. menu.get().moveTo(pos.x, pos.y);
  129. visibleState.set(true);
  130. };
  131. var $_brl8zkacjfuviwqa = { show: show };
  132. var isNativeOverrideKeyEvent = function (editor, e) {
  133. return e.ctrlKey && !$_4c31s3a8jfuviwq5.shouldNeverUseNative(editor);
  134. };
  135. var setup = function (editor, visibleState, menu) {
  136. editor.on('contextmenu', function (e) {
  137. if (isNativeOverrideKeyEvent(editor, e)) {
  138. return;
  139. }
  140. e.preventDefault();
  141. $_brl8zkacjfuviwqa.show(editor, $_dmx61la9jfuviwq6.getPos(editor, e), visibleState, menu);
  142. });
  143. };
  144. var $_8an0yta7jfuviwq3 = { setup: setup };
  145. global.add('contextmenu', function (editor) {
  146. var menu = Cell(null), visibleState = Cell(false);
  147. $_8an0yta7jfuviwq3.setup(editor, visibleState, menu);
  148. return $_e8837ea6jfuviwq2.get(visibleState);
  149. });
  150. function Plugin () {
  151. }
  152. return Plugin;
  153. }());
  154. })();