table.sort.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. module('plugins.table');
  2. function getTable(str) {
  3. var div = document.getElementById("testTable");
  4. if (!div) {
  5. div = document.createElement("div");
  6. div.id = "testTable";
  7. document.body.appendChild(div);
  8. }
  9. div.innerHTML = "<table border='1'>" + str + "</table>";
  10. return div.firstChild;
  11. }
  12. UT = UE.UETable;
  13. test(" trace 3715 sortTable", function () {
  14. var table = getTable("<tr><td>01</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
  15. "<tr><td>11</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>" +
  16. "<tr><td>21</td><td>2</td><td>3</td><td>4</td><td>6</td><td>7</td></tr>"),
  17. ut = new UT(table);
  18. ut.sortTable(1, function (a, b) {
  19. return 1;//逆序
  20. });
  21. var value = table.rows[0].cells[0].innerHTML;
  22. equal(value, "21", "单元格被逆序");
  23. ut.sortTable(0, function (td1, td2) {
  24. var value1 = parseInt(td1.innerHTML, 10),
  25. value2 = parseInt(td2.innerHTML, 10);
  26. return value2 - value1;
  27. })
  28. value = table.rows[0].cells[0].innerHTML;
  29. equal(value, "21", "按数值从大到小排列");
  30. ut.sortTable(0, 'reversebynum');
  31. equal(table.getAttribute('data-sort-type'), "reversebynum", "data-sort-type属性是否设置成功");
  32. });
  33. test('active trace 3779 sorttable', function () {
  34. if(ua.browser.ie&&ua.browser.ie>8)return;//todo
  35. var editor = te.obj[0];
  36. var range = te.obj[1];
  37. editor.setContent('<table width="1310"><tbody><tr><td width="634" valign="top">1</td><td width="634" valign="top"></td></tr><tr><td width="634" valign="top">2</td><td width="634" valign="top"></td></tr></tbody></table>');
  38. setTimeout(function () {
  39. var tds = editor.body.getElementsByTagName('td');
  40. range.setStart(tds[0], 0).collapse(1).select();
  41. editor.execCommand('sorttable', 1);
  42. ua.manualDeleteFillData(editor.body);
  43. tds = editor.body.getElementsByTagName('td');
  44. equal(tds[0].innerHTML, 2, '');
  45. equal(tds[2].innerHTML, 1, '');
  46. start();
  47. }, 50);
  48. stop();
  49. });
  50. test('sorttable,框选', function () {
  51. var editor = te.obj[0];
  52. var range = te.obj[1];
  53. editor.setContent('<table width="1310"><tbody><tr><td width="634" valign="top">1</td><td width="634" valign="top"></td></tr><tr><td width="634" valign="top">2</td><td width="634" valign="top"></td></tr><tr><td valign="top" colspan="1" rowspan="1" style="word-break: break-all;">3</td><td valign="top" colspan="1" rowspan="1" style=""></td></tr></tbody></table>');
  54. setTimeout(function () {
  55. var trs = editor.body.firstChild.getElementsByTagName('tr');
  56. var ut = editor.getUETable(editor.body.firstChild);
  57. var cellsRange = ut.getCellsRange(trs[0].cells[0], trs[1].cells[0]);
  58. ut.setSelected(cellsRange);
  59. range.setStart(trs[0].cells[0], 0).collapse(true).select();
  60. editor.execCommand('sorttable', 1);
  61. ua.manualDeleteFillData(editor.body);
  62. var tds = editor.body.getElementsByTagName('td');
  63. equal(tds[0].innerHTML, 2, '');
  64. equal(tds[2].innerHTML, 1, '');
  65. equal(tds[4].innerHTML, 3, '');
  66. start();
  67. }, 50);
  68. stop();
  69. });
  70. test('enablesort,disablesort', function () {
  71. var editor = te.obj[0];
  72. var range = te.obj[1];
  73. editor.setContent('<table width="1310"><tbody><tr><td width="634" valign="top">1</td><td width="634" valign="top"></td></tr><tr><td width="634" valign="top">2</td><td width="634" valign="top"></td></tr></tbody></table>');
  74. setTimeout(function () {
  75. var tds = editor.body.getElementsByTagName('td');
  76. range.setStart(tds[0], 0).collapse(1).select();
  77. editor.execCommand('enablesort');
  78. setTimeout(function () {
  79. equal(editor.body.firstChild.attributes['data-sort'].nodeValue, 'sortEnabled', 'sortEnabled');
  80. equal(domUtils.hasClass(editor.body.firstChild, 'sortEnabled'), true, 'sortEnabled');
  81. editor.execCommand('disablesort');
  82. setTimeout(function () {
  83. equal(editor.body.firstChild.attributes['data-sort'].nodeValue, 'sortDisabled', 'sortDisabled');
  84. equal(domUtils.hasClass(editor.body.firstChild, 'sortEnabled'), false, 'sortDisabled');
  85. equal(domUtils.hasClass(editor.body.firstChild.rows[0], 'firstRow'), true, '给第一行添加firstRow的类');
  86. start();
  87. }, 20);
  88. }, 20);
  89. }, 50);
  90. stop();
  91. });
  92. test('contextMenu 表格逆序当前', function () {
  93. var editor = te.obj[0];
  94. var range = te.obj[1];
  95. stop();
  96. var lang = editor.getLang("contextMenu");
  97. editor.execCommand('cleardoc');
  98. var html = '<table><tbody><tr><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr></tbody></table>';
  99. editor.setContent(html);
  100. range.setStart(editor.body.getElementsByTagName('td')[0], 0).collapse(true).select();
  101. ua.contextmenu(editor.body.firstChild);
  102. var menutable = document.getElementsByClassName("edui-menu-body")[2];
  103. setTimeout(function () {
  104. lang = editor.getLang("contextMenu");
  105. equal(menutable.childNodes.length, 7, '7个子项目');
  106. if (browser.gecko) {
  107. equal(menutable.textContent, lang.enablesort+lang.reversecurrent+lang.orderbyasc+lang.reversebyasc+lang.orderbynum+lang.reversebynum, '检查menu显示的字符');
  108. }
  109. else {
  110. equal(menutable.innerText.replace(/[\r\n\t\u200b\ufeff]/g, ''), lang.enablesort+lang.reversecurrent+lang.orderbyasc+lang.reversebyasc+lang.orderbynum+lang.reversebynum, '检查menu显示的字符');
  111. }
  112. var reverseIndex = ua.getContextmenuIndexByName(menutable.childNodes,lang.reversecurrent);
  113. ua.click(menutable.childNodes[reverseIndex]);//逆序
  114. ua.manualDeleteFillData(editor.body);
  115. ua.checkSameHtml(editor.body.firstChild.firstChild.innerHTML,'<tr class=\"firstRow\"><td>&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>Michael</td><td>1</td><td>康熙</td></tr>', '表格内容逆序-选区闭合');
  116. var tds = editor.body.getElementsByTagName('td');
  117. var ut = editor.getUETable(editor.body.firstChild);
  118. var cellsRange = ut.getCellsRange(tds[0], tds[6]);
  119. ut.setSelected(cellsRange);
  120. range.setStart(tds[0], 0).collapse(true).select();
  121. ua.contextmenu(editor.body.firstChild);
  122. menutable = document.getElementsByClassName("edui-menu-body")[2];
  123. setTimeout(function () {
  124. lang = editor.getLang("contextMenu");
  125. ua.click(menutable.childNodes[reverseIndex]);
  126. ua.manualDeleteFillData(editor.body);
  127. ua.checkSameHtml(editor.body.innerHTML,'<table><tbody><tr><td class=\"selectTdClass\">ackson</td><td>4</td><td>承祜</td></tr><tr><td class=\"selectTdClass\">{}</td><td>2</td><td>胤礼</td></tr><tr><td class=\"selectTdClass\">&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td>Michael</td><td>1</td><td>康熙</td></tr></tbody></table>', '表格内容逆序-选区不闭合');
  128. setTimeout(function () {
  129. document.getElementById('edui_fixedlayer').parentNode.removeChild(document.getElementById('edui_fixedlayer'));
  130. te.dom.push(editor.container);
  131. start();
  132. }, 20);
  133. },20);
  134. },20);
  135. });
  136. test('contextMenu 按ASCII字符排序', function () {
  137. if(ua.browser.ie||ua.browser.gecko)return;////todo 1.2.6.1 #3316
  138. var editor = te.obj[0];
  139. var range = te.obj[1];
  140. stop();
  141. var lang = editor.getLang("contextMenu");
  142. editor.execCommand('cleardoc');
  143. var html = '<table><tbody><tr><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr></tbody></table>';
  144. editor.setContent(html);
  145. range.setStart(editor.body.getElementsByTagName('td')[0], 0).collapse(true).select();
  146. ua.contextmenu(editor.body.firstChild);
  147. var menutable = document.getElementsByClassName("edui-menu-body")[2];//表格排序
  148. setTimeout(function () {
  149. lang = editor.getLang("contextMenu");
  150. var AsciiIndex = ua.getContextmenuIndexByName(menutable.childNodes,lang.orderbyasc);
  151. ua.click(menutable.childNodes[AsciiIndex]);//ASCII升
  152. ua.checkSameHtml(editor.body.innerHTML,'<table><tbody><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>Michael</td><td>1</td><td>康熙</td></tr></tbody></table>', '选区闭合');
  153. var tds = editor.body.getElementsByTagName('td');
  154. var ut = editor.getUETable(editor.body.firstChild);
  155. var cellsRange = ut.getCellsRange(tds[0], tds[6]);
  156. ut.setSelected(cellsRange);
  157. range.setStart(tds[0], 0).collapse(true).select();
  158. ua.contextmenu(editor.body.firstChild);
  159. menutable = document.getElementsByClassName("edui-menu-body")[2];
  160. forTable = document.getElementsByClassName('edui-for-table');
  161. if (ua.browser.ie) {
  162. ua.mouseenter(forTable[forTable.length - 1]);
  163. } else {
  164. ua.mouseover(forTable[forTable.length - 1]);
  165. }
  166. setTimeout(function () {
  167. lang = editor.getLang("contextMenu");
  168. ua.click(menutable.childNodes[AsciiIndex+1]);//ASCII降
  169. ua.manualDeleteFillData(editor.body);
  170. ua.checkSameHtml(editor.body.innerHTML,'<table><tbody><tr><td class=\" selecttdclass \">ackson</td><td>4</td><td>承祜</td></tr><tr><td class=\" selecttdclass\">&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td class=\" selecttdclass\">{}</td><td>2</td><td>胤礼</td></tr><tr><td>Michael</td><td>1</td><td>康熙</td></tr></tbody></table>', '表格内容逆序-选区不闭合');
  171. setTimeout(function () {
  172. document.getElementById('edui_fixedlayer').parentNode.removeChild(document.getElementById('edui_fixedlayer'));
  173. te.dom.push(editor.container);
  174. //
  175. start();
  176. }, 200);
  177. }, 200);
  178. }, 200);
  179. });
  180. test('contextMenu 按数值大小排序', function () {
  181. var editor = te.obj[0];
  182. var range = te.obj[1];
  183. stop();
  184. var lang = editor.getLang("contextMenu");
  185. editor.execCommand('cleardoc');
  186. var html = '<table><tbody><tr><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr></tbody></table>';
  187. editor.setContent(html);
  188. range.setStart(editor.body.getElementsByTagName('td')[1], 0).collapse(true).select();
  189. ua.contextmenu(editor.body.firstChild);
  190. var menutable = document.getElementsByClassName("edui-menu-body")[2];
  191. setTimeout(function () {
  192. lang = editor.getLang("contextMenu");
  193. var numIndex = ua.getContextmenuIndexByName(menutable.childNodes,lang.orderbynum);
  194. ua.click(menutable.childNodes[numIndex]);//num升
  195. ua.manualDeleteFillData(editor.body);
  196. ua.checkSameHtml(editor.body.innerHTML, '<table data-sort-type=\"orderbynum\"><tbody><tr class=\"firstRow\"><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr></tbody></table>', '选区闭合');
  197. setTimeout(function () {
  198. document.getElementById('edui_fixedlayer').parentNode.removeChild(document.getElementById('edui_fixedlayer'));
  199. te.dom.push(editor.container);
  200. start();
  201. }, 200);
  202. }, 200);
  203. });
  204. test('contextMenu trace 3384: 按数值大小排序', function () {
  205. var editor = te.obj[0];
  206. var range = te.obj[1];
  207. stop();
  208. var lang = editor.getLang("contextMenu");
  209. editor.execCommand('cleardoc');
  210. var html = '<table><tbody><tr><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr></tbody></table>';
  211. editor.setContent(html);
  212. range.setStart(editor.body.getElementsByTagName('td')[1], 0).collapse(true).select();
  213. ua.contextmenu(editor.body.firstChild);
  214. var menutable = document.getElementsByClassName("edui-menu-body")[2];
  215. setTimeout(function () {
  216. lang = editor.getLang("contextMenu");
  217. var numIndex = ua.getContextmenuIndexByName(menutable.childNodes,lang.orderbynum);
  218. ua.click(menutable.childNodes[numIndex]);//num升
  219. ua.checkSameHtml(editor.body.innerHTML,'<table><tbody><tr><td>Michael</td><td>1</td><td>康熙</td></tr><tr><td>{}</td><td>2</td><td>胤礼</td></tr><tr><td>&amp;*</td><td>3</td><td>襄嫔</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr></tbody></table>', '选区不闭合');
  220. var tds = editor.body.getElementsByTagName('td');
  221. var ut = editor.getUETable(editor.body.firstChild);
  222. var cellsRange = ut.getCellsRange(tds[1], tds[7]);
  223. ut.setSelected(cellsRange);
  224. range.setStart(tds[1], 0).collapse(true).select();
  225. ua.contextmenu(editor.body.firstChild);
  226. menutable = document.getElementsByClassName("edui-menu-body")[2];
  227. forTable = document.getElementsByClassName('edui-for-table');
  228. if (ua.browser.ie) {
  229. ua.mouseenter(forTable[forTable.length - 1]);
  230. } else {
  231. ua.mouseover(forTable[forTable.length - 1]);
  232. }
  233. setTimeout(function () {
  234. lang = editor.getLang("contextMenu");
  235. ua.click(menutable.childNodes[numIndex+1]);//num降
  236. // todo 1.2.6.1 trace 3510
  237. if(!ua.browser.gecko){
  238. ua.checkSameHtml(editor.body.innerHTML,'<table><tbody><tr><td>&amp;*</td><td class=\" selecttdclass\">3</td><td>襄嫔</td></tr><tr><td>{}</td><td class=\" selecttdclass\">2</td><td>胤礼</td></tr><tr><td>Michael</td><td class=\" selecttdclass\">1</td><td>康熙</td></tr><tr><td>ackson</td><td>4</td><td>承祜</td></tr></tbody></table>', '选区不闭合');
  239. }
  240. setTimeout(function () {
  241. document.getElementById('edui_fixedlayer').parentNode.removeChild(document.getElementById('edui_fixedlayer'));
  242. te.dom.push(editor.container);
  243. start();
  244. }, 200);
  245. }, 200);
  246. }, 200);
  247. });