#214329 by starbow: avoid attaching scroll behavior multiple times

6.x
Gábor Hojtsy 2008-01-30 10:17:39 +00:00
parent ef1235cc0a
commit ef043ca5bb
1 changed files with 19 additions and 7 deletions

View File

@ -1,8 +1,14 @@
// $Id$ // $Id$
Drupal.tableHeaderDoScroll = function() {
if (typeof(Drupal.tableHeaderOnScroll)=='function') {
Drupal.tableHeaderOnScroll();
}
};
Drupal.behaviors.tableHeader = function (context) { Drupal.behaviors.tableHeader = function (context) {
// This breaks in anything less than IE 7. Prevent it from running. // This breaks in anything less than IE 7. Prevent it from running.
if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 7) { if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7) {
return; return;
} }
@ -16,7 +22,7 @@ Drupal.behaviors.tableHeader = function (context) {
top: '0px' top: '0px'
}); });
var headerClone = $(headerClone)[0]; headerClone = $(headerClone)[0];
headers.push(headerClone); headers.push(headerClone);
// Store parent table. // Store parent table.
@ -44,7 +50,7 @@ Drupal.behaviors.tableHeader = function (context) {
var cellWidth = parentCell.eq(index).css('width'); var cellWidth = parentCell.eq(index).css('width');
// Exception for IE7. // Exception for IE7.
if (cellWidth == 'auto') { if (cellWidth == 'auto') {
var cellWidth = parentCell.get(index).clientWidth +'px'; cellWidth = parentCell.get(index).clientWidth +'px';
} }
$(this).css('width', cellWidth); $(this).css('width', cellWidth);
}); });
@ -56,16 +62,22 @@ Drupal.behaviors.tableHeader = function (context) {
var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition; var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden'; var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
$(e).css({left: -hScroll + e.hPosition +'px', visibility: visState}); $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
}; }
// Only attach to scrollbars once, even if Drupal.attachBehaviors is called
// multiple times.
if (!$('body').hasClass('tableHeader-processed')) {
$('body').addClass('tableHeader-processed');
$(window).scroll(Drupal.tableHeaderDoScroll);
$(document.documentElement).scroll(Drupal.tableHeaderDoScroll);
}
// Track scrolling. // Track scrolling.
var scroll = function() { Drupal.tableHeaderOnScroll = function() {
$(headers).each(function () { $(headers).each(function () {
tracker(this); tracker(this);
}); });
}; };
$(window).scroll(scroll);
$(document.documentElement).scroll(scroll);
// Track resizing. // Track resizing.
var time = null; var time = null;