/*jshint eqeqeq:false, eqnull:true */
|
/*global jQuery, define */
|
// Grouping module
|
(function( factory ) {
|
"use strict";
|
if ( typeof define === "function" && define.amd ) {
|
// AMD. Register as an anonymous module.
|
define([
|
"jquery",
|
"./grid.base"
|
], factory );
|
} else {
|
// Browser globals
|
factory( jQuery );
|
}
|
}(function( $ ) {
|
"use strict";
|
//module begin
|
$.jgrid.extend({
|
groupingSetup : function () {
|
return this.each(function (){
|
var $t = this, i, j, cml, cm = $t.p.colModel, grp = $t.p.groupingView,
|
classes = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')].grouping;
|
if(grp !== null && ( (typeof grp === 'object') || $.isFunction(grp) ) ) {
|
if(!grp.plusicon) { grp.plusicon = classes.icon_plus;}
|
if(!grp.minusicon) { grp.minusicon = classes.icon_minus;}
|
if(!grp.groupField.length) {
|
$t.p.grouping = false;
|
} else {
|
if (grp.visibiltyOnNextGrouping === undefined) {
|
grp.visibiltyOnNextGrouping = [];
|
}
|
|
grp.lastvalues=[];
|
if(!grp._locgr) {
|
grp.groups =[];
|
}
|
grp.counters =[];
|
for(i=0;i<grp.groupField.length;i++) {
|
if(!grp.groupOrder[i]) {
|
grp.groupOrder[i] = 'asc';
|
}
|
if(!grp.groupText[i]) {
|
grp.groupText[i] = '{0}';
|
}
|
if( typeof grp.groupColumnShow[i] !== 'boolean') {
|
grp.groupColumnShow[i] = true;
|
}
|
if( typeof grp.groupSummary[i] !== 'boolean') {
|
grp.groupSummary[i] = false;
|
}
|
if( !grp.groupSummaryPos[i]) {
|
grp.groupSummaryPos[i] = 'footer';
|
}
|
if(grp.groupColumnShow[i] === true) {
|
grp.visibiltyOnNextGrouping[i] = true;
|
$($t).jqGrid('showCol',grp.groupField[i]);
|
} else {
|
grp.visibiltyOnNextGrouping[i] = $("#"+$.jgrid.jqID($t.p.id+"_"+grp.groupField[i])).is(":visible");
|
$($t).jqGrid('hideCol',grp.groupField[i]);
|
}
|
}
|
grp.summary =[];
|
if(grp.hideFirstGroupCol) {
|
if($.isArray(grp.formatDisplayField) && !$.isFunction(grp.formatDisplayField[0] ) ) {
|
grp.formatDisplayField[0] = function (v) { return v;};
|
}
|
}
|
for(j=0, cml = cm.length; j < cml; j++) {
|
if(grp.hideFirstGroupCol) {
|
if(!cm[j].hidden && grp.groupField[0] === cm[j].name) {
|
cm[j].formatter = function(){return '';};
|
}
|
}
|
if(cm[j].summaryType ) {
|
if(cm[j].summaryDivider) {
|
grp.summary.push({nm:cm[j].name,st:cm[j].summaryType, v: '', sd:cm[j].summaryDivider, vd:'', sr: cm[j].summaryRound, srt: cm[j].summaryRoundType || 'round'});
|
} else {
|
grp.summary.push({nm:cm[j].name,st:cm[j].summaryType, v: '', sr: cm[j].summaryRound, srt: cm[j].summaryRoundType || 'round'});
|
}
|
}
|
}
|
}
|
} else {
|
$t.p.grouping = false;
|
}
|
});
|
},
|
groupingPrepare : function ( record, irow ) {
|
this.each(function(){
|
var grp = this.p.groupingView, $t= this, i,
|
sumGroups = function() {
|
if ($.isFunction(this.st)) {
|
this.v = this.st.call($t, this.v, this.nm, record);
|
} else {
|
this.v = $($t).jqGrid('groupingCalculations.handler',this.st, this.v, this.nm, this.sr, this.srt, record);
|
if(this.st.toLowerCase() === 'avg' && this.sd) {
|
this.vd = $($t).jqGrid('groupingCalculations.handler',this.st, this.vd, this.sd, this.sr, this.srt, record);
|
}
|
}
|
},
|
grlen = grp.groupField.length,
|
fieldName,
|
v,
|
displayName,
|
displayValue,
|
changed = 0;
|
for(i=0;i<grlen;i++) {
|
fieldName = grp.groupField[i];
|
displayName = grp.displayField[i];
|
v = record[fieldName];
|
displayValue = displayName == null ? null : record[displayName];
|
|
if( displayValue == null ) {
|
displayValue = v;
|
}
|
if( v !== undefined ) {
|
if(irow === 0 ) {
|
// First record always starts a new group
|
grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
|
grp.lastvalues[i] = v;
|
grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
|
$.each(grp.counters[i].summary, sumGroups);
|
grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
|
} else {
|
if (typeof v !== "object" && ($.isArray(grp.isInTheSameGroup) && $.isFunction(grp.isInTheSameGroup[i]) ? ! grp.isInTheSameGroup[i].call($t, grp.lastvalues[i], v, i, grp): grp.lastvalues[i] !== v)) {
|
// This record is not in same group as previous one
|
grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
|
grp.lastvalues[i] = v;
|
changed = 1;
|
grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
|
$.each(grp.counters[i].summary, sumGroups);
|
grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
|
} else {
|
if (changed === 1) {
|
// This group has changed because an earlier group changed.
|
grp.groups.push({idx:i,dataIndex:fieldName,value:v, displayValue: displayValue, startRow: irow, cnt:1, summary : [] } );
|
grp.lastvalues[i] = v;
|
grp.counters[i] = {cnt:1, pos:grp.groups.length-1, summary: $.extend(true,[],grp.summary)};
|
$.each(grp.counters[i].summary, sumGroups);
|
grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
|
} else {
|
grp.counters[i].cnt += 1;
|
grp.groups[grp.counters[i].pos].cnt = grp.counters[i].cnt;
|
$.each(grp.counters[i].summary, sumGroups);
|
grp.groups[grp.counters[i].pos].summary = grp.counters[i].summary;
|
}
|
}
|
}
|
}
|
}
|
//gdata.push( rData );
|
});
|
return this;
|
},
|
groupingToggle : function(hid){
|
this.each(function(){
|
var $t = this,
|
grp = $t.p.groupingView,
|
strpos = hid.split('_'),
|
num = parseInt(strpos[strpos.length-2], 10);
|
strpos.splice(strpos.length-2,2);
|
var uid = strpos.join("_"),
|
minus = grp.minusicon,
|
plus = grp.plusicon,
|
tar = $("#"+$.jgrid.jqID(hid)),
|
r = tar.length ? tar[0].nextSibling : null,
|
tarspan = $("#"+$.jgrid.jqID(hid)+" span."+"tree-wrap-"+$t.p.direction),
|
getGroupingLevelFromClass = function (className) {
|
var nums = $.map(className.split(" "), function (item) {
|
if (item.substring(0, uid.length + 1) === uid + "_") {
|
return parseInt(item.substring(uid.length + 1), 10);
|
}
|
});
|
return nums.length > 0 ? nums[0] : undefined;
|
},
|
itemGroupingLevel,
|
showData,
|
collapsed = false,
|
skip = false,
|
frz = $t.p.frozenColumns ? $t.p.id+"_frozen" : false,
|
tar2 = frz ? $("#"+$.jgrid.jqID(hid), "#"+$.jgrid.jqID(frz) ) : false,
|
r2 = (tar2 && tar2.length) ? tar2[0].nextSibling : null;
|
if( tarspan.hasClass(minus) ) {
|
if(grp.showSummaryOnHide) {
|
if(r){
|
while(r) {
|
itemGroupingLevel = getGroupingLevelFromClass(r.className);
|
if (itemGroupingLevel !== undefined && itemGroupingLevel <= num) {
|
break;
|
}
|
$(r).hide();
|
r = r.nextSibling;
|
if(frz) {
|
$(r2).hide();
|
r2 = r2.nextSibling;
|
}
|
}
|
}
|
} else {
|
if(r){
|
while(r) {
|
itemGroupingLevel = getGroupingLevelFromClass(r.className);
|
if (itemGroupingLevel !== undefined && itemGroupingLevel <= num) {
|
break;
|
}
|
$(r).hide();
|
r = r.nextSibling;
|
if(frz) {
|
$(r2).hide();
|
r2 = r2.nextSibling;
|
}
|
}
|
}
|
}
|
tarspan.removeClass(minus).addClass(plus);
|
collapsed = true;
|
} else {
|
if(r){
|
showData = undefined;
|
while(r) {
|
itemGroupingLevel = getGroupingLevelFromClass(r.className);
|
if (showData === undefined) {
|
showData = itemGroupingLevel === undefined; // if the first row after the opening group is data row then show the data rows
|
}
|
skip = $(r).hasClass("ui-subgrid") && $(r).hasClass("ui-sg-collapsed");
|
if (itemGroupingLevel !== undefined) {
|
if (itemGroupingLevel <= num) {
|
break;// next item of the same lever are found
|
}
|
if (itemGroupingLevel === num + 1) {
|
if(!skip) {
|
$(r).show().find(">td>span."+"tree-wrap-"+$t.p.direction).removeClass(minus).addClass(plus);
|
if(frz) {
|
$(r2).show().find(">td>span."+"tree-wrap-"+$t.p.direction).removeClass(minus).addClass(plus);
|
}
|
}
|
}
|
} else if (showData) {
|
if(!skip) {
|
$(r).show();
|
if(frz) {
|
$(r2).show();
|
}
|
}
|
}
|
r = r.nextSibling;
|
if(frz) {
|
r2 = r2.nextSibling;
|
}
|
}
|
}
|
tarspan.removeClass(plus).addClass(minus);
|
}
|
$($t).triggerHandler("jqGridGroupingClickGroup", [hid , collapsed]);
|
if( $.isFunction($t.p.onClickGroup)) { $t.p.onClickGroup.call($t, hid , collapsed); }
|
|
});
|
return false;
|
},
|
groupingRender : function (grdata, colspans, page, rn ) {
|
return this.each(function(){
|
var $t = this,
|
grp = $t.p.groupingView,
|
str = "", icon = "", hid, clid, pmrtl = grp.groupCollapse ? grp.plusicon : grp.minusicon, gv, cp=[], len =grp.groupField.length,
|
//classes = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')]['grouping'],
|
common = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')].common;
|
|
pmrtl = pmrtl+" tree-wrap-"+$t.p.direction;
|
$.each($t.p.colModel, function (i,n){
|
var ii;
|
for(ii=0;ii<len;ii++) {
|
if(grp.groupField[ii] === n.name ) {
|
cp[ii] = i;
|
break;
|
}
|
}
|
});
|
var toEnd = 0;
|
function findGroupIdx( ind , offset, grp) {
|
var ret = false, i;
|
if(offset===0) {
|
ret = grp[ind];
|
} else {
|
var id = grp[ind].idx;
|
if(id===0) {
|
ret = grp[ind];
|
} else {
|
for(i=ind;i >= 0; i--) {
|
if(grp[i].idx === id-offset) {
|
ret = grp[i];
|
break;
|
}
|
}
|
}
|
}
|
return ret;
|
}
|
function buildSummaryTd(i, ik, grp, foffset) {
|
var fdata = findGroupIdx(i, ik, grp),
|
cm = $t.p.colModel,
|
vv, grlen = fdata.cnt, str="", k;
|
for(k=foffset; k<colspans;k++) {
|
var tmpdata = "<td "+$t.formatCol(k,1,'')+"> </td>",
|
tplfld = "{0}";
|
$.each(fdata.summary,function(){
|
if(this.nm === cm[k].name) {
|
if(cm[k].summaryTpl) {
|
tplfld = cm[k].summaryTpl;
|
}
|
if(typeof this.st === 'string' && this.st.toLowerCase() === 'avg') {
|
if(this.sd && this.vd) {
|
this.v = (this.v/this.vd);
|
} else if(this.v && grlen > 0) {
|
this.v = (this.v/grlen);
|
}
|
}
|
try {
|
this.groupCount = fdata.cnt;
|
this.groupIndex = fdata.dataIndex;
|
this.groupValue = fdata.value;
|
vv = $t.formatter('', this.v, k, this);
|
} catch (ef) {
|
vv = this.v;
|
}
|
tmpdata= "<td "+$t.formatCol(k,1,'')+">"+$.jgrid.template(tplfld,vv)+ "</td>";
|
return false;
|
}
|
});
|
str += tmpdata;
|
}
|
return str;
|
}
|
var sumreverse = $.makeArray(grp.groupSummary), mul;
|
sumreverse.reverse();
|
mul = $t.p.multiselect ? " colspan=\"2\"" : "";
|
$.each(grp.groups,function(i,n){
|
if(grp._locgr) {
|
if( !(n.startRow +n.cnt > (page-1)*rn && n.startRow < page*rn)) {
|
return true;
|
}
|
}
|
toEnd++;
|
clid = $t.p.id+"ghead_"+n.idx;
|
hid = clid+"_"+i;
|
icon = "<span style='cursor:pointer;margin-right:8px;margin-left:5px;' class='" + common.icon_base +" "+pmrtl+"' onclick=\"jQuery('#"+$.jgrid.jqID($t.p.id)+"').jqGrid('groupingToggle','"+hid+"');return false;\"></span>";
|
try {
|
if ($.isArray(grp.formatDisplayField) && $.isFunction(grp.formatDisplayField[n.idx])) {
|
n.displayValue = grp.formatDisplayField[n.idx].call($t, n.displayValue, n.value, $t.p.colModel[cp[n.idx]], n.idx, grp);
|
gv = n.displayValue;
|
} else {
|
gv = $t.formatter(hid, n.displayValue, cp[n.idx], n.value );
|
}
|
} catch (egv) {
|
gv = n.displayValue;
|
}
|
var grpTextStr = '';
|
if($.isFunction(grp.groupText[n.idx])) {
|
grpTextStr = grp.groupText[n.idx].call($t, gv, n.cnt, n.summary);
|
} else {
|
grpTextStr = $.jgrid.template(grp.groupText[n.idx], gv, n.cnt, n.summary);
|
}
|
if( !(typeof grpTextStr ==='string' || typeof grpTextStr ==='number' ) ) {
|
grpTextStr = gv;
|
}
|
if(grp.groupSummaryPos[n.idx] === 'header') {
|
str += "<tr id=\""+hid+"\"" +(grp.groupCollapse && n.idx>0 ? " style=\"display:none;\" " : " ") + "role=\"row\" class= \"" + common.content + " jqgroup ui-row-"+$t.p.direction+" "+clid+"\"><td style=\"padding-left:"+(n.idx * 12) + "px;"+"\"" + mul +">" + icon+grpTextStr + "</td>";
|
str += buildSummaryTd(i, 0, grp.groups, grp.groupColumnShow[n.idx] === false ? (mul ==="" ? 2 : 3) : ((mul ==="") ? 1 : 2) );
|
str += "</tr>";
|
} else {
|
str += "<tr id=\""+hid+"\"" +(grp.groupCollapse && n.idx>0 ? " style=\"display:none;\" " : " ") + "role=\"row\" class= \"" + common.content + " jqgroup ui-row-"+$t.p.direction+" "+clid+"\"><td style=\"padding-left:"+(n.idx * 12) + "px;"+"\" colspan=\""+(grp.groupColumnShow[n.idx] === false ? colspans-1 : colspans)+"\">" + icon + grpTextStr + "</td></tr>";
|
}
|
var leaf = len-1 === n.idx;
|
if( leaf ) {
|
var gg = grp.groups[i+1], kk, ik, offset = 0, sgr = n.startRow,
|
end = gg !== undefined ? gg.startRow : grp.groups[i].startRow + grp.groups[i].cnt;
|
if(grp._locgr) {
|
offset = (page-1)*rn;
|
if(offset > n.startRow) {
|
sgr = offset;
|
}
|
}
|
for(kk=sgr;kk<end;kk++) {
|
if(!grdata[kk - offset]) { break; }
|
str += grdata[kk - offset].join('');
|
}
|
if(grp.groupSummaryPos[n.idx] !== 'header') {
|
var jj;
|
if (gg !== undefined) {
|
for (jj = 0; jj < grp.groupField.length; jj++) {
|
if (gg.dataIndex === grp.groupField[jj]) {
|
break;
|
}
|
}
|
toEnd = grp.groupField.length - jj;
|
}
|
for (ik = 0; ik < toEnd; ik++) {
|
if(!sumreverse[ik]) { continue; }
|
var hhdr = "";
|
if(grp.groupCollapse && !grp.showSummaryOnHide) {
|
hhdr = " style=\"display:none;\"";
|
}
|
str += "<tr"+hhdr+" jqfootlevel=\""+(n.idx-ik)+"\" role=\"row\" class=\"" + common.content + " jqfoot ui-row-"+$t.p.direction+"\">";
|
str += buildSummaryTd(i, ik, grp.groups, 0);
|
str += "</tr>";
|
}
|
toEnd = jj;
|
}
|
}
|
});
|
$("#"+$.jgrid.jqID($t.p.id)+" tbody:first").append(str);
|
// free up memory
|
str = null;
|
});
|
},
|
groupingGroupBy : function (name, options ) {
|
return this.each(function(){
|
var $t = this;
|
if(typeof name === "string") {
|
name = [name];
|
}
|
var grp = $t.p.groupingView;
|
$t.p.grouping = true;
|
grp._locgr = false;
|
//Set default, in case visibilityOnNextGrouping is undefined
|
if (grp.visibiltyOnNextGrouping === undefined) {
|
grp.visibiltyOnNextGrouping = [];
|
}
|
var i;
|
// show previous hidden groups if they are hidden and weren't removed yet
|
for(i=0;i<grp.groupField.length;i++) {
|
if(!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i]) {
|
$($t).jqGrid('showCol',grp.groupField[i]);
|
}
|
}
|
// set visibility status of current group columns on next grouping
|
for(i=0;i<name.length;i++) {
|
grp.visibiltyOnNextGrouping[i] = $("#"+$.jgrid.jqID($t.p.id)+"_"+$.jgrid.jqID(name[i])).is(":visible");
|
}
|
$t.p.groupingView = $.extend($t.p.groupingView, options || {});
|
grp.groupField = name;
|
$($t).trigger("reloadGrid");
|
});
|
},
|
groupingRemove : function (current) {
|
return this.each(function(){
|
var $t = this;
|
if(current === undefined) {
|
current = true;
|
}
|
$t.p.grouping = false;
|
if(current===true) {
|
var grp = $t.p.groupingView, i;
|
// show previous hidden groups if they are hidden and weren't removed yet
|
for(i=0;i<grp.groupField.length;i++) {
|
if (!grp.groupColumnShow[i] && grp.visibiltyOnNextGrouping[i]) {
|
$($t).jqGrid('showCol', grp.groupField);
|
}
|
}
|
$("tr.jqgroup, tr.jqfoot","#"+$.jgrid.jqID($t.p.id)+" tbody:first").remove();
|
$("tr.jqgrow:hidden","#"+$.jgrid.jqID($t.p.id)+" tbody:first").show();
|
} else {
|
$($t).trigger("reloadGrid");
|
}
|
});
|
},
|
groupingCalculations : {
|
handler: function(fn, v, field, round, roundType, rc) {
|
var funcs = {
|
sum: function() {
|
return parseFloat(v||0) + parseFloat((rc[field]||0));
|
},
|
|
min: function() {
|
if(v==="") {
|
return parseFloat(rc[field]||0);
|
}
|
return Math.min(parseFloat(v),parseFloat(rc[field]||0));
|
},
|
|
max: function() {
|
if(v==="") {
|
return parseFloat(rc[field]||0);
|
}
|
return Math.max(parseFloat(v),parseFloat(rc[field]||0));
|
},
|
|
count: function() {
|
if(v==="") {v=0;}
|
if(rc.hasOwnProperty(field)) {
|
return v+1;
|
}
|
return 0;
|
},
|
|
avg: function() {
|
// the same as sum, but at end we divide it
|
// so use sum instead of duplicating the code (?)
|
return funcs.sum();
|
}
|
};
|
|
if(!funcs[fn]) {
|
throw ("jqGrid Grouping No such method: " + fn);
|
}
|
var res = funcs[fn]();
|
|
if (round != null) {
|
if (roundType === 'fixed') {
|
res = res.toFixed(round);
|
} else {
|
var mul = Math.pow(10, round);
|
res = Math.round(res * mul) / mul;
|
}
|
}
|
|
return res;
|
}
|
},
|
setGroupHeaders : function ( o ) {
|
o = $.extend({
|
useColSpanStyle : false,
|
groupHeaders: []
|
},o || {});
|
return this.each(function(){
|
var ts = this,
|
i, cmi, skip = 0, $tr, $colHeader, th, $th, thStyle,
|
iCol,
|
cghi,
|
//startColumnName,
|
numberOfColumns,
|
titleText,
|
cVisibleColumns,
|
className,
|
colModel = ts.p.colModel,
|
cml = colModel.length,
|
ths = ts.grid.headers,
|
$htable = $("table.ui-jqgrid-htable", ts.grid.hDiv),
|
$trLabels = $htable.children("thead").children("tr.ui-jqgrid-labels:last").addClass("jqg-second-row-header"),
|
$thead = $htable.children("thead"),
|
$theadInTable,
|
$firstHeaderRow = $htable.find(".jqg-first-row-header"),
|
//classes = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')]['grouping'],
|
base = $.jgrid.styleUI[(ts.p.styleUI || 'jQueryUI')].base;
|
if(!ts.p.groupHeader) {
|
ts.p.groupHeader = [];
|
}
|
ts.p.groupHeader.push(o);
|
if($firstHeaderRow[0] === undefined) {
|
$firstHeaderRow = $('<tr>', {role: "row", "aria-hidden": "true"}).addClass("jqg-first-row-header").css("height", "auto");
|
} else {
|
$firstHeaderRow.empty();
|
}
|
var $firstRow,
|
inColumnHeader = function (text, columnHeaders) {
|
var length = columnHeaders.length, i;
|
for (i = 0; i < length; i++) {
|
if (columnHeaders[i].startColumnName === text) {
|
return i;
|
}
|
}
|
return -1;
|
};
|
|
$(ts).prepend($thead);
|
$tr = $('<tr>', {role: "row"}).addClass("ui-jqgrid-labels jqg-third-row-header");
|
for (i = 0; i < cml; i++) {
|
th = ths[i].el;
|
$th = $(th);
|
cmi = colModel[i];
|
// build the next cell for the first header row
|
thStyle = { height: '0px', width: ths[i].width + 'px', display: (cmi.hidden ? 'none' : '')};
|
$("<th>", {role: 'gridcell'}).css(thStyle).addClass("ui-first-th-"+ts.p.direction).appendTo($firstHeaderRow);
|
|
th.style.width = ""; // remove unneeded style
|
iCol = inColumnHeader(cmi.name, o.groupHeaders);
|
if (iCol >= 0) {
|
cghi = o.groupHeaders[iCol];
|
numberOfColumns = cghi.numberOfColumns;
|
titleText = cghi.titleText;
|
className = cghi.className || "";
|
// caclulate the number of visible columns from the next numberOfColumns columns
|
for (cVisibleColumns = 0, iCol = 0; iCol < numberOfColumns && (i + iCol < cml); iCol++) {
|
if (!colModel[i + iCol].hidden) {
|
cVisibleColumns++;
|
}
|
}
|
|
// The next numberOfColumns headers will be moved in the next row
|
// in the current row will be placed the new column header with the titleText.
|
// The text will be over the cVisibleColumns columns
|
$colHeader = $('<th>').attr({role: "columnheader"})
|
.addClass(base.headerBox+ " ui-th-column-header ui-th-"+ts.p.direction+" "+className)
|
//.css({'height':'22px', 'border-top': '0 none'})
|
.html(titleText);
|
if(cVisibleColumns > 0) {
|
$colHeader.attr("colspan", String(cVisibleColumns));
|
}
|
if (ts.p.headertitles) {
|
$colHeader.attr("title", $colHeader.text());
|
}
|
// hide if not a visible cols
|
if( cVisibleColumns === 0) {
|
$colHeader.hide();
|
}
|
|
$th.before($colHeader); // insert new column header before the current
|
$tr.append(th); // move the current header in the next row
|
|
// set the coumter of headers which will be moved in the next row
|
skip = numberOfColumns - 1;
|
} else {
|
if (skip === 0) {
|
if (o.useColSpanStyle) {
|
// expand the header height to two rows
|
$th.attr("rowspan", "2");
|
} else {
|
$('<th>', {role: "columnheader"})
|
.addClass(base.headerBox+" ui-th-column-header ui-th-"+ts.p.direction)
|
.css({"display": cmi.hidden ? 'none' : ''})
|
.insertBefore($th);
|
$tr.append(th);
|
}
|
} else {
|
// move the header to the next row
|
//$th.css({"padding-top": "2px", height: "19px"});
|
$tr.append(th);
|
skip--;
|
}
|
}
|
}
|
$theadInTable = $(ts).children("thead");
|
$theadInTable.prepend($firstHeaderRow);
|
$tr.insertAfter($trLabels);
|
$htable.append($theadInTable);
|
|
if (o.useColSpanStyle) {
|
// Increase the height of resizing span of visible headers
|
$htable.find("span.ui-jqgrid-resize").each(function () {
|
var $parent = $(this).parent();
|
if ($parent.is(":visible")) {
|
this.style.cssText = 'height: ' + $parent.height() + 'px !important; cursor: col-resize;';
|
}
|
});
|
|
// Set position of the sortable div (the main lable)
|
// with the column header text to the middle of the cell.
|
// One should not do this for hidden headers.
|
$htable.find("div.ui-jqgrid-sortable").each(function () {
|
var $ts = $(this), $parent = $ts.parent();
|
if ($parent.is(":visible") && $parent.is(":has(span.ui-jqgrid-resize)")) {
|
// minus 4px from the margins of the resize markers
|
$ts.css('top', ($parent.height() - $ts.outerHeight()) / 2 - 4 + 'px');
|
}
|
});
|
}
|
|
$firstRow = $theadInTable.find("tr.jqg-first-row-header");
|
$(ts).bind('jqGridResizeStop.setGroupHeaders', function (e, nw, idx) {
|
$firstRow.find('th').eq(idx)[0].style.width = nw + "px";
|
});
|
});
|
},
|
destroyGroupHeader : function(nullHeader) {
|
if(nullHeader === undefined) {
|
nullHeader = true;
|
}
|
return this.each(function()
|
{
|
var $t = this, $tr, i, l, headers, $th, $resizing, grid = $t.grid,
|
thead = $("table.ui-jqgrid-htable thead", grid.hDiv), cm = $t.p.colModel, hc;
|
if(!grid) { return; }
|
|
$(this).unbind('.setGroupHeaders');
|
$tr = $("<tr>", {role: "row"}).addClass("ui-jqgrid-labels");
|
headers = grid.headers;
|
for (i = 0, l = headers.length; i < l; i++) {
|
hc = cm[i].hidden ? "none" : "";
|
$th = $(headers[i].el)
|
.width(headers[i].width)
|
.css('display',hc);
|
try {
|
$th.removeAttr("rowSpan");
|
} catch (rs) {
|
//IE 6/7
|
$th.attr("rowSpan",1);
|
}
|
$tr.append($th);
|
$resizing = $th.children("span.ui-jqgrid-resize");
|
if ($resizing.length>0) {// resizable column
|
$resizing[0].style.height = "";
|
}
|
$th.children("div")[0].style.top = "";
|
}
|
$(thead).children('tr.ui-jqgrid-labels').remove();
|
$(thead).prepend($tr);
|
|
if(nullHeader === true) {
|
$($t).jqGrid('setGridParam',{ 'groupHeader': null});
|
}
|
});
|
}
|
});
|
//module end
|
}));
|