jquery.menu.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. /**
  2. * jQuery EasyUI 1.3.4
  3. *
  4. * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL or commercial licenses
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. * http://www.gnu.org/licenses/gpl.txt
  9. * http://www.jeasyui.com/license_commercial.php
  10. *
  11. */
  12. (function($){
  13. function _1(_2){
  14. $(_2).appendTo("body");
  15. $(_2).addClass("menu-top");
  16. $(document).unbind(".menu").bind("mousedown.menu",function(e){
  17. var _3=$("body>div.menu:visible");
  18. var m=$(e.target).closest("div.menu",_3);
  19. if(m.length){
  20. return;
  21. }
  22. $("body>div.menu-top:visible").menu("hide");
  23. });
  24. var _4=_5($(_2));
  25. for(var i=0;i<_4.length;i++){
  26. _6(_4[i]);
  27. }
  28. function _5(_7){
  29. var _8=[];
  30. _7.addClass("menu");
  31. _8.push(_7);
  32. if(!_7.hasClass("menu-content")){
  33. _7.children("div").each(function(){
  34. var _9=$(this).children("div");
  35. if(_9.length){
  36. _9.insertAfter(_2);
  37. this.submenu=_9;
  38. var mm=_5(_9);
  39. _8=_8.concat(mm);
  40. }
  41. });
  42. }
  43. return _8;
  44. };
  45. function _6(_a){
  46. var _b=$.parser.parseOptions(_a[0],["width"]).width;
  47. if(_a.hasClass("menu-content")){
  48. _a[0].originalWidth=_b||_a._outerWidth();
  49. }else{
  50. _a[0].originalWidth=_b||0;
  51. _a.children("div").each(function(){
  52. var _c=$(this);
  53. if(_c.hasClass("menu-sep")){
  54. }else{
  55. var _d=$.extend({},$.parser.parseOptions(this,["name","iconCls","href"]),{disabled:(_c.attr("disabled")?true:undefined)});
  56. _c[0].itemName=_d.name||"";
  57. _c[0].itemHref=_d.href||"";
  58. var _e=_c.addClass("menu-item").html();
  59. _c.empty().append($("<div class=\"menu-text\"></div>").html(_e));
  60. if(_d.iconCls){
  61. $("<div class=\"menu-icon\"></div>").addClass(_d.iconCls).appendTo(_c);
  62. }
  63. if(_d.disabled){
  64. _f(_2,_c[0],true);
  65. }
  66. if(_c[0].submenu){
  67. $("<div class=\"menu-rightarrow\"></div>").appendTo(_c);
  68. }
  69. _10(_2,_c);
  70. }
  71. });
  72. $("<div class=\"menu-line\"></div>").prependTo(_a);
  73. }
  74. _11(_2,_a);
  75. _a.hide();
  76. _12(_2,_a);
  77. };
  78. };
  79. function _11(_13,_14){
  80. var _15=$.data(_13,"menu").options;
  81. var d=_14.css("display");
  82. _14.css({display:"block",left:-10000});
  83. var _16=0;
  84. _14.find("div.menu-text").each(function(){
  85. if(_16<$(this)._outerWidth()){
  86. _16=$(this)._outerWidth();
  87. }
  88. $(this).closest("div.menu-item")._outerHeight($(this)._outerHeight()+2);
  89. });
  90. _16+=65;
  91. _14._outerWidth(Math.max((_14[0].originalWidth||0),_16,_15.minWidth));
  92. _14.css("display",d);
  93. };
  94. function _12(_17,_18){
  95. var _19=$.data(_17,"menu");
  96. _18.unbind(".menu").bind("mouseenter.menu",function(){
  97. if(_19.timer){
  98. clearTimeout(_19.timer);
  99. _19.timer=null;
  100. }
  101. }).bind("mouseleave.menu",function(){
  102. _19.timer=setTimeout(function(){
  103. _1a(_17);
  104. },100);
  105. });
  106. };
  107. function _10(_1b,_1c){
  108. _1c.unbind(".menu");
  109. _1c.bind("click.menu",function(){
  110. if($(this).hasClass("menu-item-disabled")){
  111. return;
  112. }
  113. if(!this.submenu){
  114. _1a(_1b);
  115. var _1d=$(this).attr("href");
  116. if(_1d){
  117. location.href=_1d;
  118. }
  119. }
  120. var _1e=$(_1b).menu("getItem",this);
  121. $.data(_1b,"menu").options.onClick.call(_1b,_1e);
  122. }).bind("mouseenter.menu",function(e){
  123. _1c.siblings().each(function(){
  124. if(this.submenu){
  125. _21(this.submenu);
  126. }
  127. $(this).removeClass("menu-active");
  128. });
  129. _1c.addClass("menu-active");
  130. if($(this).hasClass("menu-item-disabled")){
  131. _1c.addClass("menu-active-disabled");
  132. return;
  133. }
  134. var _1f=_1c[0].submenu;
  135. if(_1f){
  136. $(_1b).menu("show",{menu:_1f,parent:_1c});
  137. }
  138. }).bind("mouseleave.menu",function(e){
  139. _1c.removeClass("menu-active menu-active-disabled");
  140. var _20=_1c[0].submenu;
  141. if(_20){
  142. if(e.pageX>=parseInt(_20.css("left"))){
  143. _1c.addClass("menu-active");
  144. }else{
  145. _21(_20);
  146. }
  147. }else{
  148. _1c.removeClass("menu-active");
  149. }
  150. });
  151. };
  152. function _1a(_22){
  153. var _23=$.data(_22,"menu");
  154. if(_23){
  155. if($(_22).is(":visible")){
  156. _21($(_22));
  157. _23.options.onHide.call(_22);
  158. }
  159. }
  160. return false;
  161. };
  162. function _24(_25,_26){
  163. var _27,top;
  164. _26=_26||{};
  165. var _28=$(_26.menu||_25);
  166. if(_28.hasClass("menu-top")){
  167. var _29=$.data(_25,"menu").options;
  168. $.extend(_29,_26);
  169. _27=_29.left;
  170. top=_29.top;
  171. if(_29.alignTo){
  172. var at=$(_29.alignTo);
  173. _27=at.offset().left;
  174. top=at.offset().top+at._outerHeight();
  175. }
  176. if(_27+_28.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){
  177. _27=$(window)._outerWidth()+$(document).scrollLeft()-_28.outerWidth()-5;
  178. }
  179. if(top+_28.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
  180. top-=_28.outerHeight();
  181. }
  182. }else{
  183. var _2a=_26.parent;
  184. _27=_2a.offset().left+_2a.outerWidth()-2;
  185. if(_27+_28.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){
  186. _27=_2a.offset().left-_28.outerWidth()+2;
  187. }
  188. var top=_2a.offset().top-3;
  189. if(top+_28.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
  190. top=$(window)._outerHeight()+$(document).scrollTop()-_28.outerHeight()-5;
  191. }
  192. }
  193. _28.css({left:_27,top:top});
  194. _28.show(0,function(){
  195. if(!_28[0].shadow){
  196. _28[0].shadow=$("<div class=\"menu-shadow\"></div>").insertAfter(_28);
  197. }
  198. _28[0].shadow.css({display:"block",zIndex:$.fn.menu.defaults.zIndex++,left:_28.css("left"),top:_28.css("top"),width:_28.outerWidth(),height:_28.outerHeight()});
  199. _28.css("z-index",$.fn.menu.defaults.zIndex++);
  200. if(_28.hasClass("menu-top")){
  201. $.data(_28[0],"menu").options.onShow.call(_28[0]);
  202. }
  203. });
  204. };
  205. function _21(_2b){
  206. if(!_2b){
  207. return;
  208. }
  209. _2c(_2b);
  210. _2b.find("div.menu-item").each(function(){
  211. if(this.submenu){
  212. _21(this.submenu);
  213. }
  214. $(this).removeClass("menu-active");
  215. });
  216. function _2c(m){
  217. m.stop(true,true);
  218. if(m[0].shadow){
  219. m[0].shadow.hide();
  220. }
  221. m.hide();
  222. };
  223. };
  224. function _2d(_2e,_2f){
  225. var _30=null;
  226. var tmp=$("<div></div>");
  227. function _31(_32){
  228. _32.children("div.menu-item").each(function(){
  229. var _33=$(_2e).menu("getItem",this);
  230. var s=tmp.empty().html(_33.text).text();
  231. if(_2f==$.trim(s)){
  232. _30=_33;
  233. }else{
  234. if(this.submenu&&!_30){
  235. _31(this.submenu);
  236. }
  237. }
  238. });
  239. };
  240. _31($(_2e));
  241. tmp.remove();
  242. return _30;
  243. };
  244. function _f(_34,_35,_36){
  245. var t=$(_35);
  246. if(_36){
  247. t.addClass("menu-item-disabled");
  248. if(_35.onclick){
  249. _35.onclick1=_35.onclick;
  250. _35.onclick=null;
  251. }
  252. }else{
  253. t.removeClass("menu-item-disabled");
  254. if(_35.onclick1){
  255. _35.onclick=_35.onclick1;
  256. _35.onclick1=null;
  257. }
  258. }
  259. };
  260. function _37(_38,_39){
  261. var _3a=$(_38);
  262. if(_39.parent){
  263. if(!_39.parent.submenu){
  264. var _3b=$("<div class=\"menu\"><div class=\"menu-line\"></div></div>").appendTo("body");
  265. _3b.hide();
  266. _39.parent.submenu=_3b;
  267. $("<div class=\"menu-rightarrow\"></div>").appendTo(_39.parent);
  268. }
  269. _3a=_39.parent.submenu;
  270. }
  271. var _3c=$("<div class=\"menu-item\"></div>").appendTo(_3a);
  272. $("<div class=\"menu-text\"></div>").html(_39.text).appendTo(_3c);
  273. if(_39.iconCls){
  274. $("<div class=\"menu-icon\"></div>").addClass(_39.iconCls).appendTo(_3c);
  275. }
  276. if(_39.id){
  277. _3c.attr("id",_39.id);
  278. }
  279. if(_39.name){
  280. _3c[0].itemName=_39.name;
  281. }
  282. if(_39.href){
  283. _3c[0].itemHref=_39.href;
  284. }
  285. if(_39.onclick){
  286. if(typeof _39.onclick=="string"){
  287. _3c.attr("onclick",_39.onclick);
  288. }else{
  289. _3c[0].onclick=eval(_39.onclick);
  290. }
  291. }
  292. if(_39.handler){
  293. _3c[0].onclick=eval(_39.handler);
  294. }
  295. _10(_38,_3c);
  296. if(_39.disabled){
  297. _f(_38,_3c[0],true);
  298. }
  299. _12(_38,_3a);
  300. _11(_38,_3a);
  301. };
  302. function _3d(_3e,_3f){
  303. function _40(el){
  304. if(el.submenu){
  305. el.submenu.children("div.menu-item").each(function(){
  306. _40(this);
  307. });
  308. var _41=el.submenu[0].shadow;
  309. if(_41){
  310. _41.remove();
  311. }
  312. el.submenu.remove();
  313. }
  314. $(el).remove();
  315. };
  316. _40(_3f);
  317. };
  318. function _42(_43){
  319. $(_43).children("div.menu-item").each(function(){
  320. _3d(_43,this);
  321. });
  322. if(_43.shadow){
  323. _43.shadow.remove();
  324. }
  325. $(_43).remove();
  326. };
  327. $.fn.menu=function(_44,_45){
  328. if(typeof _44=="string"){
  329. return $.fn.menu.methods[_44](this,_45);
  330. }
  331. _44=_44||{};
  332. return this.each(function(){
  333. var _46=$.data(this,"menu");
  334. if(_46){
  335. $.extend(_46.options,_44);
  336. }else{
  337. _46=$.data(this,"menu",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_44)});
  338. _1(this);
  339. }
  340. $(this).css({left:_46.options.left,top:_46.options.top});
  341. });
  342. };
  343. $.fn.menu.methods={options:function(jq){
  344. return $.data(jq[0],"menu").options;
  345. },show:function(jq,pos){
  346. return jq.each(function(){
  347. _24(this,pos);
  348. });
  349. },hide:function(jq){
  350. return jq.each(function(){
  351. _1a(this);
  352. });
  353. },destroy:function(jq){
  354. return jq.each(function(){
  355. _42(this);
  356. });
  357. },setText:function(jq,_47){
  358. return jq.each(function(){
  359. $(_47.target).children("div.menu-text").html(_47.text);
  360. });
  361. },setIcon:function(jq,_48){
  362. return jq.each(function(){
  363. var _49=$(this).menu("getItem",_48.target);
  364. if(_49.iconCls){
  365. $(_49.target).children("div.menu-icon").removeClass(_49.iconCls).addClass(_48.iconCls);
  366. }else{
  367. $("<div class=\"menu-icon\"></div>").addClass(_48.iconCls).appendTo(_48.target);
  368. }
  369. });
  370. },getItem:function(jq,_4a){
  371. var t=$(_4a);
  372. var _4b={target:_4a,id:t.attr("id"),text:$.trim(t.children("div.menu-text").html()),disabled:t.hasClass("menu-item-disabled"),name:_4a.itemName,href:_4a.itemHref,onclick:_4a.onclick};
  373. var _4c=t.children("div.menu-icon");
  374. if(_4c.length){
  375. var cc=[];
  376. var aa=_4c.attr("class").split(" ");
  377. for(var i=0;i<aa.length;i++){
  378. if(aa[i]!="menu-icon"){
  379. cc.push(aa[i]);
  380. }
  381. }
  382. _4b.iconCls=cc.join(" ");
  383. }
  384. return _4b;
  385. },findItem:function(jq,_4d){
  386. return _2d(jq[0],_4d);
  387. },appendItem:function(jq,_4e){
  388. return jq.each(function(){
  389. _37(this,_4e);
  390. });
  391. },removeItem:function(jq,_4f){
  392. return jq.each(function(){
  393. _3d(this,_4f);
  394. });
  395. },enableItem:function(jq,_50){
  396. return jq.each(function(){
  397. _f(this,_50,false);
  398. });
  399. },disableItem:function(jq,_51){
  400. return jq.each(function(){
  401. _f(this,_51,true);
  402. });
  403. }};
  404. $.fn.menu.parseOptions=function(_52){
  405. return $.extend({},$.parser.parseOptions(_52,["left","top",{minWidth:"number"}]));
  406. };
  407. $.fn.menu.defaults={zIndex:110000,left:0,top:0,minWidth:120,onShow:function(){
  408. },onHide:function(){
  409. },onClick:function(_53){
  410. }};
  411. })(jQuery);