menu.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. /**
  2. * Created by JetBrains PhpStorm.
  3. * User: dongyancen
  4. * Date: 12-4-12
  5. * Time: 下午4:45
  6. * To change this template use File | Settings | File Templates.
  7. */
  8. module( 'ui.menu' );
  9. test( 'menu,submenu的显示', function() {
  10. //设置菜单内容\
  11. var editor = new te.obj[0].Editor();
  12. var items=[
  13. {
  14. label:'删除',
  15. cmdName:'delete'
  16. },
  17. {
  18. label:'全选',
  19. cmdName:'selectall'
  20. },
  21. {
  22. label:'删除代码',
  23. cmdName:'highlightcode',
  24. icon:'deletehighlightcode'
  25. },
  26. {
  27. label:'清空文档',
  28. cmdName:'cleardoc',
  29. exec:function () {
  30. if ( confirm( '确定清空文档吗?' ) ) {
  31. this.execCommand( 'cleardoc' );
  32. }
  33. }
  34. },
  35. '-',
  36. {
  37. label:'取消链接',
  38. cmdName:'unlink'
  39. },
  40. '-',
  41. {
  42. label:'段落格式',
  43. icon:'justifyjustify',
  44. subMenu:{
  45. items: [{
  46. label:'居左对齐',
  47. cmdName:'justify',
  48. value:'left',
  49. editor:editor
  50. },
  51. {
  52. label:'居右对齐',
  53. cmdName:'justify',
  54. value:'right',
  55. editor:editor
  56. },
  57. {
  58. label:'居中对齐',
  59. cmdName:'justify',
  60. value:'center',
  61. editor:editor
  62. },
  63. {
  64. label:'两端对齐',
  65. cmdName:'justify',
  66. value:'justify',
  67. editor:editor
  68. }],
  69. editor:editor
  70. }
  71. }
  72. ];
  73. var menu = new te.obj[0].Menu({className : 'edui-for-lineheight',items :items,editor:te.obj[0].Editor()});
  74. menu.render(te.dom[0]);
  75. menu.postRender();
  76. menu.show();
  77. var menuBody = document.getElementsByClassName("edui-menu-body")[0];
  78. equal(menuBody.childNodes[0].className,"edui-menuitem edui-"+editor.options.theme,'menu窗口显示');
  79. equal(menuBody.childNodes[0].firstChild.lastChild.innerHTML,"删除",'menu窗口显示');
  80. //edui-menuitem edui-menuseparator
  81. equal(menuBody.childNodes[4].className,"edui-menuitem edui-menuseparator edui-"+editor.options.theme,'menu窗口显示');
  82. equal(menuBody.childNodes[4].firstChild.className,"edui-menuseparator-inner edui-"+editor.options.theme,'menu窗口显示');//edui-menuitem edui-hassubmenu
  83. equal(menuBody.childNodes[7].className,"edui-menuitem edui-"+editor.options.theme + " edui-hassubmenu edui-hassubmenu",'第7个menu有子menu');
  84. //submenu
  85. var menuid1 = menu.items[7].id;
  86. var submenu1 = menu.items[7].subMenu.id;
  87. equal(document.getElementById(submenu1).style.display,'none','submenu初始的display值:"none"');
  88. if(ua.browser.ie){
  89. ua.mouseenter(menuBody.childNodes[7]);
  90. }
  91. else{
  92. ua.mouseover(menuBody.childNodes[7]); }
  93. setTimeout(function (){
  94. equal(document.getElementById(submenu1).style.display,'','显示submenu,检查submenu的display值:""');
  95. equal(getElementsByClassName_2(document.getElementById(submenu1),'div','edui-menu-body')[0].childNodes.length,4,'检查submenu的menuitems数量');
  96. equal(getElementsByClassName_2(document.getElementById(submenu1),'div','edui-menu-body')[0].firstChild.className,'edui-menuitem edui-'+editor.options.theme,'检查submenu的内容');
  97. equal(getElementsByClassName_2(document.getElementById(submenu1),'div','edui-menuitem')[0].firstChild.lastChild.innerHTML,'居左对齐','检查menuitem的内容');
  98. var menuClass = document.getElementById(menuid1).className;
  99. equal(menuClass,"edui-menuitem edui-"+editor.options.theme+" edui-hassubmenu edui-hassubmenu edui-state-hover edui-state-opened",'');
  100. if(ua.browser.ie){
  101. ua.mouseleave(document.getElementById(menuid1));
  102. }
  103. else{
  104. ua.mouseout(document.getElementById(menuid1));
  105. }
  106. setTimeout(function (){
  107. equal(document.getElementById(submenu1).style.display,'none','显示submenu,检查submenu的display值:""');
  108. menuClass = document.getElementById(menuid1).className;
  109. ok(menuClass.indexOf('edui-state-hover')==-1&&menuClass.indexOf('edui-state-opened')==-1,'');
  110. document.getElementById(submenu1).parentNode.removeChild(document.getElementById(submenu1));
  111. start();
  112. }, 450);
  113. }, 300);
  114. stop();
  115. function getElementsByClassName_2(oElm, strTagName, strClassName){
  116. var arrElements = (strTagName == "*" && oElm.all)? oElm.all :
  117. oElm.getElementsByTagName(strTagName);
  118. var arrReturnElements = new Array();
  119. strClassName = strClassName.replace(/\-/g, "\\-");
  120. var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
  121. var oElement;
  122. for(var i=0; i < arrElements.length; i++){
  123. oElement = arrElements[i];
  124. if(oRegExp.test(oElement.className)){
  125. arrReturnElements.push(oElement);
  126. }
  127. }
  128. return (arrReturnElements);
  129. }
  130. } );
  131. test( '先打开一个submenu,再打开另一个submenu', function() {
  132. var editor = new te.obj[0].Editor();
  133. //设置菜单内容
  134. var items=[
  135. {
  136. label:'删除',
  137. cmdName:'delete'
  138. },
  139. {
  140. label:'段落格式',
  141. icon:'justifyjustify',
  142. subMenu:{
  143. items: [{
  144. label:'居左对齐',
  145. cmdName:'justify',
  146. value:'left'
  147. },
  148. {
  149. label:'居右对齐',
  150. cmdName:'justify',
  151. value:'right'
  152. },
  153. {
  154. label:'居中对齐',
  155. cmdName:'justify',
  156. value:'center'
  157. },
  158. {
  159. label:'两端对齐',
  160. cmdName:'justify',
  161. value:'justify'
  162. }],
  163. editor:editor
  164. }
  165. },
  166. {
  167. label:'表格',
  168. subMenu:{
  169. items: [{
  170. label:'居左对齐',
  171. cmdName:'justify',
  172. value:'left'
  173. },
  174. {
  175. label:'居右对齐',
  176. cmdName:'justify',
  177. value:'right'
  178. }],
  179. editor:editor
  180. }
  181. }
  182. ];
  183. var menu = new te.obj[0].Menu({className : 'edui-for-lineheight',items :items,editor:editor});
  184. menu.render(te.dom[0]);
  185. menu.postRender();
  186. menu.show();
  187. var menuBody = document.getElementsByClassName("edui-menu-body")[0];
  188. //submenu
  189. var menuid1 = menu.items[1].id;
  190. var menuid2 = menu.items[2].id;
  191. var submenu1 = menu.items[1].subMenu.id;
  192. var submenu2 = menu.items[2].subMenu.id;
  193. equal(document.getElementById(submenu1).style.display,'none','submenu初始的display值:"none"');
  194. //打开一个submenu
  195. if(ua.browser.ie){
  196. ua.mouseenter(document.getElementById(menuid1));
  197. }
  198. else{
  199. ua.mouseover(document.getElementById(menuid1));
  200. }
  201. setTimeout(function (){
  202. //检查第一个submenu的内容显示
  203. equal(document.getElementById(submenu1).style.display,'','显示第一个submenu,检查submenu的display值:""');
  204. var menuClass = document.getElementById(menuid1).className;
  205. equal(menuClass,"edui-menuitem edui-"+editor.options.theme+" edui-hassubmenu edui-hassubmenu edui-state-hover edui-state-opened",'检查第一个submenu的打开状态');
  206. //打开第二个submenu
  207. if(ua.browser.ie){
  208. ua.mouseenter(document.getElementById(menuid2));
  209. }
  210. else{
  211. ua.mouseover(document.getElementById(menuid2));
  212. }
  213. setTimeout(function (){
  214. equal(document.getElementById(submenu1).style.display,'none','第一个submenu关闭,display值:"none"');
  215. menuClass = document.getElementById(menuid1).className;
  216. ok(menuClass.indexOf('edui-state-opened')==-1,'检查第一个submenu的关闭状态');
  217. equal(document.getElementById(submenu2).style.display,'','第二个submenu显示,检查submenu的display值:""');
  218. var menuClass = document.getElementById(menuid2).className;
  219. equal(menuClass,"edui-menuitem edui-"+editor.options.theme+" edui-hassubmenu edui-hassubmenu edui-state-hover edui-state-opened",'检查第二个submenu的打开状态');
  220. document.getElementById(submenu1).parentNode.removeChild(document.getElementById(submenu2));
  221. start();
  222. }, 450);
  223. }, 300);
  224. stop();
  225. } );
  226. test( 'dispose', function() {
  227. var editor = new te.obj[0].Editor();
  228. //设置菜单内容
  229. var items=[
  230. {
  231. label:'删除',
  232. cmdName:'delete'
  233. },
  234. {
  235. label:'全选',
  236. cmdName:'selectall'
  237. },
  238. {
  239. label:'删除代码',
  240. cmdName:'highlightcode',
  241. icon:'deletehighlightcode'
  242. },
  243. {
  244. label:'清空文档',
  245. cmdName:'cleardoc',
  246. exec:function () {
  247. if ( confirm( '确定清空文档吗?' ) ) {
  248. this.execCommand( 'cleardoc' );
  249. }
  250. }
  251. },
  252. '-',
  253. {
  254. label:'取消链接',
  255. cmdName:'unlink'
  256. },
  257. {
  258. label:'表格',
  259. subMenu:{
  260. items: [{
  261. label:'居左对齐',
  262. cmdName:'justify',
  263. value:'left'
  264. },
  265. {
  266. label:'居右对齐',
  267. cmdName:'justify',
  268. value:'right'
  269. }],
  270. editor:editor
  271. }
  272. }
  273. ];
  274. var menu = new te.obj[0].Menu({className : 'edui-for-lineheight',items :items,editor:editor});
  275. te.dom[0].innerHTML = menu.renderHtml();
  276. menu.postRender();
  277. menu.show();
  278. equal(menu.items.length,7,'检查menu里的items');
  279. equal(document.getElementById(menu.id).style.display,'','显示menu,检查menu的display值:""');
  280. menu.dispose();
  281. equal(menu.items.length,0,'dispose后,检查menu里的items');
  282. equal(document.getElementById(menu.id),null,'menu不在页面中');
  283. } );
  284. test( '_onClick', function() {
  285. var editor = new te.obj[0].Editor();
  286. //设置菜单内容
  287. var items=[
  288. {
  289. label:'取消链接',
  290. cmdName:'unlink'
  291. },
  292. {
  293. label:'表格',
  294. subMenu:{
  295. items: [{
  296. label:'居左对齐',
  297. cmdName:'justify',
  298. value:'left'
  299. },
  300. {
  301. label:'居右对齐',
  302. cmdName:'justify',
  303. value:'right'
  304. }],
  305. editor:editor
  306. }
  307. }
  308. ];
  309. var menu = new te.obj[0].Menu({className : 'edui-for-lineheight',items :items,editor:editor});
  310. menu.render(te.dom[0]);
  311. menu.postRender();
  312. menu.show();
  313. var menuid1 = menu.items[1].id;
  314. var submenu1 = menu.items[1].subMenu.id;
  315. equal(document.getElementById(submenu1).style.display,'none','submenu初始的display值:"none"');
  316. ua.click(document.getElementById(menuid1));
  317. setTimeout(function (){
  318. equal(document.getElementById(submenu1).style.display,'','显示submenu,检查submenu的display值:""');
  319. document.getElementById(submenu1).parentNode.removeChild(document.getElementById(submenu1));
  320. start();
  321. }, 300);
  322. stop();
  323. } );