From eb8cb6a38cabcabd03ca78ebaf7d1832c698820b Mon Sep 17 00:00:00 2001 From: Tony Tomov Date: Fri, 29 May 2015 21:35:33 +0300 Subject: [PATCH] multisort now support order of clicking. Fix for frozen columns and multisort. --- js/grid.base.js | 91 ++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 50 deletions(-) diff --git a/js/grid.base.js b/js/grid.base.js index b8970e129..e1f84c23c 100644 --- a/js/grid.base.js +++ b/js/grid.base.js @@ -1235,6 +1235,7 @@ $.fn.jqGrid = function( pin ) { return; } var gv = $("
"), + sortarr=[], sortord=[], sotmp=[], isMSIE = $.jgrid.msie; ts.p.direction = $.trim(ts.p.direction.toLowerCase()); ts.p._ald = false; @@ -1907,19 +1908,17 @@ $.fn.jqGrid = function( pin ) { } } } - if(ts.p.multiSort) { - if(this.lso) { - st.push(this.name); - var tmplso= this.lso.split("-"); - sto.push( tmplso[tmplso.length-1] ); - } - } else { + if(!ts.p.multiSort) { if(!fndsort && (this.index === ts.p.sortname || this.name === ts.p.sortname)){ st = this.name; // ??? fndsort = true; } } }); + if(ts.p.multiSort) { + st = sortarr; + sto = sortord; + } if(ts.p.treeGrid && ts.p._sort) { $(ts).jqGrid("SortTree", st, ts.p.sortorder, cmtypes[st].stype || 'text', cmtypes[st].srcfmt || ''); return; @@ -1941,7 +1940,6 @@ $.fn.jqGrid = function( pin ) { 'in':function(queryObj) {return queryObj.equals;}, 'nu':function(queryObj) {return queryObj.isNull;}, 'nn':function(queryObj,op) {return op === "OR" ? queryObj.orNot().isNull : queryObj.andNot().isNull;} - }, query = $.jgrid.from.call(ts, ts.p.data); if (ts.p.ignoreCase) { query = query.ignoreCase(); } @@ -2471,11 +2469,11 @@ $.fn.jqGrid = function( pin ) { } }, multiSort = function(iCol, obj ) { - var splas, sort="", cm = ts.p.colModel, fs=false, ls, - selTh = ts.p.frozenColumns ? obj : ts.grid.headers[iCol].el, so=""; - $("span.ui-grid-ico-sort",selTh).addClass('ui-state-disabled'); + var cm = ts.p.colModel, + selTh = ts.p.frozenColumns ? obj : ts.grid.headers[iCol].el, so="", sn; + $("span.ui-grid-ico-sort",selTh).addClass(disabled); $(selTh).attr("aria-selected","false"); - + sn = cm[iCol].index || cm[iCol].name; if(cm[iCol].lso) { if(cm[iCol].lso==="asc") { cm[iCol].lso += "-desc"; @@ -2491,29 +2489,37 @@ $.fn.jqGrid = function( pin ) { } if( so ) { $("span.s-ico",selTh).show(); - $("span.ui-icon-"+so,selTh).removeClass('ui-state-disabled'); + $("span.ui-icon-"+so,selTh).removeClass(disabled); $(selTh).attr("aria-selected","true"); } else { if(!ts.p.viewsortcols[0]) { $("span.s-ico",selTh).hide(); } } + var isn = sortarr.indexOf( sn ); + if( isn === -1 ) { + sortarr.push( sn ); + sortord.push( so ); + } else { + if( so ) { + sortord[isn] = so; + } else { + sortord.splice( isn, 1 ); + sortarr.splice( isn, 1 ); + } + } ts.p.sortorder = ""; - $.each(cm, function(i){ - if(this.lso) { - if(i>0 && fs) { - sort += ", "; - } - splas = this.lso.split("-"); - sort += cm[i].index || cm[i].name; - sort += " "+splas[splas.length-1]; - fs = true; - ts.p.sortorder = splas[splas.length-1]; + ts.p.sortname = ""; + for( var i = 0, len = sortarr.length; i < len ; i++) { + if( i > 0) { + ts.p.sortname += ", "; } - }); - ls = sort.lastIndexOf(ts.p.sortorder); - sort = sort.substring(0, ls); - ts.p.sortname = sort; + ts.p.sortname += sortarr[ i ]; + if( i !== len -1) { + ts.p.sortname += " "+sortord[ i ]; + } + } + ts.p.sortorder = sortord[ len -1 ]; }, sortData = function (index, idxcol,reload,sor, obj){ if(!ts.p.colModel[idxcol].sortable) { return; } @@ -2746,7 +2752,7 @@ $.fn.jqGrid = function( pin ) { if(ts.p.data.length) { normalizeData(); refreshIndex(); } var thead = "", tdc, idn, w, res, sort, - td, ptr, tbody, imgs,iac="",idc="",sortarr=[], sortord=[], sotmp=[]; + td, ptr, tbody, imgs,iac="",idc=""; if(ts.p.shrinkToFit===true && ts.p.forceFit===true) { for (i=ts.p.colModel.length-1;i>=0;i--){ if(!ts.p.colModel[i].hidden) { @@ -2760,11 +2766,13 @@ $.fn.jqGrid = function( pin ) { imgs = ""; if(ts.p.multiSort) { - sortarr = ts.p.sortname.split(","); - for (i=0; i