OS2.spielplan
Zur Navigation springen
Zur Suche springen
OS2.spielplan | |
Dateiname | os2.spielplan.user.js |
Version | 0.4 |
Autor | Sven Loges (SLC), Choromonets Odessa |
Beschreibung | Strukturiert und erweitert die Spielplananzeige eines OS2-Teams |
Webseiten | showteam.php?s=6 st.php?s=6 Saisonplan |
Funktionalität | Trennstriche zwischen den Abrechnungsmonaten Verkürzung von "Vorbericht(e)" und "Kommentar(e)" Details zu den Spielen Ergebnisse aufaddieren Nachträgliche Vorschau: Bilanz Benutzermenü für Optionen |
Letzte Änderung | 1.06.2016 |
// ==UserScript== // @name OS2.spielplan // @namespace http://os.ongapo.com/ // @version 0.4 // @copyright 2013+ // @author Sven Loges (SLC) // @description Spielplan-Abschnitt aus dem Master-Script fuer Online Soccer 2.0 // @include http://os.ongapo.com/st.php?s=* // @include http://os.ongapo.com/showteam.php?s=* // @include http://www.os.ongapo.com/st.php?s=* // @include http://www.os.ongapo.com/showteam.php?s=* // @include http://online-soccer.eu/st.php?s=* // @include http://online-soccer.eu/showteam.php?s=* // @include http://www.online-soccer.eu/st.php?s=* // @include http://www.online-soccer.eu/showteam.php?s=* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_registerMenuCommand // ==/UserScript== // Optionen (hier editieren): var sepMonths = GM_getValue("sepMonths", true); // Im Spielplan Striche zwischen den Monaten var shortKom = GM_getValue("shortKom", true); // Vorbericht(e) & Kommentar(e) nicht ausschreiben var showStats = GM_getValue("showStats", true); // Ergebnisse aufaddieren und Stand anzeigen var longStats = GM_getValue("longStats", false); // Detailliertere Ausgabe des Stands registerMenu(); var borderString = "solid white 1px"; // Format der Trennlinie zwischen den Monaten // Verarbeitet die URL der Seite und ermittelt die Nummer der gewuenschten Unterseite // url Adresse der Seite function getPageIdFromURL(url) { // Variablen zur Identifikation der Seite var indexS = url.lastIndexOf("s="); var st = url.match(/st\.php/); // Teamansicht Popupfenster var showteam = url.match(/showteam\.php/); // Teamansicht Hauptfenster var s = -1; // Seitenindex (Rueckgabewert) // Wert von s (Seitenindex) ermitteln... // Annahme: Entscheidend ist jeweils das letzte Vorkommnis von "s=" und ggf. von "&" if (indexS < 0) { s = 0; } else if (showteam) { // Wert von s setzt sich aus allen Zeichen hinter "s=" zusammen s = parseInt(url.substring(indexS + 2, url.length), 10); } else { // Wert von s setzt sich aus allen Zeichen zwischen "s=" und "&" zusammen s = parseInt(url.substring(indexS + 2, url.indexOf("&", indexS)), 10); } return s; } // Verarbeitet die URL der Seite und ermittelt die Nummer der gewuenschten Unterseite // saisons Alle "option"-Eintraege der Combo-Box function getSaisonFromComboBox(saisons) { var saison = 0; var i; for (i = 0; i < saisons.length; i++) { if (saisons[i].outerHTML.match(/selected/)) { saison = saisons[i].textContent; } } return saison; } // Setzt eine Option dauerhaft und laedt die Seite neu // name Name der Option als Speicherort // value Zu setzender Wert // return Gesetzter Wert function setOption(name, value) { GM_setValue(name, value); window.location.reload(); return value; } // Setzt das Stats-Format neu auf short/long function setLongStatsFormat(long) { longStats = setOption("longStats", long); } // Setzt das Stats-Format neu auf an/aus function setStatsShown(visible) { showStats = setOption("showStats", visible); } // Setzt das Kommentar-Link neu auf gekuerzt/lang function setKomLength(isShort) { shortKom = setOption("shortKom", isShort); } // Setzt die Trennung der Monate neu auf an/aus function setMonthsSeparated(on) { sepMonths = setOption("sepMonths", on); } // Zeigt den Eintrag im Menu einer Option // option Derzeitiger Wert der Option // menuOn Text zum Setzen im Menu // funOn Funktion zum Setzen // keyOn Hotkey zum Setzen im Menu // menuOff Text zum Ausschalten im Menu // funOff Funktion zum Ausschalten // keyOff Hotkey zum Ausschalten im Menu function registerMenuOption(opt, menuOn, funOn, keyOn, menuOff, funOff, keyOff) { var on = (opt ? "*" : ""); var off = (opt ? "" : "*"); console.log("OPTION " + on + menuOn + on + " / " + off + menuOff + off); if (opt) { GM_registerMenuCommand(menuOff, funOff, keyOff); } else { GM_registerMenuCommand(menuOn, funOn, keyOn); } } // Baut das User-Menue auf function registerMenu() { console.log("registerMenu()"); registerMenuOption(longStats, 'Lange Stats', setLongStats, 'L', 'Kurze Stats', setShortStats, 'K'); registerMenuOption(showStats, 'Stats ein', setShowStats, 'S', 'Stats aus', setShowNoStats, 'S'); registerMenuOption(shortKom, 'Kurze Texte', setShortKom, 'T', 'Lange Texte', setFullKom, 'T'); registerMenuOption(sepMonths, 'Monate trennen', setSepMonths, 'M', 'Keine Monate', setNoSepMonths, 'M'); GM_registerMenuCommand("Standard-Optionen", resetOptions, 'O'); } // Setzt die Optionen auf Werkseinstellungen function resetOptions() { GM_deleteValue("longStats"); GM_deleteValue("showStats"); GM_deleteValue("shortKom"); GM_deleteValue("sepMonths"); window.location.reload(); } // Setzt das Stats-Format neu auf short function setShortStats() { setLongStatsFormat(false); } // Setzt das Stats-Format neu auf long function setLongStats() { setLongStatsFormat(true); } // Setzt das Stats-Format neu auf aus function setShowNoStats() { setStatsShown(false); } // Setzt das Stats-Format neu auf an function setShowStats() { setStatsShown(true); } // Setzt das Kommentar-Link neu auf kurz function setShortKom() { setKomLength(true); } // Setzt das Kommentar-Link neu auf lang function setFullKom() { setKomLength(false); } // Setzt Trennungslinien zwischen die Monate function setSepMonths() { setMonthsSeparated(true); } // Entfernt die Trennungslinien zwischen den Monaten function setNoSepMonths() { setMonthsSeparated(false); } // Liefert eine auf 0 zurueckgesetzte Ergebnissumme // stats Enthaelt die summierten Stats function emptyStats(stats) { return [ 0, 0, 0, 0, 0, 0 ]; } // Liefert die Stats als String // stats Enthaelt die summierten Stats function getStats(stats) { return (longStats ? "[" + stats[0] + " " + stats[1] + " " + stats[2] + "] " : "/ ") + stats[3] + ":" + stats[4] + " " + ((stats[3] < stats[4]) ? "" : ((stats[3] > stats[4]) ? "+" : "")) + (stats[3] - stats[4]) + " (" + stats[5] + ")"; } // Summiert ein Ergebnis auf die Stats und liefert den neuen Text zurueck // stats Enthaelt die summierten Stats // ergebnis Spielergebnis [ Eigene Tore, Gegentore ] function addResultToStats(stats, ergebnis) { var ret = ""; var sgn; var gfor; var gagainst; if (ergebnis.length == 2) { gfor = parseInt(ergebnis[0], 10); gagainst = parseInt(ergebnis[1], 10); sgn = (gfor > gagainst) ? 0 : (gfor == gagainst) ? 1 : 2; stats[sgn]++; stats[3] += gfor; stats[4] += gagainst; stats[5] += (sgn > 0) ? 2 - sgn : 3; ret = getStats(stats); } return ret; } // Ermittelt das Spiel-Ergebnis aus einer Tabellenzelle, etwa "2 : 1" und liefert zwei Werte zurueck // cell Tabellenzelle mit Eintrag "2 : 1" // return { "2", "1" } im Beispiel function getErgebnisFromCell(cell) { var ret = cell.textContent.split(" : ", 2); return ret; } // Ermittelt die Spielart aus einer Tabellenzelle, etwa "Liga : Heim" und liefert zwei Werte zurueck // cell Tabellenzelle mit Eintrag "Liga : Heim" oder "Liga Heim" // return { "Liga", "Heim" } im Beispiel function getSpielArtFromCell(cell) { var ret = cell.textContent.split(" ", 2); if (ret.length > 1) { // Alle ":" und " " raus... ret[1] = ret[1].replace(":", "").replace(" ", ""); } return ret; } // Gibt die ID fuer den Namen eines Wettbewerbs zurueck // gameType Name des Wettbewerbs eines Spiels // return OS2-ID fuer den Spieltyp (1 bis 7) function getGameTypeID(gameType) { var ID = -1; switch (gameType) { case "Friendly": ID = 1; break; case "Liga": ID = 2; break; case "LP": ID = 3; break; case "OSEQ": ID = 4; break; case "OSE": ID = 5; break; case "OSCQ": ID = 6; break; case "OSC": ID = 7; break; default: ID = 0; break; } return ID; } // Gibt die ID fuer den Namen eines Wettbewerbs zurueck // cell Tabellenzelle mit Link auf den Spielberichts-Link // gameType Name des Wettbewerbs eines Spiels // label Anzuklickender Text des neuen Links // return HTML-Link auf die Preview-Seite fuer diesen Spielbericht function getBilanzLinkFromCell(cell, gameType, label) { var bericht = cell.textContent; var gameTypeID = getGameTypeID(gameType); var ret = ""; if (bericht != "Vorschau") { // Nur falls Link nicht bereits vorhanden if (gameTypeID > 1) { // nicht moeglich fuer "Friendly" bzw. "spielfrei" var searchFun = "javascript:os_bericht("; var paarung = cell.innerHTML.substr(cell.innerHTML.indexOf(searchFun) + searchFun.length); paarung = paarung.substr(0, paarung.indexOf(")")); paarung = paarung.substr(0, paarung.lastIndexOf(",")); paarung = paarung.substr(0, paarung.lastIndexOf(",")); ret = " <a href=\"javascript:spielpreview(" + paarung + "," + gameTypeID + ")\">" + label + "</a>"; } } return ret; } // Addiert einen Link auf die Bilanz hinter den Spielberichts-Link // cell Tabellenzelle mit Link auf den Spielberichts-Link // gameType Name des Wettbewerbs eines Spiels // label Anzuklickender Text des neuen Links function addBilanzLinkToCell(cell, gameType, label) { var bilanzLink = getBilanzLinkFromCell(cell, gameType, label); if (bilanzLink != "") { cell.innerHTML += bilanzLink; } } // Verarbeitet Ansicht "Saisonplan" // sepMonths Im Spielplan Striche zwischen den Monaten // shortKom Vorbericht(e) & Kommentar(e) nicht ausschreiben // showStats Ergebnisse aufaddieren? function procSpielplan(sepMonths, shortKom, showStats) { var pokalRunden = [ "1. Runde", "2. Runde", "3. Runde", "Achtelfinale", "Viertelfinale", "Halbfinale", "Finale" ]; var qualiRunden = [ "Quali 1", "Quali 2", "Quali 3" ]; var oscRunden = [ "Viertelfinale", "Halbfinale", "Finale" ]; var oseRunden = [ "Runde 1", "Runde 2", "Runde 3", "Runde 4", "Achtelfinale", "Viertelfinale", "Halbfinale", "Finale" ]; var hinrueck = [ " Hin", " R\374ck", "" ]; var table = document.getElementsByTagName("table")[2]; var saisons = document.getElementsByTagName("option"); var saison = getSaisonFromComboBox(saisons); var anzZATperMonth = (saison < 2) ? 7 : 6; // Erste Saison 7, danach 6... var rowOffsetUpper = 1; var rowOffsetLower = 0; var columnIndexArt = 1; var columnIndexErg = 3; var columnIndexBer = 4; var columnIndexZus = 5; var columnIndexKom = 6; var ligaSpieltag = 0; var pokalRunde = 0; var euroRunde = -1; var hinrueckspiel = 0; var ZATrueck = 0; var ZATkorr = 0; var ZAT = 1; var zusatz; var stats; var ligaStats; var euroStats; var spielart; var ergebnis; var gameType; var gruppenPhase; var i; var j; ligaStats = emptyStats(); for (i = rowOffsetUpper; i < table.rows.length - rowOffsetLower; i++, ZAT++) { if (shortKom) { var kommentar = table.rows[i].cells[columnIndexKom].innerHTML; kommentar = kommentar.replace("Vorbericht(e)", "V").replace("Kommentar(e)", "K").replace("&", "/").replace("&", "/"); table.rows[i].cells[columnIndexKom].innerHTML = kommentar; } if ((ZAT > 12) && (ZAT % 10 == 5)) { // passt fuer alle Saisons: 12, 20, 30, 40, 48, 58, 68 / 3, 15, 27, 39, 51, 63, 69 pokalRunde++; } if ((ZAT + ZATkorr) % 6 == 4) { if (ZAT < 63) { ZATrueck = ZAT + 2; euroRunde++; hinrueckspiel = 0; } else { euroRunde = 10; // Finale hinrueckspiel = 2; } } if (ZAT == ZATrueck) { hinrueckspiel = 1; // 5, 7; 11, 13; (17, 19) / 23, 25; 29, 31; 35, 37; 41, 43; 47, 49; 53, 55; 59, 61; 69 if (saison < 3) { // 4, 6; 10, 14*; (16, 22*) / 24**, 26; 34, 36; 38*, 42; 44*, 50; 52, 54; 56*, 60; 62*, 66; 70 if (ZAT == 22) { ZATkorr = 4; } else if ((ZAT - 6) % 20 > 6) { ZATkorr = 2; } else { ZATkorr = 0; } if ((ZAT == 22) || (ZAT == 30)) { euroRunde--; // Frueher: 3. Quali-Rueckspiel erst knapp vor 1. Hauptrunde } } } stats = ""; spielart = getSpielArtFromCell(table.rows[i].cells[columnIndexArt]); ergebnis = getErgebnisFromCell(table.rows[i].cells[columnIndexErg]); table.rows[i].cells[columnIndexZus].className = table.rows[i].cells[columnIndexArt].className; if (table.rows[i].cells[columnIndexZus].textContent == "") { zusatz = ""; gameType = spielart[0]; addBilanzLinkToCell(table.rows[i].cells[columnIndexBer], gameType, shortKom ? "B" : "Bilanz"); if (gameType == "Liga") { if (ZAT < 70) { stats = addResultToStats(ligaStats, ergebnis); zusatz = ++ligaSpieltag + ". Spieltag"; } else { zusatz = "Relegation"; } } else if (gameType == "LP") { zusatz = pokalRunden[pokalRunde]; } else if ((gameType == "OSCQ") || (gameType == "OSEQ")) { if (hinrueckspiel != 1) { euroStats = emptyStats(); } stats = addResultToStats(euroStats, ergebnis); zusatz = qualiRunden[euroRunde] + hinrueck[hinrueckspiel]; } else if (gameType == "OSC") { if ((hinrueckspiel != 1) && ((euroRunde >= 8) || ((euroRunde - 2) % 3 == 0))) { euroStats = emptyStats(); } stats = addResultToStats(euroStats, ergebnis); if (euroRunde < 8) { gruppenPhase = (euroRunde < 5) ? "HR-Grp. " : "ZR-Grp. "; zusatz = gruppenPhase + "Spiel " + (((euroRunde - 2) % 3) * 2 + 1 + hinrueckspiel); } else { zusatz = oscRunden[euroRunde - 8] + hinrueck[hinrueckspiel]; } } else if (gameType == "OSE") { if (hinrueckspiel != 1) { euroStats = emptyStats(); } stats = addResultToStats(euroStats, ergebnis); zusatz = oseRunden[euroRunde - 3] + hinrueck[hinrueckspiel]; } else if (gameType == "Friendly") { zusatz = ""; // irgendwie besser lesbar! } if (showStats && (stats != "")) { zusatz = zusatz + " " + stats; } table.rows[i].cells[columnIndexZus].textContent = zusatz; } if (sepMonths && (ZAT % anzZATperMonth == 0) && (i < table.rows.length - rowOffsetLower - 1)) { for (j = 0; j < table.rows[i].cells.length; j++) { table.rows[i].cells[j].style.borderBottom = borderString; } } } } // URL-Legende: // s=0: Teamuebersicht // s=1: Vertragsdaten // s=2: Einzelwerte // s=3: Statistik Saison // s=4: Statistik Gesamt // s=5: Teaminfo // s=6: Saisonplan // s=7: Vereinshistorie // s=8: Transferhistorie // s=9: Leihhistorie // Verzweige in unterschiedliche Verarbeitungen je nach Wert von s: switch (getPageIdFromURL(window.location.href)) { case 6: procSpielplan(sepMonths, shortKom, showStats); break; } // *** EOF ***