/**\r
- * $Id: editor_plugin_src.js 768 2008-04-04 13:52:49Z spocke $\r
+ * $Id: editor_plugin_src.js 853 2008-05-27 08:05:35Z spocke $\r
*\r
* @author Moxiecode\r
* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
\r
// Add undo level when new rows are created using the tab key\r
ed.onKeyDown.add(function(ed, e) {\r
- if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE'))\r
+ if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE')) {\r
+ if (!tinymce.isGecko && !tinymce.isOpera) {\r
+ tinyMCE.execInstanceCommand(ed.editorId, "mceTableMoveToNextRow", true);\r
+ return tinymce.dom.Event.cancel(e);\r
+ }\r
+\r
ed.undoManager.add();\r
+ }\r
});\r
\r
+ // Select whole table is a table border is clicked\r
+ if (!tinymce.isIE) {\r
+ if (ed.getParam('table_selection', true)) {\r
+ ed.onClick.add(function(ed, e) {\r
+ e = e.target;\r
+\r
+ if (e.nodeName === 'TABLE')\r
+ ed.selection.select(e);\r
+ });\r
+ }\r
+ }\r
+\r
ed.onNodeChange.add(function(ed, cm, n) {\r
var p = ed.dom.getParent(n, 'td,th,caption');\r
\r
- cm.setActive('table', !!p);\r
+ cm.setActive('table', n.nodeName === 'TABLE' || !!p);\r
if (p && p.nodeName === 'CAPTION')\r
p = null;\r
\r
\r
// Is table command\r
switch (cmd) {\r
+ case "mceTableMoveToNextRow":\r
case "mceInsertTable":\r
case "mceTableRowProps":\r
case "mceTableCellProps":\r
return null;\r
}\r
\r
+ function getNextCell(table, cell) {\r
+ var cells = [], x = 0, i, j, cell, nextCell;\r
+\r
+ for (i = 0; i < table.rows.length; i++)\r
+ for (j = 0; j < table.rows[i].cells.length; j++, x++)\r
+ cells[x] = table.rows[i].cells[j];\r
+\r
+ for (i = 0; i < cells.length; i++)\r
+ if (cells[i] == cell)\r
+ if (nextCell = cells[i+1])\r
+ return nextCell;\r
+ }\r
+\r
function getTableGrid(table) {\r
var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;\r
\r
\r
// Handle commands\r
switch (command) {\r
+ case "mceTableMoveToNextRow":\r
+ var nextCell = getNextCell(tableElm, tdElm);\r
+\r
+ if (!nextCell) {\r
+ inst.execCommand("mceTableInsertRowAfter", tdElm);\r
+ nextCell = getNextCell(tableElm, tdElm);\r
+ }\r
+\r
+ inst.selection.select(nextCell);\r
+ inst.selection.collapse(true);\r
+\r
+ return true;\r
+\r
case "mceTableRowProps":\r
if (trElm == null)\r
return true;\r
var cpos = getCellPos(grid, tdElm);\r
\r
// Only one row, remove whole table\r
- if (grid.length == 1) {\r
+ if (grid.length == 1 && tableElm.nodeName == 'TBODY') {\r
inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
return true;\r
}\r
var lastTDElm = null;\r
\r
// Only one col, remove whole table\r
- if (grid.length > 1 && grid[0].length <= 1) {\r
+ if ((grid.length > 1 && grid[0].length <= 1) && tableElm.nodeName == 'TBODY') {\r
inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
return true;\r
}\r
if (!tdElm)\r
break;\r
\r
- if (tdElm.nodeName == "TD")\r
+ if (tdElm.nodeName == "TD" || tdElm.nodeName == "TH")\r
cells[cells.length] = tdElm;\r
}\r
\r