shortcutmenu.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. ///import core
  2. ///commands 弹出菜单
  3. // commandsName popupmenu
  4. ///commandsTitle 弹出菜单
  5. /**
  6. * 弹出菜单
  7. * @function
  8. * @name baidu.editor.plugins.popupmenu
  9. * @author xuheng
  10. */
  11. UE.plugins["shortcutmenu"] = function() {
  12. var me = this,
  13. menu,
  14. items = me.options.shortcutMenu || [];
  15. if (!items.length) {
  16. return;
  17. }
  18. me.addListener("contextmenu mouseup", function(type, e) {
  19. var me = this,
  20. customEvt = {
  21. type: type,
  22. target: e.target || e.srcElement,
  23. screenX: e.screenX,
  24. screenY: e.screenY,
  25. clientX: e.clientX,
  26. clientY: e.clientY
  27. };
  28. setTimeout(function() {
  29. var rng = me.selection.getRange();
  30. if (rng.collapsed === false || type == "contextmenu") {
  31. if (!menu) {
  32. menu = new baidu.editor.ui.ShortCutMenu({
  33. editor: me,
  34. items: items,
  35. theme: me.options.theme,
  36. className: "edui-shortcutmenu"
  37. });
  38. menu.render();
  39. me.fireEvent("afterrendershortcutmenu", menu);
  40. }
  41. menu.show(customEvt, !!UE.plugins["contextmenu"]);
  42. }
  43. });
  44. if (type == "contextmenu") {
  45. domUtils.preventDefault(e);
  46. if (browser.ie9below) {
  47. var ieRange;
  48. try {
  49. ieRange = me.selection.getNative().createRange();
  50. } catch (e) {
  51. return;
  52. }
  53. if (ieRange.item) {
  54. var range = new dom.Range(me.document);
  55. range.selectNode(ieRange.item(0)).select(true, true);
  56. }
  57. }
  58. }
  59. });
  60. me.addListener("keydown", function(type) {
  61. if (type == "keydown") {
  62. menu && !menu.isHidden && menu.hide();
  63. }
  64. });
  65. };