+++ /dev/null
-;(function($){\r
-/**\r
- * jqGrid extension for custom methods\r
- * Tony Tomov tony@trirand.com\r
- * http://trirand.com/blog/ \r
- * Dual licensed under the MIT and GPL licenses:\r
- * http://www.opensource.org/licenses/mit-license.php\r
- * http://www.gnu.org/licenses/gpl.html\r
-**/ \r
-$.fn.extend({\r
- getColProp : function(colname){\r
- var ret ={}, $t = this[0];\r
- if ( !$t.grid ) { return; }\r
- var cM = $t.p.colModel;\r
- for ( var i =0;i<cM.length;i++ ) {\r
- if ( cM[i].name == colname ) {\r
- ret = cM[i];\r
- break;\r
- }\r
- };\r
- return ret;\r
- },\r
- setColProp : function(colname, obj){\r
- //do not set width will not work\r
- return this.each(function(){\r
- if ( this.grid ) {\r
- if ( obj ) {\r
- var cM = this.p.colModel;\r
- for ( var i =0;i<cM.length;i++ ) {\r
- if ( cM[i].name == colname ) {\r
- $.extend(this.p.colModel[i],obj);\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- });\r
- },\r
- sortGrid : function(colname,reload){\r
- return this.each(function(){\r
- var $t=this,idx=-1;\r
- if ( !$t.grid ) { return;}\r
- if ( !colname ) { colname = $t.p.sortname; }\r
- for ( var i=0;i<$t.p.colModel.length;i++ ) {\r
- if ( $t.p.colModel[i].index == colname || $t.p.colModel[i].name==colname ) {\r
- idx = i;\r
- break;\r
- }\r
- }\r
- if ( idx!=-1 ){\r
- var sort = $t.p.colModel[idx].sortable;\r
- if ( typeof sort !== 'boolean' ) { sort = true; }\r
- if ( typeof reload !=='boolean' ) { reload = false; }\r
- if ( sort ) { $t.sortData(colname, idx, reload); }\r
- }\r
- });\r
- },\r
- GridDestroy : function () {\r
- return this.each(function(){\r
- if ( this.grid ) { \r
- if ( this.p.pager ) {\r
- $(this.p.pager).remove();\r
- }\r
- $("#lui_"+this.id).remove();\r
- $(this.grid.bDiv).remove();\r
- $(this.grid.hDiv).remove();\r
- $(this.grid.cDiv).remove();\r
- if(this.p.toolbar[0]) { $(this.grid.uDiv).remove(); }\r
- this.p = null;\r
- this.grid =null;\r
- }\r
- });\r
- },\r
- GridUnload : function(){\r
- return this.each(function(){\r
- if ( !this.grid ) {return;}\r
- var defgrid = {id: $(this).attr('id'),cl: $(this).attr('class')};\r
- if (this.p.pager) {\r
- $(this.p.pager).empty();\r
- }\r
- var newtable = document.createElement('table');\r
- $(newtable).attr({id:defgrid['id']});\r
- newtable.className = defgrid['cl'];\r
- $("#lui_"+this.id).remove();\r
- if(this.p.toolbar[0]) { $(this.grid.uDiv).remove(); }\r
- $(this.grid.cDiv).remove();\r
- $(this.grid.bDiv).remove();\r
- $(this.grid.hDiv).before(newtable).remove();\r
- this.p = null;\r
- this.grid =null;\r
- });\r
- },\r
- filterGrid : function(gridid,p){\r
- p = $.extend({\r
- gridModel : false,\r
- gridNames : false,\r
- gridToolbar : false,\r
- filterModel: [], // label/name/stype/defval/surl/sopt\r
- formtype : "horizontal", // horizontal/vertical\r
- autosearch: true, // if set to false a serch button should be enabled.\r
- formclass: "filterform",\r
- tableclass: "filtertable",\r
- buttonclass: "filterbutton",\r
- searchButton: "Search",\r
- clearButton: "Clear",\r
- enableSearch : false,\r
- enableClear: false,\r
- beforeSearch: null,\r
- afterSearch: null,\r
- beforeClear: null,\r
- afterClear: null,\r
- url : '',\r
- marksearched: true\r
- },p || {});\r
- return this.each(function(){\r
- var self = this;\r
- this.p = p;\r
- if(this.p.filterModel.length == 0 && this.p.gridModel===false) { alert("No filter is set"); return;}\r
- if( !gridid) {alert("No target grid is set!"); return;}\r
- this.p.gridid = gridid.indexOf("#") != -1 ? gridid : "#"+gridid;\r
- var gcolMod = $(this.p.gridid).getGridParam('colModel');\r
- if(gcolMod) {\r
- if( this.p.gridModel === true) {\r
- var thegrid = $(this.p.gridid)[0];\r
- // we should use the options search, edittype, editoptions\r
- // additionally surl and defval can be added in grid colModel\r
- $.each(gcolMod, function (i,n) {\r
- var tmpFil = [];\r
- if(!this.search) {this.search = true;}\r
- if( this.search === true && !this.hidden) {\r
- if(self.p.gridNames===true) {\r
- tmpFil.label = thegrid.p.colNames[i];\r
- } else {\r
- tmpFil.label = '';\r
- }\r
- tmpFil.name = this.name;\r
- tmpFil.index = this.index || this.name;\r
- // we support only text and selects, so all other to text\r
- tmpFil.stype = this.edittype || 'text';\r
- if(tmpFil.stype != 'select' || tmpFil.stype != 'select') {\r
- tmpFil.stype = 'text';\r
- }\r
- tmpFil.defval = this.defval || '';\r
- tmpFil.surl = this.surl || '';\r
- tmpFil.sopt = this.editoptions || {};\r
- tmpFil.width = this.width;\r
- self.p.filterModel.push(tmpFil);\r
- }\r
- });\r
- } else {\r
- $.each(self.p.filterModel,function(i,n) {\r
- for(var j=0;j<gcolMod.length;j++) {\r
- if(this.name == gcolMod[j].name) {\r
- this.index = gcolMod[j].index || this.name;\r
- break;\r
- }\r
- }\r
- if(!this.index) {\r
- this.index = this.name;\r
- }\r
- });\r
- }\r
- } else {\r
- alert("Could not get grid colModel"); return;\r
- }\r
- var triggerSearch = function() {\r
- var sdata={}, j=0, v;\r
- var gr = $(self.p.gridid)[0];\r
- if($.isFunction(self.p.beforeSearch)){self.p.beforeSearch();}\r
- $.each(self.p.filterModel,function(i,n){\r
- switch (this.stype) {\r
- case 'select' :\r
- v = $("select[@name="+this.name+"]",self).val();\r
- if(v) {\r
- sdata[this.index] = v;\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
- }\r
- j++;\r
- } else {\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
- }\r
- // remove from postdata\r
- try {\r
- delete gr.p.postData[this.index];\r
- } catch(e) {}\r
- }\r
- break;\r
- default:\r
- v = $("input[@name="+this.name+"]",self).val();\r
- if(v) {\r
- sdata[this.index] = v;\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
- }\r
- j++;\r
- } else {\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
- }\r
- // remove from postdata\r
- try {\r
- delete gr.p.postData[this.index];\r
- } catch (e) {}\r
- }\r
- }\r
- });\r
- var sd = j>0 ? true : false;\r
- gr.p.postData = $.extend(gr.p.postData,sdata);\r
- var saveurl;\r
- if(self.p.url) {\r
- saveurl = $(gr).getGridParam('url');\r
- $(gr).setGridParam({url:self.p.url});\r
- }\r
- $(gr).setGridParam({search:sd,page:1}).trigger("reloadGrid");\r
- if(saveurl) {$(gr).setGridParam({url:saveurl});}\r
- if($.isFunction(self.p.afterSearch)){self.p.afterSearch();}\r
- };\r
- var clearSearch = function(){\r
- var sdata={}, v, j=0;\r
- var gr = $(self.p.gridid)[0];\r
- if($.isFunction(self.p.beforeClear)){self.p.beforeClear();}\r
- $.each(self.p.filterModel,function(i,n){\r
- v = (this.defval) ? this.defval : "";\r
- if(!this.stype){this.stype=='text';}\r
- switch (this.stype) {\r
- case 'select' :\r
- $("select[@name="+this.name+"]",self).val(v);\r
- if(v) {\r
- sdata[this.index] = v;\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
- }\r
- j++;\r
- } else {\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
- }\r
- // remove from postdata\r
- try {\r
- delete gr.p.postData[this.index];\r
- } catch(e) {}\r
- }\r
- break;\r
- case 'text':\r
- $("input[@name="+this.name+"]",self).val(v);\r
- if(v) {\r
- sdata[this.index] = v;\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).addClass("dirty-cell");\r
- }\r
- j++;\r
- } else {\r
- if(self.p.marksearched){\r
- $("#jqgh_"+this.name,gr.grid.hDiv).removeClass("dirty-cell");\r
- }\r
- // remove from postdata\r
- try {\r
- delete gr.p.postData[this.index];\r
- } catch(e) {}\r
- }\r
- }\r
- });\r
- var sd = j>0 ? true : false;\r
- gr.p.postData = $.extend(gr.p.postData,sdata);\r
- var saveurl;\r
- if(self.p.url) {\r
- saveurl = $(gr).getGridParam('url');\r
- $(gr).setGridParam({url:self.p.url});\r
- }\r
- $(gr).setGridParam({search:sd,page:1}).trigger("reloadGrid");\r
- if(saveurl) {$(gr).setGridParam({url:saveurl});}\r
- if($.isFunction(self.p.afterClear)){self.p.afterClear();}\r
- };\r
- var formFill = function(){\r
- var tr = document.createElement("tr");\r
- var tr1, sb, cb,tl,td, td1;\r
- if(self.p.formtype=='horizontal'){\r
- $(tbl).append(tr);\r
- }\r
- $.each(self.p.filterModel,function(i,n){\r
- tl = document.createElement("td");\r
- $(tl).append("<label for='"+this.name+"'>"+this.label+"</label>");\r
- td = document.createElement("td");\r
- var $t=this;\r
- if(!this.stype) { this.stype='text';}\r
- switch (this.stype)\r
- {\r
- case "select":\r
- if(this.surl) {\r
- // data returned should have already constructed html select\r
- $(td).load(this.surl,function(){\r
- if($t.defval) $("select",this).val($t.defval);\r
- $("select",this).attr({name:$t.name, id: "sg_"+$t.name});\r
- if($t.sopt) $("select",this).attr($t.sopt);\r
- if(self.p.gridToolbar===true && $t.width) {\r
- $("select",this).width($t.width);\r
- }\r
- if(self.p.autosearch===true){\r
- $("select",this).change(function(e){\r
- triggerSearch();\r
- return false;\r
- });\r
- }\r
- });\r
- } else {\r
- // sopt to construct the values\r
- if($t.sopt.value) {\r
- var so = $t.sopt.value.split(";"), sv, ov;\r
- try {delete $t.sopt['value'];} catch (e) {}\r
- var elem = document.createElement("select");\r
- $(elem).attr({name:$t.name, id: "sg_"+$t.name}).attr($t.sopt);\r
- for(var k=0; k<so.length;k++){\r
- sv = so[k].split(":");\r
- ov = document.createElement("option");\r
- ov.value = sv[0]; ov.innerHTML = sv[1];\r
- if (sv[1]==$t.defval) ov.selected ="selected";\r
- elem.appendChild(ov);\r
- }\r
- if(self.p.gridToolbar===true && $t.width) {\r
- $(elem).width($t.width);\r
- }\r
- $(td).append(elem);\r
- if(self.p.autosearch===true){\r
- $(elem).change(function(e){\r
- triggerSearch();\r
- return false;\r
- });\r
- }\r
- }\r
- }\r
- break;\r
- case 'text':\r
- var df = this.defval ? this.defval: "";\r
- $(td).append("<input type='text' name='"+this.name+"' id='sg_"+this.name+"' value='"+df+"'/>");\r
- if($t.sopt) $("input",td).attr($t.sopt);\r
- if(self.p.gridToolbar===true && $t.width) {\r
- if($.browser.msie) {\r
- $("input",td).width($t.width-4);\r
- } else {\r
- $("input",td).width($t.width-2);\r
- }\r
- }\r
- if(self.p.autosearch===true){\r
- $("input",td).keypress(function(e){\r
- var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;\r
- if(key == 13){\r
- triggerSearch();\r
- return false;\r
- }\r
- return this;\r
- });\r
- }\r
- break;\r
- }\r
- if(self.p.formtype=='horizontal'){\r
- if(self.p.grodToolbar===true && self.p.gridNames===false) {\r
- $(tr).append(td);\r
- } else {\r
- $(tr).append(tl).append(td);\r
- }\r
- $(tr).append(td);\r
- } else {\r
- tr1 = document.createElement("tr");\r
- $(tr1).append(tl).append(td);\r
- $(tbl).append(tr1);\r
- }\r
- });\r
- td = document.createElement("td");\r
- if(self.p.enableSearch === true){\r
- sb = "<input type='button' id='sButton' class='"+self.p.buttonclass+"' value='"+self.p.searchButton+"'/>";\r
- $(td).append(sb);\r
- $("input#sButton",td).click(function(){\r
- triggerSearch();\r
- return false;\r
- });\r
- }\r
- if(self.p.enableClear === true) {\r
- cb = "<input type='button' id='cButton' class='"+self.p.buttonclass+"' value='"+self.p.clearButton+"'/>";\r
- $(td).append(cb);\r
- $("input#cButton",td).click(function(){\r
- clearSearch();\r
- return false;\r
- });\r
- }\r
- if(self.p.enableClear === true || self.p.enableSearch === true) {\r
- if(self.p.formtype=='horizontal') {\r
- $(tr).append(td);\r
- } else {\r
- tr1 = document.createElement("tr");\r
- $(tr1).append("<td> </td>").append(td);\r
- $(tbl).append(tr1);\r
- }\r
- }\r
- };\r
- var frm = $("<form name='SearchForm' style=display:inline;' class='"+this.p.formclass+"'></form>");\r
- var tbl =$("<table class='"+this.p.tableclass+"' cellspacing='0' cellpading='0' border='0'><tbody></tbody></table>");\r
- $(frm).append(tbl);\r
- formFill();\r
- $(this).append(frm);\r
- this.triggerSearch = function () {triggerSearch();};\r
- this.clearSearch = function () {clearSearch();};\r
- });\r
- }\r
-});\r
-})(jQuery);
\ No newline at end of file