mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-06-27 05:11:41 +02:00
Deal with rounding errors etc. so columns always take full width, and some bounds checking in case things go horribly wrong.
This commit is contained in:
parent
98da72c757
commit
3d1bdceaac
@ -307,6 +307,15 @@ var et2_dataview_columns = Class.extend({
|
|||||||
var col = this.columns[i];
|
var col = this.columns[i];
|
||||||
if (col.visibility != ET2_COL_VISIBILITY_INVISIBLE)
|
if (col.visibility != ET2_COL_VISIBILITY_INVISIBLE)
|
||||||
{
|
{
|
||||||
|
// Some bounds sanity checking
|
||||||
|
if(col.fixedWidth > tw || col.fixedWidth < 0)
|
||||||
|
{
|
||||||
|
col.fixedWidth = false;
|
||||||
|
}
|
||||||
|
else if (col.relativeWidth > 1 || col.relativeWidth < 0)
|
||||||
|
{
|
||||||
|
col.relativeWidth = false;
|
||||||
|
}
|
||||||
if (col.relativeWidth)
|
if (col.relativeWidth)
|
||||||
{
|
{
|
||||||
remRelWidth -= col.relativeWidth;
|
remRelWidth -= col.relativeWidth;
|
||||||
@ -377,6 +386,7 @@ var et2_dataview_columns = Class.extend({
|
|||||||
} while (!done);
|
} while (!done);
|
||||||
|
|
||||||
// Now calculate the absolute width of the columns in pixels
|
// Now calculate the absolute width of the columns in pixels
|
||||||
|
var usedTotal = 0;
|
||||||
this.columnWidths = [];
|
this.columnWidths = [];
|
||||||
for (var i = 0; i < this.columns.length; i++)
|
for (var i = 0; i < this.columns.length; i++)
|
||||||
{
|
{
|
||||||
@ -407,6 +417,46 @@ var et2_dataview_columns = Class.extend({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.columnWidths.push(w);
|
this.columnWidths.push(w);
|
||||||
|
usedTotal += w;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deal with any accumulated rounding errors
|
||||||
|
if(usedTotal != tw)
|
||||||
|
{
|
||||||
|
var column, columnIndex;
|
||||||
|
var remaining_width = (usedTotal - tw);
|
||||||
|
|
||||||
|
// Pick the first relative column and use it
|
||||||
|
for(columnIndex = 0; columnIndex < this.columns.length; columnIndex++)
|
||||||
|
{
|
||||||
|
if(this.columns[columnIndex].visibility == ET2_COL_VISIBILITY_INVISIBLE) continue;
|
||||||
|
|
||||||
|
var col = this.columns[columnIndex];
|
||||||
|
if(col.relativeWidth || !col.fixedWidth)
|
||||||
|
{
|
||||||
|
column = col;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (!col.fixedWidth)
|
||||||
|
{
|
||||||
|
column = col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!column)
|
||||||
|
{
|
||||||
|
// No relative width columns, distribute proportionatly over all
|
||||||
|
for(var i = 0; i < this.columns.length; i++)
|
||||||
|
{
|
||||||
|
var col = this.columns[i];
|
||||||
|
col.fixedWidth -= Math.round(this.columnWidths[i] / tw * remaining_width)
|
||||||
|
this.columnWidths[i] = Math.max(0, Math.min(col.fixedWidth,tw));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.columnWidths[columnIndex] -= remaining_width;
|
||||||
|
column.set_width(column.relativeWidth ? (this.columnWidths[columnIndex] / self.totalWidth * 100) + "%" : this.columnWidths[columnIndex] + "px");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user