123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 |
- ///import core
- ///commands 右键菜单
- ///commandsName ContextMenu
- ///commandsTitle 右键菜单
- /**
- * 右键菜单
- * @function
- * @name baidu.editor.plugins.contextmenu
- * @author zhanyi
- */
- UE.plugins['contextmenu'] = function () {
- var me = this;
- me.setOpt('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());
- }
- }
- }
- });
- };
|