summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorGábor Hojtsy <gabor@hojtsy.hu>2008-01-21 15:13:50 +0000
committerGábor Hojtsy <gabor@hojtsy.hu>2008-01-21 15:13:50 +0000
commitd5823e8673b1e00708242be625e31008cf4a55c5 (patch)
treec0ae885649e40949a457920c5d05460fd3151141 /misc
parentc3dccba229db17b14620e26856419068d40b153b (diff)
downloadbrdo-d5823e8673b1e00708242be625e31008cf4a55c5.tar.gz
brdo-d5823e8673b1e00708242be625e31008cf4a55c5.tar.bz2
#211404 by dvessel: improve tableheader.js performance in all browsers, solves freeze in IE7
Diffstat (limited to 'misc')
-rw-r--r--misc/tableheader.js43
1 files changed, 18 insertions, 25 deletions
diff --git a/misc/tableheader.js b/misc/tableheader.js
index 33110873e..f8bc40112 100644
--- a/misc/tableheader.js
+++ b/misc/tableheader.js
@@ -23,7 +23,6 @@ Drupal.behaviors.tableHeader = function (context) {
var table = $(this).parent('table')[0];
headerClone.table = table;
// Finish initialzing header positioning.
- headerClone.resizeWidths = true;
tracker(headerClone);
$(table).addClass('sticky-table');
@@ -34,36 +33,29 @@ Drupal.behaviors.tableHeader = function (context) {
function tracker(e) {
// Save positioning data.
var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
- if (e.viewHeight != viewHeight || e.resizeWidths) {
+ if (e.viewHeight != viewHeight) {
e.viewHeight = viewHeight;
- e.vPosition = $(e.table).offset().top;
+ e.vPosition = $(e.table).offset().top - 4;
e.hPosition = $(e.table).offset().left;
- e.vLength = $(e.table).height();
- e.resizeWidths = true;
+ e.vLength = e.table.clientHeight - 100;
+ // Resize header and its cell widths.
+ var parentCell = $('th', e.table);
+ $('th', e).each(function(index) {
+ var cellWidth = parentCell.eq(index).css('width');
+ // Exception for IE7.
+ if (cellWidth == 'auto') {
+ var cellWidth = parentCell.get(index).clientWidth +'px';
+ }
+ $(this).css('width', cellWidth);
+ });
+ $(e).css('width', $(e.table).css('width'));
}
// Track horizontal positioning relative to the viewport and set visibility.
var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
- var vScroll = document.documentElement.scrollTop || document.body.scrollTop;
- var vOffset = vScroll - e.vPosition - 4;
- var visState = (vOffset > 0 && vOffset < e.vLength - 100) ? 'visible' : 'hidden';
+ var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
+ var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
$(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
-
- // Resize cell widths.
- if (e.resizeWidths) {
- var cellCount = 0;
- $('th', e).each(function() {
- var cellWidth = parseInt($('th', e.table).eq(cellCount).css('width'));
- // Exception for IE7.
- if (!cellWidth) {
- var cellWidth = $('th', e.table).eq(cellCount).width();
- }
- cellCount++;
- $(this).css('width', cellWidth +'px');
- });
- $(e).css('width', $(e.table).width() +'px');
- e.resizeWidths = false;
- }
};
// Track scrolling.
@@ -84,7 +76,8 @@ Drupal.behaviors.tableHeader = function (context) {
}
time = setTimeout(function () {
$(headers).each(function () {
- this.resizeWidths = true;
+ // Force cell width calculation.
+ this.viewHeight = 0;
tracker(this);
});
// Reset timer