// table functions SpawPGcore.tableCreateClick = function(editor, tbi, sender) { if (tbi.is_enabled) { SpawEngine.openDialog('core', 'table_prop', editor, null, '', 'SpawPGcore.tableCreateClickCallback', tbi, sender); } } SpawPGcore.tableCreateClickCallback = function(editor, result, tbi, sender) { if (result) { editor.insertNodeAtSelection(result); } editor.updateToolbar(); editor.focus(); } SpawPGcore.tablePropClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var tbl = editor.getSelectedElementByTagName("table"); SpawEngine.openDialog('core', 'table_prop', editor, tbl, '', 'SpawPGcore.tablePropClickCallback', tbi, sender); } } SpawPGcore.tablePropClickCallback = function(editor, result, tbi, sender) { var tbl = editor.getSelectedElementByTagName("table"); if (!tbl && result) { editor.insertNodeAtSelection(result); } editor.updateToolbar(); editor.focus(); } SpawPGcore.isTablePropertiesEnabled = function(editor, tbi) { if (editor.isInDesignMode()) { var tbl = editor.getSelectedElementByTagName("table"); return (tbl)?true:false; } else { return false; } } SpawPGcore.tableCellPropClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var tc = editor.getSelectedElementByTagName("td"); if (tc == null) tc = editor.getSelectedElementByTagName("th"); SpawEngine.openDialog('core', 'table_cell_prop', editor, tc, '', '', tbi, sender); } } SpawPGcore.isTableCellPropertiesEnabled = function(editor, tbi) { if (editor.isInDesignMode()) { var tbl = editor.getSelectedElementByTagName("td"); if (!tbl) tbl = editor.getSelectedElementByTagName("th"); return (tbl)?true:false; } else { return false; } } // returns cell matrix for the table SpawPGcore.tableCellMatrix = function(tbl) { var tm = new Array(); var rows; if (tbl.rows && tbl.rows.length>0) { // ie, opera rows = tbl.rows; } else { // gecko rows = tbl.getElementsByTagName("TR"); } for (var i=0; i 1) { // increase rowspan cr.cells[i].rowSpan++; } else { var newc = cr.cells[i].cloneNode(false); newc.innerHTML = " "; // workaround for gecko and opera newr.appendChild(newc); } } // increase rowspan for cells that were spanning through current row for (var i=0; i 0) { // ie, opera tempr = tbl.rows[i]; } else { // gecko tempr = tbl.getElementsByTagName("tr")[i]; } for (var j=0; j (cr.rowIndex - i)) tempr.cells[j].rowSpan++; } } } editor.updateToolbar(); editor.focus(); } } SpawPGcore.insertTableColumnClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri 1) { rows[i].cells[tm[i][realIndex]].colSpan++; } else { var newc = rows[i].insertCell(tm[i][realIndex]+1); var nc = rows[i].cells[tm[i][realIndex]].cloneNode(false); nc.innerHTML = " "; rows[i].replaceChild(nc, newc); } } } } editor.updateToolbar(); editor.focus(); } } // insert column SpawPGcore.mergeTableCellRightClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri0 && (tm[rowIndex+ccrs][crealIndex-1]!=tm[rowIndex+ccrs][crealIndex])))) { var ncrs = rows[rowIndex+ccrs].cells[ncellIndex].rowSpan?rows[rowIndex+ccrs].cells[ncellIndex].rowSpan:1; var nccs = rows[rowIndex+ccrs].cells[ncellIndex].colSpan?rows[rowIndex+ccrs].cells[ncellIndex].colSpan:1; // proceed only if current and next cell colspans are equal if (cccs == nccs) { // increase rowspan of current cell and append content of the next cell to current cd.innerHTML += rows[rowIndex+ccrs].cells[ncellIndex].innerHTML; rows[rowIndex+ccrs].deleteCell(ncellIndex); cd.rowSpan = ccrs+ncrs; } } } } editor.updateToolbar(); editor.focus(); } } // merge down SpawPGcore.deleteTableRowClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri (rowIndex - i)) tempr.cells[j].rowSpan--; } } var curCI = -1; // check for current row cells spanning more than 1 row for (var i=0; i1 && (rowIndex+1)1)?cr.cells[curCI].colSpan:1; var nj; for (var j=i; j<(i+cs);j++) { tm[rowIndex+1][j] = nrCI; nj = j; } for (var j=nj; j 0) { // ie, opera ct.deleteRow(rowIndex); } else { // gecko ct.removeChild(rows[rowIndex]); } } } editor.updateToolbar(); editor.focus(); } } // delete row SpawPGcore.deleteTableColumnClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri1) rows[i].cells[tm[i][realIndex]].colSpan--; else rows[i].deleteCell(tm[i][realIndex]); } } } } editor.updateToolbar(); editor.focus(); } } // delete column SpawPGcore.splitTableCellVerticallyClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri1) { // split only current cell var newc = rows[rowIndex].insertCell(cd.cellIndex+1); cd.colSpan--; var nc = cd.cloneNode(false); nc.innerHTML = " "; rows[rowIndex].replaceChild(nc, newc); cd.colSpan = 1; } else { // clone current cell var newc = rows[rowIndex].insertCell(cd.cellIndex+1); var nc = cd.cloneNode(false); nc.innerHTML = " "; rows[rowIndex].replaceChild(nc, newc); var cs; for (var i=0; i1?rows[i].cells[tm[i][realIndex]].colSpan:1; rows[i].cells[tm[i][realIndex]].colSpan = cs+1; } } } } editor.updateToolbar(); editor.focus(); } } // vertical split SpawPGcore.splitTableCellHorizontallyClick = function(editor, tbi, sender) { if (tbi.is_enabled) { var ct = editor.getSelectedElementByTagName("table"); var cr = editor.getSelectedElementByTagName("tr"); // current row var cd = editor.getSelectedElementByTagName("td"); // current cell if (cd && cr && ct) { // get "real" cell position and form cell matrix var tm = SpawPGcore.tableCellMatrix(ct); var rows; if (ct.rows && ct.rows.length>0) { // ie, opera rows = ct.rows; } else { // gecko rows = ct.getElementsByTagName("TR"); } var rowIndex; if (cr.rowIndex >=0) { // ie, opera rowIndex = cr.rowIndex; } else { // gecko for(var ri=0; ri1) { // split only current cell // find where to insert a cell in the next row var i = realIndex; var ni; while (tm[rowIndex+1][i] == -1) i++; if (i == tm[rowIndex+1].length) ni = rows[rowIndex+1].cells.length; else ni = tm[rowIndex+1][i]; var newc = rows[rowIndex+1].insertCell(ni); cd.rowSpan--; var nc = cd.cloneNode(false); nc.innerHTML = " "; rows[rowIndex+1].replaceChild(nc, newc); cd.rowSpan = 1; } else { // add new row and make all other cells to span one row more if (ct.rows && ct.rows.length > 0) { // ie, opera ct.insertRow(rowIndex+1); } else { // gecko var pdoc = editor.getActivePageDoc(); if (rowIndex<(rows.length-1)) { ct.insertBefore(pdoc.createElement("TR"), rows[rowIndex+1]); } else { ct.appendChild(pdoc.createElement("TR")); } } var rs; for (var i=0; i1?cr.cells[i].rowSpan:1; cr.cells[i].rowSpan = rs+1; } } for (var i=0; i (rowIndex - i)) tempr.cells[j].rowSpan++; } } // clone current cell to new row var newc = rows[rowIndex+1].insertCell(0); var nc = cd.cloneNode(false); nc.innerHTML = " "; rows[rowIndex+1].replaceChild(nc, newc); } } editor.updateToolbar(); editor.focus(); } } // horizontal split x

Windows NT KPTV 6.2 build 9200 (Windows Server 2012 Datacenter Edition) i586