jquery.layout.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. /**
  2. * EasyUI for jQuery 1.6.10
  3. *
  4. * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. *
  9. */
  10. (function($){
  11. var _1=false;
  12. function _2(_3,_4){
  13. var _5=$.data(_3,"layout");
  14. var _6=_5.options;
  15. var _7=_5.panels;
  16. var cc=$(_3);
  17. if(_4){
  18. $.extend(_6,{width:_4.width,height:_4.height});
  19. }
  20. if(_3.tagName.toLowerCase()=="body"){
  21. cc._size("fit");
  22. }else{
  23. cc._size(_6);
  24. }
  25. var _8={top:0,left:0,width:cc.width(),height:cc.height()};
  26. _9(_a(_7.expandNorth)?_7.expandNorth:_7.north,"n");
  27. _9(_a(_7.expandSouth)?_7.expandSouth:_7.south,"s");
  28. _b(_a(_7.expandEast)?_7.expandEast:_7.east,"e");
  29. _b(_a(_7.expandWest)?_7.expandWest:_7.west,"w");
  30. _7.center.panel("resize",_8);
  31. function _9(pp,_c){
  32. if(!pp.length||!_a(pp)){
  33. return;
  34. }
  35. var _d=pp.panel("options");
  36. pp.panel("resize",{width:cc.width(),height:_d.height});
  37. var _e=pp.panel("panel").outerHeight();
  38. pp.panel("move",{left:0,top:(_c=="n"?0:cc.height()-_e)});
  39. _8.height-=_e;
  40. if(_c=="n"){
  41. _8.top+=_e;
  42. if(!_d.split&&_d.border){
  43. _8.top--;
  44. }
  45. }
  46. if(!_d.split&&_d.border){
  47. _8.height++;
  48. }
  49. };
  50. function _b(pp,_f){
  51. if(!pp.length||!_a(pp)){
  52. return;
  53. }
  54. var _10=pp.panel("options");
  55. pp.panel("resize",{width:_10.width,height:_8.height});
  56. var _11=pp.panel("panel").outerWidth();
  57. pp.panel("move",{left:(_f=="e"?cc.width()-_11:0),top:_8.top});
  58. _8.width-=_11;
  59. if(_f=="w"){
  60. _8.left+=_11;
  61. if(!_10.split&&_10.border){
  62. _8.left--;
  63. }
  64. }
  65. if(!_10.split&&_10.border){
  66. _8.width++;
  67. }
  68. };
  69. };
  70. function _12(_13){
  71. var cc=$(_13);
  72. cc.addClass("layout");
  73. function _14(el){
  74. var _15=$.fn.layout.parsePanelOptions(el);
  75. if("north,south,east,west,center".indexOf(_15.region)>=0){
  76. _19(_13,_15,el);
  77. }
  78. };
  79. var _16=cc.layout("options");
  80. var _17=_16.onAdd;
  81. _16.onAdd=function(){
  82. };
  83. cc.find(">div,>form>div").each(function(){
  84. _14(this);
  85. });
  86. _16.onAdd=_17;
  87. cc.append("<div class=\"layout-split-proxy-h\"></div><div class=\"layout-split-proxy-v\"></div>");
  88. cc.bind("_resize",function(e,_18){
  89. if($(this).hasClass("easyui-fluid")||_18){
  90. _2(_13);
  91. }
  92. return false;
  93. });
  94. };
  95. function _19(_1a,_1b,el){
  96. _1b.region=_1b.region||"center";
  97. var _1c=$.data(_1a,"layout").panels;
  98. var cc=$(_1a);
  99. var dir=_1b.region;
  100. if(_1c[dir].length){
  101. return;
  102. }
  103. var pp=$(el);
  104. if(!pp.length){
  105. pp=$("<div></div>").appendTo(cc);
  106. }
  107. var _1d=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():"auto"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():"auto"),doSize:false,collapsible:true,onOpen:function(){
  108. var _1e=$(this).panel("header").children("div.panel-tool");
  109. _1e.children("a.panel-tool-collapse").hide();
  110. var _1f={north:"up",south:"down",east:"right",west:"left"};
  111. if(!_1f[dir]){
  112. return;
  113. }
  114. var _20="layout-button-"+_1f[dir];
  115. var t=_1e.children("a."+_20);
  116. if(!t.length){
  117. t=$("<a href=\"javascript:;\"></a>").addClass(_20).appendTo(_1e);
  118. t.bind("click",{dir:dir},function(e){
  119. _39(_1a,e.data.dir);
  120. return false;
  121. });
  122. }
  123. $(this).panel("options").collapsible?t.show():t.hide();
  124. }},_1b,{cls:((_1b.cls||"")+" layout-panel layout-panel-"+dir),bodyCls:((_1b.bodyCls||"")+" layout-body")});
  125. pp.panel(_1d);
  126. _1c[dir]=pp;
  127. var _21={north:"s",south:"n",east:"w",west:"e"};
  128. var _22=pp.panel("panel");
  129. if(pp.panel("options").split){
  130. _22.addClass("layout-split-"+dir);
  131. }
  132. _22.resizable($.extend({},{handles:(_21[dir]||""),disabled:(!pp.panel("options").split),onStartResize:function(e){
  133. _1=true;
  134. if(dir=="north"||dir=="south"){
  135. var _23=$(">div.layout-split-proxy-v",_1a);
  136. }else{
  137. var _23=$(">div.layout-split-proxy-h",_1a);
  138. }
  139. var top=0,_24=0,_25=0,_26=0;
  140. var pos={display:"block"};
  141. if(dir=="north"){
  142. pos.top=parseInt(_22.css("top"))+_22.outerHeight()-_23.height();
  143. pos.left=parseInt(_22.css("left"));
  144. pos.width=_22.outerWidth();
  145. pos.height=_23.height();
  146. }else{
  147. if(dir=="south"){
  148. pos.top=parseInt(_22.css("top"));
  149. pos.left=parseInt(_22.css("left"));
  150. pos.width=_22.outerWidth();
  151. pos.height=_23.height();
  152. }else{
  153. if(dir=="east"){
  154. pos.top=parseInt(_22.css("top"))||0;
  155. pos.left=parseInt(_22.css("left"))||0;
  156. pos.width=_23.width();
  157. pos.height=_22.outerHeight();
  158. }else{
  159. if(dir=="west"){
  160. pos.top=parseInt(_22.css("top"))||0;
  161. pos.left=_22.outerWidth()-_23.width();
  162. pos.width=_23.width();
  163. pos.height=_22.outerHeight();
  164. }
  165. }
  166. }
  167. }
  168. _23.css(pos);
  169. $("<div class=\"layout-mask\"></div>").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc);
  170. },onResize:function(e){
  171. if(dir=="north"||dir=="south"){
  172. var _27=_28(this);
  173. $(this).resizable("options").maxHeight=_27;
  174. var _29=$(">div.layout-split-proxy-v",_1a);
  175. var top=dir=="north"?e.data.height-_29.height():$(_1a).height()-e.data.height;
  176. _29.css("top",top);
  177. }else{
  178. var _2a=_28(this);
  179. $(this).resizable("options").maxWidth=_2a;
  180. var _29=$(">div.layout-split-proxy-h",_1a);
  181. var _2b=dir=="west"?e.data.width-_29.width():$(_1a).width()-e.data.width;
  182. _29.css("left",_2b);
  183. }
  184. return false;
  185. },onStopResize:function(e){
  186. cc.children("div.layout-split-proxy-v,div.layout-split-proxy-h").hide();
  187. pp.panel("resize",e.data);
  188. _2(_1a);
  189. _1=false;
  190. cc.find(">div.layout-mask").remove();
  191. }},_1b));
  192. cc.layout("options").onAdd.call(_1a,dir);
  193. function _28(p){
  194. var _2c="expand"+dir.substring(0,1).toUpperCase()+dir.substring(1);
  195. var _2d=_1c["center"];
  196. var _2e=(dir=="north"||dir=="south")?"minHeight":"minWidth";
  197. var _2f=(dir=="north"||dir=="south")?"maxHeight":"maxWidth";
  198. var _30=(dir=="north"||dir=="south")?"_outerHeight":"_outerWidth";
  199. var _31=$.parser.parseValue(_2f,_1c[dir].panel("options")[_2f],$(_1a));
  200. var _32=$.parser.parseValue(_2e,_2d.panel("options")[_2e],$(_1a));
  201. var _33=_2d.panel("panel")[_30]()-_32;
  202. if(_a(_1c[_2c])){
  203. _33+=_1c[_2c][_30]()-1;
  204. }else{
  205. _33+=$(p)[_30]();
  206. }
  207. if(_33>_31){
  208. _33=_31;
  209. }
  210. return _33;
  211. };
  212. };
  213. function _34(_35,_36){
  214. var _37=$.data(_35,"layout").panels;
  215. if(_37[_36].length){
  216. _37[_36].panel("destroy");
  217. _37[_36]=$();
  218. var _38="expand"+_36.substring(0,1).toUpperCase()+_36.substring(1);
  219. if(_37[_38]){
  220. _37[_38].panel("destroy");
  221. _37[_38]=undefined;
  222. }
  223. $(_35).layout("options").onRemove.call(_35,_36);
  224. }
  225. };
  226. function _39(_3a,_3b,_3c){
  227. if(_3c==undefined){
  228. _3c="normal";
  229. }
  230. var _3d=$.data(_3a,"layout").panels;
  231. var p=_3d[_3b];
  232. var _3e=p.panel("options");
  233. if(_3e.onBeforeCollapse.call(p)==false){
  234. return;
  235. }
  236. var _3f="expand"+_3b.substring(0,1).toUpperCase()+_3b.substring(1);
  237. if(!_3d[_3f]){
  238. _3d[_3f]=_40(_3b);
  239. var ep=_3d[_3f].panel("panel");
  240. if(!_3e.expandMode){
  241. ep.css("cursor","default");
  242. }else{
  243. ep.bind("click",function(){
  244. if(_3e.expandMode=="dock"){
  245. _4f(_3a,_3b);
  246. }else{
  247. p.panel("expand",false).panel("open");
  248. var _41=_42();
  249. p.panel("resize",_41.collapse);
  250. p.panel("panel").unbind(".layout").bind("mouseleave.layout",{region:_3b},function(e){
  251. $(this).stop(true,true);
  252. if(_1==true){
  253. return;
  254. }
  255. if($("body>div.combo-p>div.combo-panel:visible").length){
  256. return;
  257. }
  258. _39(_3a,e.data.region);
  259. });
  260. p.panel("panel").animate(_41.expand,function(){
  261. $(_3a).layout("options").onExpand.call(_3a,_3b);
  262. });
  263. }
  264. return false;
  265. });
  266. }
  267. }
  268. var _43=_42();
  269. if(!_a(_3d[_3f])){
  270. _3d.center.panel("resize",_43.resizeC);
  271. }
  272. p.panel("panel").animate(_43.collapse,_3c,function(){
  273. p.panel("collapse",false).panel("close");
  274. _3d[_3f].panel("open").panel("resize",_43.expandP);
  275. $(this).unbind(".layout");
  276. $(_3a).layout("options").onCollapse.call(_3a,_3b);
  277. });
  278. function _40(dir){
  279. var _44={"east":"left","west":"right","north":"down","south":"up"};
  280. var _45=(_3e.region=="north"||_3e.region=="south");
  281. var _46="layout-button-"+_44[dir];
  282. var p=$("<div></div>").appendTo(_3a);
  283. p.panel($.extend({},$.fn.layout.paneldefaults,{cls:("layout-expand layout-expand-"+dir),title:"&nbsp;",titleDirection:_3e.titleDirection,iconCls:(_3e.hideCollapsedContent?null:_3e.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3e.region,collapsedSize:_3e.collapsedSize,noheader:(!_45&&_3e.hideExpandTool),tools:((_45&&_3e.hideExpandTool)?null:[{iconCls:_46,handler:function(){
  284. _4f(_3a,_3b);
  285. return false;
  286. }}]),onResize:function(){
  287. var _47=$(this).children(".layout-expand-title");
  288. if(_47.length){
  289. _47._outerWidth($(this).height());
  290. var _48=($(this).width()-Math.min(_47._outerWidth(),_47._outerHeight()))/2;
  291. var top=Math.max(_47._outerWidth(),_47._outerHeight());
  292. if(_47.hasClass("layout-expand-title-down")){
  293. _48+=Math.min(_47._outerWidth(),_47._outerHeight());
  294. top=0;
  295. }
  296. _47.css({left:(_48+"px"),top:(top+"px")});
  297. }
  298. }}));
  299. if(!_3e.hideCollapsedContent){
  300. var _49=typeof _3e.collapsedContent=="function"?_3e.collapsedContent.call(p[0],_3e.title):_3e.collapsedContent;
  301. _45?p.panel("setTitle",_49):p.html(_49);
  302. }
  303. p.panel("panel").hover(function(){
  304. $(this).addClass("layout-expand-over");
  305. },function(){
  306. $(this).removeClass("layout-expand-over");
  307. });
  308. return p;
  309. };
  310. function _42(){
  311. var cc=$(_3a);
  312. var _4a=_3d.center.panel("options");
  313. var _4b=_3e.collapsedSize;
  314. if(_3b=="east"){
  315. var _4c=p.panel("panel")._outerWidth();
  316. var _4d=_4a.width+_4c-_4b;
  317. if(_3e.split||!_3e.border){
  318. _4d++;
  319. }
  320. return {resizeC:{width:_4d},expand:{left:cc.width()-_4c},expandP:{top:_4a.top,left:cc.width()-_4b,width:_4b,height:_4a.height},collapse:{left:cc.width(),top:_4a.top,height:_4a.height}};
  321. }else{
  322. if(_3b=="west"){
  323. var _4c=p.panel("panel")._outerWidth();
  324. var _4d=_4a.width+_4c-_4b;
  325. if(_3e.split||!_3e.border){
  326. _4d++;
  327. }
  328. return {resizeC:{width:_4d,left:_4b-1},expand:{left:0},expandP:{left:0,top:_4a.top,width:_4b,height:_4a.height},collapse:{left:-_4c,top:_4a.top,height:_4a.height}};
  329. }else{
  330. if(_3b=="north"){
  331. var _4e=p.panel("panel")._outerHeight();
  332. var hh=_4a.height;
  333. if(!_a(_3d.expandNorth)){
  334. hh+=_4e-_4b+((_3e.split||!_3e.border)?1:0);
  335. }
  336. _3d.east.add(_3d.west).add(_3d.expandEast).add(_3d.expandWest).panel("resize",{top:_4b-1,height:hh});
  337. return {resizeC:{top:_4b-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_4b},collapse:{top:-_4e,width:cc.width()}};
  338. }else{
  339. if(_3b=="south"){
  340. var _4e=p.panel("panel")._outerHeight();
  341. var hh=_4a.height;
  342. if(!_a(_3d.expandSouth)){
  343. hh+=_4e-_4b+((_3e.split||!_3e.border)?1:0);
  344. }
  345. _3d.east.add(_3d.west).add(_3d.expandEast).add(_3d.expandWest).panel("resize",{height:hh});
  346. return {resizeC:{height:hh},expand:{top:cc.height()-_4e},expandP:{top:cc.height()-_4b,left:0,width:cc.width(),height:_4b},collapse:{top:cc.height(),width:cc.width()}};
  347. }
  348. }
  349. }
  350. }
  351. };
  352. };
  353. function _4f(_50,_51){
  354. var _52=$.data(_50,"layout").panels;
  355. var p=_52[_51];
  356. var _53=p.panel("options");
  357. if(_53.onBeforeExpand.call(p)==false){
  358. return;
  359. }
  360. var _54="expand"+_51.substring(0,1).toUpperCase()+_51.substring(1);
  361. if(_52[_54]){
  362. _52[_54].panel("close");
  363. p.panel("panel").stop(true,true);
  364. p.panel("expand",false).panel("open");
  365. var _55=_56();
  366. p.panel("resize",_55.collapse);
  367. p.panel("panel").animate(_55.expand,function(){
  368. _2(_50);
  369. $(_50).layout("options").onExpand.call(_50,_51);
  370. });
  371. }
  372. function _56(){
  373. var cc=$(_50);
  374. var _57=_52.center.panel("options");
  375. if(_51=="east"&&_52.expandEast){
  376. return {collapse:{left:cc.width(),top:_57.top,height:_57.height},expand:{left:cc.width()-p.panel("panel")._outerWidth()}};
  377. }else{
  378. if(_51=="west"&&_52.expandWest){
  379. return {collapse:{left:-p.panel("panel")._outerWidth(),top:_57.top,height:_57.height},expand:{left:0}};
  380. }else{
  381. if(_51=="north"&&_52.expandNorth){
  382. return {collapse:{top:-p.panel("panel")._outerHeight(),width:cc.width()},expand:{top:0}};
  383. }else{
  384. if(_51=="south"&&_52.expandSouth){
  385. return {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel("panel")._outerHeight()}};
  386. }
  387. }
  388. }
  389. }
  390. };
  391. };
  392. function _a(pp){
  393. if(!pp){
  394. return false;
  395. }
  396. if(pp.length){
  397. return pp.panel("panel").is(":visible");
  398. }else{
  399. return false;
  400. }
  401. };
  402. function _58(_59){
  403. var _5a=$.data(_59,"layout");
  404. var _5b=_5a.options;
  405. var _5c=_5a.panels;
  406. var _5d=_5b.onCollapse;
  407. _5b.onCollapse=function(){
  408. };
  409. _5e("east");
  410. _5e("west");
  411. _5e("north");
  412. _5e("south");
  413. _5b.onCollapse=_5d;
  414. function _5e(_5f){
  415. var p=_5c[_5f];
  416. if(p.length&&p.panel("options").collapsed){
  417. _39(_59,_5f,0);
  418. }
  419. };
  420. };
  421. function _60(_61,_62,_63){
  422. var p=$(_61).layout("panel",_62);
  423. p.panel("options").split=_63;
  424. var cls="layout-split-"+_62;
  425. var _64=p.panel("panel").removeClass(cls);
  426. if(_63){
  427. _64.addClass(cls);
  428. }
  429. _64.resizable({disabled:(!_63)});
  430. _2(_61);
  431. };
  432. $.fn.layout=function(_65,_66){
  433. if(typeof _65=="string"){
  434. return $.fn.layout.methods[_65](this,_66);
  435. }
  436. _65=_65||{};
  437. return this.each(function(){
  438. var _67=$.data(this,"layout");
  439. if(_67){
  440. $.extend(_67.options,_65);
  441. }else{
  442. var _68=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_65);
  443. $.data(this,"layout",{options:_68,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}});
  444. _12(this);
  445. }
  446. _2(this);
  447. _58(this);
  448. });
  449. };
  450. $.fn.layout.methods={options:function(jq){
  451. return $.data(jq[0],"layout").options;
  452. },resize:function(jq,_69){
  453. return jq.each(function(){
  454. _2(this,_69);
  455. });
  456. },panel:function(jq,_6a){
  457. return $.data(jq[0],"layout").panels[_6a];
  458. },collapse:function(jq,_6b){
  459. return jq.each(function(){
  460. _39(this,_6b);
  461. });
  462. },expand:function(jq,_6c){
  463. return jq.each(function(){
  464. _4f(this,_6c);
  465. });
  466. },add:function(jq,_6d){
  467. return jq.each(function(){
  468. _19(this,_6d);
  469. _2(this);
  470. if($(this).layout("panel",_6d.region).panel("options").collapsed){
  471. _39(this,_6d.region,0);
  472. }
  473. });
  474. },remove:function(jq,_6e){
  475. return jq.each(function(){
  476. _34(this,_6e);
  477. _2(this);
  478. });
  479. },split:function(jq,_6f){
  480. return jq.each(function(){
  481. _60(this,_6f,true);
  482. });
  483. },unsplit:function(jq,_70){
  484. return jq.each(function(){
  485. _60(this,_70,false);
  486. });
  487. }};
  488. $.fn.layout.parseOptions=function(_71){
  489. return $.extend({},$.parser.parseOptions(_71,[{fit:"boolean"}]));
  490. };
  491. $.fn.layout.defaults={fit:false,onExpand:function(_72){
  492. },onCollapse:function(_73){
  493. },onAdd:function(_74){
  494. },onRemove:function(_75){
  495. }};
  496. $.fn.layout.parsePanelOptions=function(_76){
  497. var t=$(_76);
  498. return $.extend({},$.fn.panel.parseOptions(_76),$.parser.parseOptions(_76,["region",{split:"boolean",collpasedSize:"number",minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number"}]));
  499. };
  500. $.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:32,expandMode:"float",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_77){
  501. var p=$(this);
  502. var _78=p.panel("options");
  503. if(_78.region=="north"||_78.region=="south"){
  504. return _77;
  505. }
  506. var cc=[];
  507. if(_78.iconCls){
  508. cc.push("<div class=\"panel-icon "+_78.iconCls+"\"></div>");
  509. }
  510. cc.push("<div class=\"panel-title layout-expand-title");
  511. cc.push(" layout-expand-title-"+_78.titleDirection);
  512. cc.push(_78.iconCls?" layout-expand-with-icon":"");
  513. cc.push("\">");
  514. cc.push(_77);
  515. cc.push("</div>");
  516. return cc.join("");
  517. },minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000});
  518. })(jQuery);