///import core ///commands 右键菜单 ///commandsName ContextMenu ///commandsTitle 右键菜单 /** * 右键菜单 * @function * @name baidu.editor.plugins.contextmenu * @author zhanyi */ UE.plugins["contextmenu"] = function() { var me = this; me.setOpt("enableContextMenu", me.getOpt("enableContextMenu") || true); if (me.getOpt("enableContextMenu") === false) { return; } var lang = me.getLang("contextMenu"), menu, items = me.options.contextMenu || [ { label: lang["selectall"], cmdName: "selectall" }, { label: lang.cleardoc, cmdName: "cleardoc", exec: function() { if (confirm(lang.confirmclear)) { this.execCommand("cleardoc"); } } }, "-", { label: lang.unlink, cmdName: "unlink" }, "-", { group: lang.paragraph, icon: "justifyjustify", subMenu: [ { label: lang.justifyleft, cmdName: "justify", value: "left" }, { label: lang.justifyright, cmdName: "justify", value: "right" }, { label: lang.justifycenter, cmdName: "justify", value: "center" }, { label: lang.justifyjustify, cmdName: "justify", value: "justify" } ] }, "-", { group: lang.table, icon: "table", subMenu: [ { label: lang.inserttable, cmdName: "inserttable" }, { label: lang.deletetable, cmdName: "deletetable" }, "-", { label: lang.deleterow, cmdName: "deleterow" }, { label: lang.deletecol, cmdName: "deletecol" }, { label: lang.insertcol, cmdName: "insertcol" }, { label: lang.insertcolnext, cmdName: "insertcolnext" }, { label: lang.insertrow, cmdName: "insertrow" }, { label: lang.insertrownext, cmdName: "insertrownext" }, "-", { label: lang.insertcaption, cmdName: "insertcaption" }, { label: lang.deletecaption, cmdName: "deletecaption" }, { label: lang.inserttitle, cmdName: "inserttitle" }, { label: lang.deletetitle, cmdName: "deletetitle" }, { label: lang.inserttitlecol, cmdName: "inserttitlecol" }, { label: lang.deletetitlecol, cmdName: "deletetitlecol" }, "-", { label: lang.mergecells, cmdName: "mergecells" }, { label: lang.mergeright, cmdName: "mergeright" }, { label: lang.mergedown, cmdName: "mergedown" }, "-", { label: lang.splittorows, cmdName: "splittorows" }, { label: lang.splittocols, cmdName: "splittocols" }, { label: lang.splittocells, cmdName: "splittocells" }, "-", { label: lang.averageDiseRow, cmdName: "averagedistributerow" }, { label: lang.averageDisCol, cmdName: "averagedistributecol" }, "-", { label: lang.edittd, cmdName: "edittd", exec: function() { if (UE.ui["edittd"]) { new UE.ui["edittd"](this); } this.getDialog("edittd").open(); } }, { label: lang.edittable, cmdName: "edittable", exec: function() { if (UE.ui["edittable"]) { new UE.ui["edittable"](this); } this.getDialog("edittable").open(); } }, { label: lang.setbordervisible, cmdName: "setbordervisible" } ] }, { group: lang.tablesort, icon: "tablesort", subMenu: [ { label: lang.enablesort, cmdName: "enablesort" }, { label: lang.disablesort, cmdName: "disablesort" }, "-", { label: lang.reversecurrent, cmdName: "sorttable", value: "reversecurrent" }, { label: lang.orderbyasc, cmdName: "sorttable", value: "orderbyasc" }, { label: lang.reversebyasc, cmdName: "sorttable", value: "reversebyasc" }, { label: lang.orderbynum, cmdName: "sorttable", value: "orderbynum" }, { label: lang.reversebynum, cmdName: "sorttable", value: "reversebynum" } ] }, { group: lang.borderbk, icon: "borderBack", subMenu: [ { label: lang.setcolor, cmdName: "interlacetable", exec: function() { this.execCommand("interlacetable"); } }, { label: lang.unsetcolor, cmdName: "uninterlacetable", exec: function() { this.execCommand("uninterlacetable"); } }, { label: lang.setbackground, cmdName: "settablebackground", exec: function() { this.execCommand("settablebackground", { repeat: true, colorList: ["#bbb", "#ccc"] }); } }, { label: lang.unsetbackground, cmdName: "cleartablebackground", exec: function() { this.execCommand("cleartablebackground"); } }, { label: lang.redandblue, cmdName: "settablebackground", exec: function() { this.execCommand("settablebackground", { repeat: true, colorList: ["red", "blue"] }); } }, { label: lang.threecolorgradient, cmdName: "settablebackground", exec: function() { this.execCommand("settablebackground", { repeat: true, colorList: ["#aaa", "#bbb", "#ccc"] }); } } ] }, { group: lang.aligntd, icon: "aligntd", subMenu: [ { cmdName: "cellalignment", value: { align: "left", vAlign: "top" } }, { cmdName: "cellalignment", value: { align: "center", vAlign: "top" } }, { cmdName: "cellalignment", value: { align: "right", vAlign: "top" } }, { cmdName: "cellalignment", value: { align: "left", vAlign: "middle" } }, { cmdName: "cellalignment", value: { align: "center", vAlign: "middle" } }, { cmdName: "cellalignment", value: { align: "right", vAlign: "middle" } }, { cmdName: "cellalignment", value: { align: "left", vAlign: "bottom" } }, { cmdName: "cellalignment", value: { align: "center", vAlign: "bottom" } }, { cmdName: "cellalignment", value: { align: "right", vAlign: "bottom" } } ] }, { group: lang.aligntable, icon: "aligntable", subMenu: [ { cmdName: "tablealignment", className: "left", label: lang.tableleft, value: "left" }, { cmdName: "tablealignment", className: "center", label: lang.tablecenter, value: "center" }, { cmdName: "tablealignment", className: "right", label: lang.tableright, value: "right" } ] }, "-", { label: lang.insertparagraphbefore, cmdName: "insertparagraph", value: true }, { label: lang.insertparagraphafter, cmdName: "insertparagraph" }, { label: lang["copy"], cmdName: "copy" }, { label: lang["paste"], cmdName: "paste" } ]; if (!items.length) { return; } var uiUtils = UE.ui.uiUtils; me.addListener("contextmenu", function(type, evt) { var offset = uiUtils.getViewportOffsetByEvent(evt); me.fireEvent("beforeselectionchange"); if (menu) { menu.destroy(); } for (var i = 0, ti, contextItems = []; (ti = items[i]); i++) { var last; (function(item) { if (item == "-") { if ((last = contextItems[contextItems.length - 1]) && last !== "-") { contextItems.push("-"); } } else if (item.hasOwnProperty("group")) { for (var j = 0, cj, subMenu = []; (cj = item.subMenu[j]); j++) { (function(subItem) { if (subItem == "-") { if ((last = subMenu[subMenu.length - 1]) && last !== "-") { subMenu.push("-"); } else { subMenu.splice(subMenu.length - 1); } } else { if ( (me.commands[subItem.cmdName] || UE.commands[subItem.cmdName] || subItem.query) && (subItem.query ? subItem.query() : me.queryCommandState(subItem.cmdName)) > -1 ) { subMenu.push({ label: subItem.label || me.getLang( "contextMenu." + subItem.cmdName + (subItem.value || "") ) || "", className: "edui-for-" + subItem.cmdName + (subItem.className ? " edui-for-" + subItem.cmdName + "-" + subItem.className : ""), onclick: subItem.exec ? function() { subItem.exec.call(me); } : function() { me.execCommand(subItem.cmdName, subItem.value); } }); } } })(cj); } if (subMenu.length) { function getLabel() { switch (item.icon) { case "table": return me.getLang("contextMenu.table"); case "justifyjustify": return me.getLang("contextMenu.paragraph"); case "aligntd": return me.getLang("contextMenu.aligntd"); case "aligntable": return me.getLang("contextMenu.aligntable"); case "tablesort": return lang.tablesort; case "borderBack": return lang.borderbk; default: return ""; } } contextItems.push({ //todo 修正成自动获取方式 label: getLabel(), className: "edui-for-" + item.icon, subMenu: { items: subMenu, editor: me } }); } } else { //有可能commmand没有加载右键不能出来,或者没有command也想能展示出来添加query方法 if ( (me.commands[item.cmdName] || UE.commands[item.cmdName] || item.query) && (item.query ? item.query.call(me) : me.queryCommandState(item.cmdName)) > -1 ) { contextItems.push({ label: item.label || me.getLang("contextMenu." + item.cmdName), className: "edui-for-" + (item.icon ? item.icon : item.cmdName + (item.value || "")), onclick: item.exec ? function() { item.exec.call(me); } : function() { me.execCommand(item.cmdName, item.value); } }); } } })(ti); } if (contextItems[contextItems.length - 1] == "-") { contextItems.pop(); } menu = new UE.ui.Menu({ items: contextItems, className: "edui-contextmenu", editor: me }); menu.render(); menu.showAt(offset); me.fireEvent("aftershowcontextmenu", menu); domUtils.preventDefault(evt); if (browser.ie) { var ieRange; try { ieRange = me.selection.getNative().createRange(); } catch (e) { return; } if (ieRange.item) { var range = new dom.Range(me.document); range.selectNode(ieRange.item(0)).select(true, true); } } }); // 添加复制的flash按钮 me.addListener("aftershowcontextmenu", function(type, menu) { if (me.zeroclipboard) { var items = menu.items; for (var key in items) { if (items[key].className == "edui-for-copy") { me.zeroclipboard.clip(items[key].getDom()); } } } }); };