///import core ///commands 右键菜单 ///commandsName ContextMenu ///commandsTitle 右键菜单 /* * 右键菜单 * @function * @name baidu.editor.plugins.contextmenu * @author zhanyi */ UE.plugins['contextmenu'] = function () { var me = this, lang = me.getLang( "contextMenu" ), menu, items = me.options.contextMenu || [ {label:lang['selectall'], cmdName:'selectall'}, { label:lang.deletecode, cmdName:'highlightcode', icon:'deletehighlightcode' }, { 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.deletetitle, 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(); } } ] }, { group:lang.tablesort, icon:'tablesort', subMenu:[ { label:lang.reversecurrent, cmdName:'sorttable', value:1 }, { label:lang.orderbyasc, cmdName:'sorttable' }, { label:lang.reversebyasc, cmdName:'sorttable', exec:function(){ this.execCommand("sorttable",function(td1,td2){ var value1 = td1.innerHTML, value2 = td2.innerHTML; return value2.localeCompare(value1); }); } }, { label:lang.orderbynum, cmdName:'sorttable', exec:function(){ this.execCommand("sorttable",function(td1,td2){ var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); if(value1) value1 = +value1[0]; if(value2) value2 = +value2[0]; return (value1||0) - (value2||0); }); } }, { label:lang.reversebynum, cmdName:'sorttable', exec:function(){ this.execCommand("sorttable",function(td1,td2){ var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/), value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/); if(value1) value1 = +value1[0]; if(value2) value2 = +value2[0]; return (value2||0) - (value1||0); }); } } ] }, { 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', exec:function () { alert( lang.copymsg ); }, query:function () { return 0; } }, { label:lang['paste'], cmdName:'paste', exec:function () { alert( lang.pastemsg ); }, query:function () { return 0; } },{ label:lang['highlightcode'], cmdName:'highlightcode', exec:function () { if ( UE.ui['highlightcode'] ) { new UE.ui['highlightcode']( this ); } this.ui._dialogs['highlightcodeDialog'].open(); } } ]; 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 ) { //highlight todo if ( item.cmdName == 'highlightcode' ) { if(me.queryCommandState( item.cmdName ) == 1 && item.icon != 'deletehighlightcode'){ return; } if(me.queryCommandState( item.cmdName ) != 1 && item.icon == 'deletehighlightcode'){ return; } } 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 ); } } } ); };