Bearbeiten von „OS2.master

Zur Navigation springen Zur Suche springen
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden. Ein eigenes Benutzerkonto hat eine ganze Reihe von Vorteilen.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 8: Zeile 8:
|- bgcolor="#FFCC00"
|- bgcolor="#FFCC00"
| '''Version'''
| '''Version'''
| '''2.4 (WebExtensions)'''
| '''2.3 (WebExtensions)'''
|- bgcolor="#FFCC00"
|- bgcolor="#FFCC00"
| '''Autoren'''
| '''Autoren'''
| '''Sebastian Klebba''', [[SC Ludza]]<br> '''Andreas Eckes''', [[Strindheim BK]]<br> '''Sven Loges (SLC)''', [[Choromonets Odessa]]
| '''Sebastian Klebba''', [[SC Ludza]]<br> '''Andreas Eckes''', [[Strindheim BK]]
|- bgcolor="#FFCC00"
|- bgcolor="#FFCC00"
| '''Beschreibung'''
| '''Beschreibung'''
Zeile 27: Zeile 27:
|}
|}


== [https://github.com/Eselce/OS2.scripts/blob/master/OS2.master.user.js Quellcode] [https://eselce.github.io/OS2.scripts/OS2.master.user.js INSTALLATION] ==
== Version 2.3 ==
== Version 2.4 ==
=== Hinweise ===
=== Hinweise ===


Durch Unvertr&auml;glichkeiten mit neueren Standards war das Skript nicht mehr lauff&auml;hig. Version 2.4 korrigiert das Skript entsprechend.
Durch die Einf&uuml;hrung der Geburtstage kam es zu einer Verschiebung der td-Tags, die dazu f&uuml;hrte, dass die Prim&auml;rskills nicht mehr farbig hervorgehoben wurden. Version 2.3 korrigiert das Skript entsprechend.


=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-2.4-beta1.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-2.4-beta1.user.js INSTALLATION] ===
=== Quellcode ===
<pre>
<pre>
// ==UserScript==
// ==UserScript==
// @name        OS2.master
// @name        OS2.master
// @namespace    http://os.ongapo.com/
// @namespace    http://os.ongapo.com/
// @version      2.4+WE
// @version      2.3-SLC-WE
// @copyright    2013+
// @copyright    2013+
// @author      Andreas Eckes (Strindheim BK)
// @author      Andreas Eckes (Strindheim BK)
Zeile 76: Zeile 75:
var osBlue = "#111166";
var osBlue = "#111166";
var borderString = "solid white 1px";
var borderString = "solid white 1px";
var url = window.location.href;
var url = this.location.href
var pageString = parseURL(url);
var pageString = parseURL(url);


Zeile 92: Zeile 91:
function procTeamansicht() {
function procTeamansicht() {
     // Parameter s auslesen
     // Parameter s auslesen
     let regexpS = /s=(\d+)/;
     var regexpS = /s=(\d+)/;
     let s = -1;
     var s = -1;
    let table;
     if (regexpS.test(url)) { s = parseInt(regexpS.exec(url)[1]);    }
     if (regexpS.test(url)) { s = parseInt(regexpS.exec(url)[1]);    }
     switch (true) {
     switch (true) {
         // Einzelwerte
         // Einzelwerte
         case ((s == 2) && einzelwerte):
         case ((s == 2) && einzelwerte):
             table = document.getElementById("team");
             var table = document.getElementById("team");
             for (let i = 1; i < table.rows.length - 1; i++) {
             for (var i = 1; i < table.rows.length - 1; i++) {
                 let pos = table.rows[i].cells[0].className;
                 var pos = table.rows[i].cells[0].className;
                 let primarySkills = getIdxPriSkillsGlobalPage(pos);
                 var primarySkills = getIdxPriSkillsGlobalPage(pos);
                 for (let j  = 0; j < primarySkills.length; j++) {
                 for (var j  = 0; j < primarySkills.length; j++) {
                     table.rows[i].cells[primarySkills[j]].style.color = osBlue;
                     table.rows[i].cells[primarySkills[j]].style.color = osBlue;
                     table.rows[i].cells[primarySkills[j]].style.backgroundColor = getColor(pos);
                     table.rows[i].cells[primarySkills[j]].style.backgroundColor = getColor(pos);
Zeile 111: Zeile 109:
         // Statistiken
         // Statistiken
         case (((s == 3) || (s == 4)) && statistiken):
         case (((s == 3) || (s == 4)) && statistiken):
             table = document.getElementsByTagName("table")[2];
             var table = document.getElementsByTagName("table")[2];
             procStatistiken(table);
             procStatistiken(table);
             break;
             break;
         // Vereinshistorie
         // Vereinshistorie
         case (s == 7):
         case (s == 7):
             table = document.getElementsByTagName("table")[2];
             var table = document.getElementsByTagName("table")[2];
             let offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
             var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
             drawHorizontalLines(table, offsets, 1, 0);
             drawHorizontalLines(table, offsets, 1, 0);
             break;
             break;
Zeile 128: Zeile 126:
// **************************************************************************************
// **************************************************************************************
function procStatistiken(table) {
function procStatistiken(table) {
     let rowOffsetTop = 2;
     var rowOffsetTop = 2;
     let rowOffsetBottom = 2;
     var rowOffsetBottom = 2;
     let colOffset = 4;
     var colOffset = 4;
     let statistics = [];
     var statistics = new Array();
     let maxValues = [];
     var maxValues = new Array();
     let numberOfPlayers = table.rows.length - (rowOffsetTop + rowOffsetBottom);
     var numberOfPlayers = table.rows.length - (rowOffsetTop + rowOffsetBottom);
     let periodicity = (statistikenUmordnen) ? 6 : 4;
     var periodicity = (statistikenUmordnen) ? 6 : 4;
    let statisticsNew;
     // statistics fuellen
     // statistics fuellen
     for (let i = 0; i < numberOfPlayers; i++) {
     for (var i = 0; i < numberOfPlayers; i++) {
         statistics[i] = [];
         statistics[i] = new Array();
         for (let j = colOffset; j < table.rows[i + rowOffsetTop].cells.length; j++) {
         for (var j = colOffset; j < table.rows[i + rowOffsetTop].cells.length; j++) {
             statistics[i][j - colOffset] = parseInt(table.rows[i + rowOffsetTop].cells[j].textContent);
             statistics[i][j - colOffset] = parseInt(table.rows[i + rowOffsetTop].cells[j].textContent);
         }
         }
Zeile 145: Zeile 142:
     if (statistikenUmordnen) {
     if (statistikenUmordnen) {
         // Formel zum Index mappen: neu = (alt div 4) + 6 * (alt mod 4)
         // Formel zum Index mappen: neu = (alt div 4) + 6 * (alt mod 4)
         statisticsNew = [];
         var statisticsNew = new Array();
         let idxNeu = 0;
         var idxNeu = 0;
         for (let i = 0; i < statistics.length; i++) {
         for (var i = 0; i < statistics.length; i++) {
             statisticsNew[i] = [];
             statisticsNew[i] = new Array();
             for (let j = 0; j < statistics[i].length; j++) {
             for (var j = 0; j < statistics[i].length; j++) {
                 idxNeu = Math.floor(j / 4) + 6 * (j % 4);
                 idxNeu = Math.floor(j / 4) + 6 * (j % 4);
                 statisticsNew[i][idxNeu] = statistics[i][j];
                 statisticsNew[i][idxNeu] = statistics[i][j];
Zeile 155: Zeile 152:
         }
         }
         // Umgeordnete Werte eintragen
         // Umgeordnete Werte eintragen
         for (let i = 0; i < statistics.length; i++) {
         for (var i = 0; i < statistics.length; i++) {
             for (let j = 0; j < statistics[i].length; j++) {
             for (var j = 0; j < statistics[i].length; j++) {
                 table.rows[i + rowOffsetTop].cells[j + colOffset].textContent = statisticsNew[i][j];
                 table.rows[i + rowOffsetTop].cells[j + colOffset].textContent = statisticsNew[i][j];
             }
             }
Zeile 166: Zeile 163:
         changeTitleRow2(table.rows[table.rows.length - 2]);
         changeTitleRow2(table.rows[table.rows.length - 2]);
     } else {
     } else {
         statisticsNew = statistics;
         var statisticsNew = statistics;
     }
     }
     // Linien zeichen. Offsets rechts = 1, um keinen Rand bei letzter Spalte zu haben
     // Linien zeichen. Offsets rechts = 1, um keinen Rand bei letzter Spalte zu haben
     let offsets = new Array(rowOffsetTop, rowOffsetBottom, colOffset, 1);
     var offsets = new Array(rowOffsetTop, rowOffsetBottom, colOffset, 1);
     let offsetsTitleRowTop = new Array(1, table.rows.length - 2, 3, 1);
     var offsetsTitleRowTop = new Array(1, table.rows.length - 2, 3, 1);
     let offsetsTitleRowBottom = new Array(table.rows.length - 2, 1, 3, 1);
     var offsetsTitleRowBottom = new Array(table.rows.length - 2, 1, 3, 1);
     drawVerticalLines(table, offsets, periodicity);
     drawVerticalLines(table, offsets, periodicity);
     drawVerticalLines(table, offsetsTitleRowTop, periodicity);
     drawVerticalLines(table, offsetsTitleRowTop, periodicity);
     drawVerticalLines(table, offsetsTitleRowBottom, periodicity);
     drawVerticalLines(table, offsetsTitleRowBottom, periodicity);
     // maxValues ermitteln. Initialisierung mit 1, um keine Nullen zu markieren
     // maxValues ermitteln. Initialisierung mit 1, um keine Nullen zu markieren
     for (let j = 0; j < 24; j++) {
     for (var j = 0; j < 24; j++) {
         maxValues[j] = 1;
         maxValues[j] = 1;
         for (let i = 0; i < numberOfPlayers; i++) {
         for (var i = 0; i < numberOfPlayers; i++) {
             if (statisticsNew[i][j] > maxValues[j]) { maxValues[j] = statisticsNew[i][j]; }
             if (statisticsNew[i][j] > maxValues[j]) { maxValues[j] = statisticsNew[i][j]; }
         }
         }
     }
     }
     // Hoechstwerte hervorheben
     // Hoechstwerte hervorheben
     for (let i = 0; i < numberOfPlayers; i++) {
     for (var i = 0; i < numberOfPlayers; i++) {
         let pos = table.rows[i + rowOffsetTop].cells[0].className;
         var pos = table.rows[i + rowOffsetTop].cells[0].className;
         for (let j = 0; j < maxValues.length; j++) {
         for (var j = 0; j < maxValues.length; j++) {
             if (statisticsNew[i][j] >= maxValues[j]) {
             if (statisticsNew[i][j] >= maxValues[j]) {
                 table.rows[i + rowOffsetTop].cells[j + colOffset].style.color = osBlue;
                 table.rows[i + rowOffsetTop].cells[j + colOffset].style.color = osBlue;
Zeile 200: Zeile 197:
function procSpielerprofil() {
function procSpielerprofil() {
     // Primaerskills hervorheben
     // Primaerskills hervorheben
     let tdTags = document.getElementsByTagName("td");
     var tdTags = document.getElementsByTagName("td");
     let pos = tdTags[21].textContent;
     var pos = tdTags[21].textContent;
     let color = getColor(pos);
     var color = getColor(pos);
     let skills = getIdxPriSkillsDetailsPage(pos);
     var skills = getIdxPriSkillsDetailsPage(pos);
     for (let i = 0; i < skills.length; i++) {
     for (var i = 0; i < skills.length; i++) {
         tdTags[skills[i]].style.color = color;
         tdTags[skills[i]].style.color = color;
     }
     }
     // Saisons in Spielerhistorie trennen
     // Saisons in Spielerhistorie trennen
     let table = document.getElementById("e").getElementsByTagName("table")[0];
     var table = document.getElementById("e").getElementsByTagName("table")[0];
     let offsets = [1, 1, 0, 0]; // Je 1 Zeile oben und unten ausschliessen
     var offsets = [1, 1, 0, 0]; // Je 1 Zeile oben und unten ausschliessen
     drawHorizontalLines(table, offsets, 1, 5);
     drawHorizontalLines(table, offsets, 1, 5);
}
}
Zeile 217: Zeile 214:
// **************************************************************************************
// **************************************************************************************
function procKontoauszug() {
function procKontoauszug() {
     let table = document.getElementsByTagName("table")[0];
     var table = document.getElementsByTagName("table")[0];
     let season = 1;
     var season = 1;
     let optionTags = document.getElementsByTagName("select")[0].getElementsByTagName("option");
     var optionTags = document.getElementsByTagName("select")[0].getElementsByTagName("option");
     for (let i = 0; i < optionTags.length; i++) {
     for (var i = 0; i < optionTags.length; i++) {
         if (optionTags[i].selected) { season = parseInt(optionTags[i].textContent); }
         if (optionTags[i].selected) { season = parseInt(optionTags[i].textContent); }
     }
     }
     for (let i = 2; i < table.rows.length; i++) {
     for (var i = 2; i < table.rows.length; i++) {
         // Pruefen ob Zat-Abrechnung
         // Pruefen ob Zat-Abrechnung
         let postingText = table.rows[i].cells[3].textContent;
         var postingText = table.rows[i].cells[3].textContent;
         let regexpPostingText = /Abrechnung ZAT (\d+)/;
         var regexpPostingText = /Abrechnung ZAT (\d+)/;
         if (regexpPostingText.test(postingText)) {
         if (regexpPostingText.test(postingText)) {
             let zat = regexpPostingText.exec(postingText)[1];
             var zat = regexpPostingText.exec(postingText)[1];
             // Pruefen ob Ende von Abrechnungszeitraum
             // Pruefen ob Ende von Abrechnungszeitraum
             let zatPerMonth = (season == 1) ? 7 : 6;
             var zatPerMonth = (season == 1) ? 7 : 6;
             if (zat % zatPerMonth == 0) {
             if (zat % zatPerMonth == 0) {
                 for (let j = 0; j < table.rows[i].cells.length; j++) {
                 for (var j = 0; j < table.rows[i].cells.length; j++) {
                     table.rows[i].cells[j].style.borderTop = borderString;
                     table.rows[i].cells[j].style.borderTop = borderString;
                 }
                 }
Zeile 244: Zeile 241:
// **************************************************************************************
// **************************************************************************************
function procTraining() {
function procTraining() {
     let warningTable = document.getElementsByTagName("table")[1];
     var warningTable = document.getElementsByTagName("table")[1];
     let table = document.getElementsByTagName("table")[2];
     var table = document.getElementsByTagName("table")[2];
     let titleBankeinsatz = "Bankeinsatz";
     var titleBankeinsatz = "Bankeinsatz";
     let titleTeilweise = "Teilweise";
     var titleTeilweise = "Teilweise";
     let titleDurchgehend = "Durchgehend";
     var titleDurchgehend = "Durchgehend";
     // Warnungen hinzufuegen
     // Warnungen hinzufuegen
     let warning1 = "Die Wahrscheinlichkeiten in den Spalten \"" + titleBankeinsatz + "\", \"" + titleTeilweise + "\" und \"" + titleDurchgehend + "\" dienen nur zur Information!";
     var warning1 = "Die Wahrscheinlichkeiten in den Spalten \"" + titleBankeinsatz + "\", \"" + titleTeilweise + "\" und \"" + titleDurchgehend + "\" dienen nur zur Information!"
     let warning2 = "Die maximale Wahrscheinlichkeit einer Aufwertung ist immer 99.00 %!";
     var warning2 = "Die maximale Wahrscheinlichkeit einer Aufwertung ist immer 99.00 %!";
     //let newCell1 = appendCell(warningTable.insertRow(-1), warning1);
     //var newCell1 = appendCell(warningTable.insertRow(-1), warning1);
     //newCell1.setAttribute("colspan", 4, false);
     //newCell1.setAttribute("colspan", 4, false);
     //let newCell2 = appendCell(warningTable.insertRow(-1), warning2);
     //var newCell2 = appendCell(warningTable.insertRow(-1), warning2);
     //newCell2.setAttribute("colspan", 3, false);
     //newCell2.setAttribute("colspan", 3, false);
     // Ueberschriften hinzufuegen
     // Ueberschriften hinzufuegen
     let colWidth = 80;
     var colWidth = 80;
     let titleRow = table.rows[0];
     var titleRow = table.rows[0];
     appendCell(titleRow, titleBankeinsatz).setAttribute("width", colWidth, false);
     appendCell(titleRow, titleBankeinsatz).setAttribute("width", colWidth, false);
     appendCell(titleRow, titleTeilweise).setAttribute("width", colWidth, false);
     appendCell(titleRow, titleTeilweise).setAttribute("width", colWidth, false);
     appendCell(titleRow, titleDurchgehend).setAttribute("width", colWidth, false);
     appendCell(titleRow, titleDurchgehend).setAttribute("width", colWidth, false);
     // Wahrscheinlichkeiten berechnen und hinzufuegen
     // Wahrscheinlichkeiten berechnen und hinzufuegen
     let colIdxChance = 7;
     var colIdxChance = 7;
     for (let i = 1; i < table.rows.length; i++) {
     for (var i = 1; i < table.rows.length; i++) {
         let currentRow = table.rows[i];
         var currentRow = table.rows[i];
         let probabilityString = currentRow.cells[colIdxChance].textContent;
         var probabilityString = currentRow.cells[colIdxChance].textContent;
         // Schleife verlassen, wenn Berechnung irrelevant ist
         // Schleife verlassen, wenn Berechnung irrelevant ist
         if ((probabilityString == "0.00 %") || (probabilityString == "Trainerskill zu niedrig!")) { continue; }
         if ((probabilityString == "0.00 %") || (probabilityString == "Trainerskill zu niedrig!")) { continue; }
         let color = getColor(currentRow.cells[colIdxChance].className);
         var color = getColor(currentRow.cells[colIdxChance].className);
         for (let j = 1; j <= 3; j++) {
         for (var j = 1; j <= 3; j++) {
             // Wert von j entscheidet, welcher Faktor zur Berechnung benutzt wird (Art des Einsatzes)
             // Wert von j entscheidet, welcher Faktor zur Berechnung benutzt wird (Art des Einsatzes)
             let factor = 1;
             var factor = 1;
             switch (j) {
             switch (j) {
                 case 1: factor = 1.1; break;
                 case 1: factor = 1.1; break;
Zeile 278: Zeile 275:
                 case 3: factor = 1.35; break;
                 case 3: factor = 1.35; break;
             }
             }
             let newProbabilityString = decimalNumberToString(factor * stringToNumber(probabilityString), 2, true);
             var newProbabilityString = decimalNumberToString(factor * stringToNumber(probabilityString), 2, true);
             appendCell(currentRow, newProbabilityString, color);
             appendCell(currentRow, newProbabilityString, color);
         }
         }
Zeile 290: Zeile 287:
// Fuer Teamansicht - Statistiken: Aendert die erste Titelzeile von "Spiele", ... auf "Liga", ...
// Fuer Teamansicht - Statistiken: Aendert die erste Titelzeile von "Spiele", ... auf "Liga", ...
function changeTitleRow1(row) {
function changeTitleRow1(row) {
     let offsetLeft = 1;
     var offsetLeft = 1;
     row.deleteCell(-1); row.deleteCell(-1);
     row.deleteCell(-1); row.deleteCell(-1);
     for (let i = offsetLeft; i < row.cells.length; i++) {
     for (var i = offsetLeft; i < row.cells.length; i++) {
         row.cells[i].colSpan = 6;
         row.cells[i].colSpan = 6;
         switch (i) {
         switch (i) {
Zeile 305: Zeile 302:
// Fuer Teamansicht - Statistiken: Aendert die zweite Titelzeile von "LI", "LP", ... auf "SP", "TO", ...
// Fuer Teamansicht - Statistiken: Aendert die zweite Titelzeile von "LI", "LP", ... auf "SP", "TO", ...
function changeTitleRow2(row) {
function changeTitleRow2(row) {
     let offsetLeft = 3;
     var offsetLeft = 3;
     let cell;
     var cell;
     for (let i = offsetLeft; i < row.cells.length; i++) {
     for (var i = offsetLeft; i < row.cells.length; i++) {
         cell = row.cells[i];
         cell = row.cells[i];
         row.cells[i].align = "center";
         row.cells[i].align = "center";
Zeile 326: Zeile 323:
// periodicity: Jede periodicity-te Spalte mit Linie versehen
// periodicity: Jede periodicity-te Spalte mit Linie versehen
function drawVerticalLines(table, offsets, periodicity) {
function drawVerticalLines(table, offsets, periodicity) {
     for (let i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
     for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
         for (let j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
         for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
             if (((j - offsets[2] + 1) % periodicity) == 0) {
             if (((j - offsets[2] + 1) % periodicity) == 0) {
                 table.rows[i].cells[j].style.borderRight = borderString;
                 table.rows[i].cells[j].style.borderRight = borderString;
Zeile 343: Zeile 340:
// colIdx: Index der Spalte, die die zu vergleichenden Werte enthaelt
// colIdx: Index der Spalte, die die zu vergleichenden Werte enthaelt
function drawHorizontalLines(table, offsets, mode, colIdx) {
function drawHorizontalLines(table, offsets, mode, colIdx) {
     for (let i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
     for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
         switch (mode) {
         switch (mode) {
             case 1: // Saisons trennen
             case 1: // Saisons trennen
                 let value1 = parseInt(table.rows[i].cells[colIdx].textContent);
                 var value1 = parseInt(table.rows[i].cells[colIdx].textContent);
                 let value2 = parseInt(table.rows[i + 1].cells[colIdx].textContent);
                 var value2 = parseInt(table.rows[i + 1].cells[colIdx].textContent);
                 if (value1 != value2) {
                 if (value1 != value2) {
                     for (let j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                     for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                         table.rows[i].cells[j].style.borderBottom = borderString;
                         table.rows[i].cells[j].style.borderBottom = borderString;
                     }
                     }
Zeile 355: Zeile 352:
                 break;
                 break;
             case 2: // Abrechnungsperioden trennen (Saison 1)
             case 2: // Abrechnungsperioden trennen (Saison 1)
                 let value3 = parseInt(table.rows[i].cells[colIdx].textContent);
                 var value = parseInt(table.rows[i].cells[colIdx].textContent);
                 if (value3 % 7 == 0) {
                 if (value % 7 == 0) {
                     for (let j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                     for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                         table.rows[i].cells[j].style.borderBottom = borderString;
                         table.rows[i].cells[j].style.borderBottom = borderString;
                     }
                     }
Zeile 363: Zeile 360:
                 break;
                 break;
             case 3: // Abrechnungsperioden trennen (Saisons > 1)
             case 3: // Abrechnungsperioden trennen (Saisons > 1)
                 let value4 = parseInt(table.rows[i].cells[colIdx].textContent);
                 var value = parseInt(table.rows[i].cells[colIdx].textContent);
                 if (value4 % 6 == 0) {
                 if (value % 6 == 0) {
                     for (let j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                     for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                         table.rows[i].cells[j].style.borderBottom = borderString;
                         table.rows[i].cells[j].style.borderBottom = borderString;
                     }
                     }
Zeile 380: Zeile 377:
// Bei Aufruf ohne Farbe wird die Standardfarbe benutzt
// Bei Aufruf ohne Farbe wird die Standardfarbe benutzt
function appendCell(row, content, color) {
function appendCell(row, content, color) {
     let returnValue = row.insertCell(-1);
     var returnValue = row.insertCell(-1);
     returnValue.textContent = content;
     returnValue.textContent = content;
     returnValue.style.color = color;
     returnValue.style.color = color;
Zeile 411: Zeile 408:
// percent: Ob die Zahl als Prozentwert dargestellt werden soll
// percent: Ob die Zahl als Prozentwert dargestellt werden soll
function decimalNumberToString(number, decimalDigits, percent) {
function decimalNumberToString(number, decimalDigits, percent) {
     let returnValue = "";
     var returnValue = "";
     if (percent) { number *= 100; }
     if (percent) { number *= 100; }
     number = number.toFixed(decimalDigits);
     number = number.toFixed(decimalDigits);
Zeile 422: Zeile 419:
// number: Die Zahl, die umgewandelt werden soll
// number: Die Zahl, die umgewandelt werden soll
function wholeNumberToString(number) {
function wholeNumberToString(number) {
     let returnValue = "";
     var returnValue = "";
     let temp = "";
     var temp = "";
     for (let i = number.toString().length - 1; i >= 0; i--) {
     for (var i = number.toString().length - 1; i >= 0; i--) {
         temp += number.toString().charAt(i);
         temp += number.toString().charAt(i);
         if ((i % 3 == 0) && (i > 0)) { temp += "."; }
         if ((i % 3 == 0) && (i > 0)) { temp += "."; }
     }
     }
     for (let i = temp.length - 1; i >= 0; i--) {
     for (var i = temp.length - 1; i >= 0; i--) {
         returnValue += temp.charAt(i);
         returnValue += temp.charAt(i);
     }
     }
Zeile 441: Zeile 438:
function stringToNumber(string) {
function stringToNumber(string) {
     // parseXXX interpretiert einen Punkt immer als Dezimaltrennzeichen
     // parseXXX interpretiert einen Punkt immer als Dezimaltrennzeichen
     let returnValue = "";
     var returnValue = "";
     let percent = false;
     var percent = false;
     // Buchstaben und Whitespaces entfernen
     // Buchstaben und Whitespaces entfernen
     string = string.replace(/[\sa-zA-Z]/g, "");
     string = string.replace(/[\sa-zA-Z]/g, "");
Zeile 450: Zeile 447:
         string = string.replace(/%/g, "");
         string = string.replace(/%/g, "");
     }
     }
     let regexpWholeSimple = /^\d+$/;
     var regexpWholeSimple = /^\d+$/;
     let regexpWholeWithDots = /^\d+(\.\d{3}){1,}$/;
     var regexpWholeWithDots = /^\d+(\.\d{3}){1,}$/;
     let regexpDecimal = /^\d*\.\d{1,}$/;
     var regexpDecimal = /^\d*\.\d{1,}$/;
     if (regexpWholeSimple.test(string)) {
     if (regexpWholeSimple.test(string)) {
         // Einfache ganze Zahl
         // Einfache ganze Zahl
Zeile 478: Zeile 475:
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
function getIdxPriSkillsDetailsPage(pos) {
function getIdxPriSkillsDetailsPage(pos) {
     let tdOffset = 0;
     var tdOffset = 0;


     switch (pos) {
     switch (pos) {
         case "TOR": return [ tdOffset + 38, tdOffset + 40, tdOffset + 42, tdOffset + 44 ];
         case "TOR": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 44);
         case "ABW": return [ tdOffset + 38, tdOffset + 40, tdOffset + 42, tdOffset + 64 ];
         case "ABW": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 64);
         case "DMI": return [ tdOffset + 52, tdOffset + 56, tdOffset + 42, tdOffset + 36 ];
         case "DMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 42,tdOffset + 36);
         case "MIT": return [ tdOffset + 52, tdOffset + 56, tdOffset + 40, tdOffset + 36 ];
         case "MIT": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 40,tdOffset + 36);
         case "OMI": return [ tdOffset + 52, tdOffset + 56, tdOffset + 36, tdOffset + 44 ];
         case "OMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 36,tdOffset + 44);
         case "STU": return [ tdOffset + 34, tdOffset + 38, tdOffset + 44, tdOffset + 40 ];
         case "STU": return new Array(tdOffset + 34,tdOffset + 38,tdOffset + 44,tdOffset + 40);
         default:    return [];
         default:    return new Array();
     }
     }
}
}


Zeile 494: Zeile 491:
function getIdxPriSkillsGlobalPage(pos) {
function getIdxPriSkillsGlobalPage(pos) {
     switch (pos) {
     switch (pos) {
         case "TOR": return 6, 7, 8, 9 ];
         case "TOR": return new Array(6,7,8,9);
         case "ABW": return 6, 7, 8, 19 ];
         case "ABW": return new Array(6,7,8,19);
         case "DMI": return [ 13, 15, 8, 5 ];
         case "DMI": return new Array(13,15,8,5);
         case "MIT": return [ 13, 15, 7, 5 ];
         case "MIT": return new Array(13,15,7,5);
         case "OMI": return [ 13, 15, 9, 5 ];
         case "OMI": return new Array(13,15,9,5);
         case "STU": return 4, 6, 7, 9 ];
         case "STU": return new Array(4,6,7,9);
         default:    return [];
         default:    return new Array();
     }
     }
}
}
Zeile 518: Zeile 515:
}
}
</pre>
</pre>
 
<!-- Vor Umstellung auf Greasemonkey 4.0/Firefox 57.0 Quantum mit WebExtensions
== Version 2.3 ==
<pre>
=== Hinweise ===
 
Durch die Einf&uuml;hrung der Geburtstage kam es zu einer Verschiebung der td-Tags, die dazu f&uuml;hrte, dass die Prim&auml;rskills nicht mehr farbig hervorgehoben wurden. Version 2.3 korrigiert das Skript entsprechend.
 
=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-2.3-SLC.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-2.3-SLC.user.js INSTALLATION] ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
// ==UserScript==
// ==UserScript==
// @name         OS2.master
// @name OS2.master
// @namespace   http://os.ongapo.com/
// @namespace http://os.ongapo.com/
// @version     2.3-SLC-WE
// @version 2.3
// @copyright    2013+
// @description OS 2.0 - Master-Skript
// @author      Andreas Eckes (Strindheim BK)
// @include http://os.ongapo.com/showteam.php?s=*
// @description OS 2.0 - Master-Skript
// @include http://os.ongapo.com/st.php?s=*
// @include     /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/sp\.php\?s=\d+$/
// @include http://os.ongapo.com/sp.php?*
// @include     /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/st\.php\?(s=\d+&)?c=\d+$/
// @include http://os.ongapo.com/training.php
// @include     /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/showteam\.php(\?s=\d+)?$/
// @include http://os.ongapo.com/ka.php
// @include     /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/training\.php$/
// @include http://online-soccer.eu/showteam.php?s=*
// @include     /^https?://(www\.)?(os\.ongapo\.com|online-soccer\.eu|os-zeitungen\.com)/ka\.php$/
// @include http://online-soccer.eu/st.php?s=*
// @grant       none
// @include http://online-soccer.eu/sp.php?*
// @include http://online-soccer.eu/training.php
// @include http://online-soccer.eu/ka.php
// @include http://www.online-soccer.eu/showteam.php?s=*
// @include http://www.online-soccer.eu/st.php?s=*
// @include http://www.online-soccer.eu/sp.php?*
// @include http://www.online-soccer.eu/training.php
// @include http://www.online-soccer.eu/ka.php
// @grant none
// ==/UserScript==
// ==/UserScript==
// ECMAScript 6:
/* jshint esnext: true */
/* jshint moz: true */


// Dieses Skript ist in der Lage, folgendes zu machen:
// Dieses Skript ist in der Lage, folgendes zu machen:
Zeile 573: Zeile 567:
// Je nach URL in die Verarbeitungsfunktionen verzweigen
// Je nach URL in die Verarbeitungsfunktionen verzweigen
switch (pageString) {
switch (pageString) {
    case "teamansicht": procTeamansicht(); break;
case "teamansicht": procTeamansicht(); break;
    case "spielerprofil": if (spielerprofil) { procSpielerprofil(); } break;
case "spielerprofil": if (spielerprofil) { procSpielerprofil(); } break;
    case "training": if (training) { procTraining(); } break;
case "training": if (training) { procTraining(); } break;
    case "kontoauszug": if (kontoauszug) { procKontoauszug(); } break;
case "kontoauszug": if (kontoauszug) { procKontoauszug(); } break;
}
}


Zeile 583: Zeile 577:
// **************************************************************************************
// **************************************************************************************
function procTeamansicht() {
function procTeamansicht() {
    // Parameter s auslesen
// Parameter s auslesen
    var regexpS = /s=(\d+)/;
var regexpS = /s=(\d+)/;
    var s = -1;
var s = -1;
    if (regexpS.test(url)) { s = parseInt(regexpS.exec(url)[1]);   }
if (regexpS.test(url)) { s = parseInt(regexpS.exec(url)[1]); }
    switch (true) {
switch (true) {
        // Einzelwerte
// Einzelwerte
        case ((s == 2) && einzelwerte):
case ((s == 2) && einzelwerte):
            var table = document.getElementById("team");
var table = document.getElementById("team");
            for (var i = 1; i < table.rows.length - 1; i++) {
for (var i = 1; i < table.rows.length - 1; i++) {
                var pos = table.rows[i].cells[0].className;
var pos = table.rows[i].cells[0].className;
                var primarySkills = getIdxPriSkillsGlobalPage(pos);
var primarySkills = getIdxPriSkillsGlobalPage(pos);
                for (var j  = 0; j < primarySkills.length; j++) {
for (var j  = 0; j < primarySkills.length; j++) {
                    table.rows[i].cells[primarySkills[j]].style.color = osBlue;
table.rows[i].cells[primarySkills[j]].style.color = osBlue;
                    table.rows[i].cells[primarySkills[j]].style.backgroundColor = getColor(pos);
table.rows[i].cells[primarySkills[j]].style.backgroundColor = getColor(pos);
                }
}
            }
}
            break;
break;
        // Statistiken
// Statistiken
        case (((s == 3) || (s == 4)) && statistiken):
case (((s == 3) || (s == 4)) && statistiken):
            var table = document.getElementsByTagName("table")[2];
var table = document.getElementsByTagName("table")[2];
            procStatistiken(table);
procStatistiken(table);
            break;
break;
        // Vereinshistorie
// Vereinshistorie
        case (s == 7):
case (s == 7):
            var table = document.getElementsByTagName("table")[2];
var table = document.getElementsByTagName("table")[2];
            var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
            drawHorizontalLines(table, offsets, 1, 0);
drawHorizontalLines(table, offsets, 1, 0);
            break;
break;
    }
}
}
}


Zeile 619: Zeile 613:
// **************************************************************************************
// **************************************************************************************
function procStatistiken(table) {
function procStatistiken(table) {
    var rowOffsetTop = 2;
var rowOffsetTop = 2;
    var rowOffsetBottom = 2;
var rowOffsetBottom = 2;
    var colOffset = 4;
var colOffset = 4;
    var statistics = new Array();
var statistics = new Array();
    var maxValues = new Array();
var maxValues = new Array();
    var numberOfPlayers = table.rows.length - (rowOffsetTop + rowOffsetBottom);
var numberOfPlayers = table.rows.length - (rowOffsetTop + rowOffsetBottom);
    var periodicity = (statistikenUmordnen) ? 6 : 4;
var periodicity = (statistikenUmordnen) ? 6 : 4;
    // statistics fuellen
// statistics fuellen
    for (var i = 0; i < numberOfPlayers; i++) {
for (var i = 0; i < numberOfPlayers; i++) {
        statistics[i] = new Array();
statistics[i] = new Array();
        for (var j = colOffset; j < table.rows[i + rowOffsetTop].cells.length; j++) {
for (var j = colOffset; j < table.rows[i + rowOffsetTop].cells.length; j++) {
            statistics[i][j - colOffset] = parseInt(table.rows[i + rowOffsetTop].cells[j].textContent);
statistics[i][j - colOffset] = parseInt(table.rows[i + rowOffsetTop].cells[j].textContent);
        }
}
    }
}
    if (statistikenUmordnen) {
if (statistikenUmordnen) {
        // Formel zum Index mappen: neu = (alt div 4) + 6 * (alt mod 4)
// Formel zum Index mappen: neu = (alt div 4) + 6 * (alt mod 4)
        var statisticsNew = new Array();
var statisticsNew = new Array();
        var idxNeu = 0;
var idxNeu = 0;
        for (var i = 0; i < statistics.length; i++) {
for (var i = 0; i < statistics.length; i++) {
            statisticsNew[i] = new Array();
statisticsNew[i] = new Array();
            for (var j = 0; j < statistics[i].length; j++) {
for (var j = 0; j < statistics[i].length; j++) {
                idxNeu = Math.floor(j / 4) + 6 * (j % 4);
idxNeu = Math.floor(j / 4) + 6 * (j % 4);
                statisticsNew[i][idxNeu] = statistics[i][j];
statisticsNew[i][idxNeu] = statistics[i][j];
            }
}
        }
}
        // Umgeordnete Werte eintragen
// Umgeordnete Werte eintragen
        for (var i = 0; i < statistics.length; i++) {
for (var i = 0; i < statistics.length; i++) {
            for (var j = 0; j < statistics[i].length; j++) {
for (var j = 0; j < statistics[i].length; j++) {
                table.rows[i + rowOffsetTop].cells[j + colOffset].textContent = statisticsNew[i][j];
table.rows[i + rowOffsetTop].cells[j + colOffset].textContent = statisticsNew[i][j];
            }
}
        }
}
        // Titelzeilen aendern
// Titelzeilen aendern
        changeTitleRow1(table.rows[0]);
changeTitleRow1(table.rows[0]);
        changeTitleRow1(table.rows[table.rows.length - 1]);
changeTitleRow1(table.rows[table.rows.length - 1]);
        changeTitleRow2(table.rows[1]);
changeTitleRow2(table.rows[1]);
        changeTitleRow2(table.rows[table.rows.length - 2]);
changeTitleRow2(table.rows[table.rows.length - 2]);
    } else {
} else {
        var statisticsNew = statistics;
var statisticsNew = statistics;
    }
}
    // Linien zeichen. Offsets rechts = 1, um keinen Rand bei letzter Spalte zu haben
// Linien zeichen. Offsets rechts = 1, um keinen Rand bei letzter Spalte zu haben
    var offsets = new Array(rowOffsetTop, rowOffsetBottom, colOffset, 1);
var offsets = new Array(rowOffsetTop, rowOffsetBottom, colOffset, 1);
    var offsetsTitleRowTop = new Array(1, table.rows.length - 2, 3, 1);
var offsetsTitleRowTop = new Array(1, table.rows.length - 2, 3, 1);
    var offsetsTitleRowBottom = new Array(table.rows.length - 2, 1, 3, 1);
var offsetsTitleRowBottom = new Array(table.rows.length - 2, 1, 3, 1);
    drawVerticalLines(table, offsets, periodicity);
drawVerticalLines(table, offsets, periodicity);
    drawVerticalLines(table, offsetsTitleRowTop, periodicity);
drawVerticalLines(table, offsetsTitleRowTop, periodicity);
    drawVerticalLines(table, offsetsTitleRowBottom, periodicity);
drawVerticalLines(table, offsetsTitleRowBottom, periodicity);
    // maxValues ermitteln. Initialisierung mit 1, um keine Nullen zu markieren
// maxValues ermitteln. Initialisierung mit 1, um keine Nullen zu markieren
    for (var j = 0; j < 24; j++) {
for (var j = 0; j < 24; j++) {
        maxValues[j] = 1;
maxValues[j] = 1;
        for (var i = 0; i < numberOfPlayers; i++) {
for (var i = 0; i < numberOfPlayers; i++) {
            if (statisticsNew[i][j] > maxValues[j]) { maxValues[j] = statisticsNew[i][j]; }
if (statisticsNew[i][j] > maxValues[j]) { maxValues[j] = statisticsNew[i][j]; }
        }
}
    }
}
    // Hoechstwerte hervorheben
// Hoechstwerte hervorheben
    for (var i = 0; i < numberOfPlayers; i++) {
for (var i = 0; i < numberOfPlayers; i++) {
        var pos = table.rows[i + rowOffsetTop].cells[0].className;
var pos = table.rows[i + rowOffsetTop].cells[0].className;
        for (var j = 0; j < maxValues.length; j++) {
for (var j = 0; j < maxValues.length; j++) {
            if (statisticsNew[i][j] >= maxValues[j]) {
if (statisticsNew[i][j] >= maxValues[j]) {
                table.rows[i + rowOffsetTop].cells[j + colOffset].style.color = osBlue;
table.rows[i + rowOffsetTop].cells[j + colOffset].style.color = osBlue;
                table.rows[i + rowOffsetTop].cells[j + colOffset].style.backgroundColor = getColor(pos);
table.rows[i + rowOffsetTop].cells[j + colOffset].style.backgroundColor = getColor(pos);
                table.rows[i + rowOffsetTop].cells[j + colOffset].style.fontWeight = "bold";
table.rows[i + rowOffsetTop].cells[j + colOffset].style.fontWeight = "bold";
            }
}
        }
}
    }
}
}
}


Zeile 689: Zeile 683:
// **************************************************************************************
// **************************************************************************************
function procSpielerprofil() {
function procSpielerprofil() {
    // Primaerskills hervorheben
// Primaerskills hervorheben
    var tdTags = document.getElementsByTagName("td");
var tdTags = document.getElementsByTagName("td");
    var pos = tdTags[21].textContent;
var pos = tdTags[21].textContent;
    var color = getColor(pos);
var color = getColor(pos);
    var skills = getIdxPriSkillsDetailsPage(pos);
var skills = getIdxPriSkillsDetailsPage(pos);
    for (var i = 0; i < skills.length; i++) {
for (var i = 0; i < skills.length; i++) {
        tdTags[skills[i]].style.color = color;
tdTags[skills[i]].style.color = color;
    }
}
    // Saisons in Spielerhistorie trennen
// Saisons in Spielerhistorie trennen
    var table = document.getElementById("e").getElementsByTagName("table")[0];
var table = document.getElementById("e").getElementsByTagName("table")[0];
    var offsets = [1, 1, 0, 0]; // Je 1 Zeile oben und unten ausschliessen
var offsets = [1, 1, 0, 0]; // Je 1 Zeile oben und unten ausschliessen
    drawHorizontalLines(table, offsets, 1, 5);
drawHorizontalLines(table, offsets, 1, 5);
}
}


Zeile 707: Zeile 701:
// **************************************************************************************
// **************************************************************************************
function procKontoauszug() {
function procKontoauszug() {
    var table = document.getElementsByTagName("table")[0];
var table = document.getElementsByTagName("table")[0];
    var season = 1;
var season = 1;
    var optionTags = document.getElementsByTagName("select")[0].getElementsByTagName("option");
var optionTags = document.getElementsByTagName("select")[0].getElementsByTagName("option");
    for (var i = 0; i < optionTags.length; i++) {
for (var i = 0; i < optionTags.length; i++) {
        if (optionTags[i].selected) { season = parseInt(optionTags[i].textContent); }
if (optionTags[i].selected) { season = parseInt(optionTags[i].textContent); }
    }
}
    for (var i = 2; i < table.rows.length; i++) {
for (var i = 2; i < table.rows.length; i++) {
        // Pruefen ob Zat-Abrechnung
// Pruefen ob Zat-Abrechnung
        var postingText = table.rows[i].cells[3].textContent;
var postingText = table.rows[i].cells[3].textContent;
        var regexpPostingText = /Abrechnung ZAT (\d+)/;
var regexpPostingText = /Abrechnung ZAT (\d+)/;
        if (regexpPostingText.test(postingText)) {
if (regexpPostingText.test(postingText)) {
            var zat = regexpPostingText.exec(postingText)[1];
var zat = regexpPostingText.exec(postingText)[1];
            // Pruefen ob Ende von Abrechnungszeitraum
// Pruefen ob Ende von Abrechnungszeitraum
            var zatPerMonth = (season == 1) ? 7 : 6;
var zatPerMonth = (season == 1) ? 7 : 6;
            if (zat % zatPerMonth == 0) {
if (zat % zatPerMonth == 0) {
                for (var j = 0; j < table.rows[i].cells.length; j++) {
for (var j = 0; j < table.rows[i].cells.length; j++) {
                    table.rows[i].cells[j].style.borderTop = borderString;
table.rows[i].cells[j].style.borderTop = borderString;
                }
}
            }
}
        }
}
    }
}
}
}


Zeile 734: Zeile 728:
// **************************************************************************************
// **************************************************************************************
function procTraining() {
function procTraining() {
    var warningTable = document.getElementsByTagName("table")[1];
var warningTable = document.getElementsByTagName("table")[1];
    var table = document.getElementsByTagName("table")[2];
var table = document.getElementsByTagName("table")[2];
    var titleBankeinsatz = "Bankeinsatz";
var titleBankeinsatz = "Bankeinsatz";
    var titleTeilweise = "Teilweise";
var titleTeilweise = "Teilweise";
    var titleDurchgehend = "Durchgehend";
var titleDurchgehend = "Durchgehend";
    // Warnungen hinzufuegen
// Warnungen hinzufuegen
    var warning1 = "Die Wahrscheinlichkeiten in den Spalten \"" + titleBankeinsatz + "\", \"" + titleTeilweise + "\" und \"" + titleDurchgehend + "\" dienen nur zur Information!"
var warning1 = "Die Wahrscheinlichkeiten in den Spalten \"" + titleBankeinsatz + "\", \"" + titleTeilweise + "\" und \"" + titleDurchgehend + "\" dienen nur zur Information!"
    var warning2 = "Die maximale Wahrscheinlichkeit einer Aufwertung ist immer 99.00 %!";
var warning2 = "Die maximale Wahrscheinlichkeit einer Aufwertung ist immer 99.00 %!";
    //var newCell1 = appendCell(warningTable.insertRow(-1), warning1);
//var newCell1 = appendCell(warningTable.insertRow(-1), warning1);
    //newCell1.setAttribute("colspan", 4, false);
//newCell1.setAttribute("colspan", 4, false);
    //var newCell2 = appendCell(warningTable.insertRow(-1), warning2);
//var newCell2 = appendCell(warningTable.insertRow(-1), warning2);
    //newCell2.setAttribute("colspan", 3, false);
//newCell2.setAttribute("colspan", 3, false);
    // Ueberschriften hinzufuegen
// Ueberschriften hinzufuegen
    var colWidth = 80;
var colWidth = 80;
    var titleRow = table.rows[0];
var titleRow = table.rows[0];
    appendCell(titleRow, titleBankeinsatz).setAttribute("width", colWidth, false);
appendCell(titleRow, titleBankeinsatz).setAttribute("width", colWidth, false);
    appendCell(titleRow, titleTeilweise).setAttribute("width", colWidth, false);
appendCell(titleRow, titleTeilweise).setAttribute("width", colWidth, false);
    appendCell(titleRow, titleDurchgehend).setAttribute("width", colWidth, false);
appendCell(titleRow, titleDurchgehend).setAttribute("width", colWidth, false);
    // Wahrscheinlichkeiten berechnen und hinzufuegen
// Wahrscheinlichkeiten berechnen und hinzufuegen
    var colIdxChance = 7;
var colIdxChance = 7;
    for (var i = 1; i < table.rows.length; i++) {
for (var i = 1; i < table.rows.length; i++) {
        var currentRow = table.rows[i];
var currentRow = table.rows[i];
        var probabilityString = currentRow.cells[colIdxChance].textContent;
var probabilityString = currentRow.cells[colIdxChance].textContent;
        // Schleife verlassen, wenn Berechnung irrelevant ist
// Schleife verlassen, wenn Berechnung irrelevant ist
        if ((probabilityString == "0.00 %") || (probabilityString == "Trainerskill zu niedrig!")) { continue; }
if ((probabilityString == "0.00 %") || (probabilityString == "Trainerskill zu niedrig!")) { continue; }
        var color = getColor(currentRow.cells[colIdxChance].className);
var color = getColor(currentRow.cells[colIdxChance].className);
        for (var j = 1; j <= 3; j++) {
for (var j = 1; j <= 3; j++) {
            // Wert von j entscheidet, welcher Faktor zur Berechnung benutzt wird (Art des Einsatzes)
// Wert von j entscheidet, welcher Faktor zur Berechnung benutzt wird (Art des Einsatzes)
            var factor = 1;
var factor = 1;
            switch (j) {
switch (j) {
                case 1: factor = 1.1; break;
case 1: factor = 1.1; break;
                case 2: factor = 1.25; break;
case 2: factor = 1.25; break;
                case 3: factor = 1.35; break;
case 3: factor = 1.35; break;
            }
}
            var newProbabilityString = decimalNumberToString(factor * stringToNumber(probabilityString), 2, true);
var newProbabilityString = decimalNumberToString(factor * stringToNumber(probabilityString), 2, true);
            appendCell(currentRow, newProbabilityString, color);
appendCell(currentRow, newProbabilityString, color);
        }
}
    }
}
}
}


Zeile 780: Zeile 774:
// Fuer Teamansicht - Statistiken: Aendert die erste Titelzeile von "Spiele", ... auf "Liga", ...
// Fuer Teamansicht - Statistiken: Aendert die erste Titelzeile von "Spiele", ... auf "Liga", ...
function changeTitleRow1(row) {
function changeTitleRow1(row) {
    var offsetLeft = 1;
var offsetLeft = 1;
    row.deleteCell(-1); row.deleteCell(-1);
row.deleteCell(-1); row.deleteCell(-1);
    for (var i = offsetLeft; i < row.cells.length; i++) {
for (var i = offsetLeft; i < row.cells.length; i++) {
        row.cells[i].colSpan = 6;
row.cells[i].colSpan = 6;
        switch (i) {
switch (i) {
            case offsetLeft: row.cells[i].textContent = "Liga"; break;
case offsetLeft: row.cells[i].textContent = "Liga"; break;
            case offsetLeft + 1: row.cells[i].textContent = "Landespokal"; break;
case offsetLeft + 1: row.cells[i].textContent = "Landespokal"; break;
            case offsetLeft + 2: row.cells[i].textContent = "International"; break;
case offsetLeft + 2: row.cells[i].textContent = "International"; break;
            case offsetLeft + 3: row.cells[i].textContent = "Friendly"; break;
case offsetLeft + 3: row.cells[i].textContent = "Friendly"; break;
        }
}
    }
}
}
}


// Fuer Teamansicht - Statistiken: Aendert die zweite Titelzeile von "LI", "LP", ... auf "SP", "TO", ...
// Fuer Teamansicht - Statistiken: Aendert die zweite Titelzeile von "LI", "LP", ... auf "SP", "TO", ...
function changeTitleRow2(row) {
function changeTitleRow2(row) {
    var offsetLeft = 3;
var offsetLeft = 3;
    var cell;
var cell;
    for (var i = offsetLeft; i < row.cells.length; i++) {
for (var i = offsetLeft; i < row.cells.length; i++) {
        cell = row.cells[i];
cell = row.cells[i];
        row.cells[i].align = "center";
row.cells[i].align = "center";
        switch ((i - offsetLeft) % 6) {
switch ((i - offsetLeft) % 6) {
            case 0: cell.textContent = "SP"; break;
case 0: cell.textContent = "SP"; break;
            case 1: cell.textContent = "TO"; break;
case 1: cell.textContent = "TO"; break;
            case 2: cell.textContent = "VL"; break;
case 2: cell.textContent = "VL"; break;
            case 3: cell.textContent = "SC"; break;
case 3: cell.textContent = "SC"; break;
            case 4: cell.textContent = "GK"; break;
case 4: cell.textContent = "GK"; break;
            case 5: cell.textContent = "RK"; break;
case 5: cell.textContent = "RK"; break;
        }
}
    }
}
}
}


Zeile 816: Zeile 810:
// periodicity: Jede periodicity-te Spalte mit Linie versehen
// periodicity: Jede periodicity-te Spalte mit Linie versehen
function drawVerticalLines(table, offsets, periodicity) {
function drawVerticalLines(table, offsets, periodicity) {
    for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
        for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
            if (((j - offsets[2] + 1) % periodicity) == 0) {
if (((j - offsets[2] + 1) % periodicity) == 0) {
                table.rows[i].cells[j].style.borderRight = borderString;
table.rows[i].cells[j].style.borderRight = borderString;
            }
}
        }
}
    }
}
}
}


Zeile 833: Zeile 827:
// colIdx: Index der Spalte, die die zu vergleichenden Werte enthaelt
// colIdx: Index der Spalte, die die zu vergleichenden Werte enthaelt
function drawHorizontalLines(table, offsets, mode, colIdx) {
function drawHorizontalLines(table, offsets, mode, colIdx) {
    for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
        switch (mode) {
switch (mode) {
            case 1: // Saisons trennen
case 1: // Saisons trennen
                var value1 = parseInt(table.rows[i].cells[colIdx].textContent);
var value1 = parseInt(table.rows[i].cells[colIdx].textContent);
                var value2 = parseInt(table.rows[i + 1].cells[colIdx].textContent);
var value2 = parseInt(table.rows[i + 1].cells[colIdx].textContent);
                if (value1 != value2) {
if (value1 != value2) {
                    for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                        table.rows[i].cells[j].style.borderBottom = borderString;
table.rows[i].cells[j].style.borderBottom = borderString;
                    }
}
                }
}
                break;
break;
            case 2: // Abrechnungsperioden trennen (Saison 1)
case 2: // Abrechnungsperioden trennen (Saison 1)
                var value = parseInt(table.rows[i].cells[colIdx].textContent);
var value = parseInt(table.rows[i].cells[colIdx].textContent);
                if (value % 7 == 0) {
if (value % 7 == 0) {
                    for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                        table.rows[i].cells[j].style.borderBottom = borderString;
table.rows[i].cells[j].style.borderBottom = borderString;
                    }
}
                }
}
                break;
break;
            case 3: // Abrechnungsperioden trennen (Saisons > 1)
case 3: // Abrechnungsperioden trennen (Saisons > 1)
                var value = parseInt(table.rows[i].cells[colIdx].textContent);
var value = parseInt(table.rows[i].cells[colIdx].textContent);
                if (value % 6 == 0) {
if (value % 6 == 0) {
                    for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
                        table.rows[i].cells[j].style.borderBottom = borderString;
table.rows[i].cells[j].style.borderBottom = borderString;
                    }
}
                }
}
                break;
break;
        }
}
    }
}
}
}


Zeile 870: Zeile 864:
// Bei Aufruf ohne Farbe wird die Standardfarbe benutzt
// Bei Aufruf ohne Farbe wird die Standardfarbe benutzt
function appendCell(row, content, color) {
function appendCell(row, content, color) {
    var returnValue = row.insertCell(-1);
var returnValue = row.insertCell(-1);
    returnValue.textContent = content;
returnValue.textContent = content;
    returnValue.style.color = color;
returnValue.style.color = color;
    return returnValue;
return returnValue;
}
}


Zeile 879: Zeile 873:
// url: Der URL, der geparst werden soll
// url: Der URL, der geparst werden soll
function parseURL(url) {
function parseURL(url) {
    if (url.match(/\/showteam\.php\?s=/)) { return "teamansicht"; }
if (url.match(/\/showteam\.php\?s=/)) { return "teamansicht"; }
    if (url.match(/\/st\.php\?s=/)) { return "teamansicht"; }
if (url.match(/\/st\.php\?s=/)) { return "teamansicht"; }
    if (url.match(/\/tplatz\.php\?/)) { return "tabellenplatz"; }
if (url.match(/\/tplatz\.php\?/)) { return "tabellenplatz"; }
    if (url.match(/\/spielpreview\.php\?/)) { return "vorschau"; }
if (url.match(/\/spielpreview\.php\?/)) { return "vorschau"; }
    if (url.match(/\/sp\.php\?/)) { return "spielerprofil"; }
if (url.match(/\/sp\.php\?/)) { return "spielerprofil"; }
    if (url.match(/\/training\.php/)) { return "training"; }
if (url.match(/\/training\.php/)) { return "training"; }
    if (url.match(/\/ju\.php/)) { return "jugend"; }
if (url.match(/\/ju\.php/)) { return "jugend"; }
    if (url.match(/\/ka\.php/)) { return "kontoauszug"; }
if (url.match(/\/ka\.php/)) { return "kontoauszug"; }
    return "";
return "";
}
}


Zeile 901: Zeile 895:
// percent: Ob die Zahl als Prozentwert dargestellt werden soll
// percent: Ob die Zahl als Prozentwert dargestellt werden soll
function decimalNumberToString(number, decimalDigits, percent) {
function decimalNumberToString(number, decimalDigits, percent) {
    var returnValue = "";
var returnValue = "";
    if (percent) { number *= 100; }
if (percent) { number *= 100; }
    number = number.toFixed(decimalDigits);
number = number.toFixed(decimalDigits);
    returnValue = number.toString();
returnValue = number.toString();
    if (percent) { returnValue += " %"; }
if (percent) { returnValue += " %"; }
    return returnValue;
return returnValue;
}
}


Zeile 912: Zeile 906:
// number: Die Zahl, die umgewandelt werden soll
// number: Die Zahl, die umgewandelt werden soll
function wholeNumberToString(number) {
function wholeNumberToString(number) {
    var returnValue = "";
var returnValue = "";
    var temp = "";
var temp = "";
    for (var i = number.toString().length - 1; i >= 0; i--) {
for (var i = number.toString().length - 1; i >= 0; i--) {
        temp += number.toString().charAt(i);
temp += number.toString().charAt(i);
        if ((i % 3 == 0) && (i > 0)) { temp += "."; }
if ((i % 3 == 0) && (i > 0)) { temp += "."; }
    }
}
    for (var i = temp.length - 1; i >= 0; i--) {
for (var i = temp.length - 1; i >= 0; i--) {
        returnValue += temp.charAt(i);
returnValue += temp.charAt(i);
    }
}
    return returnValue;
return returnValue;
}
}


Zeile 930: Zeile 924:
// Da zuerst auf ganze Zahlen geprueft wird, koennen Dezimalzahlen nicht 3 Nachkommaziffern haben.
// Da zuerst auf ganze Zahlen geprueft wird, koennen Dezimalzahlen nicht 3 Nachkommaziffern haben.
function stringToNumber(string) {
function stringToNumber(string) {
    // parseXXX interpretiert einen Punkt immer als Dezimaltrennzeichen
// parseXXX interpretiert einen Punkt immer als Dezimaltrennzeichen
    var returnValue = "";
var returnValue = "";
    var percent = false;
var percent = false;
    // Buchstaben und Whitespaces entfernen
// Buchstaben und Whitespaces entfernen
    string = string.replace(/[\sa-zA-Z]/g, "");
string = string.replace(/[\sa-zA-Z]/g, "");
    // Auf % pruefen und % entfernen
// Auf % pruefen und % entfernen
    if (string.lastIndexOf("%") != -1) {
if (string.lastIndexOf("%") != -1) {
        percent = true;
percent = true;
        string = string.replace(/%/g, "");
string = string.replace(/%/g, "");
    }
}
    var regexpWholeSimple = /^\d+$/;
var regexpWholeSimple = /^\d+$/;
    var regexpWholeWithDots = /^\d+(\.\d{3}){1,}$/;
var regexpWholeWithDots = /^\d+(\.\d{3}){1,}$/;
    var regexpDecimal = /^\d*\.\d{1,}$/;
var regexpDecimal = /^\d*\.\d{1,}$/;
    if (regexpWholeSimple.test(string)) {
if (regexpWholeSimple.test(string)) {
        // Einfache ganze Zahl
// Einfache ganze Zahl
        returnValue = parseInt(string);
returnValue = parseInt(string);
    } else if (regexpWholeWithDots.test(string)) {
} else if (regexpWholeWithDots.test(string)) {
        // Ganze Zahl mit Tausenderpunkten
// Ganze Zahl mit Tausenderpunkten
        returnValue = parseInt(string.replace(/\./g, ""));
returnValue = parseInt(string.replace(/\./g, ""));
    } else if (regexpDecimal.test(string)) {
} else if (regexpDecimal.test(string)) {
        // Dezimalzahl mit Punkt als Trennzeichen
// Dezimalzahl mit Punkt als Trennzeichen
        returnValue = parseFloat(string);
returnValue = parseFloat(string);
    } else {
} else {
        // Kein gueltiger String
// Kein gueltiger String
        percent = false;
percent = false;
        returnValue = "";
returnValue = "";
    }
}
    if (percent) { returnValue /= 100; }
if (percent) { returnValue /= 100; }
    return returnValue;
return returnValue;
}
}


Zeile 968: Zeile 962:
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
function getIdxPriSkillsDetailsPage(pos) {
function getIdxPriSkillsDetailsPage(pos) {
    var tdOffset = 0;
var tdOffset = 0;
 
     switch (pos) {
     switch (pos) {
         case "TOR": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 44);
         case "TOR": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 44);
        case "ABW": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 64);
case "ABW": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 64);
         case "DMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 42,tdOffset + 36);
         case "DMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 42,tdOffset + 36);
         case "MIT": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 40,tdOffset + 36);
         case "MIT": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 40,tdOffset + 36);
        case "OMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 36,tdOffset + 44);
case "OMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 36,tdOffset + 44);
        case "STU": return new Array(tdOffset + 34,tdOffset + 38,tdOffset + 44,tdOffset + 40);
case "STU": return new Array(tdOffset + 34,tdOffset + 38,tdOffset + 44,tdOffset + 40);
         default:    return new Array();
         default:    return new Array();
     }
     }
Zeile 996: Zeile 990:
// Liefert die zur Position gehoerige Farbe,
// Liefert die zur Position gehoerige Farbe,
function getColor(pos) {
function getColor(pos) {
    switch (pos) {
switch (pos) {
        case "TOR": return "#FFFF00";
    case "TOR": return "#FFFF00";
        case "ABW": return "#00FF00";
    case "ABW": return "#00FF00";
        case "DMI": return "#3366FF";
    case "DMI": return "#3366FF";
        case "MIT": return "#66FFFF";
    case "MIT": return "#66FFFF";
        case "OMI": return "#FF66FF";
    case "OMI": return "#FF66FF";
        case "STU": return "#FF0000";
    case "STU": return "#FF0000";
        case "LEI": return "#FFFFFF";
case "LEI": return "#FFFFFF";
        default:    return "";
    default:    return "";
    }
}
}
}
</pre>-->
</pre>-->
<!-- Vor Umstellung auf Greasemonkey 4.0/Firefox 57.0 Quantum mit WebExtensions
 
<pre>
== Version 2.2 ==
=== Hinweise ===
 
Durch die Einf&uuml;hrung der OS-Faces im Spielerprofil kam es zu einer Verschiebung der td-Tags, die dazu f&uuml;hrte, dass die Prim&auml;rskills nicht mehr farbig hervorgehoben wurden. Version 2.2 korrigiert das Skript entsprechend.
 
=== Quellcode ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
// ==UserScript==
// ==UserScript==
// @name OS2.master
// @name OS2.master
// @namespace  http://os.ongapo.com/
// @version 2.2
// @version 2.3
// @description OS 2.0 - Master-Skript
// @description OS 2.0 - Master-Skript
// @include http://os.ongapo.com/showteam.php?s=*
// @include http://os.ongapo.com/showteam.php?s=*
// @include http://os.ongapo.com/st.php?s=*
// @include http://os.ongapo.com/st.php?s=*
// @include http://os.ongapo.com/sp.php?*
// @include http://os.ongapo.com/tplatz.php?t=*
// @include http://os.ongapo.com/training.php
// @include http://os.ongapo.com/spielpreview.php?*
// @include http://os.ongapo.com/ka.php
// @include http://os.ongapo.com/sp.php?*
// @include http://online-soccer.eu/showteam.php?s=*
// @include http://os.ongapo.com/training.php
// @include http://online-soccer.eu/st.php?s=*
// @include http://os.ongapo.com/ka.php
// @include http://online-soccer.eu/sp.php?*
// @include http://online-soccer.eu/showteam.php?s=*
// @include http://online-soccer.eu/training.php
// @include http://online-soccer.eu/st.php?s=*
// @include http://online-soccer.eu/ka.php
// @include http://online-soccer.eu/tplatz.php?t=*
// @include http://www.online-soccer.eu/showteam.php?s=*
// @include http://online-soccer.eu/spielpreview.php?*
// @include http://www.online-soccer.eu/st.php?s=*
// @include http://online-soccer.eu/sp.php?*
// @include http://www.online-soccer.eu/sp.php?*
// @include http://online-soccer.eu/training.php
// @include http://www.online-soccer.eu/training.php
// @include http://online-soccer.eu/ka.php
// @include http://www.online-soccer.eu/ka.php
// @include http://www.online-soccer.eu/showteam.php?s=*
// @grant none
// @include http://www.online-soccer.eu/st.php?s=*
// @include http://www.online-soccer.eu/tplatz.php?t=*
// @include http://www.online-soccer.eu/spielpreview.php?*
// @include http://www.online-soccer.eu/sp.php?*
// @include http://www.online-soccer.eu/training.php
// @include http://www.online-soccer.eu/ka.php
// ==/UserScript==
// ==/UserScript==


// Dieses Skript ist in der Lage, folgendes zu machen:
// Dieses Skript ist in der Lage, folgendes zu machen:
// Teamansicht - Einzelwerte: Primaerskills hervorheben
// Teamansicht - Einzelwerte: Primaerskills hervorheben
// Teamansicht - Saisonplan: Runde eintragen, Abrechnungen trennen
// Teamansicht - Tabellenplaetze: Fenster vergroessern
// Teamansicht - Statistik Saison / Gesamt: Spalten umordnen, Hoechstwerte markieren, Wettbewerbe bzw. Kategorien trennen
// Teamansicht - Statistik Saison / Gesamt: Spalten umordnen, Hoechstwerte markieren, Wettbewerbe bzw. Kategorien trennen
// Teamansicht - Vereinshistorie: Saisons trennen
// Teamansicht - Vereinshistorie: Saisons trennen
// Vorschau: Fenster vergroessern
// Spielerprofil: Primaerskills hervorheben, Saisons in Historie trennen
// Spielerprofil: Primaerskills hervorheben, Saisons in Historie trennen
// Training: Trainingswahrscheinlichkeiten je nach Einsatzdauer berechnen
// Training: Trainingswahrscheinlichkeiten je nach Einsatzdauer berechnen
Zeile 1.045: Zeile 1.053:
// Konfiguration ************************************************************************
// Konfiguration ************************************************************************
var einzelwerte = true; // Teamansicht - Einzelwerte bearbeiten?
var einzelwerte = true; // Teamansicht - Einzelwerte bearbeiten?
var tabellenplaetze = true; // Tabellenplatz-Fenster vergroessern?
var statistiken = true; // Teamansicht - Statistik Saison/Gesamt bearbeiten?
var statistiken = true; // Teamansicht - Statistik Saison/Gesamt bearbeiten?
var statistikenUmordnen = true; // In Teamansicht - Statistik Saison/Gesamt Wettbewerbe und Kategorien vertauschen?
var statistikenUmordnen = true; // In Teamansicht - Statistik Saison/Gesamt Wettbewerbe und Kategorien vertauschen?
Zeile 1.050: Zeile 1.059:
var spielerprofil = true; // Spielerprofil bearbeiten?
var spielerprofil = true; // Spielerprofil bearbeiten?
var training = true; // Training bearbeiten?
var training = true; // Training bearbeiten?
var vorschau = true; // Vorschau-Fenster vergroessern?
var kontoauszug = true; // Kontoauszug bearbeiten?
var kontoauszug = true; // Kontoauszug bearbeiten?
// Konfiguration Ende *******************************************************************
// Konfiguration Ende *******************************************************************
Zeile 1.061: Zeile 1.071:
switch (pageString) {
switch (pageString) {
case "teamansicht": procTeamansicht(); break;
case "teamansicht": procTeamansicht(); break;
case "tabellenplatz": if (tabellenplaetze) { procTabellenplaetze(); } break;
case "vorschau": if (vorschau) { procVorschau(); } break;
case "spielerprofil": if (spielerprofil) { procSpielerprofil(); } break;
case "spielerprofil": if (spielerprofil) { procSpielerprofil(); } break;
case "training": if (training) { procTraining(); } break;
case "training": if (training) { procTraining(); } break;
Zeile 1.097: Zeile 1.109:
var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
drawHorizontalLines(table, offsets, 1, 0);
drawHorizontalLines(table, offsets, 1, 0);
// Fenster verbreitern
if (isPopupWindow(this)) { this.resizeBy(this.innerWidth * 0.1, 0); }
break;
break;
}
}
Zeile 1.178: Zeile 1.192:
// Primaerskills hervorheben
// Primaerskills hervorheben
var tdTags = document.getElementsByTagName("td");
var tdTags = document.getElementsByTagName("td");
var pos = tdTags[21].textContent;
var pos = tdTags[14].textContent;
var color = getColor(pos);
var color = getColor(pos);
//alert(color);
var skills = getIdxPriSkillsDetailsPage(pos);
var skills = getIdxPriSkillsDetailsPage(pos);
for (var i = 0; i < skills.length; i++) {
for (var i = 0; i < skills.length; i++) {
Zeile 1.259: Zeile 1.274:
}
}
}
}
}
// **************************************************************************************
// Tabellenplaetze: Fenster vergroessern
// **************************************************************************************
function procTabellenplaetze() {
if (isPopupWindow(this)) { this.resizeBy(this.innerWidth * 0.1, this.innerHeight * 0.1); }
}
// **************************************************************************************
// Vorschau: Fenster vergroessern
// **************************************************************************************
function procVorschau() {
if (isPopupWindow(this)) { this.resizeBy(0, this.innerHeight * 1.45); }
}
}


Zeile 1.349: Zeile 1.378:
}
}
}
}
}
// Gibt true zurueck, wenn das uebergebene Fenster keine sichtbare Menueleiste hat.
// Im Allgemeinen ist das Fenster dann ein Popupfenster.
function isPopupWindow(aWindow) {
return !(aWindow.menubar && aWindow.menubar.visible);
}
}


Zeile 1.455: Zeile 1.490:
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
function getIdxPriSkillsDetailsPage(pos) {
function getIdxPriSkillsDetailsPage(pos) {
var tdOffset = 0;
     switch (pos) {
     switch (pos) {
         case "TOR": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 44);
         case "TOR": return new Array(36,38,40,42);
case "ABW": return new Array(tdOffset + 38,tdOffset + 40,tdOffset + 42,tdOffset + 64);
        case "ABW": return new Array(36,38,40,62);
         case "DMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 42,tdOffset + 36);
         case "DMI": return new Array(50,54,40,34);
         case "MIT": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 40,tdOffset + 36);
         case "MIT": return new Array(50,54,38,34);
case "OMI": return new Array(tdOffset + 52,tdOffset + 56,tdOffset + 36,tdOffset + 44);
        case "OMI": return new Array(50,54,34,42);
case "STU": return new Array(tdOffset + 34,tdOffset + 38,tdOffset + 44,tdOffset + 40);
        case "STU": return new Array(32,36,42,38);
         default:    return new Array();
         default:    return new Array();
     }
     }
Zeile 1.496: Zeile 1.529:
</pre>-->
</pre>-->


== Version 2.2 ==
=== Hinweise ===
Durch die Einf&uuml;hrung der OS-Faces im Spielerprofil kam es zu einer Verschiebung der td-Tags, die dazu f&uuml;hrte, dass die Prim&auml;rskills nicht mehr farbig hervorgehoben wurden. Version 2.2 korrigiert das Skript entsprechend.
=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-2.2.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-2.2.user.js INSTALLATION] ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
// ==UserScript==
// @name OS2.master
// @version 2.2
// @description OS 2.0 - Master-Skript
// @include http://os.ongapo.com/showteam.php?s=*
// @include http://os.ongapo.com/st.php?s=*
// @include http://os.ongapo.com/tplatz.php?t=*
// @include http://os.ongapo.com/spielpreview.php?*
// @include http://os.ongapo.com/sp.php?*
// @include http://os.ongapo.com/training.php
// @include http://os.ongapo.com/ka.php
// @include http://online-soccer.eu/showteam.php?s=*
// @include http://online-soccer.eu/st.php?s=*
// @include http://online-soccer.eu/tplatz.php?t=*
// @include http://online-soccer.eu/spielpreview.php?*
// @include http://online-soccer.eu/sp.php?*
// @include http://online-soccer.eu/training.php
// @include http://online-soccer.eu/ka.php
// @include http://www.online-soccer.eu/showteam.php?s=*
// @include http://www.online-soccer.eu/st.php?s=*
// @include http://www.online-soccer.eu/tplatz.php?t=*
// @include http://www.online-soccer.eu/spielpreview.php?*
// @include http://www.online-soccer.eu/sp.php?*
// @include http://www.online-soccer.eu/training.php
// @include http://www.online-soccer.eu/ka.php
// ==/UserScript==
// Dieses Skript ist in der Lage, folgendes zu machen:
// Teamansicht - Einzelwerte: Primaerskills hervorheben
// Teamansicht - Saisonplan: Runde eintragen, Abrechnungen trennen
// Teamansicht - Tabellenplaetze: Fenster vergroessern
// Teamansicht - Statistik Saison / Gesamt: Spalten umordnen, Hoechstwerte markieren, Wettbewerbe bzw. Kategorien trennen
// Teamansicht - Vereinshistorie: Saisons trennen
// Vorschau: Fenster vergroessern
// Spielerprofil: Primaerskills hervorheben, Saisons in Historie trennen
// Training: Trainingswahrscheinlichkeiten je nach Einsatzdauer berechnen
// Kontoauszug: Abrechnungen trennen
// Ob diese Aenderungen wirklich durchgefuehrt werden, kann gesteuert werden, indem die folgenden
// Konfigurations-Variablen auf true (wird gemacht) oder false (wird nicht gemacht) gesetzt werden
// Konfiguration ************************************************************************
var einzelwerte = true; // Teamansicht - Einzelwerte bearbeiten?
var tabellenplaetze = true; // Tabellenplatz-Fenster vergroessern?
var statistiken = true; // Teamansicht - Statistik Saison/Gesamt bearbeiten?
var statistikenUmordnen = true; // In Teamansicht - Statistik Saison/Gesamt Wettbewerbe und Kategorien vertauschen?
var vereinshistorie = true; // Teamansicht - Vereinshistorie bearbeiten?
var spielerprofil = true; // Spielerprofil bearbeiten?
var training = true; // Training bearbeiten?
var vorschau = true; // Vorschau-Fenster vergroessern?
var kontoauszug = true; // Kontoauszug bearbeiten?
// Konfiguration Ende *******************************************************************
var osBlue = "#111166";
var borderString = "solid white 1px";
var url = this.location.href
var pageString = parseURL(url);
// Je nach URL in die Verarbeitungsfunktionen verzweigen
switch (pageString) {
case "teamansicht": procTeamansicht(); break;
case "tabellenplatz": if (tabellenplaetze) { procTabellenplaetze(); } break;
case "vorschau": if (vorschau) { procVorschau(); } break;
case "spielerprofil": if (spielerprofil) { procSpielerprofil(); } break;
case "training": if (training) { procTraining(); } break;
case "kontoauszug": if (kontoauszug) { procKontoauszug(); } break;
}
// **************************************************************************************
// Teamansicht: Diverse Verarbeitungen, teilweise in eigenen Funktionen.
// **************************************************************************************
function procTeamansicht() {
// Parameter s auslesen
var regexpS = /s=(\d+)/;
var s = -1;
if (regexpS.test(url)) { s = parseInt(regexpS.exec(url)[1]); }
switch (true) {
// Einzelwerte
case ((s == 2) && einzelwerte):
var table = document.getElementById("team");
for (var i = 1; i < table.rows.length - 1; i++) {
var pos = table.rows[i].cells[0].className;
var primarySkills = getIdxPriSkillsGlobalPage(pos);
for (var j  = 0; j < primarySkills.length; j++) {
table.rows[i].cells[primarySkills[j]].style.color = osBlue;
table.rows[i].cells[primarySkills[j]].style.backgroundColor = getColor(pos);
}
}
break;
// Statistiken
case (((s == 3) || (s == 4)) && statistiken):
var table = document.getElementsByTagName("table")[2];
procStatistiken(table);
break;
// Vereinshistorie
case (s == 7):
var table = document.getElementsByTagName("table")[2];
var offsets = [2, 1, 0, 0]; // 2 Zeilen oben, 1 Zeile unten ausschliessen
drawHorizontalLines(table, offsets, 1, 0);
// Fenster verbreitern
if (isPopupWindow(this)) { this.resizeBy(this.innerWidth * 0.1, 0); }
break;
}
}
// **************************************************************************************
// Statistik-Seiten: Kategorie und Wettbewerb vertauschen, Abrechnungen trennen,
// Hoechstwerte hervorheben.
// **************************************************************************************
function procStatistiken(table) {
var rowOffsetTop = 2;
var rowOffsetBottom = 2;
var colOffset = 4;
var statistics = new Array();
var maxValues = new Array();
var numberOfPlayers = table.rows.length - (rowOffsetTop + rowOffsetBottom);
var periodicity = (statistikenUmordnen) ? 6 : 4;
// statistics fuellen
for (var i = 0; i < numberOfPlayers; i++) {
statistics[i] = new Array();
for (var j = colOffset; j < table.rows[i + rowOffsetTop].cells.length; j++) {
statistics[i][j - colOffset] = parseInt(table.rows[i + rowOffsetTop].cells[j].textContent);
}
}
if (statistikenUmordnen) {
// Formel zum Index mappen: neu = (alt div 4) + 6 * (alt mod 4)
var statisticsNew = new Array();
var idxNeu = 0;
for (var i = 0; i < statistics.length; i++) {
statisticsNew[i] = new Array();
for (var j = 0; j < statistics[i].length; j++) {
idxNeu = Math.floor(j / 4) + 6 * (j % 4);
statisticsNew[i][idxNeu] = statistics[i][j];
}
}
// Umgeordnete Werte eintragen
for (var i = 0; i < statistics.length; i++) {
for (var j = 0; j < statistics[i].length; j++) {
table.rows[i + rowOffsetTop].cells[j + colOffset].textContent = statisticsNew[i][j];
}
}
// Titelzeilen aendern
changeTitleRow1(table.rows[0]);
changeTitleRow1(table.rows[table.rows.length - 1]);
changeTitleRow2(table.rows[1]);
changeTitleRow2(table.rows[table.rows.length - 2]);
} else {
var statisticsNew = statistics;
}
// Linien zeichen. Offsets rechts = 1, um keinen Rand bei letzter Spalte zu haben
var offsets = new Array(rowOffsetTop, rowOffsetBottom, colOffset, 1);
var offsetsTitleRowTop = new Array(1, table.rows.length - 2, 3, 1);
var offsetsTitleRowBottom = new Array(table.rows.length - 2, 1, 3, 1);
drawVerticalLines(table, offsets, periodicity);
drawVerticalLines(table, offsetsTitleRowTop, periodicity);
drawVerticalLines(table, offsetsTitleRowBottom, periodicity);
// maxValues ermitteln. Initialisierung mit 1, um keine Nullen zu markieren
for (var j = 0; j < 24; j++) {
maxValues[j] = 1;
for (var i = 0; i < numberOfPlayers; i++) {
if (statisticsNew[i][j] > maxValues[j]) { maxValues[j] = statisticsNew[i][j]; }
}
}
// Hoechstwerte hervorheben
for (var i = 0; i < numberOfPlayers; i++) {
var pos = table.rows[i + rowOffsetTop].cells[0].className;
for (var j = 0; j < maxValues.length; j++) {
if (statisticsNew[i][j] >= maxValues[j]) {
table.rows[i + rowOffsetTop].cells[j + colOffset].style.color = osBlue;
table.rows[i + rowOffsetTop].cells[j + colOffset].style.backgroundColor = getColor(pos);
table.rows[i + rowOffsetTop].cells[j + colOffset].style.fontWeight = "bold";
}
}
}
}
// **************************************************************************************
// Spielerprofil: Primaerskills hervorheben, Saisons in Spielerhistorie trennen.
// **************************************************************************************
function procSpielerprofil() {
// Primaerskills hervorheben
var tdTags = document.getElementsByTagName("td");
var pos = tdTags[14].textContent;
var color = getColor(pos);
//alert(color);
var skills = getIdxPriSkillsDetailsPage(pos);
for (var i = 0; i < skills.length; i++) {
tdTags[skills[i]].style.color = color;
}
// Saisons in Spielerhistorie trennen
var table = document.getElementById("e").getElementsByTagName("table")[0];
var offsets = [1, 1, 0, 0]; // Je 1 Zeile oben und unten ausschliessen
drawHorizontalLines(table, offsets, 1, 5);
}
// **************************************************************************************
// Kontoauszug: Abrechnungen trennen.
// **************************************************************************************
function procKontoauszug() {
var table = document.getElementsByTagName("table")[0];
var season = 1;
var optionTags = document.getElementsByTagName("select")[0].getElementsByTagName("option");
for (var i = 0; i < optionTags.length; i++) {
if (optionTags[i].selected) { season = parseInt(optionTags[i].textContent); }
}
for (var i = 2; i < table.rows.length; i++) {
// Pruefen ob Zat-Abrechnung
var postingText = table.rows[i].cells[3].textContent;
var regexpPostingText = /Abrechnung ZAT (\d+)/;
if (regexpPostingText.test(postingText)) {
var zat = regexpPostingText.exec(postingText)[1];
// Pruefen ob Ende von Abrechnungszeitraum
var zatPerMonth = (season == 1) ? 7 : 6;
if (zat % zatPerMonth == 0) {
for (var j = 0; j < table.rows[i].cells.length; j++) {
table.rows[i].cells[j].style.borderTop = borderString;
}
}
}
}
}
// **************************************************************************************
// Training: Trainingswahrscheinlichkeiten je nach Einsatzart und -dauer anzeigen.
// **************************************************************************************
function procTraining() {
var warningTable = document.getElementsByTagName("table")[1];
var table = document.getElementsByTagName("table")[2];
var titleBankeinsatz = "Bankeinsatz";
var titleTeilweise = "Teilweise";
var titleDurchgehend = "Durchgehend";
// Warnungen hinzufuegen
var warning1 = "Die Wahrscheinlichkeiten in den Spalten \"" + titleBankeinsatz + "\", \"" + titleTeilweise + "\" und \"" + titleDurchgehend + "\" dienen nur zur Information!"
var warning2 = "Die maximale Wahrscheinlichkeit einer Aufwertung ist immer 99.00 %!";
//var newCell1 = appendCell(warningTable.insertRow(-1), warning1);
//newCell1.setAttribute("colspan", 4, false);
//var newCell2 = appendCell(warningTable.insertRow(-1), warning2);
//newCell2.setAttribute("colspan", 3, false);
// Ueberschriften hinzufuegen
var colWidth = 80;
var titleRow = table.rows[0];
appendCell(titleRow, titleBankeinsatz).setAttribute("width", colWidth, false);
appendCell(titleRow, titleTeilweise).setAttribute("width", colWidth, false);
appendCell(titleRow, titleDurchgehend).setAttribute("width", colWidth, false);
// Wahrscheinlichkeiten berechnen und hinzufuegen
var colIdxChance = 7;
for (var i = 1; i < table.rows.length; i++) {
var currentRow = table.rows[i];
var probabilityString = currentRow.cells[colIdxChance].textContent;
// Schleife verlassen, wenn Berechnung irrelevant ist
if ((probabilityString == "0.00 %") || (probabilityString == "Trainerskill zu niedrig!")) { continue; }
var color = getColor(currentRow.cells[colIdxChance].className);
for (var j = 1; j <= 3; j++) {
// Wert von j entscheidet, welcher Faktor zur Berechnung benutzt wird (Art des Einsatzes)
var factor = 1;
switch (j) {
case 1: factor = 1.1; break;
case 2: factor = 1.25; break;
case 3: factor = 1.35; break;
}
var newProbabilityString = decimalNumberToString(factor * stringToNumber(probabilityString), 2, true);
appendCell(currentRow, newProbabilityString, color);
}
}
}
// **************************************************************************************
// Tabellenplaetze: Fenster vergroessern
// **************************************************************************************
function procTabellenplaetze() {
if (isPopupWindow(this)) { this.resizeBy(this.innerWidth * 0.1, this.innerHeight * 0.1); }
}
// **************************************************************************************
// Vorschau: Fenster vergroessern
// **************************************************************************************
function procVorschau() {
if (isPopupWindow(this)) { this.resizeBy(0, this.innerHeight * 1.45); }
}
// ****************************************************************************
// Hilfsfunktionen
// ****************************************************************************
// Fuer Teamansicht - Statistiken: Aendert die erste Titelzeile von "Spiele", ... auf "Liga", ...
function changeTitleRow1(row) {
var offsetLeft = 1;
row.deleteCell(-1); row.deleteCell(-1);
for (var i = offsetLeft; i < row.cells.length; i++) {
row.cells[i].colSpan = 6;
switch (i) {
case offsetLeft: row.cells[i].textContent = "Liga"; break;
case offsetLeft + 1: row.cells[i].textContent = "Landespokal"; break;
case offsetLeft + 2: row.cells[i].textContent = "International"; break;
case offsetLeft + 3: row.cells[i].textContent = "Friendly"; break;
}
}
}
// Fuer Teamansicht - Statistiken: Aendert die zweite Titelzeile von "LI", "LP", ... auf "SP", "TO", ...
function changeTitleRow2(row) {
var offsetLeft = 3;
var cell;
for (var i = offsetLeft; i < row.cells.length; i++) {
cell = row.cells[i];
row.cells[i].align = "center";
switch ((i - offsetLeft) % 6) {
case 0: cell.textContent = "SP"; break;
case 1: cell.textContent = "TO"; break;
case 2: cell.textContent = "VL"; break;
case 3: cell.textContent = "SC"; break;
case 4: cell.textContent = "GK"; break;
case 5: cell.textContent = "RK"; break;
}
}
}
// Zeichnet vertikale Linien in eine Tabelle (mit borderRight)
// table: zu bearbeitende Tabelle
// offsets[0]/[1]: Anzahl Zeilen oben/unten, die ignoriert werden; [2]/[3]: Anzahl Spalten links/rechts, die ignoriert werden
// periodicity: Jede periodicity-te Spalte mit Linie versehen
function drawVerticalLines(table, offsets, periodicity) {
for (var i = offsets[0]; i < table.rows.length - offsets[1]; i++) {
for (var j = offsets[2]; j < table.rows[i].cells.length - offsets[3]; j++) {
if (((j - offsets[2] + 1) % periodicity) == 0) {
table.rows[i].cells[j].style.borderRight = borderString;
}
}
}
}
// 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;
}
}
}
// Gibt true zurueck, wenn das uebergebene Fenster keine sichtbare Menueleiste hat.
// Im Allgemeinen ist das Fenster dann ein Popupfenster.
function isPopupWindow(aWindow) {
return !(aWindow.menubar && aWindow.menubar.visible);
}
// 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)
// Bei Aufruf ohne Farbe wird die Standardfarbe benutzt
function appendCell(row, content, color) {
var returnValue = row.insertCell(-1);
returnValue.textContent = content;
returnValue.style.color = color;
return returnValue;
}
// Parst den URL und gibt einen String zurueck, der die Seite identifiziert.
// url: Der URL, der geparst werden soll
function parseURL(url) {
if (url.match(/\/showteam\.php\?s=/)) { return "teamansicht"; }
if (url.match(/\/st\.php\?s=/)) { return "teamansicht"; }
if (url.match(/\/tplatz\.php\?/)) { return "tabellenplatz"; }
if (url.match(/\/spielpreview\.php\?/)) { return "vorschau"; }
if (url.match(/\/sp\.php\?/)) { return "spielerprofil"; }
if (url.match(/\/training\.php/)) { return "training"; }
if (url.match(/\/ju\.php/)) { return "jugend"; }
if (url.match(/\/ka\.php/)) { return "kontoauszug"; }
return "";
}
// ****************************************************************************
// Funktionen, die Zahlen und Zahlenstrings verarbeiten
// ****************************************************************************
// 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 = "";
for (var i = number.toString().length - 1; i >= 0; i--) {
temp += number.toString().charAt(i);
if ((i % 3 == 0) && (i > 0)) { 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;
}
// ****************************************************************************
// Funktionen, die Konstanten definieren
// ****************************************************************************
// Liefert je nach Position die Indizes der Primaerskills im Spielerprofil.
function getIdxPriSkillsDetailsPage(pos) {
    switch (pos) {
        case "TOR": return new Array(36,38,40,42);
        case "ABW": return new Array(36,38,40,62);
        case "DMI": return new Array(50,54,40,34);
        case "MIT": return new Array(50,54,38,34);
        case "OMI": return new Array(50,54,34,42);
        case "STU": return new Array(32,36,42,38);
        default:    return new Array();
    }
}
// Liefert je nach Position die Indizes der Primaerskills in Teamansicht - Einzelwerte.
function getIdxPriSkillsGlobalPage(pos) {
    switch (pos) {
        case "TOR": return new Array(6,7,8,9);
        case "ABW": return new Array(6,7,8,19);
        case "DMI": return new Array(13,15,8,5);
        case "MIT": return new Array(13,15,7,5);
        case "OMI": return new Array(13,15,9,5);
        case "STU": return new Array(4,6,7,9);
        default:    return new Array();
    }
}
// Liefert die zur Position gehoerige Farbe,
function getColor(pos) {
switch (pos) {
    case "TOR": return "#FFFF00";
    case "ABW": return "#00FF00";
    case "DMI": return "#3366FF";
    case "MIT": return "#66FFFF";
    case "OMI": return "#FF66FF";
    case "STU": return "#FF0000";
case "LEI": return "#FFFFFF";
    default:    return "";
}
}
</pre>-->


== Version 2.1 ==
== Version 2.1 ==
Zeile 2.028: Zeile 1.536:
Ansonsten bleibt alles beim Alten.
Ansonsten bleibt alles beim Alten.


=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-2.1.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-2.1.user.js INSTALLATION] ===
=== Quellcode ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
<!--<pre>
Zeile 2.561: Zeile 2.069:
Welche Funktionen das Skript ausf&uuml;hrt, kann in Grenzen gesteuert werden, indem Variablen im Konfigurations-Abschnitt am Anfang des Codes auf <code>true</code> bzw. <code>false</code> gesetzt werden. Siehe hierzu die Kommentare im Quellcode.
Welche Funktionen das Skript ausf&uuml;hrt, kann in Grenzen gesteuert werden, indem Variablen im Konfigurations-Abschnitt am Anfang des Codes auf <code>true</code> bzw. <code>false</code> gesetzt werden. Siehe hierzu die Kommentare im Quellcode.


=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-2.0.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-2.0.user.js INSTALLATION] ===
=== Quellcode ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
<!--<pre>
Zeile 3.279: Zeile 2.787:


== Version 1.0 ==
== Version 1.0 ==
=== [https://github.com/Eselce/OS2.scripts/blob/master/versions/OS2.master/OS2.master-1.0.user.js Quellcode] [https://eselce.github.io/OS2.scripts/versions/OS2.master/OS2.master-1.0.user.js INSTALLATION] ===
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
Der Quellcode ist aus Gr&uuml;nden der &Uuml;bersichtlichkeit auskommentiert.
<!--<pre>
<!--<pre>

Bitte beachte, dass alle Beiträge zu Online-Soccer-Wiki von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können. Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.

Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast (weitere Einzelheiten unter Online-Soccer-Wiki:Urheberrechte). ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)