mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-21 04:09:55 +09:00
17223554 : xquared upgrade to 0.7
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4968 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
5956e254e7
commit
7c3b336e41
59 changed files with 34562 additions and 8454 deletions
215
modules/editor/skins/xquared/javascripts/RichTable.js
Normal file
215
modules/editor/skins/xquared/javascripts/RichTable.js
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
/**
|
||||
* @requires Xquared.js
|
||||
* @requires rdom/Base.js
|
||||
*/
|
||||
xq.RichTable = xq.Class(/** @lends xq.RichTable.prototype */{
|
||||
/**
|
||||
* TODO: Add description
|
||||
*
|
||||
* @constructs
|
||||
*/
|
||||
initialize: function(rdom, table) {
|
||||
xq.addToFinalizeQueue(this);
|
||||
|
||||
this.rdom = rdom;
|
||||
this.table = table;
|
||||
},
|
||||
insertNewRowAt: function(tr, where) {
|
||||
var row = this.rdom.createElement("TR");
|
||||
var cells = tr.cells;
|
||||
for(var i = 0; i < cells.length; i++) {
|
||||
var cell = this.rdom.createElement(cells[i].nodeName);
|
||||
this.rdom.correctEmptyElement(cell);
|
||||
row.appendChild(cell);
|
||||
}
|
||||
return this.rdom.insertNodeAt(row, tr, where);
|
||||
},
|
||||
insertNewCellAt: function(cell, where) {
|
||||
// collect cells;
|
||||
var cells = [];
|
||||
var x = this.getXIndexOf(cell);
|
||||
var y = 0;
|
||||
while(true) {
|
||||
var cur = this.getCellAt(x, y);
|
||||
if(!cur) break;
|
||||
cells.push(cur);
|
||||
y++;
|
||||
}
|
||||
|
||||
// insert new cells
|
||||
for(var i = 0; i < cells.length; i++) {
|
||||
var cell = this.rdom.createElement(cells[i].nodeName);
|
||||
this.rdom.correctEmptyElement(cell);
|
||||
this.rdom.insertNodeAt(cell, cells[i], where);
|
||||
}
|
||||
},
|
||||
deleteRow: function(tr) {
|
||||
return this.rdom.removeBlock(tr);
|
||||
},
|
||||
deleteCell: function(cell) {
|
||||
if(!cell.previousSibling && !cell.nextSibling) {
|
||||
this.rdom.deleteNode(this.table);
|
||||
return;
|
||||
}
|
||||
|
||||
// collect cells;
|
||||
var cells = [];
|
||||
var x = this.getXIndexOf(cell);
|
||||
var y = 0;
|
||||
while(true) {
|
||||
var cur = this.getCellAt(x, y);
|
||||
if(!cur) break;
|
||||
cells.push(cur);
|
||||
y++;
|
||||
}
|
||||
|
||||
for(var i = 0; i < cells.length; i++) {
|
||||
this.rdom.deleteNode(cells[i]);
|
||||
}
|
||||
},
|
||||
getPreviousCellOf: function(cell) {
|
||||
if(cell.previousSibling) return cell.previousSibling;
|
||||
var adjRow = this.getPreviousRowOf(cell.parentNode);
|
||||
if(adjRow) return adjRow.lastChild;
|
||||
return null;
|
||||
},
|
||||
getNextCellOf: function(cell) {
|
||||
if(cell.nextSibling) return cell.nextSibling;
|
||||
var adjRow = this.getNextRowOf(cell.parentNode);
|
||||
if(adjRow) return adjRow.firstChild;
|
||||
return null;
|
||||
},
|
||||
getPreviousRowOf: function(row) {
|
||||
if(row.previousSibling) return row.previousSibling;
|
||||
var rowContainer = row.parentNode;
|
||||
if(rowContainer.previousSibling && rowContainer.previousSibling.lastChild) return rowContainer.previousSibling.lastChild;
|
||||
return null;
|
||||
},
|
||||
getNextRowOf: function(row) {
|
||||
if(row.nextSibling) return row.nextSibling;
|
||||
var rowContainer = row.parentNode;
|
||||
if(rowContainer.nextSibling && rowContainer.nextSibling.firstChild) return rowContainer.nextSibling.firstChild;
|
||||
return null;
|
||||
},
|
||||
getAboveCellOf: function(cell) {
|
||||
var row = this.getPreviousRowOf(cell.parentNode);
|
||||
if(!row) return null;
|
||||
|
||||
var x = this.getXIndexOf(cell);
|
||||
return row.cells[x];
|
||||
},
|
||||
getBelowCellOf: function(cell) {
|
||||
var row = this.getNextRowOf(cell.parentNode);
|
||||
if(!row) return null;
|
||||
|
||||
var x = this.getXIndexOf(cell);
|
||||
return row.cells[x];
|
||||
},
|
||||
getXIndexOf: function(cell) {
|
||||
var row = cell.parentNode;
|
||||
for(var i = 0; i < row.cells.length; i++) {
|
||||
if(row.cells[i] === cell) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
},
|
||||
getYIndexOf: function(cell) {
|
||||
var y = -1;
|
||||
|
||||
// find y
|
||||
var group = row.parentNode;
|
||||
for(var i = 0; i <group.rows.length; i++) {
|
||||
if(group.rows[i] === row) {
|
||||
y = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(this.hasHeadingAtTop() && group.nodeName === "TBODY") y = y + 1;
|
||||
|
||||
return y;
|
||||
},
|
||||
/**
|
||||
* TODO: Not used. Delete or not?
|
||||
*/
|
||||
getLocationOf: function(cell) {
|
||||
var x = this.getXIndexOf(cell);
|
||||
var y = this.getYIndexOf(cell);
|
||||
return {x:x, y:y};
|
||||
},
|
||||
getCellAt: function(col, row) {
|
||||
var row = this.getRowAt(row);
|
||||
return (row && row.cells.length > col) ? row.cells[col] : null;
|
||||
},
|
||||
getRowAt: function(index) {
|
||||
if(this.hasHeadingAtTop()) {
|
||||
return index === 0 ? this.table.tHead.rows[0] : this.table.tBodies[0].rows[index - 1];
|
||||
} else {
|
||||
var rows = this.table.tBodies[0].rows;
|
||||
return (rows.length > index) ? rows[index] : null;
|
||||
}
|
||||
},
|
||||
getDom: function() {
|
||||
return this.table;
|
||||
},
|
||||
hasHeadingAtTop: function() {
|
||||
return !!(this.table.tHead && this.table.tHead.rows[0]);
|
||||
},
|
||||
hasHeadingAtLeft: function() {
|
||||
return this.table.tBodies[0].rows[0].cells[0].nodeName === "TH";
|
||||
},
|
||||
correctEmptyCells: function() {
|
||||
var cells = xq.$A(this.table.getElementsByTagName("TH"));
|
||||
var tds = xq.$A(this.table.getElementsByTagName("TD"));
|
||||
for(var i = 0; i < tds.length; i++) {
|
||||
cells.push(tds[i]);
|
||||
}
|
||||
|
||||
for(var i = 0; i < cells.length; i++) {
|
||||
if(this.rdom.isEmptyBlock(cells[i])) this.rdom.correctEmptyElement(cells[i])
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
xq.RichTable.create = function(rdom, cols, rows, headerPositions) {
|
||||
if(["t", "tl", "lt"].indexOf(headerPositions) !== -1) var headingAtTop = true
|
||||
if(["l", "tl", "lt"].indexOf(headerPositions) !== -1) var headingAtLeft = true
|
||||
|
||||
var sb = []
|
||||
sb.push('<table class="datatable">')
|
||||
|
||||
// thead
|
||||
if(headingAtTop) {
|
||||
sb.push('<thead><tr>')
|
||||
for(var i = 0; i < cols; i++) sb.push('<th></th>')
|
||||
sb.push('</tr></thead>')
|
||||
rows -= 1
|
||||
}
|
||||
|
||||
// tbody
|
||||
sb.push('<tbody>')
|
||||
for(var i = 0; i < rows; i++) {
|
||||
sb.push('<tr>')
|
||||
|
||||
for(var j = 0; j < cols; j++) {
|
||||
if(headingAtLeft && j === 0) {
|
||||
sb.push('<th></th>')
|
||||
} else {
|
||||
sb.push('<td></td>')
|
||||
}
|
||||
}
|
||||
|
||||
sb.push('</tr>')
|
||||
}
|
||||
sb.push('</tbody>')
|
||||
|
||||
sb.push('</table>')
|
||||
|
||||
// create DOM element
|
||||
var container = rdom.createElement("div");
|
||||
container.innerHTML = sb.join("");
|
||||
|
||||
// correct empty cells and return
|
||||
var rtable = new xq.RichTable(rdom, container.firstChild);
|
||||
rtable.correctEmptyCells();
|
||||
return rtable;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue