Resize on layout changes due to width changes

pull/543/head
Joost Molenkamp 2 years ago
parent bc21f6cfed
commit 9016c33370

@ -78,6 +78,14 @@ var PageResize = function ( dt, pageResizeManualDelta )
delta: pageResizeManualDelta delta: pageResizeManualDelta
}; };
this.sizes = {
offsetTop: this._getOffsetTop(),
tableHeight: this._getTableHeight(),
containerHeight: this._getContainerHeight(),
headerHeight: this._getHeaderHeight(),
footerHeight: this._getFooterHeight()
};
var host = this.s.host; var host = this.s.host;
if ( host.css('position') === 'static' ) { if ( host.css('position') === 'static' ) {
host.css( 'position', 'relative' ); host.css( 'position', 'relative' );
@ -100,25 +108,30 @@ PageResize.prototype = {
var settings = this.s; var settings = this.s;
var dt = settings.dt; var dt = settings.dt;
var t = dt.table(); var t = dt.table();
var offsetTop = $( settings.table ).offset().top;
var rows = $( 'tr', settings.body ); var rows = $( 'tr', settings.body );
var rowHeight = rows.eq( rows.length > 1 ? 1 : 0 ).height(); // Attempt to use the second row if poss, for top and bottom border var rowHeight = rows.eq( rows.length > 1 ? 1 : 0 ).height(); // Attempt to use the second row if poss, for top and bottom border
var availableHeight = settings.host.height(); var availableHeight = settings.host.height();
var scrolling = t.header().parentNode !== t.body().parentNode; var scrolling = t.header().parentNode !== t.body().parentNode;
var delta = settings.delta; var delta = settings.delta;
var offsetTop = this.sizes.offsetTop = this._getOffsetTop();
var tableHeight = this.sizes.tableHeight = this._getTableHeight();
var containerHeight = this.sizes.containerHeight = this._getContainerHeight();
var headerHeight = this.sizes.headerHeight = this._getHeaderHeight();
var footerHeight = this.sizes.footerHeight = this._getFooterHeight();
// Subtract the height of the header, footer and the elements // Subtract the height of the header, footer and the elements
// surrounding the table // surrounding the table
if ( ! scrolling ) { if ( ! scrolling ) {
if ( t.header() ) { if ( t.header() ) {
availableHeight -= settings.header.height(); availableHeight -= headerHeight;
} }
if ( t.footer() ) { if ( t.footer() ) {
availableHeight -= settings.footer.height(); availableHeight -= footerHeight;
} }
} }
availableHeight -= offsetTop; availableHeight -= offsetTop;
availableHeight -= settings.container.height() - ( offsetTop + settings.table.height() ); availableHeight -= containerHeight - ( offsetTop + tableHeight );
if ( !isNaN( parseFloat( delta ) ) && isFinite( delta ) ) { if ( !isNaN( parseFloat( delta ) ) && isFinite( delta ) ) {
availableHeight -= delta; availableHeight -= delta;
@ -156,13 +169,25 @@ PageResize.prototype = {
var height = body.offsetHeight; var height = body.offsetHeight;
this.contentDocument.defaultView.onresize = function () { this.contentDocument.defaultView.onresize = function () {
var newHeight = body.clientHeight || body.offsetHeight;
var newHeight = body.clientHeight || body.offsetHeight;
if (newHeight !== height) { if (newHeight !== height) {
height = newHeight; height = newHeight;
that._size();
return;
}
// Width changes might lead to layout changes, which might require
// resizing the table
if (that.sizes.offsetTop !== that._getOffsetTop()
|| that.sizes.containerHeight !== that._getContainerHeight()
|| that.sizes.tableHeight !== that._getTableHeight()
|| that.sizes.headerHeight !== that._getHeaderHeight()
|| that.sizes.footerHeight !== that._getFooterHeight()) {
that._size(); that._size();
return;
} }
}; };
}; };
@ -171,7 +196,14 @@ PageResize.prototype = {
.attr( 'data', 'about:blank' ); .attr( 'data', 'about:blank' );
this.s.obj = obj; this.s.obj = obj;
} },
_getOffsetTop: function () { return $(this.s.table).offset().top; },
_getTableHeight: function () { return this.s.table.height(); },
_getContainerHeight: function () { return this.s.container.height(); },
_getHeaderHeight: function () { return this.s.dt.table().header() ? this.s.header.height() : 0; },
_getFooterHeight: function () { return this.s.dt.table().footer() ? this.s.footer.height() : 0; }
}; };

Loading…
Cancel
Save