jquery.combogrid.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. /**
  2. * jQuery EasyUI 1.4.4
  3. *
  4. * Copyright (c) 2009-2015 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. 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. _15(_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 vv=$.map(_5.datagrid("getSelections"),function(row){
  66. return row[_4.idField];
  67. });
  68. vv=vv.concat(_4.unselectedValues);
  69. if(!_4.multiple){
  70. vv=vv.length?[vv[0]]:[""];
  71. }
  72. _15(_2,vv,_3.remainText);
  73. };
  74. };
  75. function nav(_16,dir){
  76. var _17=$.data(_16,"combogrid");
  77. var _18=_17.options;
  78. var _19=_17.grid;
  79. var _1a=_19.datagrid("getRows").length;
  80. if(!_1a){
  81. return;
  82. }
  83. var tr=_18.finder.getTr(_19[0],null,"highlight");
  84. if(!tr.length){
  85. tr=_18.finder.getTr(_19[0],null,"selected");
  86. }
  87. var _1b;
  88. if(!tr.length){
  89. _1b=(dir=="next"?0:_1a-1);
  90. }else{
  91. var _1b=parseInt(tr.attr("datagrid-row-index"));
  92. _1b+=(dir=="next"?1:-1);
  93. if(_1b<0){
  94. _1b=_1a-1;
  95. }
  96. if(_1b>=_1a){
  97. _1b=0;
  98. }
  99. }
  100. _19.datagrid("highlightRow",_1b);
  101. if(_18.selectOnNavigation){
  102. _17.remainText=false;
  103. _19.datagrid("selectRow",_1b);
  104. }
  105. };
  106. function _15(_1c,_1d,_1e){
  107. var _1f=$.data(_1c,"combogrid");
  108. var _20=_1f.options;
  109. var _21=_1f.grid;
  110. var _22=$(_1c).combo("getValues");
  111. var _23=$(_1c).combo("options");
  112. var _24=_23.onChange;
  113. _23.onChange=function(){
  114. };
  115. var _25=_21.datagrid("options");
  116. var _26=_25.onSelect;
  117. var _27=_25.onUnselectAll;
  118. _25.onSelect=_25.onUnselectAll=function(){
  119. };
  120. if(!$.isArray(_1d)){
  121. _1d=_1d.split(_20.separator);
  122. }
  123. var _28=[];
  124. $.map(_21.datagrid("getSelections"),function(row){
  125. if($.inArray(row[_20.idField],_1d)>=0){
  126. _28.push(row);
  127. }
  128. });
  129. _21.datagrid("clearSelections");
  130. _21.data("datagrid").selectedRows=_28;
  131. var ss=[];
  132. for(var i=0;i<_1d.length;i++){
  133. var _29=_1d[i];
  134. var _2a=_21.datagrid("getRowIndex",_29);
  135. if(_2a>=0){
  136. _21.datagrid("selectRow",_2a);
  137. }
  138. ss.push(_2b(_29,_21.datagrid("getRows"))||_2b(_29,_21.datagrid("getSelections"))||_2b(_29,_20.mappingRows)||_29);
  139. }
  140. _20.unselectedValues=[];
  141. var _2c=$.map(_28,function(row){
  142. return row[_20.idField];
  143. });
  144. $.map(_1d,function(_2d){
  145. if($.inArray(_2d,_2c)==-1){
  146. _20.unselectedValues.push(_2d);
  147. }
  148. });
  149. $(_1c).combo("setValues",_22);
  150. _23.onChange=_24;
  151. _25.onSelect=_26;
  152. _25.onUnselectAll=_27;
  153. if(!_1e){
  154. var s=ss.join(_20.separator);
  155. if($(_1c).combo("getText")!=s){
  156. $(_1c).combo("setText",s);
  157. }
  158. }
  159. $(_1c).combo("setValues",_1d);
  160. function _2b(_2e,a){
  161. for(var i=0;i<a.length;i++){
  162. if(_2e==a[i][_20.idField]){
  163. return a[i][_20.textField];
  164. }
  165. }
  166. return undefined;
  167. };
  168. };
  169. function _2f(_30,q){
  170. var _31=$.data(_30,"combogrid");
  171. var _32=_31.options;
  172. var _33=_31.grid;
  173. _31.remainText=true;
  174. if(_32.multiple&&!q){
  175. _15(_30,[],true);
  176. }else{
  177. _15(_30,[q],true);
  178. }
  179. if(_32.mode=="remote"){
  180. _33.datagrid("clearSelections");
  181. _33.datagrid("load",$.extend({},_32.queryParams,{q:q}));
  182. }else{
  183. if(!q){
  184. return;
  185. }
  186. _33.datagrid("clearSelections").datagrid("highlightRow",-1);
  187. var _34=_33.datagrid("getRows");
  188. var qq=_32.multiple?q.split(_32.separator):[q];
  189. $.map(qq,function(q){
  190. q=$.trim(q);
  191. if(q){
  192. $.map(_34,function(row,i){
  193. if(q==row[_32.textField]){
  194. _33.datagrid("selectRow",i);
  195. }else{
  196. if(_32.filter.call(_30,q,row)){
  197. _33.datagrid("highlightRow",i);
  198. }
  199. }
  200. });
  201. }
  202. });
  203. }
  204. };
  205. function _35(_36){
  206. var _37=$.data(_36,"combogrid");
  207. var _38=_37.options;
  208. var _39=_37.grid;
  209. var tr=_38.finder.getTr(_39[0],null,"highlight");
  210. _37.remainText=false;
  211. if(tr.length){
  212. var _3a=parseInt(tr.attr("datagrid-row-index"));
  213. if(_38.multiple){
  214. if(tr.hasClass("datagrid-row-selected")){
  215. _39.datagrid("unselectRow",_3a);
  216. }else{
  217. _39.datagrid("selectRow",_3a);
  218. }
  219. }else{
  220. _39.datagrid("selectRow",_3a);
  221. }
  222. }
  223. var vv=[];
  224. $.map(_39.datagrid("getSelections"),function(row){
  225. vv.push(row[_38.idField]);
  226. });
  227. $(_36).combogrid("setValues",vv);
  228. if(!_38.multiple){
  229. $(_36).combogrid("hidePanel");
  230. }
  231. };
  232. $.fn.combogrid=function(_3b,_3c){
  233. if(typeof _3b=="string"){
  234. var _3d=$.fn.combogrid.methods[_3b];
  235. if(_3d){
  236. return _3d(this,_3c);
  237. }else{
  238. return this.combo(_3b,_3c);
  239. }
  240. }
  241. _3b=_3b||{};
  242. return this.each(function(){
  243. var _3e=$.data(this,"combogrid");
  244. if(_3e){
  245. $.extend(_3e.options,_3b);
  246. }else{
  247. _3e=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_3b)});
  248. }
  249. _1(this);
  250. });
  251. };
  252. $.fn.combogrid.methods={options:function(jq){
  253. var _3f=jq.combo("options");
  254. return $.extend($.data(jq[0],"combogrid").options,{width:_3f.width,height:_3f.height,originalValue:_3f.originalValue,disabled:_3f.disabled,readonly:_3f.readonly});
  255. },grid:function(jq){
  256. return $.data(jq[0],"combogrid").grid;
  257. },setValues:function(jq,_40){
  258. return jq.each(function(){
  259. var _41=$(this).combogrid("options");
  260. if($.isArray(_40)){
  261. _40=$.map(_40,function(_42){
  262. if(typeof _42=="object"){
  263. var v=_42[_41.idField];
  264. (function(){
  265. for(var i=0;i<_41.mappingRows.length;i++){
  266. if(v==_41.mappingRows[i][_41.idField]){
  267. return;
  268. }
  269. }
  270. _41.mappingRows.push(_42);
  271. })();
  272. return v;
  273. }else{
  274. return _42;
  275. }
  276. });
  277. }
  278. _15(this,_40);
  279. });
  280. },setValue:function(jq,_43){
  281. return jq.each(function(){
  282. $(this).combogrid("setValues",[_43]);
  283. });
  284. },clear:function(jq){
  285. return jq.each(function(){
  286. $(this).combogrid("grid").datagrid("clearSelections");
  287. $(this).combo("clear");
  288. });
  289. },reset:function(jq){
  290. return jq.each(function(){
  291. var _44=$(this).combogrid("options");
  292. if(_44.multiple){
  293. $(this).combogrid("setValues",_44.originalValue);
  294. }else{
  295. $(this).combogrid("setValue",_44.originalValue);
  296. }
  297. });
  298. }};
  299. $.fn.combogrid.parseOptions=function(_45){
  300. var t=$(_45);
  301. return $.extend({},$.fn.combo.parseOptions(_45),$.fn.datagrid.parseOptions(_45),$.parser.parseOptions(_45,["idField","textField","mode"]));
  302. };
  303. $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{height:22,loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:"local",keyHandler:{up:function(e){
  304. nav(this,"prev");
  305. e.preventDefault();
  306. },down:function(e){
  307. nav(this,"next");
  308. e.preventDefault();
  309. },left:function(e){
  310. },right:function(e){
  311. },enter:function(e){
  312. _35(this);
  313. },query:function(q,e){
  314. _2f(this,q);
  315. }},filter:function(q,row){
  316. var _46=$(this).combogrid("options");
  317. return (row[_46.textField]||"").toLowerCase().indexOf(q.toLowerCase())==0;
  318. }});
  319. })(jQuery);