client/player/test/emission_fichiers/tableheader.js
author ymh <ymh.work@gmail.com>
Fri, 04 Feb 2011 18:41:06 +0100
changeset 20 45cf063be4a5
parent 0 bdf22b140727
permissions -rw-r--r--
new version of ldt
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
// $Id: tableheader.js,v 1.16.2.2 2009/03/30 12:48:09 goba Exp $
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Drupal.tableHeaderDoScroll = function() {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
  if (typeof(Drupal.tableHeaderOnScroll)=='function') {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
    Drupal.tableHeaderOnScroll();
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
  }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
};
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
Drupal.behaviors.tableHeader = function (context) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
  // This breaks in anything less than IE 7. Prevent it from running.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
  if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    return;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
  }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
  // Keep track of all cloned table headers.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
  var headers = [];
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
  $('table.sticky-enabled thead:not(.tableHeader-processed)', context).each(function () {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    // Clone thead so it inherits original jQuery properties.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    var headerClone = $(this).clone(true).insertBefore(this.parentNode).wrap('<table class="sticky-header"></table>').parent().css({
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
      position: 'fixed',
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
      top: '0px'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    });
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    headerClone = $(headerClone)[0];
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    headers.push(headerClone);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    // Store parent table.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    var table = $(this).parent('table')[0];
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    headerClone.table = table;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    // Finish initialzing header positioning.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    tracker(headerClone);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    $(table).addClass('sticky-table');
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    $(this).addClass('tableHeader-processed');
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  });
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
  // Define the anchor holding var.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  var prevAnchor = '';
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  // Track positioning and visibility.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
  function tracker(e) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
    // Save positioning data.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    if (e.viewHeight != viewHeight) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
      e.viewHeight = viewHeight;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
      e.vPosition = $(e.table).offset().top - 4;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
      e.hPosition = $(e.table).offset().left;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
      e.vLength = e.table.clientHeight - 100;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
      // Resize header and its cell widths.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
      var parentCell = $('th', e.table);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
      $('th', e).each(function(index) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        var cellWidth = parentCell.eq(index).css('width');
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        // Exception for IE7.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        if (cellWidth == 'auto') {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
          cellWidth = parentCell.get(index).clientWidth +'px';
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        $(this).css('width', cellWidth);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
      });
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
      $(e).css('width', $(e.table).css('width'));
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    // Track horizontal positioning relative to the viewport and set visibility.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    // Check the previous anchor to see if we need to scroll to make room for the header.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    // Get the height of the header table and scroll up that amount.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    if (prevAnchor != location.hash) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
      if (location.hash != '') {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        var offset = $('td' + location.hash).offset();
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        if (offset) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
          var top = offset.top;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
          var scrollLocation = top - $(e).height();
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
          $('body, html').scrollTop(scrollLocation);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
      }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
      prevAnchor = location.hash;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
  }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
  // Only attach to scrollbars once, even if Drupal.attachBehaviors is called
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
  //  multiple times.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
  if (!$('body').hasClass('tableHeader-processed')) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    $('body').addClass('tableHeader-processed');
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    $(window).scroll(Drupal.tableHeaderDoScroll);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    $(document.documentElement).scroll(Drupal.tableHeaderDoScroll);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
  }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
  // Track scrolling.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
  Drupal.tableHeaderOnScroll = function() {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    $(headers).each(function () {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
      tracker(this);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    });
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
  };
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
  // Track resizing.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
  var time = null;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
  var resize = function () {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    // Ensure minimum time between adjustments.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    if (time) {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
      return;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    time = setTimeout(function () {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
      $('table.sticky-header').each(function () {
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        // Force cell width calculation.
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        this.viewHeight = 0;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        tracker(this);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
      });
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
      // Reset timer
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
      time = null;
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    }, 250);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
  };
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
  $(window).resize(resize);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
};