/assets/jqGrid/src/grid.custom.js
JavaScript | 440 lines | 423 code | 2 blank | 15 comment | 137 complexity | 1adacd3ab74f4a898e57c2884e568ee9 MD5 | raw file
- (function($){
- /**
- * jqGrid extension for custom methods
- * Tony Tomov tony@trirand.com
- * http://trirand.com/blog/
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl-2.0.html
- **/
- /*global jQuery, $ */
-
- $.jgrid.extend({
- getColProp : function(colname){
- var ret ={}, $t = this[0];
- if ( !$t.grid ) { return false; }
- var cM = $t.p.colModel;
- for ( var i =0;i<cM.length;i++ ) {
- if ( cM[i].name == colname ) {
- ret = cM[i];
- break;
- }
- }
- return ret;
- },
- setColProp : function(colname, obj){
- //do not set width will not work
- return this.each(function(){
- if ( this.grid ) {
- if ( obj ) {
- var cM = this.p.colModel;
- for ( var i =0;i<cM.length;i++ ) {
- if ( cM[i].name == colname ) {
- $.extend(this.p.colModel[i],obj);
- break;
- }
- }
- }
- }
- });
- },
- sortGrid : function(colname,reload, sor){
- return this.each(function(){
- var $t=this,idx=-1;
- if ( !$t.grid ) { return;}
- if ( !colname ) { colname = $t.p.sortname; }
- for ( var i=0;i<$t.p.colModel.length;i++ ) {
- if ( $t.p.colModel[i].index == colname || $t.p.colModel[i].name==colname ) {
- idx = i;
- break;
- }
- }
- if ( idx!=-1 ){
- var sort = $t.p.colModel[idx].sortable;
- if ( typeof sort !== 'boolean' ) { sort = true; }
- if ( typeof reload !=='boolean' ) { reload = false; }
- if ( sort ) { $t.sortData("jqgh_"+$t.p.id+"_" + colname, idx, reload, sor); }
- }
- });
- },
- GridDestroy : function () {
- return this.each(function(){
- if ( this.grid ) {
- if ( this.p.pager ) { // if not part of grid
- $(this.p.pager).remove();
- }
- var gid = this.id;
- try {
- $("#gbox_"+gid).remove();
- } catch (_) {}
- }
- });
- },
- GridUnload : function(){
- return this.each(function(){
- if ( !this.grid ) {return;}
- var defgrid = {id: $(this).attr('id'),cl: $(this).attr('class')};
- if (this.p.pager) {
- $(this.p.pager).empty().removeClass("ui-state-default ui-jqgrid-pager corner-bottom");
- }
- var newtable = document.createElement('table');
- $(newtable).attr({id:defgrid.id});
- newtable.className = defgrid.cl;
- var gid = this.id;
- $(newtable).removeClass("ui-jqgrid-btable");
- if( $(this.p.pager).parents("#gbox_"+gid).length === 1 ) {
- $(newtable).insertBefore("#gbox_"+gid).show();
- $(this.p.pager).insertBefore("#gbox_"+gid);
- } else {
- $(newtable).insertBefore("#gbox_"+gid).show();
- }
- $("#gbox_"+gid).remove();
- });
- },
- setGridState : function(state) {
- return this.each(function(){
- if ( !this.grid ) {return;}
- var $t = this;
- if(state == 'hidden'){
- $(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv","#gview_"+$t.p.id).slideUp("fast");
- if($t.p.pager) {$($t.p.pager).slideUp("fast");}
- if($t.p.toppager) {$($t.p.toppager).slideUp("fast");}
- if($t.p.toolbar[0]===true) {
- if( $t.p.toolbar[1]=='both') {
- $($t.grid.ubDiv).slideUp("fast");
- }
- $($t.grid.uDiv).slideUp("fast");
- }
- if($t.p.footerrow) { $(".ui-jqgrid-sdiv","#gbox_"+$t.p.id).slideUp("fast"); }
- $(".ui-jqgrid-titlebar-close span",$t.grid.cDiv).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");
- $t.p.gridstate = 'hidden';
- } else if(state=='visible') {
- $(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv","#gview_"+$t.p.id).slideDown("fast");
- if($t.p.pager) {$($t.p.pager).slideDown("fast");}
- if($t.p.toppager) {$($t.p.toppager).slideDown("fast");}
- if($t.p.toolbar[0]===true) {
- if( $t.p.toolbar[1]=='both') {
- $($t.grid.ubDiv).slideDown("fast");
- }
- $($t.grid.uDiv).slideDown("fast");
- }
- if($t.p.footerrow) { $(".ui-jqgrid-sdiv","#gbox_"+$t.p.id).slideDown("fast"); }
- $(".ui-jqgrid-titlebar-close span",$t.grid.cDiv).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n");
- $t.p.gridstate = 'visible';
- }
-
- });
- },
- filterToolbar : function(p){
- p = $.extend({
- autosearch: true,
- searchOnEnter : true,
- beforeSearch: null,
- afterSearch: null,
- beforeClear: null,
- afterClear: null,
- searchurl : '',
- stringResult: false,
- groupOp: 'AND',
- defaultSearch : "bw"
- },p || {});
- return this.each(function(){
- var $t = this;
- if(this.ftoolbar) { return; }
- var triggerToolbar = function() {
- var sdata={}, j=0, v, nm, sopt={},so;
- $.each($t.p.colModel,function(i,n){
- nm = this.index || this.name;
- switch (this.stype) {
- case 'select' :
- so = (this.searchoptions && this.searchoptions.sopt) ? this.searchoptions.sopt[0] : 'eq';
- v = $("#gs_"+$.jgrid.jqID(this.name),$t.grid.hDiv).val();
- if(v) {
- sdata[nm] = v;
- sopt[nm] = so;
- j++;
- } else {
- try {
- delete $t.p.postData[nm];
- } catch (e) {}
- }
- break;
- case 'text':
- so = (this.searchoptions && this.searchoptions.sopt) ? this.searchoptions.sopt[0] : p.defaultSearch;
- v = $("#gs_"+$.jgrid.jqID(this.name), $t.grid.hDiv).val();
- if(v) {
- sdata[nm] = v;
- sopt[nm] = so;
- j++;
- } else {
- try {
- delete $t.p.postData[nm];
- } catch (z) {}
- }
- break;
- }
- });
- var sd = j>0 ? true : false;
- if(p.stringResult === true || $t.p.datatype == "local") {
- var ruleGroup = "{\"groupOp\":\"" + p.groupOp + "\",\"rules\":[";
- var gi=0;
- $.each(sdata,function(i,n){
- if (gi > 0) {ruleGroup += ",";}
- ruleGroup += "{\"field\":\"" + i + "\",";
- ruleGroup += "\"op\":\"" + sopt[i] + "\",";
- n+="";
- ruleGroup += "\"data\":\"" + n.replace(/\\/g,'\\\\').replace(/\"/g,'\\"') + "\"}";
- gi++;
- });
- ruleGroup += "]}";
- $.extend($t.p.postData,{filters:ruleGroup});
- $.each(['searchField', 'searchString', 'searchOper'], function(i, n){
- if($t.p.postData.hasOwnProperty(n)) { delete $t.p.postData[n];}
- });
- } else {
- $.extend($t.p.postData,sdata);
- }
- var saveurl;
- if($t.p.searchurl) {
- saveurl = $t.p.url;
- $($t).jqGrid("setGridParam",{url:$t.p.searchurl});
- }
- var bsr = false;
- if($.isFunction(p.beforeSearch)){bsr = p.beforeSearch.call($t);}
- if(!bsr) { $($t).jqGrid("setGridParam",{search:sd}).trigger("reloadGrid",[{page:1}]); }
- if(saveurl) {$($t).jqGrid("setGridParam",{url:saveurl});}
- if($.isFunction(p.afterSearch)){p.afterSearch();}
- };
- var clearToolbar = function(trigger){
- var sdata={}, v, j=0, nm;
- trigger = (typeof trigger != 'boolean') ? true : trigger;
- $.each($t.p.colModel,function(i,n){
- v = (this.searchoptions && this.searchoptions.defaultValue) ? this.searchoptions.defaultValue : "";
- nm = this.index || this.name;
- switch (this.stype) {
- case 'select' :
- var v1;
- $("#gs_"+$.jgrid.jqID(nm)+" option",$t.grid.hDiv).each(function (i){
- if(i===0) { this.selected = true; }
- if ($(this).text() == v) {
- this.selected = true;
- v1 = $(this).val();
- return false;
- }
- });
- if (v1) {
- // post the key and not the text
- sdata[nm] = v1;
- j++;
- } else {
- try {
- delete $t.p.postData[nm];
- } catch(e) {}
- }
- break;
- case 'text':
- $("#gs_"+$.jgrid.jqID(nm),$t.grid.hDiv).val(v);
- if(v) {
- sdata[nm] = v;
- j++;
- } else {
- try {
- delete $t.p.postData[nm];
- } catch (y){}
- }
- break;
- }
- });
- var sd = j>0 ? true : false;
- if(p.stringResult === true || $t.p.datatype == "local") {
- var ruleGroup = "{\"groupOp\":\"" + p.groupOp + "\",\"rules\":[";
- var gi=0;
- $.each(sdata,function(i,n){
- if (gi > 0) {ruleGroup += ",";}
- ruleGroup += "{\"field\":\"" + i + "\",";
- ruleGroup += "\"op\":\"" + "eq" + "\",";
- n+="";
- ruleGroup += "\"data\":\"" + n.replace(/\\/g,'\\\\').replace(/\"/g,'\\"') + "\"}";
- gi++;
- });
- ruleGroup += "]}";
- $.extend($t.p.postData,{filters:ruleGroup});
- $.each(['searchField', 'searchString', 'searchOper'], function(i, n){
- if($t.p.postData.hasOwnProperty(n)) { delete $t.p.postData[n];}
- });
- } else {
- $.extend($t.p.postData,sdata);
- }
- var saveurl;
- if($t.p.searchurl) {
- saveurl = $t.p.url;
- $($t).jqGrid("setGridParam",{url:$t.p.searchurl});
- }
- var bcv = false;
- if($.isFunction(p.beforeClear)){bcv = p.beforeClear.call($t);}
- if(!bcv) {
- if(trigger) {
- $($t).jqGrid("setGridParam",{search:sd}).trigger("reloadGrid",[{page:1}]);
- }
- }
- if(saveurl) {$($t).jqGrid("setGridParam",{url:saveurl});}
- if($.isFunction(p.afterClear)){p.afterClear();}
- };
- var toggleToolbar = function(){
- var trow = $("tr.ui-search-toolbar",$t.grid.hDiv);
- if(trow.css("display")=='none') { trow.show(); }
- else { trow.hide(); }
- };
- // create the row
- function bindEvents(selector, events) {
- var jElem = $(selector);
- if (jElem[0]) {
- jQuery.each(events, function() {
- if (this.data !== undefined) {
- jElem.bind(this.type, this.data, this.fn);
- } else {
- jElem.bind(this.type, this.fn);
- }
- });
- }
- }
- var tr = $("<tr class='ui-search-toolbar' role='rowheader'></tr>");
- var timeoutHnd;
- $.each($t.p.colModel,function(i,n){
- var cm=this, thd , th, soptions,surl,self;
- th = $("<th role='columnheader' class='ui-state-default ui-th-column ui-th-"+$t.p.direction+"'></th>");
- thd = $("<div style='width:100%;position:relative;height:100%;padding-right:0.3em;'></div>");
- if(this.hidden===true) { $(th).css("display","none");}
- this.search = this.search === false ? false : true;
- if(typeof this.stype == 'undefined' ) {this.stype='text';}
- soptions = $.extend({},this.searchoptions || {});
- if(this.search){
- switch (this.stype)
- {
- case "select":
- surl = this.surl || soptions.dataUrl;
- if(surl) {
- // data returned should have already constructed html select
- // primitive jQuery load
- self = thd;
- $.ajax($.extend({
- url: surl,
- dataType: "html",
- complete: function(res,status) {
- if(soptions.buildSelect !== undefined) {
- var d = soptions.buildSelect(res);
- if (d) { $(self).append(d); }
- } else {
- $(self).append(res.responseText);
- }
- if(soptions.defaultValue) { $("select",self).val(soptions.defaultValue); }
- $("select",self).attr({name:cm.index || cm.name, id: "gs_"+cm.name});
- if(soptions.attr) {$("select",self).attr(soptions.attr);}
- $("select",self).css({width: "100%"});
- // preserve autoserch
- if(soptions.dataInit !== undefined) { soptions.dataInit($("select",self)[0]); }
- if(soptions.dataEvents !== undefined) { bindEvents($("select",self)[0],soptions.dataEvents); }
- if(p.autosearch===true){
- $("select",self).change(function(e){
- triggerToolbar();
- return false;
- });
- }
- res=null;
- }
- }, $.jgrid.ajaxOptions, $t.p.ajaxSelectOptions || {} ));
- } else {
- var oSv;
- if(cm.searchoptions && cm.searchoptions.value) {
- oSv = cm.searchoptions.value;
- } else if(cm.editoptions && cm.editoptions.value) {
- oSv = cm.editoptions.value;
- }
- if (oSv) {
- var elem = document.createElement("select");
- elem.style.width = "100%";
- $(elem).attr({name:cm.index || cm.name, id: "gs_"+cm.name});
- var so, sv, ov;
- if(typeof oSv === "string") {
- so = oSv.split(";");
- for(var k=0; k<so.length;k++){
- sv = so[k].split(":");
- ov = document.createElement("option");
- ov.value = sv[0]; ov.innerHTML = sv[1];
- elem.appendChild(ov);
- }
- } else if(typeof oSv === "object" ) {
- for ( var key in oSv) {
- if(oSv.hasOwnProperty(key)) {
- ov = document.createElement("option");
- ov.value = key; ov.innerHTML = oSv[key];
- elem.appendChild(ov);
- }
- }
- }
- if(soptions.defaultValue) { $(elem).val(soptions.defaultValue); }
- if(soptions.attr) {$(elem).attr(soptions.attr);}
- if(soptions.dataInit !== undefined) { soptions.dataInit(elem); }
- if(soptions.dataEvents !== undefined) { bindEvents(elem, soptions.dataEvents); }
- $(thd).append(elem);
- if(p.autosearch===true){
- $(elem).change(function(e){
- triggerToolbar();
- return false;
- });
- }
- }
- }
- break;
- case 'text':
- var df = soptions.defaultValue ? soptions.defaultValue: "";
- $(thd).append("<input type='text' style='width:95%;padding:0px;' name='"+(cm.index || cm.name)+"' id='gs_"+cm.name+"' value='"+df+"'/>");
- if(soptions.attr) {$("input",thd).attr(soptions.attr);}
- if(soptions.dataInit !== undefined) { soptions.dataInit($("input",thd)[0]); }
- if(soptions.dataEvents !== undefined) { bindEvents($("input",thd)[0], soptions.dataEvents); }
- if(p.autosearch===true){
- if(p.searchOnEnter) {
- $("input",thd).keypress(function(e){
- var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
- if(key == 13){
- triggerToolbar();
- return false;
- }
- return this;
- });
- } else {
- $("input",thd).keydown(function(e){
- var key = e.which;
- switch (key) {
- case 13:
- return false;
- case 9 :
- case 16:
- case 37:
- case 38:
- case 39:
- case 40:
- case 27:
- break;
- default :
- if(timeoutHnd) { clearTimeout(timeoutHnd); }
- timeoutHnd = setTimeout(function(){triggerToolbar();},500);
- }
- });
- }
- }
- break;
- }
- }
- $(th).append(thd);
- $(tr).append(th);
- });
- $("table thead",$t.grid.hDiv).append(tr);
- this.ftoolbar = true;
- this.triggerToolbar = triggerToolbar;
- this.clearToolbar = clearToolbar;
- this.toggleToolbar = toggleToolbar;
- });
- }
- });
- })(jQuery);