jquery.combogrid.js 5.8 KB

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