jquery.combogrid.js 6.3 KB

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