basestyle.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. module("plugins.basestyle");
  2. test('sub--table', function () {
  3. var editor = te.obj[0];
  4. setTimeout(function () {
  5. editor.setContent('<table border="solid"><tr><td>hello1</td><td>hello2</td></tr><tr><td>hello3</td><td>hello4</td></tr></table>');
  6. setTimeout(function () {
  7. var range = te.obj[1];
  8. var body = editor.document.body;
  9. //1.2的版本中,table标签套了div标签,原来的var tbody = body.firstChild.firstChild;改为如下
  10. var tbody = editor.document.getElementsByTagName('table')[0].firstChild;
  11. range.selectNode(body.firstChild).select();
  12. var tds = body.firstChild.getElementsByTagName('td');
  13. var td;
  14. // for ( var index = 0; td = tds[index++]; ) {
  15. // editor.currentSelectedArr.push( td );
  16. // }
  17. editor.execCommand('subscript');
  18. setTimeout(function () {
  19. equal(ua.getChildHTML(tbody.firstChild.firstChild), '<sub>hello1</sub>', '检查第1个单元格中文本是否是下标');
  20. equal(ua.getChildHTML(tbody.firstChild.firstChild.nextSibling), '<sub>hello2</sub>', '检查第2个单元格中文本是否是下标');
  21. equal(ua.getChildHTML(tbody.lastChild.firstChild), '<sub>hello3</sub>', '检查第3个单元格中文本是否是下标');
  22. equal(ua.getChildHTML(tbody.lastChild.firstChild.nextSibling), '<sub>hello4</sub>', '检查第4个单元格中文本是否是下标');
  23. equal(editor.queryCommandState('superscript'), 0, 'check sup state');
  24. equal(editor.queryCommandState('subscript'), 1, 'check sub state');
  25. editor.execCommand('subscript');
  26. /**trace 943,为表格去上下标**/
  27. equal(tbody.firstChild.firstChild.innerHTML, 'hello1', '检查第1个单元格中文本是否不是下标');
  28. equal(tbody.firstChild.firstChild.nextSibling.innerHTML, 'hello2', '检查第2个单元格中文本是否不是下标');
  29. equal(tbody.lastChild.firstChild.innerHTML, 'hello3', '检查第3个单元格中文本是否不是下标');
  30. equal(tbody.lastChild.firstChild.nextSibling.innerHTML, 'hello4', '检查第4个单元格中文本是否你是下标');
  31. equal(editor.queryCommandState('superscript'), 0, 'check sup state');
  32. equal(editor.queryCommandState('subscript'), 0, 'check sub state');
  33. editor.execCommand('superscript');
  34. /*上下标互斥*/
  35. equal(ua.getChildHTML(tbody.firstChild.firstChild), '<sup>hello1</sup>', '检查第1个单元格中文本是否是上标');
  36. equal(ua.getChildHTML(tbody.firstChild.firstChild.nextSibling), '<sup>hello2</sup>', '检查第2个单元格中文本是否是上标');
  37. equal(ua.getChildHTML(tbody.lastChild.firstChild), '<sup>hello3</sup>', '检查第3个单元格中文本是否是上标');
  38. equal(ua.getChildHTML(tbody.lastChild.firstChild.nextSibling), '<sup>hello4</sup>', '检查第4个单元格中文本是否是上标');
  39. equal(editor.queryCommandState('superscript'), 1, 'check sup state');
  40. equal(editor.queryCommandState('subscript'), 0, 'check sub state');
  41. start();
  42. }, 50);
  43. }, 50);
  44. }, 50);
  45. stop();
  46. });
  47. //如果没有setTimeout在FF(3.6和9都是)中range会出错,其他浏览器没问题
  48. test('闭合插入上下标', function () {
  49. var editor = te.obj[0];
  50. var range = te.obj[1];
  51. editor.setContent('<p>你好</p>');
  52. var body = editor.body;
  53. stop();
  54. setTimeout(function () {
  55. range.setStart(body.firstChild.firstChild, 1).collapse(1).select(true);
  56. editor.execCommand('superscript');
  57. equal(ua.getChildHTML(body.firstChild), '你<sup></sup>好', '查看执行上标后的结果');
  58. range = editor.selection.getRange();
  59. range.insertNode(editor.document.createTextNode('hello'));
  60. equal(ua.getChildHTML(body.firstChild), '你<sup>hello</sup>好', '上标标签中插入文本');
  61. start();
  62. }, 100)
  63. });
  64. test('不闭合插入上下标', function () {
  65. var editor = te.obj[0];
  66. var range = te.obj[1];
  67. editor.setContent('<strong>hello1<em>hello2</em></strong><a href="http://www.baid.com/"><strong>baidu_link</strong></a>hello3');
  68. var body = editor.document.body;
  69. stop();
  70. setTimeout(function () {
  71. range.setStart(body.firstChild.firstChild, 0).setEnd(body.firstChild.lastChild, 3).select();
  72. editor.execCommand('superscript');
  73. ua.manualDeleteFillData(body);
  74. ua.checkSameHtml(editor.getContent(), '<p><sup><strong>hello1<em>hello2</em></strong></sup><a href="http://www.baid.com/" ><sup><strong>baidu_link</strong></sup></a><sup>hel</sup>lo3</p>', '普通文本添加上标');
  75. start();
  76. }, 100);
  77. });
  78. /*trace 870*/
  79. //无法模拟光标自动移到的场景,因此模拟输入文本通过插入文本节点实现的方法,在插入文本后光标仍然在原来的位置
  80. // 我们不确定光标实际在哪
  81. test('trace 870:加粗文本前面去加粗', function () {
  82. var editor = te.obj[0];
  83. var body = editor.body;
  84. var range = te.obj[1];
  85. editor.setContent('<p><br></p>');
  86. range.setStart(body.firstChild, 0).collapse(true).select();
  87. editor.execCommand('bold');
  88. range = editor.selection.getRange();
  89. range.insertNode(editor.document.createTextNode('hello'));
  90. equal(editor.queryCommandState('bold'), 1, '加粗');
  91. editor.execCommand('bold');
  92. range = editor.selection.getRange();
  93. equal(editor.queryCommandState('bold'), 0, '不加粗');
  94. range.insertNode(editor.document.createTextNode('hello2'));
  95. /*插入一个文本节点*/
  96. ua.manualDeleteFillData(editor.body);
  97. /*ie下插入节点后会自动移动光标到节点后面,而其他浏览器不会*/
  98. if (ua.browser.chrome || ua.browser.safari || (ua.browser.ie && ua.browser.ie > 8 && ua.browser.ie<11))// ie9,10改range
  99. equal(editor.getContent(), '<p>hello2<strong>hello</strong><br/></p>');
  100. else
  101. equal(editor.getContent(), '<p><strong>hello</strong>hello2<br/></p>');
  102. });
  103. /*trace 1043*/
  104. test('bold-在已加粗文本中间去除加粗', function () {
  105. var editor = te.obj[0];
  106. var body = editor.body;
  107. var range = te.obj[1];
  108. editor.setContent('<b>hello</b>ssss');
  109. range.setStart(body.firstChild.firstChild, 0).collapse(true).select();
  110. editor.execCommand('bold');
  111. range = editor.selection.getRange();
  112. equal(editor.queryCommandState('bold'), 0, "<strong> 被去掉");
  113. range.insertNode(range.document.createTextNode('aa'));
  114. /*在当前的range选区插入文本节点*/
  115. ua.manualDeleteFillData(editor.body);
  116. equal(ua.getChildHTML(body.firstChild), "aa<strong>hello</strong>ssss", "新文本节点没有加粗");
  117. });
  118. /*trace 958*/
  119. test('bold-在已加粗文本中间去除加粗', function () {
  120. var editor = te.obj[0];
  121. var body = editor.body;
  122. var range = te.obj[1];
  123. editor.setContent('');
  124. editor.execCommand('bold');
  125. ok(ua.getChildHTML(body), "<stong></stong>", "editor不focus时点加粗,不会多一个空行");
  126. });
  127. /*trace 958*/
  128. test('bold-加粗状态反射', function () {
  129. var editor = te.obj[0];
  130. var body = editor.body;
  131. var range = te.obj[1];
  132. editor.setContent('<p>this is a dog</p>');
  133. stop();
  134. setTimeout(function () {
  135. range.selectNode(body.firstChild).select();
  136. editor.execCommand('bold');
  137. range.setStart(body.firstChild.firstChild.firstChild, 2).collapse(true).select();
  138. equal(editor.queryCommandState('bold'), 1, '闭合选择,加粗高亮');
  139. ua.manualDeleteFillData(editor.body);
  140. range.setStart(body.firstChild.firstChild.firstChild, 0).setEnd(body.firstChild.firstChild.lastChild, 4).select();
  141. equal(editor.queryCommandState('bold'), 1, '不闭合选择,加粗高亮');
  142. start();
  143. }, 100)
  144. });
  145. /*trace 580*/
  146. test('bold-连续加粗2次', function () {
  147. var editor = te.obj[0];
  148. var body = editor.body;
  149. var range = te.obj[1];
  150. editor.setContent('<p>this is a dog</p>');
  151. var text = body.firstChild.firstChild;
  152. range.setStart(text, 0).setEnd(text, 3).select();
  153. editor.execCommand('bold');
  154. /*第一次加粗*/
  155. equal(editor.queryCommandState('bold'), 1, '加粗按钮高亮');
  156. text = body.firstChild.lastChild;
  157. range.setStart(text, 1).setEnd(text, 3).select();
  158. /*不闭合选区文本*/
  159. equal(editor.queryCommandState('bold'), 0, '不闭合选择,加粗不高亮');
  160. ua.manualDeleteFillData(editor.body);
  161. editor.execCommand('bold');
  162. /*第二次加粗*/
  163. equal(editor.queryCommandState('bold'), 1, '加粗高亮');
  164. });
  165. /*trace 1983*/
  166. test('bold-2个单词,中间有空格第一个单词加粗,第二个单词加粗再去加粗', function () {
  167. var editor = te.obj[0];
  168. var body = editor.body;
  169. var range = te.obj[1];
  170. body.innerHTML = '<p>hello world</p>'; //用setContent复现不了这个问题
  171. var text = body.firstChild.firstChild;
  172. range.setStart(text, 0).setEnd(text, 5).select();
  173. editor.execCommand('bold');
  174. text = body.firstChild.lastChild;
  175. range.setStart(text, 1).setEnd(text, 6).select();
  176. editor.execCommand('bold');
  177. editor.execCommand('bold');
  178. ok(body.firstChild.childNodes.length == 3 && body.firstChild.childNodes[1].length == 1, '空格保留');
  179. });
  180. test('测试 userAction.manualdeleteFilldata', function () {
  181. var editor = te.obj[0];
  182. var body = editor.body;
  183. var range = te.obj[1];
  184. editor.setContent('<p></p>');
  185. var fillData = editor.document.createTextNode(domUtils.fillChar); // 在ie 6,7下,使用appendChild时,需要body先加载,必须将上句document前加editor,否则出错
  186. body.appendChild(fillData);
  187. var space = ua.browser.ie ? '&nbsp;' : '<br>';//getContent()结果:‘<br />’,innerHTML结果:<br>
  188. notEqual(body.innerHTML.toLowerCase(), '<p>' + space + '</p>', '清除不可见字符前不相等');
  189. ua.manualDeleteFillData(body);
  190. equal(body.innerHTML.toLowerCase(), '<p>' + space + '</p>', '清除不可见字符后相等');
  191. });
  192. test('trace 1884:单击B再单击I ', function () {
  193. var editor = te.obj[0];
  194. var body = editor.body;
  195. var range = te.obj[1];
  196. editor.setContent('');
  197. range.setStart(body.firstChild, 0).collapse(1).select();
  198. editor.execCommand('bold');
  199. equal(editor.queryCommandState('bold'), 1, 'b高亮');
  200. editor.execCommand('italic');
  201. equal(editor.queryCommandState('italic'), 1, 'b高亮');
  202. });
  203. test('单击B再在其他地方单击I,空的strong标签被删除 ', function () {
  204. var editor = te.obj[0];
  205. var body = editor.body;
  206. var range = te.obj[1];
  207. editor.setContent('<p>hello</p>');
  208. range.setStart(body.firstChild, 0).collapse(1).select();
  209. editor.execCommand('bold');
  210. equal(editor.queryCommandState('bold'), 1, 'b高亮');
  211. range.setStart(body.firstChild, 1).collapse(1).select();
  212. editor.execCommand('italic');
  213. equal(editor.queryCommandState('italic'), 1, 'b高亮');
  214. ua.manualDeleteFillData(body);
  215. if (!ua.browser.ie) { //ie下有问题不能修,屏蔽ie
  216. equal(body.innerHTML.toLowerCase(), '<p><em></em>hello</p>', '空strong标签被删除')
  217. }
  218. });
  219. test('ctrl+i', function () {
  220. var editor = te.obj[0];
  221. var body = editor.body;
  222. var range = te.obj[1];
  223. editor.setContent('<p>没有加粗的文本</p>');
  224. range.selectNode(body.firstChild).select();
  225. var p = body.firstChild;
  226. setTimeout(function () {
  227. ua.keydown(editor.body, {'keyCode': 73, 'ctrlKey': true});
  228. editor.focus();
  229. setTimeout(function () {
  230. equal(ua.getChildHTML(p), '<em>没有加粗的文本</em>');
  231. start();
  232. }, 150);
  233. }, 100);
  234. stop();
  235. });
  236. test('ctrl+u', function () {
  237. var editor = te.obj[0];
  238. var body = editor.body;
  239. var range = te.obj[1];
  240. editor.setContent('<p>没有加粗的文本</p>');
  241. setTimeout(function () {
  242. range.selectNode(body.firstChild).select();
  243. setTimeout(function () {
  244. var html = '<span style="text-decoration: underline;">没有加粗的文本</span>';
  245. ua.checkHTMLSameStyle(html, editor.document, body.firstChild, '文本被添加了下划线');
  246. equal(editor.body.firstChild.firstChild.style.textDecoration, 'underline');
  247. start();
  248. }, 150);
  249. ua.keydown(editor.body, {'keyCode': 85, 'ctrlKey': true});
  250. }, 150);
  251. stop();
  252. });
  253. test('ctrl+b', function () {
  254. var editor = te.obj[0];
  255. var body = editor.body;
  256. var range = te.obj[1];
  257. editor.setContent('<p>没有加粗的文本</p>');
  258. range.selectNode(body.firstChild).select();
  259. setTimeout(function () {
  260. ua.keydown(editor.body, {'keyCode': 66, 'ctrlKey': true});
  261. setTimeout(function () {
  262. equal(ua.getChildHTML(body.firstChild), '<strong>没有加粗的文本</strong>');
  263. start();
  264. }, 150);
  265. }, 150);
  266. stop();
  267. });
  268. /*trace 3240*/
  269. test('表格中文本加粗', function () {
  270. var editor = te.obj[0];
  271. var range = te.obj[1];
  272. editor.setContent('<p></p>');
  273. range.setStart(editor.body.firstChild, 0).collapse(true).select();
  274. editor.execCommand('inserttable');
  275. ua.manualDeleteFillData(editor.body);
  276. setTimeout(function () {
  277. var tds = editor.body.getElementsByTagName('td');
  278. tds[0].innerHTML = 'asd';
  279. tds[10].innerHTML = 'asd';
  280. var trs = editor.body.firstChild.getElementsByTagName('tr');
  281. var ut = editor.getUETable(editor.body.firstChild);
  282. var cellsRange = ut.getCellsRange(trs[0].cells[0], trs[2].cells[0]);
  283. ut.setSelected(cellsRange);
  284. range.setStart(trs[0].cells[0], 0).collapse(true).select();
  285. editor.execCommand('bold');
  286. ua.manualDeleteFillData(editor.body);
  287. equal(editor.queryCommandState('bold'), 1, 'b高亮');
  288. equal(trs[0].cells[0].firstChild.tagName.toLowerCase(), 'strong', '[0][0]单元格中文本标签');
  289. if (!ua.browser.ie)
  290. equal(trs[1].cells[0].firstChild.tagName.toLowerCase(), 'br', '[1][0]单元格中文本标签');
  291. equal(trs[2].cells[0].firstChild.tagName.toLowerCase(), 'strong', '[2][0]单元格中文本标签');
  292. start();
  293. }, 50);
  294. stop();
  295. });