• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Changes

Jump to navigation Jump to search
add .header-fixed and .header-row
Line 240: Line 240:     
});
 
});
 +
 +
// 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
 +
;(function (mw, $) {
 +
  'use strict';
 +
 +
  mw.loader.using('jquery.tablesorter', function() {
 +
   
 +
    var ts = $.fn.tablesorter;
 +
    $.fn.tablesorter = function() {
 +
      ts.apply(this, arguments);
 +
      initializeStickyHeader();
 +
    }
 +
   
 +
    function initializeStickyHeader() {
 +
      var tables = [];
 +
      var $tables = $('.header-fixed');
 +
 +
      if ($tables.length == 0) return;
 +
 +
      $tables.each(function() {
 +
        // If this table is under tabber AND is hidden,
 +
        // temporarily make element visible so we can pull its width data later
 +
        var tabberTabParent = $(this).parent(".tabbertab")[0];
 +
        var originalStyleDisplay;
 +
        if (tabberTabParent) {
 +
          originalStyleDisplay = tabberTabParent.style.display;
 +
          tabberTabParent.style.visibility = "hidden";
 +
          tabberTabParent.style.display = "block";
 +
        }
 +
 +
        // Build fixed-header-table content
 +
        var $headerRow = $(this).find('.header-row');
 +
        var $newHeaderContent = $('<tbody>');
 +
        $newHeaderContent.append($headerRow.clone());
 +
 +
        // Add fixed-header-table colgroup to fix width
 +
        var $columnsOld = $headerRow.find('td:not([colspan]),th:not([colspan])');
 +
        var $newHeaderColgroup = $('<colgroup>');
 +
 +
        for (var i = 0; i < $columnsOld.length; i++) {
 +
          var width = $columnsOld[i].getBoundingClientRect().width;
 +
          $newHeaderColgroup.append(
 +
            $('<col>').css('width', 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);
 +
 +
        // Restore original tab display status
 +
        // if this table was under tabber and hidden
 +
        if (tabberTabParent) {
 +
          tabberTabParent.style.visibility = "";
 +
          tabberTabParent.style.display = originalStyleDisplay;
 +
        }
 +
      });
 +
 
 +
      $(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();
 +
          }
 +
        }
 +
      });
 +
    }
 +
  });
 +
})(mediaWiki, jQuery);
cssedit, gkautomate
7,064

edits

Navigation menu