jquery.propertygrid.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. /**
  2. * jQuery EasyUI 1.4.3
  3. *
  4. * Copyright (c) 2009-2015 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt
  7. * To use it on other terms please contact us at info@jeasyui.com
  8. *
  9. */
  10. (function($){
  11. var _1;
  12. $(document).unbind(".propertygrid").bind("mousedown.propertygrid",function(e){
  13. var p=$(e.target).closest("div.datagrid-view,div.combo-panel");
  14. if(p.length){
  15. return;
  16. }
  17. _2(_1);
  18. _1=undefined;
  19. });
  20. function _3(_4){
  21. var _5=$.data(_4,"propertygrid");
  22. var _6=$.data(_4,"propertygrid").options;
  23. $(_4).datagrid($.extend({},_6,{cls:"propertygrid",view:(_6.showGroup?_6.groupView:_6.view),onBeforeEdit:function(_7,_8){
  24. if(_6.onBeforeEdit.call(_4,_7,_8)==false){
  25. return false;
  26. }
  27. var dg=$(this);
  28. var _8=dg.datagrid("getRows")[_7];
  29. var _9=dg.datagrid("getColumnOption","value");
  30. _9.editor=_8.editor;
  31. },onClickCell:function(_a,_b,_c){
  32. if(_1!=this){
  33. _2(_1);
  34. _1=this;
  35. }
  36. if(_6.editIndex!=_a){
  37. _2(_1);
  38. $(this).datagrid("beginEdit",_a);
  39. var ed=$(this).datagrid("getEditor",{index:_a,field:_b});
  40. if(!ed){
  41. ed=$(this).datagrid("getEditor",{index:_a,field:"value"});
  42. }
  43. if(ed){
  44. var t=$(ed.target);
  45. var _d=t.data("textbox")?t.textbox("textbox"):t;
  46. _d.focus();
  47. _6.editIndex=_a;
  48. }
  49. }
  50. _6.onClickCell.call(_4,_a,_b,_c);
  51. },loadFilter:function(_e){
  52. _2(this);
  53. return _6.loadFilter.call(this,_e);
  54. }}));
  55. };
  56. function _2(_f){
  57. var t=$(_f);
  58. if(!t.length){
  59. return;
  60. }
  61. var _10=$.data(_f,"propertygrid").options;
  62. _10.finder.getTr(_f,null,"editing").each(function(){
  63. var _11=parseInt($(this).attr("datagrid-row-index"));
  64. if(t.datagrid("validateRow",_11)){
  65. t.datagrid("endEdit",_11);
  66. }else{
  67. t.datagrid("cancelEdit",_11);
  68. }
  69. });
  70. _10.editIndex=undefined;
  71. };
  72. $.fn.propertygrid=function(_12,_13){
  73. if(typeof _12=="string"){
  74. var _14=$.fn.propertygrid.methods[_12];
  75. if(_14){
  76. return _14(this,_13);
  77. }else{
  78. return this.datagrid(_12,_13);
  79. }
  80. }
  81. _12=_12||{};
  82. return this.each(function(){
  83. var _15=$.data(this,"propertygrid");
  84. if(_15){
  85. $.extend(_15.options,_12);
  86. }else{
  87. var _16=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_12);
  88. _16.frozenColumns=$.extend(true,[],_16.frozenColumns);
  89. _16.columns=$.extend(true,[],_16.columns);
  90. $.data(this,"propertygrid",{options:_16});
  91. }
  92. _3(this);
  93. });
  94. };
  95. $.fn.propertygrid.methods={options:function(jq){
  96. return $.data(jq[0],"propertygrid").options;
  97. }};
  98. $.fn.propertygrid.parseOptions=function(_17){
  99. return $.extend({},$.fn.datagrid.parseOptions(_17),$.parser.parseOptions(_17,[{showGroup:"boolean"}]));
  100. };
  101. var _18=$.extend({},$.fn.datagrid.defaults.view,{render:function(_19,_1a,_1b){
  102. var _1c=[];
  103. var _1d=this.groups;
  104. for(var i=0;i<_1d.length;i++){
  105. _1c.push(this.renderGroup.call(this,_19,i,_1d[i],_1b));
  106. }
  107. $(_1a).html(_1c.join(""));
  108. },renderGroup:function(_1e,_1f,_20,_21){
  109. var _22=$.data(_1e,"datagrid");
  110. var _23=_22.options;
  111. var _24=$(_1e).datagrid("getColumnFields",_21);
  112. var _25=[];
  113. _25.push("<div class=\"datagrid-group\" group-index="+_1f+">");
  114. _25.push("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"height:100%\"><tbody>");
  115. _25.push("<tr>");
  116. if((_21&&(_23.rownumbers||_23.frozenColumns.length))||(!_21&&!(_23.rownumbers||_23.frozenColumns.length))){
  117. _25.push("<td style=\"border:0;text-align:center;width:25px\"><span class=\"datagrid-row-expander datagrid-row-collapse\" style=\"display:inline-block;width:16px;height:16px;cursor:pointer\">&nbsp;</span></td>");
  118. }
  119. _25.push("<td style=\"border:0;\">");
  120. if(!_21){
  121. _25.push("<span class=\"datagrid-group-title\">");
  122. _25.push(_23.groupFormatter.call(_1e,_20.value,_20.rows));
  123. _25.push("</span>");
  124. }
  125. _25.push("</td>");
  126. _25.push("</tr>");
  127. _25.push("</tbody></table>");
  128. _25.push("</div>");
  129. _25.push("<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>");
  130. var _26=_20.startIndex;
  131. for(var j=0;j<_20.rows.length;j++){
  132. var css=_23.rowStyler?_23.rowStyler.call(_1e,_26,_20.rows[j]):"";
  133. var _27="";
  134. var _28="";
  135. if(typeof css=="string"){
  136. _28=css;
  137. }else{
  138. if(css){
  139. _27=css["class"]||"";
  140. _28=css["style"]||"";
  141. }
  142. }
  143. var cls="class=\"datagrid-row "+(_26%2&&_23.striped?"datagrid-row-alt ":" ")+_27+"\"";
  144. var _29=_28?"style=\""+_28+"\"":"";
  145. var _2a=_22.rowIdPrefix+"-"+(_21?1:2)+"-"+_26;
  146. _25.push("<tr id=\""+_2a+"\" datagrid-row-index=\""+_26+"\" "+cls+" "+_29+">");
  147. _25.push(this.renderRow.call(this,_1e,_24,_21,_26,_20.rows[j]));
  148. _25.push("</tr>");
  149. _26++;
  150. }
  151. _25.push("</tbody></table>");
  152. return _25.join("");
  153. },bindEvents:function(_2b){
  154. var _2c=$.data(_2b,"datagrid");
  155. var dc=_2c.dc;
  156. var _2d=dc.body1.add(dc.body2);
  157. var _2e=($.data(_2d[0],"events")||$._data(_2d[0],"events")).click[0].handler;
  158. _2d.unbind("click").bind("click",function(e){
  159. var tt=$(e.target);
  160. var _2f=tt.closest("span.datagrid-row-expander");
  161. if(_2f.length){
  162. var _30=_2f.closest("div.datagrid-group").attr("group-index");
  163. if(_2f.hasClass("datagrid-row-collapse")){
  164. $(_2b).datagrid("collapseGroup",_30);
  165. }else{
  166. $(_2b).datagrid("expandGroup",_30);
  167. }
  168. }else{
  169. _2e(e);
  170. }
  171. e.stopPropagation();
  172. });
  173. },onBeforeRender:function(_31,_32){
  174. var _33=$.data(_31,"datagrid");
  175. var _34=_33.options;
  176. _35();
  177. var _36=[];
  178. for(var i=0;i<_32.length;i++){
  179. var row=_32[i];
  180. var _37=_38(row[_34.groupField]);
  181. if(!_37){
  182. _37={value:row[_34.groupField],rows:[row]};
  183. _36.push(_37);
  184. }else{
  185. _37.rows.push(row);
  186. }
  187. }
  188. var _39=0;
  189. var _3a=[];
  190. for(var i=0;i<_36.length;i++){
  191. var _37=_36[i];
  192. _37.startIndex=_39;
  193. _39+=_37.rows.length;
  194. _3a=_3a.concat(_37.rows);
  195. }
  196. _33.data.rows=_3a;
  197. this.groups=_36;
  198. var _3b=this;
  199. setTimeout(function(){
  200. _3b.bindEvents(_31);
  201. },0);
  202. function _38(_3c){
  203. for(var i=0;i<_36.length;i++){
  204. var _3d=_36[i];
  205. if(_3d.value==_3c){
  206. return _3d;
  207. }
  208. }
  209. return null;
  210. };
  211. function _35(){
  212. if(!$("#datagrid-group-style").length){
  213. $("head").append("<style id=\"datagrid-group-style\">"+".datagrid-group{height:25px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}"+"</style>");
  214. }
  215. };
  216. }});
  217. $.extend($.fn.datagrid.methods,{expandGroup:function(jq,_3e){
  218. return jq.each(function(){
  219. var _3f=$.data(this,"datagrid").dc.view;
  220. var _40=_3f.find(_3e!=undefined?"div.datagrid-group[group-index=\""+_3e+"\"]":"div.datagrid-group");
  221. var _41=_40.find("span.datagrid-row-expander");
  222. if(_41.hasClass("datagrid-row-expand")){
  223. _41.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse");
  224. _40.next("table").show();
  225. }
  226. $(this).datagrid("fixRowHeight");
  227. });
  228. },collapseGroup:function(jq,_42){
  229. return jq.each(function(){
  230. var _43=$.data(this,"datagrid").dc.view;
  231. var _44=_43.find(_42!=undefined?"div.datagrid-group[group-index=\""+_42+"\"]":"div.datagrid-group");
  232. var _45=_44.find("span.datagrid-row-expander");
  233. if(_45.hasClass("datagrid-row-collapse")){
  234. _45.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand");
  235. _44.next("table").hide();
  236. }
  237. $(this).datagrid("fixRowHeight");
  238. });
  239. }});
  240. $.extend(_18,{refreshGroupTitle:function(_46,_47){
  241. var _48=$.data(_46,"datagrid");
  242. var _49=_48.options;
  243. var dc=_48.dc;
  244. var _4a=this.groups[_47];
  245. var _4b=dc.body2.children("div.datagrid-group[group-index="+_47+"]").find("span.datagrid-group-title");
  246. _4b.html(_49.groupFormatter.call(_46,_4a.value,_4a.rows));
  247. },insertRow:function(_4c,_4d,row){
  248. var _4e=$.data(_4c,"datagrid");
  249. var _4f=_4e.options;
  250. var dc=_4e.dc;
  251. var _50=null;
  252. var _51;
  253. for(var i=0;i<this.groups.length;i++){
  254. if(this.groups[i].value==row[_4f.groupField]){
  255. _50=this.groups[i];
  256. _51=i;
  257. break;
  258. }
  259. }
  260. if(_50){
  261. if(_4d==undefined||_4d==null){
  262. _4d=_4e.data.rows.length;
  263. }
  264. if(_4d<_50.startIndex){
  265. _4d=_50.startIndex;
  266. }else{
  267. if(_4d>_50.startIndex+_50.rows.length){
  268. _4d=_50.startIndex+_50.rows.length;
  269. }
  270. }
  271. $.fn.datagrid.defaults.view.insertRow.call(this,_4c,_4d,row);
  272. if(_4d>=_50.startIndex+_50.rows.length){
  273. _52(_4d,true);
  274. _52(_4d,false);
  275. }
  276. _50.rows.splice(_4d-_50.startIndex,0,row);
  277. }else{
  278. _50={value:row[_4f.groupField],rows:[row],startIndex:_4e.data.rows.length};
  279. _51=this.groups.length;
  280. dc.body1.append(this.renderGroup.call(this,_4c,_51,_50,true));
  281. dc.body2.append(this.renderGroup.call(this,_4c,_51,_50,false));
  282. this.groups.push(_50);
  283. _4e.data.rows.push(row);
  284. }
  285. this.refreshGroupTitle(_4c,_51);
  286. function _52(_53,_54){
  287. var _55=_54?1:2;
  288. var _56=_4f.finder.getTr(_4c,_53-1,"body",_55);
  289. var tr=_4f.finder.getTr(_4c,_53,"body",_55);
  290. tr.insertAfter(_56);
  291. };
  292. },updateRow:function(_57,_58,row){
  293. var _59=$.data(_57,"datagrid").options;
  294. $.fn.datagrid.defaults.view.updateRow.call(this,_57,_58,row);
  295. var tb=_59.finder.getTr(_57,_58,"body",2).closest("table.datagrid-btable");
  296. var _5a=parseInt(tb.prev().attr("group-index"));
  297. this.refreshGroupTitle(_57,_5a);
  298. },deleteRow:function(_5b,_5c){
  299. var _5d=$.data(_5b,"datagrid");
  300. var _5e=_5d.options;
  301. var dc=_5d.dc;
  302. var _5f=dc.body1.add(dc.body2);
  303. var tb=_5e.finder.getTr(_5b,_5c,"body",2).closest("table.datagrid-btable");
  304. var _60=parseInt(tb.prev().attr("group-index"));
  305. $.fn.datagrid.defaults.view.deleteRow.call(this,_5b,_5c);
  306. var _61=this.groups[_60];
  307. if(_61.rows.length>1){
  308. _61.rows.splice(_5c-_61.startIndex,1);
  309. this.refreshGroupTitle(_5b,_60);
  310. }else{
  311. _5f.children("div.datagrid-group[group-index="+_60+"]").remove();
  312. for(var i=_60+1;i<this.groups.length;i++){
  313. _5f.children("div.datagrid-group[group-index="+i+"]").attr("group-index",i-1);
  314. }
  315. this.groups.splice(_60,1);
  316. }
  317. var _5c=0;
  318. for(var i=0;i<this.groups.length;i++){
  319. var _61=this.groups[i];
  320. _61.startIndex=_5c;
  321. _5c+=_61.rows.length;
  322. }
  323. }});
  324. $.fn.propertygrid.defaults=$.extend({},$.fn.datagrid.defaults,{singleSelect:true,remoteSort:false,fitColumns:true,loadMsg:"",frozenColumns:[[{field:"f",width:16,resizable:false}]],columns:[[{field:"name",title:"Name",width:100,sortable:true},{field:"value",title:"Value",width:100,resizable:false}]],showGroup:false,groupView:_18,groupField:"group",groupFormatter:function(_62,_63){
  325. return _62;
  326. }});
  327. })(jQuery);