OS2.spielerhistorie
Zur Navigation springen
Zur Suche springen
OS2.spielerhistorie | |
Dateiname | os2.spielerhistorie.user.js |
Version | 0.1 (WebExtensions) |
Autor | Andreas Eckes, Strindheim BK |
Beschreibung | OS 2.0 - Zeigt absoluten und relativen MW-Zuwachs in Spielerhistorie an |
Webseiten | sp.php?s=* |
Funktionalität | Neue Spalten für absolute und relative MW-Differenz, Trennstriche zwischen Saisons |
Letzte Änderung | 19.11.2017 |
Hinweise[Bearbeiten]
Über vier Konfigurationsvariablen kann gesteuert werden
- welche Titel die beiden neuen Spalten haben
- welche Breite in Pixel die Tabelle der Spielerhistorie hat (OS-Standardwert ist 750)
- wie die Text-Ausrichtung in den neuen Spalten ist (
left
,right
odercenter
)
Über die Tabellenbreite stellt man im Endeffekt die Breite der Spalten und deren scheinbaren Abstand voneinander ein.
Quellcode INSTALLATION[Bearbeiten]
// ==UserScript== // @name OS2.spielerhistorie // @namespace http://os.ongapo.com/ // @version 0.1-SLC-WE // @copyright 2013+ // @author Andreas Eckes (Strindheim BK) // @description OS 2.0 - Zeigt absoluten und relativen MW-Zuwachs in Spielerhistorie an // @include /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/sp\.php\?s=\d+$/ // @grant none // ==/UserScript== // Konfiguration ************************************************************************ var titelMwAbsolut = "\u0394MW abs."; // Titel der Spalte fuer die absolute MW-Differenz var titelMwRelativ = "\u0394MW rel."; // Titel der Spalte fuer die relative MW-Differenz var tabellenbreite = 600; // Breite der Tabelle in Pixel (standardmaessig 750) var textAusrichtung = "right"; // Text-Ausrichtung in den neuen Spalten // Konfiguration Ende ******************************************************************* var colorPos = "#00FF00"; var colorNeg = "#FF0000"; var borderString = "solid white 1px"; var offsetTop = 1; var offsetBottom = 1; var table = document.getElementById("e").getElementsByTagName("table")[0]; var offsets = [offsetTop, offsetBottom, 0, 0]; // 1 Zeilen oben, 1 Zeile unten ausschliessen var colIdxMwSum = 2; var mw = 0; var mwPrev = 0; var mwDiffAbsString = ""; var mwDiffRelString = ""; var color = ""; // Tabellenbreite table.setAttribute("width", tabellenbreite); // Ueberschriften appendCell(table.rows[0], titelMwAbsolut, "", "center"); appendCell(table.rows[0], titelMwRelativ, "", "center"); // Werte berechnen und eintragen for (var i = offsetTop; i < table.rows.length - offsetBottom; i++) { mw = stringToNumber(table.rows[i].cells[colIdxMwSum].textContent); mwPrev = stringToNumber(table.rows[i + 1].cells[colIdxMwSum].textContent); mwDiffAbsString = wholeNumberToString(mw - mwPrev); mwDiffRelString = decimalNumberToString((mw - mwPrev) / mwPrev, 2, true); color = (mw - mwPrev >= 0) ? colorPos : colorNeg; appendCell(table.rows[i], mwDiffAbsString, color, textAusrichtung); appendCell(table.rows[i], mwDiffRelString, color, textAusrichtung); } // Linien zeichnen drawHorizontalLines(table, offsets, 1, 5); // **************************************************************************** // Hilfsfunktionen // **************************************************************************** // Zeichnet horizontale Linien in eine Tabelle (jeweils als unteren Rand von Zellen) // table: zu bearbeitende Tabelle // offsets[0]/[1]: Anzahl Zeilen oben/unten, die ignoriert werden; [2]/[3]: Anzahl Spalten links/rechts, die ignoriert werden // mode = 1: Saisons trennen ("i != i + 1") // mode = 2: Abrechnungsperioden trennen ("% 7 == 0") // mode = 3: Abrechnungsperioden trennen ("% 6 == 0") // colIdx: Index der Spalte, die die zu vergleichenden Werte enthaelt function drawHorizontalLines(table, offsets, mode, colIdx) { for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) { switch (mode) { case 1: // Saisons trennen var value1 = parseInt(table.rows[i].cells[colIdx].textContent); var value2 = parseInt(table.rows[i + 1].cells[colIdx].textContent); if (value1 != value2) { for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) { table.rows[i].cells[j].style.borderBottom = borderString; } } break; case 2: // Abrechnungsperioden trennen (Saison 1) var value = parseInt(table.rows[i].cells[colIdx].textContent); if (value % 7 == 0) { for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) { table.rows[i].cells[j].style.borderBottom = borderString; } } break; case 3: // Abrechnungsperioden trennen (Saisons > 1) var value = parseInt(table.rows[i].cells[colIdx].textContent); if (value % 6 == 0) { for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) { table.rows[i].cells[j].style.borderBottom = borderString; } } break; } } } // Fuegt eine Zelle am Ende einer Zeile hinzu, fuellt die Zelle und gibt sie (td-Tag) zurueck. // row: Zeile, die verlaengert wird // text: Textinhalt der neuen Zelle // color: Schriftfarbe der neuen Zelle (z.B. "#FFFFFF" fuer weiss) // alignment: Ausrichtung des Texts (left, center, right) // Bei Aufruf ohne Farbe wird die Standardfarbe benutzt function appendCell(row, content, color, alignment) { var returnValue = row.insertCell(-1); returnValue.textContent = content; returnValue.style.color = color; if (alignment != "") { returnValue.align = alignment; } return returnValue; } // Wandelt eine Dezimalzahl in einen String um ("." als Dezimalzeichen). // Fuer Prozentzahlen wird der Wert verhundertfacht und " %" rechts angehaengt. // number: Die Zahl, die umgewandelt werden soll // decimalDigits: Anzahl der Nachkommastellen in der Ausgabe (werden erzwungen) // percent: Ob die Zahl als Prozentwert dargestellt werden soll function decimalNumberToString(number, decimalDigits, percent) { var returnValue = ""; if (percent) { number *= 100; } number = number.toFixed(decimalDigits); returnValue = number.toString(); if (percent) { returnValue += " %"; } return returnValue; } // Wandelt eine ganze Zahl in einen String um ("." als Tausenderzeichen). // number: Die Zahl, die umgewandelt werden soll function wholeNumberToString(number) { var returnValue = ""; var temp = ""; var counter = 0; for (var i = number.toString().length - 1; i >= 0; i--) { temp += number.toString().charAt(i); counter += 1; if (((counter % 3) == 0) && (i > 0) && (number.toString().charAt(i - 1) != "-")) { temp += "."; } } for (var i = temp.length - 1; i >= 0; i--) { returnValue += temp.charAt(i); } return returnValue; } // Wandelt einen String in eine Zahl um. // Prozentzahlen-Strings werden als Zahl interpretiert (d.h. "100%" -> 1). // Ganze Zahlen mit Tausenderpunkten werden erkannt, wenn sie mit "." gefolgt von 3 Ziffern enden. // Dezimalzahlen werden erkannt, wenn sie mit "." gefolgt von beliebig vielen Ziffern enden. // Da zuerst auf ganze Zahlen geprueft wird, koennen Dezimalzahlen nicht 3 Nachkommaziffern haben. function stringToNumber(string) { // parseXXX interpretiert einen Punkt immer als Dezimaltrennzeichen var returnValue = ""; var percent = false; // Buchstaben und Whitespaces entfernen string = string.replace(/[\sa-zA-Z]/g, ""); // Auf % pruefen und % entfernen if (string.lastIndexOf("%") != -1) { percent = true; string = string.replace(/%/g, ""); } var regexpWholeSimple = /^\d+$/; var regexpWholeWithDots = /^\d+(\.\d{3}){1,}$/; var regexpDecimal = /^\d*\.\d{1,}$/; if (regexpWholeSimple.test(string)) { // Einfache ganze Zahl returnValue = parseInt(string); } else if (regexpWholeWithDots.test(string)) { // Ganze Zahl mit Tausenderpunkten returnValue = parseInt(string.replace(/\./g, "")); } else if (regexpDecimal.test(string)) { // Dezimalzahl mit Punkt als Trennzeichen returnValue = parseFloat(string); } else { // Kein gueltiger String percent = false; returnValue = ""; } if (percent) { returnValue /= 100; } return returnValue; }