24e923a5bc488069c3d4a6da00eef49bfa334b6e
[atutor.git] / mods / ldap / jscripts / jqgrid / js / grid.subgrid.js
1 ;(function($){\r
2 /**\r
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
9 **/\r
10 $.fn.addSubGrid = function(t,row,pos,rowelem) {\r
11         return this.each(function(){\r
12                 var ts = this;\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
23                                 var nhc = 0;\r
24                                 $.each(ts.p.colModel,function(i,v){\r
25                                         if(this.hidden === true) {nhc++;}\r
26                                 });\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
32                                 } else {\r
33                                         populatesubgrid(res);\r
34                                 }\r
35                         }, function(e) {\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
40                                 };\r
41                                 $(this).parent().next().remove(".subgrid");\r
42                                 $(this).html("<img src='"+ts.p.imgpath+"plus.gif'/>");\r
43                         });\r
44                 row.appendChild(td);\r
45                 //-------------------------\r
46                 var populatesubgrid = function( rd ) {\r
47                         var res,sid,dp;\r
48                         sid = $(rd).attr("id");\r
49                         dp = {id:sid};\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(/\&nbsp\;/ig,'');\r
56                                                 }\r
57                                         }\r
58                                 }\r
59                         }\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
64                                         case "xml":\r
65                                         $.ajax({type:ts.p.mtype, url: ts.p.subGridUrl, dataType:"xml",data: dp, complete: function(sxml) { subGridJXml(sxml.responseXML, sid); } });\r
66                                         break;\r
67                                         case "json":\r
68                                         $.ajax({type:ts.p.mtype, url: ts.p.subGridUrl, dataType:"json",data: dp, complete: function(JSON) { res = subGridJXml(JSON,sid); } });\r
69                                         break;\r
70                                 }\r
71                         }\r
72                         return false;\r
73                 };\r
74                 var subGridCell = function(trdiv,cell,pos){\r
75                         var tddiv;\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
81                 };\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
93                         }\r
94                         dummy.appendChild(trdiv);\r
95                         if (sjxml){\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 || '&nbsp;',i);\r
104                                                         });\r
105                                                 } else {\r
106                                                         var f = ts.p.subGridModel[0].mapping;\r
107                                                         if (f) {\r
108                                                                 for (i=0;i<f.length;i++) {\r
109                                                                         subGridCell(trdiv, $(f[i],this).text() || '&nbsp;',i);\r
110                                                                 }\r
111                                                         }\r
112                                                 }\r
113                                                 dummy.appendChild(trdiv);\r
114                                         });\r
115                                 } else {\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] || '&nbsp;',j);\r
126                                                         }\r
127                                                 } else {\r
128                                                         var f = ts.p.subGridModel[0].mapping;\r
129                                                         if(f.length) {\r
130                                                                 for (var j=0;j<f.length;j++) {\r
131                                                                         subGridCell(trdiv, cur[f[j]] || '&nbsp;',j);\r
132                                                                 }\r
133                                                         }\r
134                                                 }\r
135                                                 dummy.appendChild(trdiv);\r
136                                         }\r
137                                 }\r
138                                 var pID = $("table:first",ts.grid.bDiv).attr("id")+"_";\r
139                                 $("#"+pID+sbid).append($(dummy).html());\r
140                                 sjxml = null;\r
141                                 ts.grid.hDiv.loading = false;\r
142                                 $("div.loading",ts.grid.hDiv).fadeOut("fast");\r
143                         }\r
144                         return false;\r
145                 }\r
146         });\r
147 };\r
148 })(jQuery);\r