Benutzer:Wiegels/table.js

aus Wikipedia, der freien Enzyklopädie

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
//<pre><nowiki>

// Makes tables sortable by columns
// by [[:de:User:Wiegels]]
// 2006-10-08 - 2006-10-09
//
// Macht eine Tabelle, identifiziert durch ihre HTML-id, nach Spalten sortierbar.
// Bei der Initialisierung werden die Kopfzellen mit Links versehen,
// bei deren Anklicken die Zeilen sortiert werden.
// Die Sortiermethoden werden mit einer Zeichenfolge festgelegt.
// Bei einer Sortierung nach einer Spalte wird diese gefärbt und ausgerichtet
// sowie die erste Spalte neu numeriert.
//
// Parameter:
//   1. table_id: HTML-id der Tabelle
//   2. orders: Zeichenfolge aus Sortiermethoden aller Spalten
//     Bedeutung der Zeichen:
//       a / A: alphabetisch, Ausrichtung links
//       d / D: nach Datum (Kurzschreibweise), Ausrichtung zentriert
//       n / N: numerisch, Ausrichtung rechts
//       a / d / n: aufsteigend
//       A / D / N: absteigend
//       andere: wirkungslos
//
// Beispiel:
//  if (wgPageName=='Wikipedia:Beitragszahlen') {
//    document.getElementsByTagName('table')[1].setAttribute('id', 'ben_stat');
//    TABLE.InitTable('ben_stat', '#a-NNddNNNNN');
//    }

var TABLE = {
  InitTable: function(table_id, orders) {
    var tableNode = document.getElementById(table_id);
    if (tableNode && tableNode.nodeName=='TABLE') {
      var trNode = tableNode.getElementsByTagName('tr')[0];
      var thNodes = trNode.getElementsByTagName('th');
      for (var number = 0; number<thNodes.length; number++) {
        var order = orders.substr(number, 1);
        if ('adn'.indexOf(order.toLowerCase())>=0) {
          var thNode = thNodes[number];
          var aNode = document.createElement('a');
          with (aNode) {
            setAttribute('href', 'javascript:TABLE.SortRows(\''+table_id+'\', '+number+', \''+order+'\');');
            var textNode = thNode.firstChild;
            if (textNode.hasChildNodes())
              textNode = textNode.firstChild;
            appendChild(document.createTextNode(textNode.data));
            }
          thNode.removeChild(thNode.firstChild);
          thNode.appendChild(aNode);
          }
        }
      }
    },
  column: -1,
  order: '',
  SortRows: function(table_id, column1, order) {
    var column0 = this.column;
    this.column = column1;
    this.order = order;
    var order = this.order.toLowerCase();
    color0 = '#ffffff';
    color1 = '#f9f9ff';
    var tableNode = document.getElementById(table_id);
    var tbodyNode0 = tableNode.getElementsByTagName('tbody')[0];
    var tbodyNode1 = document.createElement('tbody');
    var thNodes = tbodyNode0.firstChild.getElementsByTagName('th');
    if (column0>=0)
      thNodes[column0].setAttribute('bgColor', color0);
    thNodes[column1].setAttribute('bgColor', color1);
    tbodyNode1.appendChild(tbodyNode0.firstChild);
    var rows = Array();
    while (trNode = tbodyNode0.firstChild) {
      trNode = tbodyNode0.removeChild(trNode);
      if (trNode.nodeName=='TR')
        rows.push(trNode);
      }
    rows.sort(this.Diff);
    if (this.order.toUpperCase()==this.order)
      rows.reverse();
    for (var number = 0; number<rows.length; number++) {
      var tdNodes = rows[number].getElementsByTagName('td');
      if (column0>=0)
        tdNodes[column0-1].setAttribute('bgColor', color0);
      tdNodes[column1-1].setAttribute('bgColor', color1);
      tdNodes[column1-1].setAttribute('align',
        (order=='a' ? 'left' : '')+
        (order=='d' ? 'center' : '')+
        (order=='n' ? 'right' : ''));
      rows[number].getElementsByTagName('th')[0].firstChild.data = number+1; /// '#'
      tbodyNode1.appendChild(rows[number]);
      }
    tableNode.insertBefore(tbodyNode1, tbodyNode0);
    tableNode.removeChild(tbodyNode0);
    },
  Diff: function(row1, row2) { /// this
    var value1 = TABLE.Value(row1);
    var value2 = TABLE.Value(row2);
    if (TABLE.order.toLowerCase()=='n') {
      value1 = value1-value2;
      value2 = 0;
      }
    return (value1>value2?1:0)-(value1<value2?1:0);
    },
  Value: function(element) {
    var node = element.getElementsByTagName('td')[this.column-1].firstChild;
    var value = (node.nodeName=='A' ? node.firstChild.data : node.data);
    var order = this.order.toLowerCase();
    return (
      (order=='a' ? value.replace(/\W/, '').toLowerCase() :
      (order=='d' ? value.substr(6, 4)+value.substr(3, 2)+value.substr(0, 2) :
      (order=='n' ? value.replace(/[^\d\.].*$/, '') : ''))));
    }
  };

//</nowiki></pre>