| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /*jslint nomen: false*/
- /*global Trex, $tom, $tx, _FALSE, _NULL, _TRUE */
- Trex.Table.Delete = Trex.Class.create({
- initialize: function (editor/*, config*/) {
- var canvas;
- canvas = editor.getCanvas();
-
- this.wysiwygPanel = canvas.getPanel(Trex.Canvas.__WYSIWYG_MODE);
- },
- /**
- * deleteRow
- * @param {Trex.Table.Selector} tableSelector
- */
- deleteRow: function (tableSelector) {
- var boundary;
- boundary = tableSelector.getSelected();
- if (boundary.isValid()) {
- this.deleteRowOneByOne(tableSelector);
- tableSelector.reset();
- this.deleteEmptyTableByTableSelector(tableSelector);
- }
- },
- /**
- * @private
- * @param {Trex.Table.Selector} tableSelector
- */
- deleteRowOneByOne: function (tableSelector) {
- var deleteStartIndex, count, boundary, indexer;
- boundary = tableSelector.getSelected();
- deleteStartIndex = boundary.top;
- count = boundary.bottom - boundary.top + 1;
- while (0 < count) {
- tableSelector.reloadIndexer();
- indexer = tableSelector.getIndexer();
- this.deleteRowByIndex(indexer, deleteStartIndex);
- count -= 1;
- }
- if (deleteStartIndex === 0) {
- this.drawTopBorder(tableSelector);
- }
- },
- drawTopBorder: function (tableSelector) {
- var indexer, tdArr, len, i, td;
- tableSelector.reloadIndexer();
- indexer = tableSelector.getIndexer();
- tdArr = indexer.getTdArrHasTop(0);
- len = tdArr.length;
- for (i = 0; i < len; i += 1) {
- td = tdArr[i];
- if (td.style.borderTop === "" && td.style.borderBottom !== "") {
- td.style.borderTop = td.style.borderBottom;
- }
- }
- },
- /**
- * @private
- * @param {Trex.TableUtil.Indexer} indexer
- * @param {number} index
- */
- deleteRowByIndex: function (indexer, index) {
- var tdArr, hasTopTdArr, len, tr;
- tdArr = this.getTdArrByRowIndex(indexer, index);
- hasTopTdArr = this.getTdArrByHasTop(indexer, index);
- len = tdArr.length;
- if (0 < len) {
- tr = $tom.parent(tdArr[0]);
- this.deleteTdInDeleteRow(tdArr, hasTopTdArr, tr, indexer);
- $tom.remove(tr);
- }
- },
- /**
- * @private
- * @param {Trex.TableUtil.Indexer} indexer
- * @param {number} index
- */
- getTdArrByRowIndex: function (indexer, index) {
- return indexer.getTdArr(new Trex.TableUtil.Boundary({
- top: index,
- right: indexer.getColSize() - 1,
- bottom: index,
- left: 0
- }));
- },
- /**
- * @private
- * @param {Trex.TableUtil.Indexer} indexer
- * @param {number} index
- */
- getTdArrByHasTop: function (indexer, index) {
- return indexer.getTdArrHasTop(index);
- },
- /**
- *
- * @param {Array} tdArr
- * @param {Array} hasTopTdArr
- * @param {Element} tr
- * @param {Trex.TableUtil.Indexer} indexer
- */
- deleteTdInDeleteRow: function (tdArr, hasTopTdArr, tr, indexer) {
- var len, i, td;
- len = tdArr.length;
- for (i = 0; i < len; i += 1) {
- td = tdArr[i];
- if (1 < td.rowSpan) {
- td.rowSpan -= 1;
- this.reduceHeightAsRow(td, tr);
- if (hasTopTdArr.contains(td)) {
- this.shiftRowOfTd(td, indexer);
- }
- } else {
- $tom.remove(td);
- }
- }
- },
- reduceHeightAsRow: function (td, tr) {
- var styleHeight, newHeight;
- if (td.style.height) {
- styleHeight = parseInt(td.style.height, 10);
- newHeight = styleHeight - tr.offsetHeight;
- if (0 < newHeight) {
- $tom.setStyles(td, {
- height: newHeight + "px"
- }, _TRUE);
- }
- }
- },
- /**
- * @private
- * @param {Eelement} td
- * @param {Trex.TableUtil.Indexer} indexer
- */
- shiftRowOfTd: function (td, indexer) {
- var tr, trForInsert, tdForInsert;
- tr = $tom.parent(td);
- trForInsert = $tom.next(tr, "tr");
- tdForInsert = this.getTdForInsert(td, trForInsert, indexer);
- if (tdForInsert) {
- $tom.insertAt(td, tdForInsert);
- } else {
- $tom.append(trForInsert, td);
- }
- },
- /**
- * @private
- * @param {Element} td
- * @param {Element} trForInsert
- * @param {Trex.TableUtil.Indexer} indexer
- */
- getTdForInsert: function (td, trForInsert, indexer) {
- var currentBoundary, colForInsert, cells, len, i, cell, cellBoundary;
- currentBoundary = indexer.getBoundary(td);
- colForInsert = currentBoundary.left;
- cells = trForInsert.cells;
- len = cells.length;
- for (i = 0; i < len; i += 1) {
- cell = cells[i];
- cellBoundary = indexer.getBoundary(cell);
- if (colForInsert <= cellBoundary.left) {
- return cell;
- }
- }
- return _NULL;
- },
- /**
- * @private
- * @param {Trex.Table.Selector} tableSelector
- */
- deleteEmptyTableByTableSelector: function (tableSelector) {
- var indexer, table;
- indexer = tableSelector.getIndexer();
- table = indexer.table;
- if (table.rows.length === 0) {
- $tom.remove(table);
- }
- },
- /**
- * deleteCol
- * @param {Trex.Table.Selector} tableSelector
- */
- deleteCol: function (tableSelector) {
- var boundary;
- boundary = tableSelector.getSelected();
- if (boundary.isValid()) {
- this.deleteColOneByOne(tableSelector);
- tableSelector.reset();
- this.deleteEmptyTableByTableSelector(tableSelector);
- }
- },
- /**
- * @private
- * @param {Trex.Table.Selector} tableSelector
- */
- deleteColOneByOne: function (tableSelector) {
- var deleteStartIndex, count, boundary, indexer;
- boundary = tableSelector.getSelected();
- deleteStartIndex = boundary.left;
- count = boundary.right - boundary.left + 1;
- while (0 < count) {
- tableSelector.reloadIndexer();
- indexer = tableSelector.getIndexer();
- this.deleteColByIndex(indexer, deleteStartIndex);
- count -= 1;
- }
- if (deleteStartIndex === 0) {
- this.drawLeftBorder(tableSelector);
- }
- },
- drawLeftBorder: function (tableSelector) {
- var indexer, tdArr, len, i, td;
- tableSelector.reloadIndexer();
- indexer = tableSelector.getIndexer();
- tdArr = indexer.getTdArrHasLeft(0);
- len = tdArr.length;
- for (i = 0; i < len; i += 1) {
- td = tdArr[i];
- if (td.style.borderLeft === "" && td.style.borderRight !== "") {
- td.style.borderLeft = td.style.borderRight;
- }
- }
- },
- /**
- * @private
- * @param {Trex.TableUtil.Indexer} indexer
- * @param {number} index
- */
- deleteColByIndex: function (indexer, index) {
- var tdArr, len, i, td;
- tdArr = this.getTdArrByColIndex(indexer, index);
- len = tdArr.length;
- for (i = 0; i < len; i += 1) {
- td = tdArr[i];
- if (1 < td.colSpan) {
- td.colSpan -= 1;
- //TODO.azki width 조절..?
- } else {
- $tom.remove(td);
- }
- }
- },
- getTdArrByColIndex: function (indexer, index) {
- return indexer.getTdArr(new Trex.TableUtil.Boundary({
- top: 0,
- right: index,
- bottom: indexer.getRowSize() - 1,
- left: index
- }));
- }
- });
|