MultiGrouping_wev8.js 9.01 KB
Ext.ux.MultiGroupingStore=Ext.extend(Ext.data.GroupingStore,{constructor:function(a){Ext.ux.MultiGroupingStore.superclass.constructor.apply(this,arguments)},sortInfo:[],sort:function(k,e){var j=[];if(Ext.isArray(k)){for(var h=0,a=k.length;h<a;++h){j.push(this.fields.get(k[h]))}}else{j.push(this.fields.get(k))}if(j.length<1){return false}if(!e){if(this.sortInfo&&this.sortInfo.length>0&&this.sortInfo[0].field==j[0].name){e=(this.sortToggle[j[0].name]||"ASC").toggle("ASC","DESC")}else{e=j[0].sortDir}}var c=(this.sortToggle)?this.sortToggle[j[0].name]:null;var b=(this.sortInfo)?this.sortInfo:null;this.sortToggle[j[0].name]=e;this.sortInfo=[];for(var h=0,a=j.length;h<a;++h){this.sortInfo.push({field:j[h].name,direction:e})}if(!this.remoteSort){this.applySort();this.fireEvent("datachanged",this)}else{if(!this.load(this.lastOptions)){if(c){this.sortToggle[j[0].name]=c}if(b){this.sortInfo=b}}}},setDefaultSort:function(e,b){b=b?b.toUpperCase():"ASC";this.sortInfo=[];if(!Ext.isArray(e)){this.sortInfo.push({field:e,direction:b})}else{for(var c=0,a=e.length;c<a;++c){this.sortInfo.push({field:e[c].field,direction:b});this.sortToggle[e[c]]=b}}},groupBy:function(c,b){if(!b&&this.groupField==c){return}if(this.groupField){for(var e=0;e<this.groupField.length;e++){if(c==this.groupField[e]){return}}this.groupField.push(c)}else{this.groupField=[c]}if(this.remoteGroup){if(!this.baseParams){this.baseParams={}}this.baseParams.groupBy=c}if(this.groupOnSort){this.sort(c);return}if(this.remoteGroup){this.reload()}else{var a=this.sortInfo||[];if(a.field!=c){this.applySort()}else{this.sortData(c)}this.fireEvent("datachanged",this)}},applySort:function(){var b=this.sortInfo;if(b&&b.length>0&&!this.remoteSort){this.sortData(b,b[0].direction)}if(!this.groupOnSort&&!this.remoteGroup){var a=this.getGroupState();if(a&&a!=this.sortInfo){this.sortData(this.groupField)}}},getGroupState:function(){return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo:undefined):this.groupField},sortData:function(c,h){h=h||"ASC";var b=[];var j;for(var e=0,a=c.length;e<a;++e){j=c[e];b.push(this.fields.get(j.field?j.field:j).sortType)}var f=function(n,m){var s=[];var r=[];var q=c.length;var l;var k;for(var p=0;p<q;++p){l=c[p];k=l.field?l.field:l;s.push(b[p](n.data[k]));r.push(b[p](m.data[k]))}var t;for(var p=0;p<q;++p){t=s[p]>r[p]?1:(s[p]<r[p]?-1:0);if(t!=0){return t}}return t};this.data.sort(h,f);if(this.snapshot&&this.snapshot!=this.data){this.snapshot.sort(h,f)}}});Ext.ux.MultiGroupingView=Ext.extend(Ext.grid.GroupingView,{constructor:function(a){Ext.ux.MultiGroupingView.superclass.constructor.apply(this,arguments);this.on("beforerefresh",function(){if(this.rowsCache){delete rowsCache}},this)},displayEmptyFields:false,groupedbyText:"Grouped By",displayFieldSeperator:", ",renderRows:function(){var c=this.getGroupField();var h=!!c;if(this.hideGroupedColumn){var f=[];for(var e=0,b=c.length;e<b;++e){var a=this.cm.findColumnIndex(c[e]);if(a>=0){f.push(a)}}if(!h&&this.lastGroupField!==undefined){this.mainBody.update("");for(var e=0,b=this.lastGroupField.length;e<b;++e){var a=this.cm.findColumnIndex(this.lastGroupField[e]);if(a>=0){this.cm.setHidden(a,false)}else{alert("Unhide Col: "+a)}}delete this.lastGroupField;delete this.lgflen}else{if(h&&f.length>0&&this.lastGroupField===undefined){this.lastGroupField=c;this.lgflen=c.length;for(var e=0,b=f.length;e<b;++e){this.cm.setHidden(f[e],true)}}else{if(h&&this.lastGroupField!==undefined&&(c!==this.lastGroupField||this.lgflen!=this.lastGroupField.length)){this.mainBody.update("");for(var e=0,b=this.lastGroupField.length;e<b;++e){var a=this.cm.findColumnIndex(this.lastGroupField[e]);if(a>=0){this.cm.setHidden(a,false)}else{alert("Unhide Col: "+a)}}this.lastGroupField=c;this.lgflen=c.length;for(var e=0,b=f.length;e<b;++e){this.cm.setHidden(f[e],true)}}}}}return Ext.ux.MultiGroupingView.superclass.renderRows.apply(this,arguments)},doRender:function(E,G,h,T,y,J){var p=this.grid.getTopToolbar();if(G.length<1){return""}var M=this.getGroupField();var P=M.length;for(var ad=0;ad<p.items.length;ad++){Ext.removeNode(Ext.getDom(p.items.itemAt(ad).id))}if(P==0){p.addItem(new Ext.Toolbar.TextItem("Drop Columns Here To Group"))}else{p.addItem(new Ext.Toolbar.TextItem(this.groupedbyText||"Grouped By:"));for(var L=0;L<P;L++){var R=M[L];if(L>0){p.addItem(new Ext.Toolbar.Separator())}var ac=new Ext.Toolbar.Button({text:this.cm.lookup[this.cm.findColumnIndex(R)].header});ac.fieldName=R;p.addItem(ac)}}this.enableGrouping=!!M;if(!this.enableGrouping||this.isUpdating){return Ext.grid.GroupingView.superclass.doRender.apply(this,arguments)}var ae="width:"+this.getTotalWidth()+";";var F=this.grid.getGridEl().id;var m=[],e,X,A,N;var c=[];var aa=0;var x=[];var o=Ext.get(F+"-style");if(o){o.remove()}Ext.getDoc().child("head").createChild({tag:"style",id:F+"-style",html:"div#"+F+" div.x-grid3-row {padding-left:"+(P*12)+"px}div#"+F+" div.x-grid3-header {padding-left:"+(P*12)+"px}"});for(var X=0,A=G.length;X<A;X++){aa=0;var a=T+X;var S=G[X];var Q=0;var ab=[];var C;var s;var q=[];var n=[];var O;var H=0;var I=[];for(var W=0;W<P;W++){C=M[W];s=this.cm.lookup[this.cm.findColumnIndex(C)].header;O=S.data[C];if(O==""){O=this.emptyGroupText||"(none)"}if(O){if(X==0){I.push({idx:W,dataIndex:C,header:s,value:O});c[W]=O;ab.push(O);q.push(C);n.push(s+": "+O)}else{if(c[W]!=O){I.push({idx:W,dataIndex:C,header:s,value:O});c[W]=O;H=1;ab.push(O);q.push(C);n.push(s+": "+O)}else{if(P-1==W&&H!=1){e.rs.push(S)}else{if(H==1){I.push({idx:W,dataIndex:C,header:s,value:O});ab.push(O);q.push(C);n.push(s+": "+O)}else{if(W<P-1){if(x[C]){x[C].rs.push(S)}}}}}}}else{if(this.displayEmptyFields){I.push({idx:W,dataIndex:C,header:s,value:this.emptyGroupText||"(none)"});q.push(C);n.push(s+": ")}}}for(var U=0;U<I.length;U++){var l=I[U];Z=l.dataIndex;var K=I[U].header;N=F+"-gp-"+l.dataIndex+"-"+Ext.util.Format.htmlEncode(l.value);var f=typeof this.state[N]!=="undefined"?!this.state[N]:this.startCollapsed;var z=f?"x-grid-group-collapsed":"";e={group:l.dataIndex,gvalue:l.value,text:l.header,groupId:N,startRow:a,rs:[S],cls:z,style:ae+"padding-left:"+(l.idx*12)+"px;"};x[l.dataIndex]=e;m.push(e);S._groupId=N}}var B=[];var V=0;for(var D=0,A=m.length;D<A;D++){V++;var Z=m[D];var Y=Z.group==M[P-1];this.doGroupStart(B,Z,E,h,y);if(Z.rs.length!=0&&Y){B[B.length]=Ext.grid.GroupingView.superclass.doRender.call(this,E,Z.rs,h,Z.startRow,y,J)}if(Y){var u;var w=m[D+1];if(w!=null){for(var u=0;u<M.length;u++){if(w.group==M[u]){break}}V=M.length-u}for(var U=0;U<V;U++){this.doGroupEnd(B,Z,E,h,y)}V=u}}return B.join("")},getRows:function(){if(this.rowsCache){e=this.rowsCache.slice(0)}else{if(!this.enableGrouping){return Ext.grid.GroupingView.superclass.getRows.call(this)}var a=this.getGroupField();var e=[];var c,b=this.getGroups();e=this.getRowsFromGroup(e,b,a[a.length-1])}return e},getRowsFromGroup:function(a,c,h){var b=new RegExp(".*-gp-"+h+"-.*");for(var f=0,k=c.length;f<k;f++){var m=c[f].id;if(b.test(m)){g=c[f].childNodes[1].childNodes;for(var e=0,l=g.length;e<l;e++){a[a.length]=g[e]}}else{if(!c[f].childNodes[1]){}else{a=this.getRowsFromGroup(a,c[f].childNodes[1].childNodes,h)}}}return a}});Ext.ux.MultiGroupingPanel=function(a){a=a||{};a.tbar=new Ext.Toolbar({id:"grid-tbr"});Ext.ux.MultiGroupingPanel.superclass.constructor.call(this,a)};Ext.extend(Ext.ux.MultiGroupingPanel,Ext.grid.GridPanel,{initComponent:function(){Ext.ux.MultiGroupingPanel.superclass.initComponent.call(this);this.on("render",this.setUpDragging,this)},setUpDragging:function(){this.dragZone=new Ext.dd.DragZone(this.getTopToolbar().getEl(),{ddGroup:"grid-body",panel:this,scroll:false,onInitDrag:function(a){var b=this.dragData.ddel;b.id=Ext.id("ven");this.proxy.update(b);return true},getDragData:function(b){var a=Ext.get(b.getTarget().id);if(a.hasClass("x-toolbar x-small-editor")){return false}d=b.getTarget().cloneNode(true);d.id=Ext.id();this.dragData={repairXY:Ext.fly(a).getXY(),ddel:d,btn:b.getTarget()};return this.dragData},getRepairXY:function(){return this.dragData.repairXY}});this.dropTarget2s=new Ext.dd.DropTarget("grid-tbr",{ddGroup:"gridHeader"+this.getGridEl().id,panel:this,notifyDrop:function(a,c,b){var f=this.panel.getColumnModel().getDataIndex(this.panel.getView().getCellIndex(b.header));this.panel.store.groupBy(f);return true}});this.dropTarget22s=new Ext.dd.DropTarget(this.getView().el.dom.childNodes[0].childNodes[1],{ddGroup:"grid-body",panel:this,notifyDrop:function(l,k,h){var j=Ext.get(h.btn).dom.innerHTML;var c=this.panel.getTopToolbar();var b=c.items.findIndexBy(function(e){return e.text==j},this);if(b<0){return}var a=c.items.get(b).fieldName;Ext.removeNode(Ext.getDom(c.items.get(b).id));if(b>0){Ext.removeNode(Ext.getDom(c.items.get(b-1).id))}var n=this.panel.view.cm.findColumnIndex(a);this.panel.view.cm.setHidden(n,false);var m=[];for(var f=this.panel.store.groupField.length-1;f>=0;f--){if(this.panel.store.groupField[f]==a){this.panel.store.groupField.pop();break}m.push(this.panel.store.groupField[f]);this.panel.store.groupField.pop()}for(var f=m.length-1;f>=0;f--){this.panel.store.groupField.push(m[f])}if(this.panel.store.groupField.length==0){this.panel.store.groupField=false}this.panel.store.fireEvent("datachanged",this);return true}})}});