3 * jqGrid extension for SubGrid Data
\r
4 * Tony Tomov tony@trirand.com
\r
5 * http://trirand.com/blog/
\r
6 * Dual licensed under the MIT and GPL licenses:
\r
7 * http://www.opensource.org/licenses/mit-license.php
\r
8 * http://www.gnu.org/licenses/gpl.html
\r
10 $.fn.addSubGrid = function(t,row,pos,rowelem) {
\r
11 return this.each(function(){
\r
13 if (!ts.grid ) { return; }
\r
14 var td, res,_id, pID;
\r
15 td = document.createElement("td");
\r
16 $(td,t).html("<img src='"+ts.p.imgpath+"plus.gif'/>")
\r
17 .toggle( function(e) {
\r
18 $(this).html("<img src='"+ts.p.imgpath+"minus.gif'/>");
\r
19 pID = $("table:first",ts.grid.bDiv).attr("id");
\r
20 res = $(this).parent();
\r
21 var atd= pos==1?'<td></td>':'';
\r
22 _id = $(res).attr("id");
\r
24 $.each(ts.p.colModel,function(i,v){
\r
25 if(this.hidden === true) {nhc++;}
\r
27 var subdata = "<tr class='subgrid'>"+atd+"<td><img src='"+ts.p.imgpath+"line3.gif'/></td><td colspan='"+parseInt(ts.p.colNames.length-1-nhc)+"'><div id="+pID+"_"+_id+" class='tablediv'>";
\r
28 $(this).parent().after( subdata+ "</div></td></tr>" );
\r
29 $(".tablediv",ts).css("width", ts.grid.width-20+"px");
\r
30 if( typeof ts.p.subGridRowExpanded === 'function') {
\r
31 ts.p.subGridRowExpanded(pID+"_"+ _id,_id);
\r
33 populatesubgrid(res);
\r
36 if( typeof ts.p.subGridRowColapsed === 'function') {
\r
37 res = $(this).parent();
\r
38 _id = $(res).attr("id");
\r
39 ts.p.subGridRowColapsed(pID+"_"+_id,_id );
\r
41 $(this).parent().next().remove(".subgrid");
\r
42 $(this).html("<img src='"+ts.p.imgpath+"plus.gif'/>");
\r
44 row.appendChild(td);
\r
45 //-------------------------
\r
46 var populatesubgrid = function( rd ) {
\r
48 sid = $(rd).attr("id");
\r
50 if(!ts.p.subGridModel[0]) { return false; }
\r
51 if(ts.p.subGridModel[0].params) {
\r
52 for(var j=0; j < ts.p.subGridModel[0].params.length; j++) {
\r
53 for(var i=0; i<ts.p.colModel.length; i++) {
\r
54 if(ts.p.colModel[i].name == ts.p.subGridModel[0].params[j]) {
\r
55 dp[ts.p.colModel[i].name]= $("td:eq("+i+")",rd).text().replace(/\ \;/ig,'');
\r
60 if(!ts.grid.hDiv.loading) {
\r
61 ts.grid.hDiv.loading = true;
\r
62 $("div.loading",ts.grid.hDiv).fadeIn("fast");
\r
63 switch(ts.p.datatype) {
\r
65 $.ajax({type:ts.p.mtype, url: ts.p.subGridUrl, dataType:"xml",data: dp, complete: function(sxml) { subGridJXml(sxml.responseXML, sid); } });
\r
68 $.ajax({type:ts.p.mtype, url: ts.p.subGridUrl, dataType:"json",data: dp, complete: function(JSON) { res = subGridJXml(JSON,sid); } });
\r
74 var subGridCell = function(trdiv,cell,pos){
\r
76 tddiv = document.createElement("div");
\r
77 tddiv.className = "celldiv";
\r
78 $(tddiv).html(cell);
\r
79 $(tddiv).width( ts.p.subGridModel[0].width[pos] || 80);
\r
80 trdiv.appendChild(tddiv);
\r
82 var subGridJXml = function(sjxml, sbid){
\r
83 var trdiv, tddiv,result = "", i,cur, sgmap;
\r
84 var dummy = document.createElement("span");
\r
85 trdiv = document.createElement("div");
\r
86 trdiv.className="rowdiv";
\r
87 for (i = 0; i<ts.p.subGridModel[0].name.length; i++) {
\r
88 tddiv = document.createElement("div");
\r
89 tddiv.className = "celldivth";
\r
90 $(tddiv).html(ts.p.subGridModel[0].name[i]);
\r
91 $(tddiv).width( ts.p.subGridModel[0].width[i]);
\r
92 trdiv.appendChild(tddiv);
\r
94 dummy.appendChild(trdiv);
\r
96 if(ts.p.datatype === "xml") {
\r
97 sgmap = ts.p.xmlReader.subgrid;
\r
98 $(sgmap.root+">"+sgmap.row, sjxml).each( function(){
\r
99 trdiv = document.createElement("div");
\r
100 trdiv.className="rowdiv";
\r
101 if(sgmap.repeatitems === true) {
\r
102 $(sgmap.cell,this).each( function(i) {
\r
103 subGridCell(trdiv, this.textContent || this.text || ' ',i);
\r
106 var f = ts.p.subGridModel[0].mapping;
\r
108 for (i=0;i<f.length;i++) {
\r
109 subGridCell(trdiv, $(f[i],this).text() || ' ',i);
\r
113 dummy.appendChild(trdiv);
\r
116 sjxml = eval("("+sjxml.responseText+")");
\r
117 sgmap = ts.p.jsonReader.subgrid;
\r
118 for (i=0;i<sjxml[sgmap.root].length;i++) {
\r
119 cur = sjxml[sgmap.root][i];
\r
120 trdiv = document.createElement("div");
\r
121 trdiv.className="rowdiv";
\r
122 if(sgmap.repeatitems === true) {
\r
123 if(sgmap.cell) { cur=cur[sgmap.cell]; }
\r
124 for (var j=0;j<cur.length;j++) {
\r
125 subGridCell(trdiv, cur[j] || ' ',j);
\r
128 var f = ts.p.subGridModel[0].mapping;
\r
130 for (var j=0;j<f.length;j++) {
\r
131 subGridCell(trdiv, cur[f[j]] || ' ',j);
\r
135 dummy.appendChild(trdiv);
\r
138 var pID = $("table:first",ts.grid.bDiv).attr("id")+"_";
\r
139 $("#"+pID+sbid).append($(dummy).html());
\r
141 ts.grid.hDiv.loading = false;
\r
142 $("div.loading",ts.grid.hDiv).fadeOut("fast");
\r