changed git call from https to git readonly
[atutor.git] / mods / ldap / jscripts / jqgrid / js / grid.custom.js
1 ;(function($){\r
2 /**\r
3  * jqGrid extension for custom methods\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.extend({\r
11         getColProp : function(colname){\r
12                 var ret ={}, $t = this[0];\r
13                 if ( !$t.grid ) { return; }\r
14                 var cM = $t.p.colModel;\r
15                 for ( var i =0;i<cM.length;i++ ) {\r
16                         if ( cM[i].name == colname ) {\r
17                                 ret = cM[i];\r
18                                 break;\r
19                         }\r
20                 };\r
21                 return ret;\r
22         },\r
23         setColProp : function(colname, obj){\r
24                 //do not set width will not work\r
25                 return this.each(function(){\r
26                         if ( this.grid ) {\r
27                                 if ( obj ) {\r
28                                         var cM = this.p.colModel;\r
29                                         for ( var i =0;i<cM.length;i++ ) {\r
30                                                 if ( cM[i].name == colname ) {\r
31                                                         $.extend(this.p.colModel[i],obj);\r
32                                                         break;\r
33                                                 }\r
34                                         }\r
35                                 }\r
36                         }\r
37                 });\r
38         },\r
39         sortGrid : function(colname,reload){\r
40                 return this.each(function(){\r
41                         var $t=this,idx=-1;\r
42                         if ( !$t.grid ) { return;}\r
43                         if ( !colname ) { colname = $t.p.sortname; }\r
44                         for ( var i=0;i<$t.p.colModel.length;i++ ) {\r
45                                 if ( $t.p.colModel[i].index == colname || $t.p.colModel[i].name==colname ) {\r
46                                         idx = i;\r
47                                         break;\r
48                                 }\r
49                         }\r
50                         if ( idx!=-1 ){\r
51                                 var sort = $t.p.colModel[idx].sortable;\r
52                                 if ( typeof sort !== 'boolean' ) { sort =  true; }\r
53                                 if ( typeof reload !=='boolean' ) { reload = false; }\r
54                                 if ( sort ) { $t.sortData(colname, idx, reload); }\r
55                         }\r
56                 });\r
57         },\r
58         GridDestroy : function () {\r
59                 return this.each(function(){\r
60                         if ( this.grid ) { \r
61                                 if ( this.p.pager ) {\r
62                                         $(this.p.pager).remove();\r
63                                 }\r
64                                 $("#lui_"+this.id).remove();\r
65                                 $(this.grid.bDiv).remove();\r
66                                 $(this.grid.hDiv).remove();\r
67                                 $(this.grid.cDiv).remove();\r
68                                 if(this.p.toolbar[0]) { $(this.grid.uDiv).remove(); }\r
69                                 this.p = null;\r
70                                 this.grid =null;\r
71                         }\r
72                 });\r
73         },\r
74         GridUnload : function(){\r
75                 return this.each(function(){\r
76                         if ( !this.grid ) {return;}\r
77                         var defgrid = {id: $(this).attr('id'),cl: $(this).attr('class')};\r
78                         if (this.p.pager) {\r
79                                 $(this.p.pager).empty();\r
80                         }\r
81                         var newtable = document.createElement('table');\r
82                         $(newtable).attr({id:defgrid['id']});\r
83                         newtable.className = defgrid['cl'];\r
84                         $("#lui_"+this.id).remove();\r
85                         if(this.p.toolbar[0]) { $(this.grid.uDiv).remove(); }\r
86                         $(this.grid.cDiv).remove();\r
87                         $(this.grid.bDiv).remove();\r
88                         $(this.grid.hDiv).before(newtable).remove();\r
89                         this.p = null;\r
90                         this.grid =null;\r
91                 });\r
92         },\r
93         filterGrid : function(gridid,p){\r
94                 p = $.extend({\r
95                         gridModel : false,\r
96                         gridNames : false,\r
97                         gridToolbar : false,\r
98                         filterModel: [], // label/name/stype/defval/surl/sopt\r
99                         formtype : "horizontal", // horizontal/vertical\r
100                         autosearch: true, // if set to false a serch button should be enabled.\r
101                         formclass: "filterform",\r
102                         tableclass: "filtertable",\r
103                         buttonclass: "filterbutton",\r
104                         searchButton: "Search",\r
105                         clearButton: "Clear",\r
106                         enableSearch : false,\r
107                         enableClear: false,\r
108                         beforeSearch: null,\r
109                         afterSearch: null,\r
110                         beforeClear: null,\r
111                         afterClear: null,\r
112                         url : '',\r
113                         marksearched: true\r
114                 },p  || {});\r
115                 return this.each(function(){\r
116                         var self = this;\r
117                         this.p = p;\r
118                         if(this.p.filterModel.length == 0 && this.p.gridModel===false) { alert("No filter is set"); return;}\r
119                         if( !gridid) {alert("No target grid is set!"); return;}\r
120                         this.p.gridid = gridid.indexOf("#") != -1 ? gridid : "#"+gridid;\r
121                         var gcolMod = $(this.p.gridid).getGridParam('colModel');\r
122                         if(gcolMod) {\r
123                                 if( this.p.gridModel === true) {\r
124                                         var thegrid = $(this.p.gridid)[0];\r
125                                         // we should use the options search, edittype, editoptions\r
126                                         // additionally surl and defval can be added in grid colModel\r
127                                         $.each(gcolMod, function (i,n) {\r
128                                                 var tmpFil = [];\r
129                                                 if(!this.search) {this.search = true;}\r
130                                                 if( this.search === true && !this.hidden) {\r
131                                                         if(self.p.gridNames===true) {\r
132                                                                 tmpFil.label = thegrid.p.colNames[i];\r
133                                                         } else {\r
134                                                                 tmpFil.label = '';\r
135                                                         }\r
136                                                         tmpFil.name = this.name;\r
137                                                         tmpFil.index = this.index || this.name;\r
138                                                         // we support only text and selects, so all other to text\r
139                                                         tmpFil.stype = this.edittype || 'text';\r
140                                                         if(tmpFil.stype != 'select' || tmpFil.stype != 'select') {\r
141                                                                 tmpFil.stype = 'text';\r
142                                                         }\r
143                                                         tmpFil.defval = this.defval || '';\r
144                                                         tmpFil.surl = this.surl || '';\r
145                                                         tmpFil.sopt = this.editoptions || {};\r
146                                                         tmpFil.width = this.width;\r
147                                                         self.p.filterModel.push(tmpFil);\r
148                                                 }\r
149                                         });\r
150                                 } else {\r
151                                         $.each(self.p.filterModel,function(i,n) {\r
152                                                 for(var j=0;j<gcolMod.length;j++) {\r
153                                                         if(this.name == gcolMod[j].name) {\r
154                                                                 this.index = gcolMod[j].index || this.name;\r
155                                                                 break;\r
156                                                         }\r
157                                                 }\r
158                                                 if(!this.index) {\r
159                                                         this.index = this.name;\r
160                                                 }\r
161                                         });\r
162                                 }\r
163                         } else {\r
164                                 alert("Could not get grid colModel"); return;\r
165                         }\r
166                         var triggerSearch = function() {\r
167                                 var sdata={}, j=0, v;\r
168                                 var gr = $(self.p.gridid)[0];\r
169                                 if($.isFunction(self.p.beforeSearch)){self.p.beforeSearch();}\r
170                                 $.each(self.p.filterModel,function(i,n){\r
171                                         switch (this.stype) {\r
172                                                 case 'select' :\r
173                                                         v = $("select[@name="+this.name+"]",self).val();\r
174                                                         if(v) {\r
175                                                                 sdata[this.index] = v;\r
176                                                                 if(self.p.marksearched){\r
177                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
178                                                                 }\r
179                                                                 j++;\r
180                                                         } else {\r
181                                                                 if(self.p.marksearched){\r
182                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
183                                                                 }\r
184                                                                 // remove from postdata\r
185                                                                 try {\r
186                                                                         delete gr.p.postData[this.index];\r
187                                                                 } catch(e) {}\r
188                                                         }\r
189                                                         break;\r
190                                                 default:\r
191                                                         v = $("input[@name="+this.name+"]",self).val();\r
192                                                         if(v) {\r
193                                                                 sdata[this.index] = v;\r
194                                                                 if(self.p.marksearched){\r
195                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
196                                                                 }\r
197                                                                 j++;\r
198                                                         } else {\r
199                                                                 if(self.p.marksearched){\r
200                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
201                                                                 }\r
202                                                                 // remove from postdata\r
203                                                                 try {\r
204                                                                         delete gr.p.postData[this.index];\r
205                                                                 } catch (e) {}\r
206                                                         }\r
207                                         }\r
208                                 });\r
209                                 var sd =  j>0 ? true : false;\r
210                                 gr.p.postData = $.extend(gr.p.postData,sdata);\r
211                                 var saveurl;\r
212                                 if(self.p.url) {\r
213                                         saveurl = $(gr).getGridParam('url');\r
214                                         $(gr).setGridParam({url:self.p.url});\r
215                                 }\r
216                                 $(gr).setGridParam({search:sd,page:1}).trigger("reloadGrid");\r
217                                 if(saveurl) {$(gr).setGridParam({url:saveurl});}\r
218                                 if($.isFunction(self.p.afterSearch)){self.p.afterSearch();}\r
219                         };\r
220                         var clearSearch = function(){\r
221                                 var sdata={}, v, j=0;\r
222                                 var gr = $(self.p.gridid)[0];\r
223                                 if($.isFunction(self.p.beforeClear)){self.p.beforeClear();}\r
224                                 $.each(self.p.filterModel,function(i,n){\r
225                                         v = (this.defval) ? this.defval : "";\r
226                                         if(!this.stype){this.stype=='text';}\r
227                                         switch (this.stype) {\r
228                                                 case 'select' :\r
229                                                         $("select[@name="+this.name+"]",self).val(v);\r
230                                                         if(v) {\r
231                                                                 sdata[this.index] = v;\r
232                                                                 if(self.p.marksearched){\r
233                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
234                                                                 }\r
235                                                                 j++;\r
236                                                         } else {\r
237                                                                 if(self.p.marksearched){\r
238                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
239                                                                 }\r
240                                                                 // remove from postdata\r
241                                                                 try {\r
242                                                                         delete gr.p.postData[this.index];\r
243                                                                 } catch(e) {}\r
244                                                         }\r
245                                                         break;\r
246                                                 case 'text':\r
247                                                         $("input[@name="+this.name+"]",self).val(v);\r
248                                                         if(v) {\r
249                                                                 sdata[this.index] = v;\r
250                                                                 if(self.p.marksearched){\r
251                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
252                                                                 }\r
253                                                                 j++;\r
254                                                         } else {\r
255                                                                 if(self.p.marksearched){\r
256                                                                         $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
257                                                                 }\r
258                                                                 // remove from postdata\r
259                                                                 try {\r
260                                                                         delete gr.p.postData[this.index];\r
261                                                                 } catch(e) {}\r
262                                                         }\r
263                                         }\r
264                                 });\r
265                                 var sd =  j>0 ? true : false;\r
266                                 gr.p.postData = $.extend(gr.p.postData,sdata);\r
267                                 var saveurl;\r
268                                 if(self.p.url) {\r
269                                         saveurl = $(gr).getGridParam('url');\r
270                                         $(gr).setGridParam({url:self.p.url});\r
271                                 }\r
272                                 $(gr).setGridParam({search:sd,page:1}).trigger("reloadGrid");\r
273                                 if(saveurl) {$(gr).setGridParam({url:saveurl});}\r
274                                 if($.isFunction(self.p.afterClear)){self.p.afterClear();}\r
275                         };\r
276                         var formFill = function(){\r
277                                 var tr = document.createElement("tr");\r
278                                 var tr1, sb, cb,tl,td, td1;\r
279                                 if(self.p.formtype=='horizontal'){\r
280                                         $(tbl).append(tr);\r
281                                 }\r
282                                 $.each(self.p.filterModel,function(i,n){\r
283                                         tl = document.createElement("td");\r
284                                         $(tl).append("<label for='"+this.name+"'>"+this.label+"</label>");\r
285                                         td = document.createElement("td");\r
286                                         var $t=this;\r
287                                         if(!this.stype) { this.stype='text';}\r
288                                         switch (this.stype)\r
289                                         {\r
290                                         case "select":\r
291                                                 if(this.surl) {\r
292                                                         // data returned should have already constructed html select\r
293                                                         $(td).load(this.surl,function(){\r
294                                                                 if($t.defval) $("select",this).val($t.defval);\r
295                                                                 $("select",this).attr({name:$t.name, id: "sg_"+$t.name});\r
296                                                                 if($t.sopt) $("select",this).attr($t.sopt);\r
297                                                                 if(self.p.gridToolbar===true && $t.width) {\r
298                                                                         $("select",this).width($t.width);\r
299                                                                 }\r
300                                                                 if(self.p.autosearch===true){\r
301                                                                         $("select",this).change(function(e){\r
302                                                                                 triggerSearch();\r
303                                                                                 return false;\r
304                                                                         });\r
305                                                                 }\r
306                                                         });\r
307                                                 } else {\r
308                                                         // sopt to construct the values\r
309                                                         if($t.sopt.value) {\r
310                                                                 var so = $t.sopt.value.split(";"), sv, ov;\r
311                                                                 try {delete $t.sopt['value'];} catch (e) {}\r
312                                                                 var elem = document.createElement("select");\r
313                                                                 $(elem).attr({name:$t.name, id: "sg_"+$t.name}).attr($t.sopt);\r
314                                                                 for(var k=0; k<so.length;k++){\r
315                                                                         sv = so[k].split(":");\r
316                                                                         ov = document.createElement("option");\r
317                                                                         ov.value = sv[0]; ov.innerHTML = sv[1];\r
318                                                                         if (sv[1]==$t.defval) ov.selected ="selected";\r
319                                                                         elem.appendChild(ov);\r
320                                                                 }\r
321                                                                 if(self.p.gridToolbar===true && $t.width) {\r
322                                                                         $(elem).width($t.width);\r
323                                                                 }\r
324                                                                 $(td).append(elem);\r
325                                                                 if(self.p.autosearch===true){\r
326                                                                         $(elem).change(function(e){\r
327                                                                                 triggerSearch();\r
328                                                                                 return false;\r
329                                                                         });\r
330                                                                 }\r
331                                                         }\r
332                                                 }\r
333                                                 break;\r
334                                         case 'text':\r
335                                                 var df = this.defval ? this.defval: "";\r
336                                                 $(td).append("<input type='text' name='"+this.name+"' id='sg_"+this.name+"' value='"+df+"'/>");\r
337                                                 if($t.sopt) $("input",td).attr($t.sopt);\r
338                                                 if(self.p.gridToolbar===true && $t.width) {\r
339                                                         if($.browser.msie) {\r
340                                                                 $("input",td).width($t.width-4);\r
341                                                         } else {\r
342                                                                 $("input",td).width($t.width-2);\r
343                                                         }\r
344                                                 }\r
345                                                 if(self.p.autosearch===true){\r
346                                                         $("input",td).keypress(function(e){\r
347                                                                 var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;\r
348                                                                 if(key == 13){\r
349                                                                         triggerSearch();\r
350                                                                         return false;\r
351                                                                 }\r
352                                                                 return this;\r
353                                                         });\r
354                                                 }\r
355                                                 break;\r
356                                         }\r
357                                         if(self.p.formtype=='horizontal'){\r
358                                                 if(self.p.grodToolbar===true && self.p.gridNames===false) {\r
359                                                         $(tr).append(td);\r
360                                                 } else {\r
361                                                         $(tr).append(tl).append(td);\r
362                                                 }\r
363                                                 $(tr).append(td);\r
364                                         } else {\r
365                                                 tr1 = document.createElement("tr");\r
366                                                 $(tr1).append(tl).append(td);\r
367                                                 $(tbl).append(tr1);\r
368                                         }\r
369                                 });\r
370                                 td = document.createElement("td");\r
371                                 if(self.p.enableSearch === true){\r
372                                         sb = "<input type='button' id='sButton' class='"+self.p.buttonclass+"' value='"+self.p.searchButton+"'/>";\r
373                                         $(td).append(sb);\r
374                                         $("input#sButton",td).click(function(){\r
375                                                 triggerSearch();\r
376                                                 return false;\r
377                                         });\r
378                                 }\r
379                                 if(self.p.enableClear === true) {\r
380                                         cb = "<input type='button' id='cButton' class='"+self.p.buttonclass+"' value='"+self.p.clearButton+"'/>";\r
381                                         $(td).append(cb);\r
382                                         $("input#cButton",td).click(function(){\r
383                                                 clearSearch();\r
384                                                 return false;\r
385                                         });\r
386                                 }\r
387                                 if(self.p.enableClear === true || self.p.enableSearch === true) {\r
388                                         if(self.p.formtype=='horizontal') {\r
389                                                 $(tr).append(td);\r
390                                         } else {\r
391                                                 tr1 = document.createElement("tr");\r
392                                                 $(tr1).append("<td>&nbsp;</td>").append(td);\r
393                                                 $(tbl).append(tr1);\r
394                                         }\r
395                                 }\r
396                         };\r
397                         var frm = $("<form name='SearchForm' style=display:inline;' class='"+this.p.formclass+"'></form>");\r
398                         var tbl =$("<table class='"+this.p.tableclass+"' cellspacing='0' cellpading='0' border='0'><tbody></tbody></table>");\r
399                         $(frm).append(tbl);\r
400                         formFill();\r
401                         $(this).append(frm);\r
402                         this.triggerSearch = function () {triggerSearch();};\r
403                         this.clearSearch = function () {clearSearch();};\r
404                 });\r
405         }\r
406 });\r
407 })(jQuery);