link.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. module( "plugins.link" );
  2. /*trace 879*/
  3. test( '同时去多个超链接', function () {
  4. var editor = te.obj[0];
  5. var range = te.obj[1];
  6. editor.setContent( '<p><a href="http://www.baidu.com/">hello</a>first<a href="http://www.google.com/">second</a></p><p>third<a href="http://www.sina.com/">sina</a></p><table><tbody><tr><td><a href="http://www.baidu.com/">baidu</a></td></tr></tbody></table>' );
  7. stop();
  8. setTimeout(function () {
  9. range.selectNode( editor.body ).select();
  10. editor.execCommand( 'unlink' );
  11. equal( editor.body.firstChild.innerHTML, 'hellofirstsecond', '第一段去掉超链接' );
  12. equal( editor.body.firstChild.nextSibling.innerHTML, 'thirdsina', '第二段去掉超链接' );
  13. equal( editor.body.lastChild.getElementsByTagName( 'td' )[0].innerHTML, 'baidu', '表格内的超链接被去掉' );
  14. start();
  15. }, 100);
  16. } );
  17. test( '光标闭合且没有超链接', function () {
  18. var editor = te.obj[0];
  19. var range = te.obj[1];
  20. editor.setContent( '<p>hello</p>' );
  21. range.setStart( editor.body.firstChild, 0 ).collapse( 1 ).select();
  22. editor.execCommand( 'unlink' );
  23. equal( ua.getChildHTML( editor.body ), '<p>hello</p>', '没有超链接什么都不做' );
  24. } );
  25. /*trace 833*/
  26. test( '在超链接前加一个超链接', function () {
  27. var editor = te.obj[0];
  28. var range = te.obj[1];
  29. editor.setContent( '<p>hello<a href="http://www.baidu.com/">baidu</a></p>' );
  30. range.selectNode( editor.body.firstChild.firstChild ).select();
  31. editor.execCommand( 'link', {href:'http://www.google.com/'} );
  32. ua.manualDeleteFillData( editor.body );
  33. ua.checkSameHtml( editor.getContent(), '<p><a href="http://www.google.com/" >hello</a><a href="http://www.baidu.com/" >baidu</a></p>');
  34. } );
  35. /*trace 798*/
  36. test( '给图片添加超链接', function () {
  37. var editor = te.obj[0];
  38. var range = te.obj[1];
  39. editor.setContent( '<p><img style="width: 200px;height: 200px" src="http://ueditor.baidu.com/img/logo.png">hello</p>' );
  40. range.selectNode( editor.body.firstChild.firstChild ).select();
  41. editor.execCommand( 'link', {href:'http://www.baidu.com/'} );
  42. var html = '<a href="http://www.baidu.com/" ><img src="http://ueditor.baidu.com/img/logo.png" _src=\"http://ueditor.baidu.com/img/logo.png" style="width: 200px;height: 200px" ></a>hello';
  43. ua.checkHTMLSameStyle( html, editor.document, editor.body.firstChild, '给图片添加超链接' );
  44. // equal(html,editor.body.firstChild.innerHTML);
  45. } );
  46. /*trace 758
  47. *并不是真的选中所有单元格,是假选
  48. * 先设置startContainer和endContainer为第一个单元格中的文本或占位符
  49. * 再在editor的currentSelectedArr设置当前选中的内容,使得看上去是选中了所有的td*/
  50. test( '选中多个单元格插入超链接', function () {
  51. if(ua.browser.ie>8)return ;//TODO 1.2.6
  52. var editor = te.obj[0];
  53. var range = te.obj[1];
  54. editor.setContent( '<table><tbody><tr><td></td><td></td></tr><tr><td>hello</td></tr></tbody></table>' );
  55. setTimeout(function(){
  56. var trs = editor.body.firstChild.getElementsByTagName( 'tr' );
  57. var ut = editor.getUETable(editor.body.firstChild);
  58. var cellsRange = ut.getCellsRange(trs[0].cells[0],trs[1].cells[1]);
  59. ut.setSelected(cellsRange);
  60. range.setStart( trs[0].cells[0], 0 ).collapse( true ).select();
  61. editor.execCommand( 'link', {href:'http://www.baidu.com/'} );
  62. var br = ua.browser.ie ? '' : '<br>';
  63. equal( ua.getChildHTML( trs[0].cells[0] ), '<a href="http://www.baidu.com/">http://www.baidu.com/</a>'+(ua.browser.ie>8?' ':br), '第一个单元格中插入超链接' );//原来空单元格的br不去掉
  64. equal( ua.getChildHTML( trs[0].cells[1] ), br, '第二个单元格中未插入超链接' );
  65. equal( ua.getChildHTML( trs[1].cells[0] ), '<a href="http://www.baidu.com/">hello</a>', '第三个单元格中插入超链接' );
  66. start();
  67. },50);
  68. stop();
  69. } );
  70. test( '去除表格中的链接', function () {
  71. if(ua.browser.ie>8)return ;//TODO 1.2.6
  72. var editor = te.obj[0];
  73. var range = te.obj[1];
  74. editor.setContent( '<table><tbody><tr><td></td><td></td></tr><tr><td colspan="2">hello</td></tr></tbody></table>' );
  75. setTimeout(function(){
  76. var trs = editor.body.firstChild.getElementsByTagName( 'tr' );
  77. var ut = editor.getUETable(editor.body.firstChild);
  78. var cellsRange = ut.getCellsRange(trs[0].cells[0],trs[1].cells[0]);
  79. ut.setSelected(cellsRange);
  80. range.setStart( trs[0].cells[0], 0 ).collapse( true ).select();
  81. editor.execCommand( 'link', {href:'http://www.baidu.com/'} );
  82. var br = ua.browser.ie ? '' : '<br>';
  83. equal( editor.queryCommandValue( 'link' ), trs[0].cells[0].firstChild, '查询多个单元格的command value为a' );
  84. editor.execCommand( 'unlink' );
  85. equal( ua.getChildHTML( trs[0].cells[0] ), 'http://www.baidu.com/'+(ua.browser.ie>8?' ':br), '第一个单元格中插入超链接' );
  86. equal( ua.getChildHTML( trs[0].cells[1] ), br, '第二个单元格中未插入超链接' );
  87. equal( ua.getChildHTML( trs[1].cells[0] ), 'hello', '第三个单元格中插入超链接' );
  88. equal( editor.queryCommandValue( 'link' ), null, '查询多个单元格的command value为null' );
  89. start();
  90. },50);
  91. stop();
  92. } );
  93. /*1.2.5+不支持此功能*/
  94. //test( 'trace 1728 去除链接--表格第一个单元格没有超链接', function () {
  95. // var editor = te.obj[0];
  96. // var range = te.obj[1];
  97. // editor.setContent( '<table><tbody><tr><td></td><td><a href="www.google.com">google</a></td></tbody></table>' );
  98. // var body = editor.body;
  99. // var tds = body.firstChild.getElementsByTagName( 'td' );
  100. // range.selectNode( body.firstChild ).select();
  101. // editor.currentSelectedArr = [tds[0], tds[1]];
  102. // editor.execCommand( 'unlink' );
  103. // if ( UE.browser.ie )
  104. // equal( tds[0].childNodes.length, 1, '第一个表格中有一个占位文本节点' );
  105. // range = editor.selection.getRange();
  106. // tds = body.firstChild.getElementsByTagName( 'td' );
  107. // equal( ua.getChildHTML( tds[1] ), 'google', 'a标签被删除' );
  108. // if ( UE.browser.gecko )
  109. // ua.checkResult( range, tds[0], tds[0], 0, 0, true, 'check unlink result' );
  110. // else if(UE.browser.opera)
  111. // ua.checkResult( range, tds[0].firstChild, tds[0].firstChild, 0, 0, true, 'check unlink result' );
  112. // else{
  113. // ua.checkResult( range, tds[0].firstChild, tds[0].firstChild, 1, 1, true, 'check unlink result' );
  114. // }
  115. // var br = ua.browser.ie ? '' : "<br>";
  116. // ua.manualDeleteFillData( tds[0] );
  117. // equal( ua.getChildHTML( tds[0] ), br, 'td 1 is empty' );
  118. //} );
  119. test( '添加链接--表格第一个单元格没有超链接', function () {
  120. if(!ua.browser.ie){//TODO 1.2.6
  121. var editor = te.obj[0];
  122. var range = te.obj[1];
  123. editor.setContent( '<table><tbody><tr><td></td><td><a href="www.google.com">google</a></td></tbody></table>' );
  124. setTimeout(function(){
  125. var trs = editor.body.firstChild.getElementsByTagName( 'tr' );
  126. var ut = editor.getUETable(editor.body.firstChild);
  127. var cellsRange = ut.getCellsRange(trs[0].cells[0],trs[0].cells[1]);
  128. ut.setSelected(cellsRange);
  129. // range.setStart( trs[0].cells[0], 0 ).collapse( true ).select();
  130. // range.selectNode( body.firstChild ).select();
  131. // var tds = body.firstChild.getElementsByTagName( 'td' );
  132. // editor.currentSelectedArr = [tds[0], tds[1]];
  133. editor.execCommand( 'link', {href:'www.baidu.com'} );
  134. range = editor.selection.getRange();
  135. equal( ua.getChildHTML( trs[0].cells[1] ), '<a href="www.baidu.com">google</a>', 'a标签的地址被修改了' );
  136. var br = ua.browser.ie ? '' : '<br>';
  137. equal( ua.getChildHTML( trs[0].cells[0] ), '<a href="www.baidu.com">www.baidu.com</a>'+br, 'td 1 被添加了超链接' );
  138. if ( (!baidu.editor.browser.gecko)&&(!baidu.editor.browser.webkit))
  139. ua.checkResult( range, trs[0].cells[0].firstChild.firstChild, trs[0].cells[0].firstChild.firstChild, 0, 0, true, 'check link result' );
  140. else
  141. ua.checkResult( range, trs[0].cells[0].firstChild, trs[0].cells[0].firstChild, 0, 0, true, 'check link result' );
  142. start();
  143. },50);
  144. stop();
  145. }
  146. } );
  147. test( '光标在超链接中间去除超链接', function () {
  148. var editor = te.obj[0];
  149. var range = te.obj[1];
  150. editor.setContent( '<p><a href="www.google.com">hello</a></p>' );
  151. var a_text = editor.body.getElementsByTagName( 'a' )[0].firstChild;
  152. range.setStart( a_text, 2 ).collapse( 1 ).select();
  153. same( editor.queryCommandValue( 'link' ), editor.body.firstChild.firstChild, 'command value is a' );
  154. editor.execCommand( 'unlink' );
  155. equal( ua.getChildHTML( editor.body ), '<p>hello</p>', '去除超链接后' );
  156. equal( editor.queryCommandState( 'unlink' ), -1, 'link state is -1' );
  157. } );
  158. test( '去除链接--选中区域包含超链接和非超链接', function () {
  159. var editor = te.obj[0];
  160. var range = te.obj[1];
  161. editor.setContent( '<p>hello</p><p>hello2<a href="www.fanfou.com">famfou</a>hello3</p>' );
  162. var body = editor.body;
  163. range.setStart( body.firstChild, 0 ).setEnd( body.lastChild, 3 ).select();
  164. equal( editor.queryCommandValue( 'link' ), body.lastChild.firstChild.nextSibling, 'queryCommandvalue' );
  165. } );
  166. /*trace 1111*/
  167. test( '插入超链接', function () {
  168. var editor = te.obj[0];
  169. var range = te.obj[1];
  170. editor.setContent( '<p>hello</p>' );
  171. range.setStart( editor.body.firstChild, 1 ).collapse( 1 ).select();
  172. editor.execCommand( 'link', {href:'www.baidu.com'} );
  173. var a = editor.body.getElementsByTagName( 'a' )[0];
  174. range.selectNode( a ).select();
  175. range = editor.selection.getRange();
  176. same( editor.queryCommandValue( 'link' ), a, 'link value is a' );
  177. equal( ua.getChildHTML( editor.body ), '<p>hello<a href="www.baidu.com">www.baidu.com</a></p>' );
  178. equal( editor.queryCommandState( 'unlink' ), 0, 'link state is 0' );
  179. } );
  180. test( '对现有的超链接修改超链接地址', function () {
  181. var editor = te.obj[0];
  182. var range = te.obj[1];
  183. var body = editor.body;
  184. editor.setContent( '<p><a href="http://www.baidu.com">http://www.baidu.com</a>hello<a href="www.google.com">google</a></p>' );
  185. var a1 = body.firstChild.firstChild;
  186. range.selectNode( a1 ).select();
  187. editor.execCommand( 'link', {href:'ueditor.baidu.com'} );
  188. a1 = body.firstChild.firstChild;
  189. equal( a1.getAttribute( 'href' ), 'ueditor.baidu.com', 'check href' );
  190. equal( a1.innerHTML, 'ueditor.baidu.com', 'innerHTML也相应变化' );
  191. var a2 = body.firstChild.getElementsByTagName( 'a' )[1];
  192. range.selectNode( a2 ).select();
  193. editor.execCommand( 'link', {href:'mp3.baidu.com'} );
  194. a2 = body.firstChild.getElementsByTagName( 'a' )[1];
  195. equal( a2.getAttribute( 'href' ), 'mp3.baidu.com', 'check href for second a link' );
  196. equal( a2.innerHTML, 'google', 'innerHTML不变' );
  197. } );