table.core.js 15.3 KB
Newer Older
T
taoqili 已提交
1 2 3 4 5 6 7
/**
 * Created with JetBrains PhpStorm.
 * User: taoqili
 * Date: 13-2-21
 * Time: 下午1:31
 * To change this template use File | Settings | File Templates.
 */
T
taoqili 已提交
8 9
function getTable(str) {
    var div = document.getElementById("testTable");
T
taoqili 已提交
10
    if (!div) {
T
taoqili 已提交
11 12 13 14
        div = document.createElement("div");
        div.id = "testTable";
        document.body.appendChild(div);
    }
T
taoqili 已提交
15
    div.innerHTML = "<table border='1'>" + str + "</table>";
T
taoqili 已提交
16 17
    return div.firstChild;
}
T
taoqili 已提交
18
UT = UE.UETable;
T
taoqili 已提交
19
test("create UETable", function () {
T
taoqili 已提交
20
    var table = getTable("<tr><td>ddd</td></tr>"),
T
taoqili 已提交
21
        ut = new UT(table);
T
taoqili 已提交
22 23
    ok(ut.table === table, "UT对象创建成功");
    ok(ut.colsNum == 1 && ut.rowsNum == 1, "单元格行、列数为1");
T
taoqili 已提交
24 25
});

T
taoqili 已提交
26
test("getMaxRows", function () {
T
taoqili 已提交
27
    var table = getTable("<tr><td>1</td><td>2</td><td>3</td></tr>" +
T
taoqili 已提交
28
            "<tr><td>1</td><td>2</td><td>3</td></tr>"),
T
taoqili 已提交
29
        ut = new UT(table);
T
taoqili 已提交
30
    var maxRows = ut.getMaxRows();
T
taoqili 已提交
31
    equal(maxRows, 2, "最大行数为2");
T
taoqili 已提交
32
    table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td rowspan='2'>3</td></tr>" +
T
taoqili 已提交
33
        "<tr><td>2</td></tr>");
T
taoqili 已提交
34 35
    ut = new UT(table);
    maxRows = ut.getMaxRows();
T
taoqili 已提交
36
    equal(maxRows, 3, "最大行数为3");
T
taoqili 已提交
37
});
T
taoqili 已提交
38
test("getMaxCols", function () {
T
taoqili 已提交
39
    var table = getTable("<tr><td>1</td><td>2</td><td>3</td></tr>" +
T
taoqili 已提交
40
            "<tr><td>1</td><td>2</td><td>3</td></tr>"),
T
taoqili 已提交
41 42
        ut = new UT(table);
    var maxCols = ut.getMaxCols();
T
taoqili 已提交
43
    equal(maxCols, 3, "最大列数为3");
T
taoqili 已提交
44

T
taoqili 已提交
45 46 47 48
    table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td rowspan='2'>3</td></tr>" +
        "<tr><td>2</td><td colspan='3'></td></tr>");
    ut = new UT(table);
    maxCols = ut.getMaxCols();
T
taoqili 已提交
49
    equal(maxCols, 6, "最大列数为6");
T
taoqili 已提交
50 51
});

Y
yancend 已提交
52
test("ie9 active trace 3728 getSameEndPosCells", function () {
Y
yancend 已提交
53
    if(ua.browser.ie==9)return;
Y
yancend 已提交
54
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr><tr><td>2</td><td>3</td></tr>"),
T
taoqili 已提交
55 56
        ut = new UT(table);
    var cell = table.rows[0].cells[0],
T
taoqili 已提交
57 58
        cells1 = ut.getSameEndPosCells(cell, "x"),
        cells2 = ut.getSameEndPosCells(cell, "y");
T
taoqili 已提交
59 60
    ok(cells1.length == 1, "获取到同样X轴结尾位置的cell1个");
    ok(cells2.length == 2, "获取到同样Y轴结尾位置的cell2个");
T
taoqili 已提交
61 62
});

T
taoqili 已提交
63
test("getHSideCell", function () {
T
taoqili 已提交
64
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
T
taoqili 已提交
65
            "<tr><td>2</td><td>3</td></tr>"),
T
taoqili 已提交
66 67 68 69
        ut = new UT(table);
    var rows = table.rows,
        cell = rows[1].cells[1],
        cell1 = ut.getHSideCell(cell),
T
taoqili 已提交
70 71 72 73
        cell2 = ut.getHSideCell(cell, true);
    equal(cell1, rows[1].cells[0], "左边单元格");
    equal(cell2, null, "位于右边缘的单元格无右邻居单元格");
    equal(ut.getHSideCell(rows[0][0]), null, "位于左边缘的单元格无左邻居单元格");
T
taoqili 已提交
74 75
});

T
taoqili 已提交
76
test("getVSideCell", function () {
T
taoqili 已提交
77 78 79 80 81 82
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
            "<tr><td>2</td><td>3</td></tr>"),
        ut = new UT(table);
    var rows = table.rows,
        cell = rows[1].cells[1],
        cell1 = ut.getVSideCell(cell),
T
taoqili 已提交
83 84 85 86 87
        cell2 = ut.getVSideCell(cell, true),
        cell3 = ut.getVSideCell(cell, true, true);
    equal(cell1, rows[0].cells[2], "上边单元格");
    equal(cell2, null, "位于下边缘的单元格无下邻居单元格");
    equal(cell3, null, "位于左边缘的单元格无左邻居单元格");
T
taoqili 已提交
88
});
T
taoqili 已提交
89
test("setCellContent", function () {
T
taoqili 已提交
90 91 92 93
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
            "<tr><td>2</td><td>3</td></tr>"),
        ut = new UT(table);
    var cell = table.rows[0].cells[0];
T
taoqili 已提交
94 95
    ut.setCellContent(cell, "这是测试内容");
    equal(cell.innerHTML, "这是测试内容", "设置了正确的内容");
T
taoqili 已提交
96
    ut.setCellContent(cell);
T
taoqili 已提交
97
    equal(cell.innerHTML, browser.ie ? domUtils.fillChar : "<br>");
T
taoqili 已提交
98 99
});

T
taoqili 已提交
100
test("cloneCell", function () {
T
taoqili 已提交
101 102 103 104 105
    var table = getTable("<tr><td style='border-top-color: red;border-bottom-color: green' rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
            "<tr><td class='selectedClass'>2</td><td>3</td></tr>"),
        ut = new UT(table);

    var cell = ut.cloneCell(table.rows[0].cells[0]);
T
taoqili 已提交
106 107 108 109
    equal(cell.rowSpan, 2, "clone了一个2行一列的单元格");
    equal(cell.style.borderTopColor, "green", "上边框的颜色将会被下边框取代");
    cell = ut.cloneCell(table.rows[0].cells[0], true);
    ok(cell.rowSpan, 1, "忽略被合并单元格时将会充值单元格的rowspan和colspan为1")
T
taoqili 已提交
110 111
});

T
taoqili 已提交
112

T
taoqili 已提交
113
test("getCellsRange、getCells", function () {
T
taoqili 已提交
114 115 116
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
            "<tr><td class='selectedClass'>2</td><td>3</td></tr>"),
        ut = new UT(table);
T
taoqili 已提交
117 118
    var range = ut.getCellsRange(table.rows[0].cells[1], table.rows[1].cells[0]);
    ok(range.beginRowIndex === 0 && range.beginColIndex === 1 && range.endRowIndex === 1 && range.endColIndex === 1, "获取到range")
T
taoqili 已提交
119 120

    var cells = ut.getCells(range);
T
taoqili 已提交
121 122
    ok(cells.length == 2, "获取到2个单元格");
    ok(cells[0] == table.rows[0].cells[1], "第一个单元格存在");
T
taoqili 已提交
123 124
});

T
taoqili 已提交
125
test("insertRow、deleterRow", function () {
T
taoqili 已提交
126 127 128 129 130 131
    var table = getTable("<tr><td rowspan='2'>1</td><td>2</td><td>3</td></tr>" +
            "<tr><td class='selectedClass'>2</td><td>3</td></tr>"),
        ut = new UT(table);

    var cellPrototype = document.createElement("td");
    cellPrototype.innerHTML = "aa";
T
taoqili 已提交
132 133 134 135
    cellPrototype.setAttribute("vAlign", "top");
    ut.insertRow(2, cellPrototype);
    ok(table.rows.length === 3, "行数变成3行");
    ok(table.rows[2].cells[0].getAttribute("vAlign") == "top", "新插入的单元格中包含原型单元格中的属性");
T
taoqili 已提交
136

T
taoqili 已提交
137 138
});

T
taoqili 已提交
139
test("mergeRight,mergeDown", function () {
T
taoqili 已提交
140
    var table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td>3</td><td rowspan='2'>4</td><td>5</td><td>6</td></tr>" +
T
taoqili 已提交
141 142
            "<tr><td>2</td><td>3</td><td>5</td><td>6</td></tr>" +
            "<tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>"),
T
taoqili 已提交
143 144 145
        ut = new UT(table);
    var cell = table.rows[0].cells[1];
    ut.mergeDown(cell);
T
taoqili 已提交
146
    ok(cell.rowSpan === 2, "向下合并成功");
T
taoqili 已提交
147 148

    ut.mergeDown(cell);
T
taoqili 已提交
149
    ok(cell.rowSpan === 3, "向下合并成功");
T
taoqili 已提交
150 151 152

    cell = cell.previousSibling;
    ut.mergeRight(cell);
T
taoqili 已提交
153
    ok(cell.rowSpan === 3 && cell.colSpan === 2, "向右合并成功");
T
taoqili 已提交
154

T
taoqili 已提交
155
    equal(cell.parentNode.rowIndex, 0, "合并到了正确的位置")
T
taoqili 已提交
156
});
T
taoqili 已提交
157 158 159 160 161 162 163 164 165 166 167 168
test("mergeRange",function(){
    var table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td>3</td><td rowspan='2'>4</td><td>5</td><td>6</td></tr>" +
            "<tr><td>2</td><td>3</td><td>5</td><td>6</td></tr>" +
            "<tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>"),
        ut = new UT(table);
    var range = ut.getCellsRange(table.rows[0].cells[1],table.rows[2].cells[3]);
    ut.setSelected(range);
    ut.mergeRange();
    ok(table.rows[0].cells[1].rowSpan===3,"合并选区")

});

T
taoqili 已提交
169
test("split", function () {
T
taoqili 已提交
170
    var table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td>3</td><td rowspan='2' colspan='2'>4</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
171
            "<tr><td>2</td><td>3</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
172 173 174 175 176
            "<tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var cell = table.rows[0].cells[0],
        num = table.getElementsByTagName("td").length;
    ut.splitToCells(cell);
T
taoqili 已提交
177
    ok(cell.rowSpan == 1 && cell.colSpan == 1, "单元格被成功拆分");
T
taoqili 已提交
178 179

    var newNum = table.getElementsByTagName("td").length;
T
taoqili 已提交
180
    ok(num + 2 == newNum, "单元格数量增加了2个");
T
taoqili 已提交
181 182 183

    cell = table.rows[0].cells[3];
    ut.splitToCols(cell);
T
taoqili 已提交
184
    ok(cell.colSpan === 1 && cell.rowSpan == 2, "被拆分成了2列");
T
taoqili 已提交
185 186 187 188


});

T
taoqili 已提交
189
test("selectRow", function () {
T
taoqili 已提交
190
    var table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td>3</td><td rowspan='2' colspan='2'>4</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
191
            "<tr><td>2</td><td>3</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
192 193 194
            "<tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    ut.selectRow(1);
T
taoqili 已提交
195
    equal(ut.selectedTds.length, table.getElementsByTagName("td").length, "选中了所有单元格")
T
taoqili 已提交
196 197
    var cells = table.rows[1].cells,
        flag = false;
T
taoqili 已提交
198 199
    utils.each(cells, function (cell) {
        if (cell.className == "") {
T
taoqili 已提交
200 201 202
            flag = true;
        }
    });
T
taoqili 已提交
203 204
    ok(!flag, "所有单元格都被选中");
    ok(ut.cellsRange.beginRowIndex === 0, "cellsRange正确");
T
taoqili 已提交
205 206

});
T
taoqili 已提交
207
test("selectTable", function () {
T
taoqili 已提交
208
    var table = getTable("<tr><td rowspan='3'>1</td><td>2</td><td>3</td><td rowspan='2' colspan='2'>4</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
209
            "<tr><td>2</td><td>3</td><td>6</td><td>7</td></tr>" +
T
taoqili 已提交
210 211 212
            "<tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    ut.selectTable();
T
taoqili 已提交
213
    ok(ut.selectedTds.length === table.getElementsByTagName("td").length, "选中了整个表格")
T
taoqili 已提交
214 215 216

});

T
taoqili 已提交
217
test("setBackground", function () {
T
taoqili 已提交
218 219 220 221
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
T
taoqili 已提交
222
    ut.setBackground(table.getElementsByTagName("td"), "green");
T
taoqili 已提交
223
    var cell = table.rows[1].cells[1];
T
taoqili 已提交
224
    ok(cell.style.backgroundColor == "green", "单种背景颜色设置成功");
T
taoqili 已提交
225

T
taoqili 已提交
226
    ut.removeBackground(table.getElementsByTagName("td"));
T
taoqili 已提交
227
    ok(cell.style.backgroundColor == "", "背景颜色被清除");
T
taoqili 已提交
228

T
taoqili 已提交
229
    ut.setBackground(table.getElementsByTagName("td"), {
T
taoqili 已提交
230
        repeat:true,
T
taoqili 已提交
231
        colorList:["green", "red"]
T
taoqili 已提交
232
    });
T
taoqili 已提交
233 234 235
    ok(table.rows[0].cells[0].style.backgroundColor == "green", "第一行的单元格为绿色");
    ok(table.rows[1].cells[0].style.backgroundColor == "red", "第二行的单元格为红色");
    ok(table.rows[2].cells[0].style.backgroundColor == "green", "第三行的单元格为绿色");
T
taoqili 已提交
236

T
taoqili 已提交
237
    ut.removeBackground(table.getElementsByTagName("td"));
T
taoqili 已提交
238
    ut.setBackground(table.getElementsByTagName("td"), {
T
taoqili 已提交
239
        repeat:false,
T
taoqili 已提交
240
        colorList:["green", "red"]
T
taoqili 已提交
241
    });
T
taoqili 已提交
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
    ok(table.rows[0].cells[0].style.backgroundColor == "green", "第一行的单元格为绿色");
    ok(table.rows[1].cells[0].style.backgroundColor == "red", "第二行的单元格为红色");
    ok(table.rows[2].cells[0].style.backgroundColor == "", "第三行的单元格没有颜色");

});

test("isFullRow isFullCol", function () {
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var range = ut.getCellsRange(table.rows[0].cells[0], table.rows[1].cells[1]);
    ut.setSelected(range);
    ok(!ut.isFullRow(), "不是整行");
    range = ut.getCellsRange(table.rows[0].cells[0], table.rows[0].cells[5]);
    ut.setSelected(range);
    ok(ut.isFullRow(), "是整行");

    range = ut.getCellsRange(table.rows[0].cells[0], table.rows[2].cells[0]);
    ut.setSelected(range);
    ok(ut.isFullCol(), "是整列");
    range = ut.getCellsRange(table.rows[0].cells[0], table.rows[1].cells[0]);
    ut.setSelected(range);
    ok(!ut.isFullCol(), "不是整列");
});

test("last", function () {
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var cell = table.rows[2].cells[5];
    ok(ut.isLastCell(cell), "是最后一个单元格");
    ok(!ut.isLastCell(table.rows[1].cells[0]), "不是最后一个单元格");
});
T
taoqili 已提交
277
test("getNextCell", function () {
278 279 280 281 282 283
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var cell = table.rows[2].cells[5];
    var newCell = ut.getNextCell(cell);
T
taoqili 已提交
284
    ok(newCell === table.rows[1].cells[5], "找到正确单元格");
285 286
    cell = table.rows[0].cells[4];
    newCell = ut.getNextCell(cell);
T
taoqili 已提交
287 288 289
    ok(!newCell, "顶行不存在nextCell");
    newCell = ut.getNextCell(cell, true);
    ok(newCell === table.rows[1].cells[4], "获取到下一行的单元格");
290 291

});
T
taoqili 已提交
292

293
test("getPreviewCell",function(){
294 295 296 297 298 299
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var cell = table.rows[2].cells[5];
    var newCell = ut.getPreviewCell(cell);
300
    ok(newCell===cell.previousSibling,"找到前置单元格");
T
taoqili 已提交
301
});
T
taoqili 已提交
302

T
taoqili 已提交
303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
test("getLastCell", function () {
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var cell = ut.getLastCell();
    ok(cell === table.rows[2].cells[5], "找到最后一个单元格");
});

test("getTabNextCell", function () {
    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
        ut = new UT(table);
    var rows = table.rows,
        cell = rows[0].cells[0];
    var newCell = ut.getTabNextCell(cell);
    ok(newCell === table.rows[0].cells[1], "找到最后一个单元格");
    newCell = ut.getTabNextCell(rows[0].cells[5]);
    ok(newCell === table.rows[1].cells[0], "找到下一行的第一个单元格");
});

T
taoqili 已提交
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
//test("getSameStartPosXCells", function () {
//    var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
//            "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
//            "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
//        ut = new UT(table);
//    var cell = table.rows[0].cells[1];
//    var cells = ut.getSameStartPosXCells(cell);
//    equal(cells.length, 3, "获取到三个单元格")
//
//    table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
//        "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
//        "<tr><td>21</td><td colspan='2'>2</td><td>4</td><td>6</td><td>7</td></tr>");
//    ut = new UT(table);
//    cells = ut.getSameStartPosXCells(cell);
//    ok(cells.length === 2, "获取到2个单元格");
//
//    cells = ut.getSameStartPosXCells(table.rows[0].cells[0]);
//    ok(cells.length===3,"获取到三个单元格");
//
//});
T
taoqili 已提交
345