jquery.combogrid.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. /**
  2. * jQuery EasyUI 1.4.1
  3. *
  4. * Copyright (c) 2009-2014 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. function _1(_2){
  12. var _3=$.data(_2,"combogrid");
  13. var _4=_3.options;
  14. var _5=_3.grid;
  15. $(_2).addClass("combogrid-f").combo($.extend({},_4,{onShowPanel:function(){
  16. var p=$(this).combogrid("panel");
  17. var _6=p.outerHeight()-p.height();
  18. var _7=p._size("minHeight");
  19. var _8=p._size("maxHeight");
  20. $(this).combogrid("grid").datagrid("resize",{width:"100%",height:(isNaN(parseInt(_4.panelHeight))?"auto":"100%"),minHeight:(_7?_7-_6:""),maxHeight:(_8?_8-_6:"")});
  21. _4.onShowPanel.call(this);
  22. }}));
  23. var _9=$(_2).combo("panel");
  24. if(!_5){
  25. _5=$("<table></table>").appendTo(_9);
  26. _3.grid=_5;
  27. }
  28. _5.datagrid($.extend({},_4,{border:false,singleSelect:(!_4.multiple),onLoadSuccess:function(_a){
  29. var _b=$(_2).combo("getValues");
  30. var _c=_4.onSelect;
  31. _4.onSelect=function(){
  32. };
  33. _1c(_2,_b,_3.remainText);
  34. _4.onSelect=_c;
  35. _4.onLoadSuccess.apply(_2,arguments);
  36. },onClickRow:_d,onSelect:function(_e,_f){
  37. _10();
  38. _4.onSelect.call(this,_e,_f);
  39. },onUnselect:function(_11,row){
  40. _10();
  41. _4.onUnselect.call(this,_11,row);
  42. },onSelectAll:function(_12){
  43. _10();
  44. _4.onSelectAll.call(this,_12);
  45. },onUnselectAll:function(_13){
  46. if(_4.multiple){
  47. _10();
  48. }
  49. _4.onUnselectAll.call(this,_13);
  50. }}));
  51. function _d(_14,row){
  52. _3.remainText=false;
  53. _10();
  54. if(!_4.multiple){
  55. $(_2).combo("hidePanel");
  56. }
  57. _4.onClickRow.call(this,_14,row);
  58. };
  59. function _10(){
  60. var _15=_5.datagrid("getSelections");
  61. var vv=[],ss=[];
  62. for(var i=0;i<_15.length;i++){
  63. vv.push(_15[i][_4.idField]);
  64. ss.push(_15[i][_4.textField]);
  65. }
  66. if(!_4.multiple){
  67. $(_2).combo("setValues",(vv.length?vv:[""]));
  68. }else{
  69. $(_2).combo("setValues",vv);
  70. }
  71. if(!_3.remainText){
  72. $(_2).combo("setText",ss.join(_4.separator));
  73. }
  74. };
  75. };
  76. function nav(_16,dir){
  77. var _17=$.data(_16,"combogrid");
  78. var _18=_17.options;
  79. var _19=_17.grid;
  80. var _1a=_19.datagrid("getRows").length;
  81. if(!_1a){
  82. return;
  83. }
  84. var tr=_18.finder.getTr(_19[0],null,"highlight");
  85. if(!tr.length){
  86. tr=_18.finder.getTr(_19[0],null,"selected");
  87. }
  88. var _1b;
  89. if(!tr.length){
  90. _1b=(dir=="next"?0:_1a-1);
  91. }else{
  92. var _1b=parseInt(tr.attr("datagrid-row-index"));
  93. _1b+=(dir=="next"?1:-1);
  94. if(_1b<0){
  95. _1b=_1a-1;
  96. }
  97. if(_1b>=_1a){
  98. _1b=0;
  99. }
  100. }
  101. _19.datagrid("highlightRow",_1b);
  102. if(_18.selectOnNavigation){
  103. _17.remainText=false;
  104. _19.datagrid("selectRow",_1b);
  105. }
  106. };
  107. function _1c(_1d,_1e,_1f){
  108. var _20=$.data(_1d,"combogrid");
  109. var _21=_20.options;
  110. var _22=_20.grid;
  111. var _23=_22.datagrid("getRows");
  112. var ss=[];
  113. var _24=$(_1d).combo("getValues");
  114. var _25=$(_1d).combo("options");
  115. var _26=_25.onChange;
  116. _25.onChange=function(){
  117. };
  118. _22.datagrid("clearSelections");
  119. if(!$.isArray(_1e)){
  120. _1e=_1e.split(_21.separator);
  121. }
  122. for(var i=0;i<_1e.length;i++){
  123. var _27=_22.datagrid("getRowIndex",_1e[i]);
  124. if(_27>=0){
  125. _22.datagrid("selectRow",_27);
  126. ss.push(_23[_27][_21.textField]);
  127. }else{
  128. ss.push(_1e[i]);
  129. }
  130. }
  131. $(_1d).combo("setValues",_24);
  132. _25.onChange=_26;
  133. $(_1d).combo("setValues",_1e);
  134. if(!_1f){
  135. var s=ss.join(_21.separator);
  136. if($(_1d).combo("getText")!=s){
  137. $(_1d).combo("setText",s);
  138. }
  139. }
  140. };
  141. function _28(_29,q){
  142. var _2a=$.data(_29,"combogrid");
  143. var _2b=_2a.options;
  144. var _2c=_2a.grid;
  145. _2a.remainText=true;
  146. if(_2b.multiple&&!q){
  147. _1c(_29,[],true);
  148. }else{
  149. _1c(_29,[q],true);
  150. }
  151. if(_2b.mode=="remote"){
  152. _2c.datagrid("clearSelections");
  153. _2c.datagrid("load",$.extend({},_2b.queryParams,{q:q}));
  154. }else{
  155. if(!q){
  156. return;
  157. }
  158. _2c.datagrid("clearSelections").datagrid("highlightRow",-1);
  159. var _2d=_2c.datagrid("getRows");
  160. var qq=_2b.multiple?q.split(_2b.separator):[q];
  161. $.map(qq,function(q){
  162. q=$.trim(q);
  163. if(q){
  164. $.map(_2d,function(row,i){
  165. if(q==row[_2b.textField]){
  166. _2c.datagrid("selectRow",i);
  167. }else{
  168. if(_2b.filter.call(_29,q,row)){
  169. _2c.datagrid("highlightRow",i);
  170. }
  171. }
  172. });
  173. }
  174. });
  175. }
  176. };
  177. function _2e(_2f){
  178. var _30=$.data(_2f,"combogrid");
  179. var _31=_30.options;
  180. var _32=_30.grid;
  181. var tr=_31.finder.getTr(_32[0],null,"highlight");
  182. _30.remainText=false;
  183. if(tr.length){
  184. var _33=parseInt(tr.attr("datagrid-row-index"));
  185. if(_31.multiple){
  186. if(tr.hasClass("datagrid-row-selected")){
  187. _32.datagrid("unselectRow",_33);
  188. }else{
  189. _32.datagrid("selectRow",_33);
  190. }
  191. }else{
  192. _32.datagrid("selectRow",_33);
  193. }
  194. }
  195. var vv=[];
  196. $.map(_32.datagrid("getSelections"),function(row){
  197. vv.push(row[_31.idField]);
  198. });
  199. $(_2f).combogrid("setValues",vv);
  200. if(!_31.multiple){
  201. $(_2f).combogrid("hidePanel");
  202. }
  203. };
  204. $.fn.combogrid=function(_34,_35){
  205. if(typeof _34=="string"){
  206. var _36=$.fn.combogrid.methods[_34];
  207. if(_36){
  208. return _36(this,_35);
  209. }else{
  210. return this.combo(_34,_35);
  211. }
  212. }
  213. _34=_34||{};
  214. return this.each(function(){
  215. var _37=$.data(this,"combogrid");
  216. if(_37){
  217. $.extend(_37.options,_34);
  218. }else{
  219. _37=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_34)});
  220. }
  221. _1(this);
  222. });
  223. };
  224. $.fn.combogrid.methods={options:function(jq){
  225. var _38=jq.combo("options");
  226. return $.extend($.data(jq[0],"combogrid").options,{width:_38.width,height:_38.height,originalValue:_38.originalValue,disabled:_38.disabled,readonly:_38.readonly});
  227. },grid:function(jq){
  228. return $.data(jq[0],"combogrid").grid;
  229. },setValues:function(jq,_39){
  230. return jq.each(function(){
  231. _1c(this,_39);
  232. });
  233. },setValue:function(jq,_3a){
  234. return jq.each(function(){
  235. _1c(this,[_3a]);
  236. });
  237. },clear:function(jq){
  238. return jq.each(function(){
  239. $(this).combogrid("grid").datagrid("clearSelections");
  240. $(this).combo("clear");
  241. });
  242. },reset:function(jq){
  243. return jq.each(function(){
  244. var _3b=$(this).combogrid("options");
  245. if(_3b.multiple){
  246. $(this).combogrid("setValues",_3b.originalValue);
  247. }else{
  248. $(this).combogrid("setValue",_3b.originalValue);
  249. }
  250. });
  251. }};
  252. $.fn.combogrid.parseOptions=function(_3c){
  253. var t=$(_3c);
  254. return $.extend({},$.fn.combo.parseOptions(_3c),$.fn.datagrid.parseOptions(_3c),$.parser.parseOptions(_3c,["idField","textField","mode"]));
  255. };
  256. $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{height:22,loadMsg:null,idField:null,textField:null,mode:"local",keyHandler:{up:function(e){
  257. nav(this,"prev");
  258. e.preventDefault();
  259. },down:function(e){
  260. nav(this,"next");
  261. e.preventDefault();
  262. },left:function(e){
  263. },right:function(e){
  264. },enter:function(e){
  265. _2e(this);
  266. },query:function(q,e){
  267. _28(this,q);
  268. }},filter:function(q,row){
  269. var _3d=$(this).combogrid("options");
  270. return row[_3d.textField].toLowerCase().indexOf(q.toLowerCase())==0;
  271. }});
  272. })(jQuery);