功能描述:
???? 原添加表格按钮,改为弹出面板选择式,同word里的插入表格,可通过移动鼠标选择要插入的表行列,原来的功能通过点击表格属性调用.
?
效果截图:
?
?
代码:
CKEDITOR.plugins.add( 'table', { init : function( editor ) { var table = CKEDITOR.plugins.table, lang = editor.lang.table; var PANELTABLEROW=5; var PANELTABLECOL=8; var regSate=0; editor.addCommand( 'table', new CKEDITOR.dialogCommand( 'table' ) ); editor.addCommand( 'tableProperties', new CKEDITOR.dialogCommand( 'tableProperties' ) ); //原table插件使用按钮 /*editor.ui.addButton( 'Table', { label : lang.toolbar, command : 'table' });*/ //弹出层试按钮 editor.ui.add( 'Table', CKEDITOR.UI_PANELBUTTON,{ label : lang.toolbar, className : 'cke_button_table', modes : { wysiwyg : 1 }, panel : { css : editor.skin.editor.css, attributes : { role : 'listbox', 'aria-label' : lang.panelTitle } }, onBlock : function( panel, block ) { block.autoSize = true; block.element.setHtml(renderTablePanel(panel)); block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' ); }, }); CKEDITOR.dialog.add( 'table', this.path + 'dialogs/table.js' ); CKEDITOR.dialog.add( 'tableProperties', this.path + 'dialogs/table.js' ); function renderTablePanel(panel){ var output = []; //弹出层事件 var fn1 = CKEDITOR.tools.addFunction(function(e){ var e=e||window.event; var target=e.srcElement||e.target; var colIdx=target.cellIndex,rowIdx=target.parentNode.rowIndex,table=target.parentNode.parentNode; if(table.rows){ for(var i=0;i<table.rows.length;i++){ for(var j=0;j<table.rows[i].cells.length;j++){ var cell=table.rows[i].cells[j]; if(j<=colIdx&&i<=rowIdx){ cell.style.background="#316AC5"; }else{ cell.style.background=""; } } } } }); var fn2= CKEDITOR.tools.addFunction(function(e){ var e=e||window.event; var target=e.srcElement||e.target; var colIdx=target.cellIndex+1,rowIdx=target.parentNode.rowIndex+1; insertTable(rowIdx,colIdx); panel.hide(); }); //弹出层内容2010-9-7 output.push('<table onmousemove="CKEDITOR.tools.callFunction(', fn1, ',event);" border="1" id="select_table_panel" unselectable="on" onselectstart="return false" style="line-height:10px;cursor:pointer;width:100%;width:132px;margin-left:4px">'); for(var i=0;i<PANELTABLEROW;i++){ output.push("<tr>"); for(var j=0;j<PANELTABLECOL;j++){ output.push('<td style="width:10px" onclick="CKEDITOR.tools.callFunction(', fn2, ',event);"> </td>'); } output.push("</tr>"); } output.push('</table>'); output.push("<span style='width:100%; display:block; clear:both;'>"); output.push("<input type='button' value='"+lang.title+"' onclick='CKEDITOR.instances."+editor.name+".execCommand( \"table\" );' style='width:100%; height:25px; overflow:hidden; border:1px solid #316ac5;background:#dff1ff;cursor:pointer;'/>"); output.push("</span>"); return output.join(""); } var makeElement = function( name ){ return new CKEDITOR.dom.element( name, editor.document ); }; //插入基本参数表格 function insertTable(rows,cols){ var selection = editor.getSelection(); var table = makeElement( 'table' ); var tbody = table.append( makeElement( 'tbody' ) ), rows = parseInt( rows, 10 ) || 0, cols = parseInt( cols, 10 ) || 0; for ( var i = 0 ; i < rows ; i++ ){ var row = tbody.append( makeElement( 'tr' ) ); for ( var j = 0 ; j < cols ; j++ ){ var cell = row.append( makeElement( 'td' ) ); if ( !CKEDITOR.env.ie ) cell.append( makeElement( 'br' ) ); } } table.setAttribute( 'cellSpacing', 1 ); table.setAttribute( 'cellpadding', 1 ); table.setAttribute( 'border', 1 ); table.setAttribute( 'style', "width: 200px;" ); editor.insertElement( table ); } // If the "menu" plugin is loaded, register the menu items. if ( editor.addMenuItems ) { editor.addMenuItems( { table : { label : lang.menu, command : 'tableProperties', group : 'table', order : 5 }, tabledelete : { label : lang.deleteTable, command : 'tableDelete', group : 'table', order : 1 } } ); } editor.on( 'doubleclick', function( evt ) { var element = evt.data.element; if ( element.is( 'table' ) ) evt.data.dialog = 'tableProperties'; }); // If the "contextmenu" plugin is loaded, register the listeners. if ( editor.contextMenu ) { editor.contextMenu.addListener( function( element, selection ) { if ( !element ) return null; var isTable = element.is( 'table' ) || element.hasAscendant( 'table' ); if ( isTable ) { return { tabledelete : CKEDITOR.TRISTATE_OFF, table : CKEDITOR.TRISTATE_OFF }; } return null; } ); } } } );
?
使用:
???? 覆盖plugins\table\plugin.js
1 楼
williham
2012-02-23
用不了啊