Changes

header-fixed -> fixed-header (css only)
Line 238: Line 238:  
supportTemplateMapImageNode();
 
supportTemplateMapImageNode();
 
mw.hook('wikipage.content').add(supportTemplateMapImageNode);
 
mw.hook('wikipage.content').add(supportTemplateMapImageNode);
  −
// From gbf.wiki
  −
// Add a dynamic fixed header to tables with:
  −
// 1) table with "header-fixed" class
  −
// 2) a table row with "header-row" class
  −
// TODO: tablesorter, tabbertab, resize
  −
// mw.loader.using('jquery.tablesorter', function() {
  −
var tables = [];
  −
  −
function initializeStickyHeader() {
  −
var $tables = $('.header-fixed');
  −
  −
if ($tables.length == 0) return;
  −
  −
$tables.each(function(n) {
  −
  if ($(this).hasClass('header-fixed-done')) return;
  −
  if ($(this).hasClass('mw-collapsed')) {
  −
  console.debug('header-fixed: collapsed: ' + n)
  −
  $(this).find('.mw-collapsible-text').click(function() {
  −
  console.debug('header-fixed: click: ' + n)
  −
  setTimeout(function() { initializeStickyHeader(); }, 1000);
  −
  })
  −
  return;
  −
  }
  −
/*
  −
    var tabberTabParent = $(this).parent(".tabbertab")[0];
  −
    var originalStyleDisplay;
  −
    if (tabberTabParent) {
  −
    originalStyleDisplay = tabberTabParent.style.display;
  −
    tabberTabParent.style.visibility = "hidden";
  −
    tabberTabParent.style.display = "block";
  −
    }
  −
*/
  −
    var $headerRow = $(this).find('.header-row');
  −
    var $newHeaderContent = $('<tbody>');
  −
    $newHeaderContent.append($headerRow.clone());
  −
  −
    var $columnsOld = $headerRow.find('td:not([colspan]),th:not([colspan])');
  −
    var $newHeaderColgroup = $('<colgroup>');
  −
    for (var i = 0; i < $columnsOld.length; i++) {
  −
    $newHeaderColgroup.append($('<col>').css('width', $columnsOld[i].getBoundingClientRect().width));
  −
    }
  −
  −
    $(this).before(
  −
    $('<table>')
  −
        .addClass('header-fixed-helper')
  −
        .addClass('wikitable')
  −
        .css('position', 'sticky')
  −
        .css('top', '0')
  −
        .css('z-index', '9')
  −
        .css('display', 'none')
  −
        .css('background-color', '#fff')
  −
        .css('margin-top', '0')
  −
        .css('margin-bottom', '0')
  −
        .css('table-layout', 'fixed')
  −
        .append($newHeaderColgroup)
  −
        .append($newHeaderContent)
  −
    );
  −
    tables.push({ table: this, helper: this.previousSibling });
  −
    $(this.previousSibling).css('width', $(this).width() + 1);
  −
/*
  −
    if (tabberTabParent) {
  −
    tabberTabParent.style.visibility = "";
  −
    tabberTabParent.style.display = originalStyleDisplay;
  −
    }
  −
    */
  −
    $(this).addClass('header-fixed-done');
  −
    console.debug('header-fixed: fixed: ' + n)
  −
});
  −
}
  −
  −
$(window).on('scroll', function() {
  −
var scrollOffset = $(this).scrollTop();
  −
for (var i = 0; i < tables.length; i++) {
  −
var tableOffset = $(tables[i].table).offset().top;
  −
var tableHeight = $(tables[i].table).height();
  −
var helperHeight = $(tables[i].helper).height();
  −
if ((scrollOffset > tableOffset) && (scrollOffset < (tableOffset + tableHeight - helperHeight))) {
  −
    if ($(tables[i].helper).is(':hidden')) {
  −
    $(tables[i].helper).show();
  −
    }
  −
} else {
  −
    $(tables[i].helper).hide();
  −
}
  −
}
  −
});
  −
  −
/*
  −
var ts = $.fn.tablesorter;
  −
$.fn.tablesorter = function() {
  −
  ts.apply(this, arguments);
  −
  initializeStickyHeader();
  −
}
  −
*/
  −
setTimeout(function() { initializeStickyHeader(); }, 1000);
  −
//})
      
// Basic video support using <img> and <video> elements
 
// Basic video support using <img> and <video> elements
cssedit, gkautomate
7,060

edits