Bearbeiten von „OS2.jugend“
Zur Navigation springen
Zur Suche springen
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 1: | Zeile 1: | ||
[[Kategorie:Greasemonkey]] | [[Kategorie:Greasemonkey]] | ||
{| style="background-color:white; font-size:11px; float: right; margin:3px 3px 3px 10px; border:1px solid #999; border-color: #9C1818; border-collapse:collapse;" width=500 cellpadding=3 cellspacing=0 | {| style="background-color:white; font-size:11px; float: right; margin:3px 3px 3px 10px; border:1px solid #999; border-color: #9C1818; border-collapse:collapse;" width=500 cellpadding=3 cellspacing=0 | ||
| colspan="2" style="padding:0.3em; background-color:#9C1818; font-size: 18px; color:#FFFFFF" align=center| '''OS2. | | colspan="2" style="padding:0.3em; background-color:#9C1818; font-size: 18px; color:#FFFFFF" align=center| '''OS2.jugendV4''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Dateiname''' | | '''Dateiname''' | ||
| ''' | | '''os2.jugendV4.user.js''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Version''' | | '''Version''' | ||
| '''0. | | '''0.41''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Autor''' | | '''Autor''' | ||
Zeile 27: | Zeile 26: | ||
| '''ju.php?page=2''' | | '''ju.php?page=2''' | ||
| '''Jugendteam-Spielereinzelwerte''' | | '''Jugendteam-Spielereinzelwerte''' | ||
|} | |} | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Funktionalität''' | | '''Funktionalität''' | ||
| '''Trennstriche zwischen den Jahrgängen'''<br> '''Aktueller Skill, Opti und MW'''<br> '''Prognose von Opti und MW für Ende Jahrgang 18'''<br> '''Optionen und Menu'''<br> '''Neue Marktwertformel'''<br> '''Automatische Ermittlung des ZATs'''<br> '''Hidden-Optionen und Datenspeicher'''<br> '''Geburtstage und dezimales Alter''' | | '''Trennstriche zwischen den Jahrgängen'''<br> '''Aktueller Skill, Opti und MW'''<br> '''Prognose von Opti und MW für Ende Jahrgang 18'''<br> '''Optionen und Menu'''<br> '''Neue Marktwertformel'''<br> '''Automatische Ermittlung des ZATs'''<br> '''Hidden-Optionen und Datenspeicher'''<br> '''Geburtstage und dezimales Alter''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Letzte Änderung''' | | '''Letzte Änderung''' | ||
| '''{{REVISIONDAY}}.{{REVISIONMONTH}}.{{REVISIONYEAR}}''' | | '''{{REVISIONDAY}}.{{REVISIONMONTH}}.{{REVISIONYEAR}}''' | ||
|} | |} | ||
<pre> | <pre> | ||
// ==UserScript== | // ==UserScript== | ||
// @name | // @name OS2.jugendV4 | ||
// @namespace | // @namespace http://os.ongapo.com/ | ||
// @version | // @version 0.41 | ||
// @copyright | // @copyright 2013+ | ||
// @author | // @author Andreas Eckes (Strindheim BK) | ||
// @description | // @author Sven Loges (SLC) | ||
// @include | // @description Jugendteam-Script fuer Online Soccer 2.0 | ||
// @include | // @include http://os.ongapo.com/haupt.php | ||
// @ | // @include http://os.ongapo.com/haupt.php?changetosecond=* | ||
// @ | // @include http://os.ongapo.com/ju.php | ||
// @ | // @include http://os.ongapo.com/ju.php?page=* | ||
// @ | // @include http://www.os.ongapo.com/haupt.php | ||
// @ | // @include http://www.os.ongapo.com/haupt.php?changetosecond=* | ||
// @ | // @include http://www.os.ongapo.com/ju.php | ||
// @grant | // @include http://www.os.ongapo.com/ju.php?page=* | ||
// @grant | // @include http://online-soccer.eu/haupt.php | ||
// @grant | // @include http://online-soccer.eu/haupt.php?changetosecond=* | ||
// @grant | // @include http://online-soccer.eu/ju.php | ||
// @include http://online-soccer.eu/ju.php?page=* | |||
// @include http://www.online-soccer.eu/haupt.php | |||
// @include http://www.online-soccer.eu/haupt.php?changetosecond=* | |||
// @include http://www.online-soccer.eu/ju.php | |||
// @include http://www.online-soccer.eu/ju.php?page=* | |||
// @grant GM_getValue | |||
// @grant GM_setValue | |||
// @grant GM_deleteValue | |||
// @grant GM_registerMenuCommand | |||
// ==/UserScript== | // ==/UserScript== | ||
// ECMAScript 6: | // ECMAScript 6: Erlaubt 'const', 'let', ... | ||
/* jshint esnext: true */ | /* jshint esnext: true */ | ||
/* jshint moz: true */ | /* jshint moz: true */ | ||
// ==================== Konfigurations-Abschnitt fuer Optionen ==================== | // ==================== Konfigurations-Abschnitt fuer Optionen ==================== | ||
// Options-Typen | // Options-Typen | ||
Zeile 82: | Zeile 78: | ||
'SD' : "simple data", | 'SD' : "simple data", | ||
'SI' : "simple option" | 'SI' : "simple option" | ||
}; | }; | ||
// Moegliche Optionen (hier die Standardwerte editieren oder ueber das Benutzermenu setzen): | // Moegliche Optionen (hier die Standardwerte editieren oder ueber das Benutzermenu setzen): | ||
const __OPTCONFIG = { | const __OPTCONFIG = { | ||
'zeigeGeb' : { // Spaltenauswahl fuer Geburtstage (true = anzeigen, false = nicht anzeigen) | 'zeigeGeb' : { // Spaltenauswahl fuer Geburtstage (true = anzeigen, false = nicht anzeigen) | ||
'Name' : "showBirthday", | 'Name' : "showBirthday", | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
'Default' : false, | 'Default' : false, | ||
'Action' : | 'Action' : switchShowBirthday, | ||
'Label' : " | 'Label' : "Geb. ein", | ||
'Hotkey' : 'G', | 'Hotkey' : 'G', | ||
'AltLabel' : " | 'AltLabel' : "Geb. aus", | ||
'AltHotkey' : 'G' | 'AltHotkey' : 'G' | ||
}, | }, | ||
'zeigeAlter' : { | 'zeigeAlter' : { // Spaltenauswahl fuer dezimales Alter (true = anzeigen, false = nicht anzeigen) | ||
'Name' : "showAge", | 'Name' : "showAge", | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
'Default' : true, | 'Default' : true, | ||
'Action' : | 'Action' : switchShowAge, | ||
'Label' : "Alter ein", | 'Label' : "Alter ein", | ||
'Hotkey' : 'A', | 'Hotkey' : 'A', | ||
'AltLabel' : "Alter aus", | 'AltLabel' : "Alter aus", | ||
'AltHotkey' : 'A' | 'AltHotkey' : 'A' | ||
}, | }, | ||
' | 'zeigePosition' : { // Position anzeigen | ||
'Name' : "showPos", | |||
'Name' : " | |||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
'Default' : false, | 'Default' : false, | ||
'Action' : | 'Action' : switchShowPos, | ||
'Label' : " | 'Label' : "Position ein", | ||
'Hotkey' : ' | 'Hotkey' : 'P', | ||
'AltLabel' : " | 'AltLabel' : "Position aus", | ||
'AltHotkey' : ' | 'AltHotkey' : 'P' | ||
}, | }, | ||
'zeigeSkill' : { // Spaltenauswahl fuer die aktuellen Werte (true = anzeigen, false = nicht anzeigen) | 'zeigeSkill' : { // Spaltenauswahl fuer die aktuellen Werte (true = anzeigen, false = nicht anzeigen) | ||
Zeile 405: | Zeile 116: | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
'Default' : true, | 'Default' : true, | ||
'Action' : | 'Action' : switchShowSkill, | ||
'Label' : "Skill ein", | 'Label' : "Skill ein", | ||
'Hotkey' : 'S', | 'Hotkey' : 'S', | ||
'AltLabel' : "Skill aus", | 'AltLabel' : "Skill aus", | ||
'AltHotkey' : 'S' | 'AltHotkey' : 'S' | ||
}, | }, | ||
'anzahlOpti' : { // Gibt die Anzahl der Opti-Spalten an / 1: nur bester Opti, 2: die beiden besten, ..., 6: Alle inklusive TOR | 'anzahlOpti' : { // Gibt die Anzahl der Opti-Spalten an / 1: nur bester Opti, 2: die beiden besten, ..., 6: Alle inklusive TOR | ||
Zeile 427: | Zeile 126: | ||
'Name' : "anzOpti", | 'Name' : "anzOpti", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 1, 2, 3, 4, 5, 6, 0 ], | |||
'Action' : setNextAnzOpti, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "Opti: beste $", | 'Label' : "Opti: beste $", | ||
'Hotkey' : 'O' | 'Hotkey' : 'O' | ||
}, | }, | ||
'anzahlMW' : { // Gibt die Anzahl der MW-Spalten an / 1: nur hoechsten MW, 2: die beiden hoechsten, ..., 6: Alle inklusive TOR | 'anzahlMW' : { // Gibt die Anzahl der MW-Spalten an / 1: nur hoechsten MW, 2: die beiden hoechsten, ..., 6: Alle inklusive TOR | ||
Zeile 440: | Zeile 135: | ||
'Name' : "anzMW", | 'Name' : "anzMW", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 1, 2, 3, 4, 5, 6, 0 ], | |||
'Action' : setNextAnzMW, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "MW: beste $", | 'Label' : "MW: beste $", | ||
'Hotkey' : 'M' | 'Hotkey' : 'M' | ||
}, | }, | ||
'zeigeSkillEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18 (true = anzeigen, false = nicht anzeigen) | 'zeigeSkillEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18 (true = anzeigen, false = nicht anzeigen) | ||
Zeile 497: | Zeile 144: | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
'Default' : true, | 'Default' : true, | ||
'Action' : | 'Action' : switchShowSkillEnde, | ||
'Label' : "Skill Ende ein", | 'Label' : "Skill Ende ein", | ||
'Hotkey' : 'i', | 'Hotkey' : 'i', | ||
'AltLabel' : "Skill Ende aus", | 'AltLabel' : "Skill Ende aus", | ||
'AltHotkey' : 'i' | 'AltHotkey' : 'i' | ||
}, | }, | ||
'anzahlOptiEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18: | 'anzahlOptiEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18: | ||
Zeile 509: | Zeile 155: | ||
'Name' : "anzOptiEnde", | 'Name' : "anzOptiEnde", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 1, 2, 3, 4, 5, 6, 0 ], | |||
'Action' : setNextAnzOptiEnde, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "Opti Ende: beste $", | 'Label' : "Opti Ende: beste $", | ||
'Hotkey' : 't' | 'Hotkey' : 't' | ||
}, | }, | ||
'anzahlMWEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18: | 'anzahlMWEnde' : { // Spaltenauswahl fuer die Werte mit Ende 18: | ||
Zeile 523: | Zeile 165: | ||
'Name' : "anzMWEnde", | 'Name' : "anzMWEnde", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 1, 2, 3, 4, 5, 6, 0 ], | |||
'Action' : setNextAnzMWEnde, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "MW Ende: beste $", | 'Label' : "MW Ende: beste $", | ||
'Hotkey' : 'W' | 'Hotkey' : 'W' | ||
}, | }, | ||
'kennzeichenEnde' : { | 'kennzeichenEnde' : { // Markierung fuer Ende 18 | ||
'Name' : "charEnde", | 'Name' : "charEnde", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ " \u03A9", " 18" ], | 'Choice' : [ " \u03A9", " 18" ], | ||
'Action' : | 'Action' : setNextCharEnde, | ||
'Label' : "Ende: $", | 'Label' : "Ende: $", | ||
'Hotkey' : 'E' | 'Hotkey' : 'E' | ||
}, | }, | ||
'sepStyle' : { // Stil der Trennlinie | 'sepStyle' : { // Stil der Trennlinie | ||
'Name' : "sepStyle", | 'Name' : "sepStyle", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ "solid", "hidden", "dotted", "dashed", "double", "groove", "ridge", | |||
'Choice' : [ | "inset", "outset", "none" ], | ||
'Action' : setNextSepStyle, | |||
'Action' : | |||
'Label' : "Stil: $", | 'Label' : "Stil: $", | ||
'Hotkey' : 'l' | 'Hotkey' : 'l' | ||
}, | }, | ||
'sepColor' : { // Farbe der Trennlinie | 'sepColor' : { // Farbe der Trennlinie | ||
'Name' : "sepColor", | 'Name' : "sepColor", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ "white", "yellow", "black", "blue", "cyan", "gold", "grey", "green", | |||
"lime", "magenta", "maroon", "navy", "olive", "orange", "purple", | |||
'Choice' : [ | "red", "teal", "transparent" ], | ||
'Action' : setNextSepColor, | |||
'Action' : | |||
'Label' : "Farbe: $", | 'Label' : "Farbe: $", | ||
'Hotkey' : 'F' | 'Hotkey' : 'F' | ||
}, | }, | ||
'sepWidth' : { // Dicke der Trennlinie | 'sepWidth' : { // Dicke der Trennlinie | ||
'Name' : "sepWidth", | 'Name' : "sepWidth", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ "thin", "medium", "thick" ], | |||
'Action' : setNextSepWidth, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "Dicke: $", | 'Label' : "Dicke: $", | ||
'Hotkey' : 'D' | 'Hotkey' : 'D' | ||
}, | }, | ||
'saison' : { // Laufende Saison | 'saison' : { // Laufende Saison | ||
'Name' : "saison", | 'Name' : "saison", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ], | |||
'Action' : setNextSaison, | |||
'Choice' : [ | |||
'Action' : | |||
'Label' : "Saison: $", | 'Label' : "Saison: $", | ||
'Hotkey' : 'a' | 'Hotkey' : 'a' | ||
}, | }, | ||
'aktuellerZat' : { // Laufender ZAT | 'aktuellerZat' : { // Laufender ZAT | ||
'Name' : "currZAT", | 'Name' : "currZAT", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'Choice' : [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, | 'Choice' : [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, | ||
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, | 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, | ||
Zeile 603: | Zeile 221: | ||
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, | ||
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, | 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, | ||
70, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ], | |||
'Action' : setNextZAT, | |||
'Action' : | |||
'Label' : "ZAT: $", | 'Label' : "ZAT: $", | ||
'Hotkey' : 'Z' | 'Hotkey' : 'Z' | ||
}, | }, | ||
'birthdays' : { // Datenspeicher fuer Geburtstage der Jugendspieler | 'birthdays' : { // Datenspeicher fuer Geburtstage der Jugendspieler | ||
'Name' : "birthdays", | 'Name' : "birthdays", | ||
'Type' : __OPTTYPES.SD, | 'Type' : __OPTTYPES.SD, | ||
'Default' : [], | 'Default' : [], | ||
' | 'Action' : undefined, | ||
'Hidden' : true, | 'Hidden' : true, | ||
'Serial' : true | 'Serial' : true | ||
}, | }, | ||
' | 'team' : { // Datenspeicher fuer Daten des Erst- bzw. Zweitteams | ||
'Name' : "team", | |||
'Name' : " | |||
'Type' : __OPTTYPES.SD, | 'Type' : __OPTTYPES.SD, | ||
'Default' : { 'Team' : undefined, 'Liga' : undefined, 'Land' : undefined }, | |||
'Action' : undefined, | |||
'Hidden' : true, | 'Hidden' : true, | ||
'Serial' : true | 'Serial' : true | ||
}, | }, | ||
'reset' : { // Optionen auf die "Werkseinstellungen" zuruecksetzen | 'reset' : { // Optionen auf die "Werkseinstellungen" zuruecksetzen | ||
'Name' : "reset", | 'Name' : "reset", | ||
'Type' : __OPTTYPES.SI, | 'Type' : __OPTTYPES.SI, | ||
'Action' : | 'Action' : resetOptions, | ||
'Label' : "Standard-Optionen", | 'Label' : "Standard-Optionen", | ||
'Hotkey' : 'r', | 'Hotkey' : 'r', | ||
'AltLabel' : "" | |||
'AltLabel' | |||
} | } | ||
}; | }; | ||
Zeile 905: | Zeile 254: | ||
// ==================== Invarianter Abschnitt fuer Optionen ==================== | // ==================== Invarianter Abschnitt fuer Optionen ==================== | ||
// | // Initialisiert die gesetzten Optionen | ||
// optConfig: Konfiguration der Optionen | |||
// optSet: Platz für die gesetzten Optionen | |||
// return Gefuelltes Objekt mit den gesetzten Optionen | |||
function initOptions(optConfig, optSet = undefined) { | |||
var value; | |||
if (optSet === undefined) { | |||
optSet = { }; | |||
if ( | |||
} | } | ||
for (let opt in optConfig) { | |||
const __CONFIG = optConfig[opt]; | |||
switch (__CONFIG.Type) { | |||
case __OPTTYPES.MC : value = __CONFIG.Choice[0]; | |||
break; | |||
case __OPTTYPES.SW : value = __CONFIG.Default; | |||
break; | |||
case __OPTTYPES.TF : value = __CONFIG.Default; | |||
if (__CONFIG.AltAction === undefined) { | |||
__CONFIG.AltAction = __CONFIG.Action; | |||
} | |||
break; | |||
case __OPTTYPES.SD : value = __CONFIG.Default; | |||
__CONFIG.Serial = true; | |||
break; | |||
case __OPTTYPES.SI : value = undefined; | |||
break; | |||
default : break; | |||
} | } | ||
if ( | if (__CONFIG.Serial) { | ||
__CONFIG.Hidden = true; | |||
} | } | ||
optSet[opt] = { | |||
'Config' : __CONFIG, | |||
'Value' : value | |||
}; | }; | ||
} | } | ||
return | return optSet; | ||
} | } | ||
// | // Setzt eine Option dauerhaft und laedt die Seite neu | ||
// | // name: Name der Option als Speicherort | ||
// value: | // value: Zu setzender Wert | ||
// reload: Seite mit neuem Wert neu laden | |||
// return Gesetzter Wert | |||
function setOption(name, value, reload = true, serial = false) { | |||
if (serial) { | |||
serialize(name, value); | |||
// | |||
// return | |||
function | |||
if ( | |||
} else { | } else { | ||
GM_setValue(name, value); | |||
} | } | ||
GM_setValue(name, value); | |||
if (reload) { | if (reload) { | ||
window.location.reload(); | window.location.reload(); | ||
} | } | ||
return value; | return value; | ||
Zeile 2.057: | Zeile 320: | ||
// arr: Array-Liste mit den moeglichen Optionen | // arr: Array-Liste mit den moeglichen Optionen | ||
// name: Name der Option als Speicherort | // name: Name der Option als Speicherort | ||
// value: | // value: Zu setzender Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
// return Gesetzter Wert | |||
function setNextOption(arr, name, value, reload = true, serial = false) { | |||
const __POS = arr.indexOf(value) + 1; | |||
// return | |||
function | |||
const | |||
return ( | return setOption(name, arr[(__POS < arr.length) ? __POS : 0], reload, serial); | ||
} | } | ||
// | // Setzt eine Option auf einen vorgegebenen Wert | ||
// | // Fuer kontrollierte Auswahl des Values siehe setNextOpt() | ||
// | // opt: Config und vorheriger Value der Option | ||
// value: (Bei allen Typen) zu setzender Wert | |||
// | // reload: Seite mit neuem Wert neu laden | ||
// | function setOpt(opt, value, reload = false) { | ||
opt.Value = setOption(opt.Config.Name, value, reload, opt.Config.Serial); | |||
} | } | ||
// | // Setzt die naechste moegliche Option | ||
// opt: Config und Value der Option | // opt: Config und Value der Option | ||
// | // value: Bei __OPTTYPES.TF zu setzender Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
function setNextOpt(opt, value = undefined, reload = true) { | |||
function | const __CONFIG = opt.Config; | ||
const __CONFIG = | |||
switch (__CONFIG.Type) { | |||
case __OPTTYPES.MC : opt.Value = setNextOption(__CONFIG.Choice, __CONFIG.Name, opt.Value, reload, __CONFIG.Serial); | |||
break; | |||
case __OPTTYPES.SW : opt.Value = setOption(__CONFIG.Name, ! opt.Value, reload, __CONFIG.Serial); | |||
break; | |||
case __OPTTYPES.TF : opt.Value = setOption(__CONFIG.Name, (value !== undefined) ? value : ! opt.Value, reload, __CONFIG.Serial); | |||
break; | |||
case __OPTTYPES.SD : opt.Value = setOption(__CONFIG.Name, (value !== undefined) ? value : opt.Value, reload, __CONFIG.Serial); | |||
break; | |||
case __OPTTYPES.SI : break; | |||
default : break; | |||
} | } | ||
} | } | ||
// Zeigt den Eintrag im Menu einer Option | // Zeigt den Eintrag im Menu einer Option | ||
// | // opt: Derzeitiger Wert der Option | ||
// menuOn: Text zum Setzen im Menu | // menuOn: Text zum Setzen im Menu | ||
// funOn: Funktion zum Setzen | // funOn: Funktion zum Setzen | ||
Zeile 2.537: | Zeile 367: | ||
// funOff: Funktion zum Ausschalten | // funOff: Funktion zum Ausschalten | ||
// keyOff: Hotkey zum Ausschalten im Menu | // keyOff: Hotkey zum Ausschalten im Menu | ||
function registerMenuOption(opt, menuOn, funOn, keyOn, menuOff, funOff, keyOff) { | |||
function registerMenuOption( | const __ON = (opt ? '*' : ""); | ||
const __ON = ( | const __OFF = (opt ? "" : '*'); | ||
const __OFF = ( | |||
if ( | console.log("OPTION " + __ON + menuOn + __ON + " / " + __OFF + menuOff + __OFF); | ||
if (opt) { | |||
GM_registerMenuCommand(menuOff, funOff, keyOff); | |||
} else { | } else { | ||
GM_registerMenuCommand(menuOn, funOn, keyOn); | |||
} | } | ||
} | } | ||
// Zeigt den Eintrag im Menu einer Option mit Wahl des naechsten Wertes | // Zeigt den Eintrag im Menu einer Option mit Wahl des naechsten Wertes | ||
// | // opt: Derzeitiger Wert der Option | ||
// arr: Array-Liste mit den moeglichen Optionen | // arr: Array-Liste mit den moeglichen Optionen | ||
// menu: Text zum Setzen im Menu ($ wird durch gesetzten Wert ersetzt) | // menu: Text zum Setzen im Menu ($ wird durch gesetzten Wert ersetzt) | ||
// fun: Funktion zum Setzen des naechsten Wertes | // fun: Funktion zum Setzen des naechsten Wertes | ||
// key: Hotkey zum Setzen des naechsten Wertes im Menu | // key: Hotkey zum Setzen des naechsten Wertes im Menu | ||
function registerNextMenuOption(opt, arr, menu, fun, key) { | |||
function registerNextMenuOption( | const __MENU = menu.replace('$', opt); | ||
const __MENU = | |||
let options = "OPTION " + __MENU; | let options = "OPTION " + __MENU; | ||
for (let value of arr) { | for (let value of arr) { | ||
if (value === | if (value === opt) { | ||
options += " / *" + value + '*'; | options += " / *" + value + '*'; | ||
} else { | } else { | ||
Zeile 2.569: | Zeile 396: | ||
} | } | ||
} | } | ||
console.log(options); | |||
GM_registerMenuCommand(__MENU, fun, key); | |||
} | } | ||
// Zeigt den Eintrag im Menu einer Option, falls nicht hidden | // Zeigt den Eintrag im Menu einer Option, falls nicht hidden | ||
// | // opt: Derzeitiger Wert der Option | ||
// menu: Text zum Setzen im Menu ($ wird durch gesetzten Wert ersetzt) | // menu: Text zum Setzen im Menu ($ wird durch gesetzten Wert ersetzt) | ||
// fun: Funktion zum Setzen des naechsten Wertes | // fun: Funktion zum Setzen des naechsten Wertes | ||
// key: Hotkey zum Setzen des naechsten Wertes im Menu | // key: Hotkey zum Setzen des naechsten Wertes im Menu | ||
// hidden: Angabe, ob Menupunkt nicht sichtbar sein soll ( | // hidden: Angabe, ob Menupunkt nicht sichtbar sein soll (default: sichtbar) | ||
// serial: Serialization fuer komplexe Daten | // serial: Serialization fuer komplexe Daten | ||
function registerDataOption(opt, menu, fun, key, hidden = false, serial = true) { | |||
function registerDataOption( | const __VALUE = ((serial && (opt !== undefined)) ? uneval(opt) : opt); | ||
const __VALUE = ((serial && ( | const __MENU = ((menu !== undefined) ? menu.replace('$', __VALUE) : ""); | ||
const __MENU = | |||
const __OPTIONS = (hidden ? "HIDDEN " : "") + "OPTION " + __MENU + | const __OPTIONS = (hidden ? "HIDDEN " : "") + "OPTION " + __MENU + | ||
((__VALUE !== undefined) ? " / *" + __VALUE + '*' : ""); | |||
console.log(__OPTIONS); | |||
if (! hidden) { | |||
if (hidden) { | GM_registerMenuCommand(__MENU, fun, key); | ||
} | } | ||
} | } | ||
Zeile 2.599: | Zeile 421: | ||
// Zeigt den Eintrag im Menu einer Option | // Zeigt den Eintrag im Menu einer Option | ||
// opt: Config und Value der Option | // opt: Config und Value der Option | ||
function registerOption(opt) { | function registerOption(opt) { | ||
const __CONFIG = | const __CONFIG = opt.Config; | ||
if (! __CONFIG. | if (! __CONFIG.Hidden) { | ||
switch (__CONFIG.Type) { | switch (__CONFIG.Type) { | ||
case __OPTTYPES.MC : | case __OPTTYPES.MC : registerNextMenuOption(opt.Value, __CONFIG.Choice, | ||
case __OPTTYPES.SW : | __CONFIG.Label, __CONFIG.Action, __CONFIG.Hotkey); | ||
break; | |||
case __OPTTYPES.TF : | case __OPTTYPES.SW : registerMenuOption(opt.Value, __CONFIG.Label, __CONFIG.Action, __CONFIG.Hotkey, | ||
__CONFIG.AltLabel, __CONFIG.Action, __CONFIG.AltHotkey); | |||
case __OPTTYPES.SD : | break; | ||
case __OPTTYPES.SI : | case __OPTTYPES.TF : registerMenuOption(opt.Value, __CONFIG.Label, __CONFIG.Action, __CONFIG.Hotkey, | ||
default : | __CONFIG.AltLabel, __CONFIG.AltAction, __CONFIG.AltHotkey); | ||
break; | |||
case __OPTTYPES.SD : registerDataOption(opt.Value, __CONFIG.Label, __CONFIG.Action, __CONFIG.Hotkey, | |||
__CONFIG.Hidden, __CONFIG.Serial); | |||
break; | |||
case __OPTTYPES.SI : registerDataOption(opt.Value, __CONFIG.Label, __CONFIG.Action, __CONFIG.Hotkey, | |||
__CONFIG.Hidden, __CONFIG.Serial); | |||
break; | |||
default : break; | |||
} | } | ||
} else { | } else { | ||
// Nur Anzeige im Log... | // Nur Anzeige im Log... | ||
registerDataOption(opt.Value, __CONFIG.Name, __CONFIG.Action, __CONFIG.Hotkey, __CONFIG.Hidden, __CONFIG.Serial); | |||
} | } | ||
} | } | ||
// | // Baut das Benutzermenu auf | ||
// optSet: Gesetzte Optionen | |||
function buildMenu(optSet) { | |||
console.log("buildMenu()"); | |||
for (let opt in optSet) { | |||
registerOption(optSet[opt]); | |||
} | } | ||
} | } | ||
// | // Laedt die permament (ueber Menu) gesetzten Optionen | ||
// optSet: Gesetzte Optionen | |||
function loadOptions(optSet) { | |||
// optSet: | for (let opt in optSet) { | ||
const __OPT = optSet[opt]; | |||
function | |||
let | |||
if (__OPT.Config.Serial) { | |||
__OPT.Value = deserialize(__OPT.Config.Name, __OPT.Value); | |||
} else { | |||
__OPT.Value = GM_getValue(__OPT.Config.Name, __OPT.Value); | |||
} | } | ||
} | } | ||
} | } | ||
// | // ==================== Spezialisierter Abschnitt fuer Optionen ==================== | ||
// Gesetzte Optionen (wird von initOptions() angelegt und von loadOptions() gefuellt): | |||
const __OPTSET = { }; | |||
// Setzt die Optionen auf die "Werkseinstellungen" des Skripts | |||
function resetOptions() { | |||
const __CURRZAT = __OPTSET.aktuellerZat.Value; // Aktuellen ZAT beibehalten (sichern) | |||
for (let opt in __OPTSET) { | |||
GM_deleteValue(__OPTSET[opt].Config.Name); | |||
} | } | ||
setOpt(__OPTSET.aktuellerZat, __CURRZAT, false); // Aktuellen ZAT wiederherstellen | |||
window.location.reload(); | |||
} | } | ||
// | // Teamparameter fuer getrennte Speicherung der Optionen fuer Erst- und Zweitteam... | ||
const __MYTEAM = { 'Team' : undefined, 'Liga' : undefined, 'Land' : undefined }; | |||
// Behandelt die Optionen und laedt das Benutzermenu | |||
// optConfig: Konfiguration der Optionen | // optConfig: Konfiguration der Optionen | ||
// optSet: Platz | // optSet: Platz für die gesetzten Optionen | ||
// optParams: Eventuell notwendige Parameter zur Initialisierung | // optParams: Eventuell notwendige Parameter zur Initialisierung | ||
// ' | // 'teamParams': Getrennte "ligaSize"-Option wird genutzt, hier: __MYTEAM mit 'Land' des Erst- bzw. Zweitteams | ||
// 'menuAnchor': Startpunkt fuer das Optionsmenu auf der Seite | // 'menuAnchor': Startpunkt fuer das Optionsmenu auf der Seite | ||
// return Gefuelltes Objekt mit den gesetzten Optionen | |||
function buildOptions(optConfig, optSet = undefined, optParams = { 'hideMenu' : false }) { | |||
const __TEAMPARAMS = optParams.teamParams; // Ermittelte Parameter | |||
let saveTeam = false; | |||
// return | |||
function | |||
optSet = initOptions(optConfig, optSet); | |||
if (__TEAMPARAMS !== undefined) { | |||
__MYTEAM.Team = __TEAMPARAMS.Team; | |||
__MYTEAM.Liga = __TEAMPARAMS.Liga; | |||
__MYTEAM.Land = __TEAMPARAMS.Land; | |||
console.log("Ermittelt: " + uneval(__MYTEAM)); | |||
saveTeam = true; | |||
} else { | |||
const __TEAM = deserialize(optSet.team.Config.Name); // Gespeicherte Parameter | |||
if ((__TEAM !== undefined) && (__TEAM.Land !== undefined)) { | |||
__MYTEAM.Team = __TEAM.Team; | |||
__MYTEAM.Liga = __TEAM.Liga; | |||
__MYTEAM.Land = __TEAM.Land; | |||
console.log("Gespeichert: " + uneval(__MYTEAM)); | |||
} | |||
// | |||
} else { | } else { | ||
console.log("Unbekannt: " + uneval(__MYTEAM)); | |||
} | } | ||
} | |||
if (__MYTEAM.Land !== undefined) { | |||
// Prefix fuer die Option "birthdays" | |||
optSet.birthdays.Config.Name = __MYTEAM.Land + optSet.birthdays.Config.Name; | |||
} | } | ||
loadOptions(optSet); | |||
if (saveTeam) { | |||
// ... und abspeichern... | |||
setOpt(optSet.team, __MYTEAM, false); | |||
} | } | ||
if (! optParams.hideMenu) { | |||
buildMenu(optSet); | |||
} | } | ||
Zeile 3.098: | Zeile 544: | ||
} | } | ||
// | // ==================== Abschnitt mit Reaktionen auf Optionen ==================== | ||
// Wechselt die Anzeige des Geburtstags zwischen an und aus | |||
function switchShowBirthday() { | |||
setNextOpt(__OPTSET.zeigeGeb); | |||
} | } | ||
// | // Wechselt die Anzeige des dezimalen Alters zwischen an und aus | ||
function switchShowAge() { | |||
setNextOpt(__OPTSET.zeigeAlter); | |||
function | |||
} | } | ||
// | // Wechselt die Anzeige der Position zwischen an und aus | ||
function switchShowPos() { | |||
setNextOpt(__OPTSET.zeigePosition); | |||
function | |||
} | } | ||
// | // Wechselt die Anzeige des Skills zwischen an und aus | ||
function switchShowSkill() { | |||
setNextOpt(__OPTSET.zeigeSkill); | |||
} | } | ||
// | // Setzt die naechste moegliche Anzahl Opti-Spalten als Option | ||
function setNextAnzOpti() { | |||
setNextOpt(__OPTSET.anzahlOpti); | |||
} | } | ||
// | // Setzt die naechste moegliche Anzahl MW-Spalten als Option | ||
function setNextAnzMW() { | |||
setNextOpt(__OPTSET.anzahlMW); | |||
function | |||
} | } | ||
// | // Wechselt die Anzeige des Skills Ende 18 zwischen an und aus | ||
function switchShowSkillEnde() { | |||
setNextOpt(__OPTSET.zeigeSkillEnde); | |||
function | |||
} | } | ||
// | // Setzt die naechste moegliche Anzahl Opti-Spalten Ende 18 als Option | ||
function setNextAnzOptiEnde() { | |||
setNextOpt(__OPTSET.anzahlOptiEnde); | |||
} | } | ||
// Setzt die | // Setzt die naechste moegliche Anzahl MW-Spalten Ende 18 als Option | ||
function setNextAnzMWEnde() { | |||
setNextOpt(__OPTSET.anzahlMWEnde); | |||
} | } | ||
// | // Setzt das naechste moegliche Kennzeichen fuer Ende 18 als Option | ||
function setNextCharEnde() { | |||
setNextOpt(__OPTSET.kennzeichenEnde); | |||
function | |||
} | } | ||
// | // Setzt den naechsten Stil der Trennlinie als Option | ||
function setNextSepStyle() { | |||
setNextOpt(__OPTSET.sepStyle); | |||
function | |||
} | } | ||
// | // Setzt die naechste Farbe der Trennlinie als Option | ||
function setNextSepColor() { | |||
setNextOpt(__OPTSET.sepColor); | |||
function | |||
} | } | ||
// | // Setzt die naechste Dicke der Trennlinie als Option | ||
function setNextSepWidth() { | |||
setNextOpt(__OPTSET.sepWidth); | |||
function | |||
} | } | ||
// | // Setzt die naechste moegliche Saison als Option | ||
function setNextSaison() { | |||
setNextOpt(__OPTSET.saison); | |||
function | |||
} | } | ||
// | // Setzt den naechsten ZAT als Option | ||
function setNextZAT() { | |||
setNextOpt(__OPTSET.aktuellerZat); | |||
function | |||
} | } | ||
// | // ==================== Abschnitt fuer diverse Utilities ==================== | ||
// Speichert einen beliebiegen Wert bzw. Code unter einem Namen ab | |||
// name: GM_serValue-Name, unter dem die Daten gespeichert werden | |||
// value: Beliebiger Wert oder Code (Vorsicht! Mit Augenmass benutzen!) | |||
function serialize(name, value) { | |||
GM_setValue(name, uneval(value)); | |||
} | } | ||
// | // Holt einen beliebiegen Wert bzw. Code unter einem Namen zurueck | ||
// | // name: GM_serValue-Name, unter dem die Daten gespeichert werden | ||
// | // defValue: Default-Wert fuer den Fall, dass nichts gespeichert ist | ||
// | function deserialize(name, defValue = "({})") { | ||
/* jshint evil: true */ | |||
return eval(GM_getValue(name, defValue)); | |||
} | } | ||
// | // ==================== Ende Abschnitt fuer Optionen ==================== | ||
// ==================== Abschnitt genereller Code zur Anzeige der Jugend ==================== | |||
// | // Zeitpunktangaben | ||
const __TIME = { | |||
// | 'cre' : 0, // Jugendspieler angelegt (mit 12 Jahren) | ||
// | 'beg' : 1, // Jugendspieler darf trainieren (wird 13 Jahre alt) | ||
'now' : 2, // Aktueller ZAT | |||
'end' : 3 // Jugendspieler wird Ende 18 gezogen (Geb. - 1 bzw. ZAT 71 für '?') | |||
}; | |||
// Funktionen *************************************************************************** | |||
// | // Erschafft die Spieler-Objekte und fuellt sie mit Werten | ||
function init(playerRows, optSet, colIdx, offsetUpper = 1, offsetLower = 0) { | |||
const __SAISON = optSet.saison.Value; | |||
const __CURRZAT = optSet.aktuellerZat.Value; | |||
function | const __BIRTHDAYS = ((optSet.birthdays.Value !== undefined) ? optSet.birthdays.Value : []); | ||
const | const __PLAYERS = []; | ||
const | |||
for (let i = offsetUpper, j = 0; i < playerRows.length - offsetLower; i++, j++) { | |||
const __CELLS = playerRows[i].cells; | |||
const __AGE = getAgeFromHTML(__CELLS, colIdx.Age); | |||
const __SKILLS = getSkillsFromHTML(__CELLS, colIdx); | |||
const __ISGOALIE = isGoalieFromHTML(__CELLS, colIdx.Age); | |||
const __NEWPLAYER = new PlayerRecord(__AGE, __SKILLS, __ISGOALIE); | |||
__NEWPLAYER.initPlayer(__SAISON, __CURRZAT, __BIRTHDAYS[j]); | |||
__PLAYERS[j] = __NEWPLAYER; | |||
} | } | ||
return | return __PLAYERS; | ||
} | } | ||
// | // Trennt die Gruppen (z.B. Jahrgaenge) mit Linien | ||
function separateGroups(rows, borderString, colIdxSort = 0, offsetUpper = 1, offsetLower = 0, offsetLeft = -1, offsetRight = 0) { | |||
if (offsetLeft < 0) { | |||
offsetLeft = colIdxSort; // ab Sortierspalte | |||
function | |||
if ( | |||
} | } | ||
for (let i = offsetUpper; i < rows.length - offsetLower - 1; i++) { | |||
if (rows[i].cells[colIdxSort].textContent != rows[i + 1].cells[colIdxSort].textContent) { | |||
for (let j = offsetLeft; j < rows[i].cells.length - offsetRight; j++) { | |||
rows[i].cells[j].style.borderBottom = borderString; | |||
} | |||
} | |||
} | } | ||
} | } | ||
// | // Klasse ColumnManager ***************************************************************** | ||
function ColumnManager(optSet) { | |||
this.geb = optSet.zeigeGeb.Value; | |||
this.alter = optSet.zeigeAlter.Value; | |||
this.skill = optSet.zeigeSkill.Value; | |||
this.pos = optSet.zeigePosition.Value; | |||
this.opti = ((optSet.anzahlOpti.Value >= 1) && (optSet.anzahlOpti.Value <= 6)); | |||
this.mw = ((optSet.anzahlMW.Value >= 1) && (optSet.anzahlMW.Value <= 6)); | |||
this.anzOpti = optSet.anzahlOpti.Value; | |||
this.anzMw = optSet.anzahlMW.Value; | |||
this.skillE = optSet.zeigeSkillEnde.Value; | |||
this.optiE = ((optSet.anzahlOptiEnde.Value >= 1) && (optSet.anzahlOptiEnde.Value <= 6)); | |||
this.mwE = ((optSet.anzahlMWEnde.Value >= 1) && (optSet.anzahlMWEnde.Value <= 6)); | |||
this.anzOptiE = optSet.anzahlOptiEnde.Value; | |||
this.anzMwE = optSet.anzahlMWEnde.Value; | |||
this.kennzE = optSet.kennzeichenEnde.Value; | |||
this.toString = function() { | |||
let result = "Skillschnitt\t\t" + this.skill + "\n"; | |||
result += "Beste Position\t" + this.pos + "\n"; | |||
result += "Optis\t\t\t" + this.opti + " (" + this.anzOpti + ")\n"; | |||
result += "Marktwerte\t\t" + this.mw + " (" + this.anzMw + ")\n"; | |||
result += "Skillschnitt Ende\t" + this.skillE + "\n"; | |||
result += "Optis Ende\t\t" + this.optiE + " (" + this.anzOptiE + ")\n"; | |||
result += "Marktwerte Ende\t" + this.mwE + " (" + this.anzMwE + ")\n"; | |||
return result; | |||
}; | |||
this.addCell = function(tableRow) { | |||
} | tableRow.insertCell(-1); | ||
return tableRow.cells.length - 1; | |||
}; | |||
this.addAndFillCell = function(tableRow, value, color, digits = 2) { | |||
if (isFinite(value) && (value !== true) && (value !== false)) { | |||
// | // Zahl einfuegen | ||
if (value < 1000) { | |||
// Mit Nachkommastellen darstellen | |||
tableRow.cells[this.addCell(tableRow)].textContent = parseFloat(value).toFixed(digits); | |||
} else { | |||
// Mit Tausenderpunkten darstellen | |||
tableRow.cells[this.addCell(tableRow)].textContent = getNumberString(value.toString()); | |||
} | |||
} else { | |||
// String einfuegen | |||
tableRow.cells[this.addCell(tableRow)].textContent = value; | |||
} | |||
tableRow.cells[tableRow.cells.length - 1].style.color = color; | |||
}; | |||
this.addTitles = function(headers, titleColor = "#FFFFFF") { | |||
// Spaltentitel zentrieren | |||
headers.align = "center"; | |||
// | // Titel fuer die aktuellen Werte | ||
if (this.geb) { | |||
this.addAndFillCell(headers, "Geb.", titleColor); | |||
} | |||
if (this.alter) { | |||
this.addAndFillCell(headers, "Alter", titleColor); | |||
} | |||
if (this.skill) { | |||
this.addAndFillCell(headers, "Skill", titleColor); | |||
} | |||
} | |||
} | } | ||
if (this.pos) { | |||
if ( | this.addAndFillCell(headers, "Pos", titleColor); | ||
} | } | ||
if (this.opti) { | |||
for (let i = 1; i <= this.anzOpti; i++) { | |||
this.addAndFillCell(headers, "Opti " + i, titleColor); | |||
if (this.mw && (this.anzMw >= i)) { | |||
this.addAndFillCell(headers, "MW " + i, titleColor); | |||
} | |||
} | |||
if (this.mw) { | |||
for (let i = this.anzOpti + 1; i <= this.anzMw; i++) { | |||
// Mehr MW- als Opti-Spalten | |||
this.addAndFillCell(headers, "MW " + i, titleColor); | |||
} | } | ||
} | |||
} else if (this.mw) { | |||
// Keine Opti-, dafuer MW-Spalten | |||
for (let i = 1; i <= this.anzMw; i++) { | |||
this.addAndFillCell(headers, "MW " + i, titleColor); | |||
} | } | ||
} | } | ||
if ( | // Titel fuer die Werte mit Ende 18 | ||
if (this.skillE) { | |||
this.addAndFillCell(headers, "Skill" + this.kennzE, titleColor); | |||
} | } | ||
if (this.optiE) { | |||
for (let i = 1; i <= this.anzOptiE; i++) { | |||
this.addAndFillCell(headers, "Opti " + i + this.kennzE, titleColor); | |||
if (this.mwE && (this.anzMwE >= i)) { | |||
this.addAndFillCell(headers, "MW " + i + this.kennzE, titleColor); | |||
} | |||
} | |||
if (this.mwE) { | |||
for (let i = this.anzOptiE + 1; i <= this.anzMwE; i++) { | |||
this.addAndFillCell(headers, "MW " + i + this.kennzE, titleColor); | |||
} | |||
} | } | ||
} else if (this.mwE) { | |||
for (let i = 1; i <= this.anzMwE; i++) { | |||
this.addAndFillCell(headers, "MW " + i + this.kennzE, titleColor); | |||
} | |||
} | } | ||
} | } | ||
} | }; // Ende addTitles() | ||
this.addValues = function(player, playerRow, color = "#FFFFFF") { | |||
const __COLOR = (player.isGoalie ? getColor("TOR") : color); | |||
const __POS1COLOR = (player.isGoalie ? getColor("TOR") : getColor(player.getPos(1))); | |||
// Aktuelle Werte | |||
if (this.geb) { | |||
this.addAndFillCell(playerRow, (player.zatGeb < 0) ? '?' : player.zatGeb, __COLOR, 0); | |||
if ( | |||
} | } | ||
if (this.alter) { | |||
this.addAndFillCell(playerRow, player.getAge(), __COLOR, 2); | |||
} | } | ||
if ( | if (this.skill) { | ||
this.addAndFillCell(playerRow, player.getSkill(), __COLOR, 2); | |||
} | } | ||
if (this.pos) { | |||
this.addAndFillCell(playerRow, player.getPos(1), __POS1COLOR); | |||
} | } | ||
if (this.opti) { | |||
for (let i = 1; i <= this.anzOpti; i++) { | |||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-Opti anzeigen | |||
this.addAndFillCell(playerRow, player.getOpti("TOR"), getColor("TOR"), 2); | |||
} else { | |||
} | // TOR, aber nicht bester Opti -> nur Zelle hinzufuegen | ||
this.addCell(playerRow); | |||
// | } | ||
} else { | |||
// Feld-Opti anzeigen | |||
this.addAndFillCell(playerRow, player.getOpti(player.getPos(i)), getColor(player.getPos(i)), 2); | |||
// | } | ||
if (this.mw && (this.anzMw >= i)) { | |||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR"), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i)), getColor(player.getPos(i)), 0); | |||
} | } | ||
} | |||
// | } | ||
// Verbleibende MW anzeigen | |||
if (this.mw) { | |||
for (let i = this.anzOpti + 1; i <= this.anzMw; i++) { | |||
// | if (player.isGoalie) { | ||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR"), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i)), getColor(player.getPos(i)), 0); | |||
} | |||
} | |||
} | |||
} else if (this.mw) { | |||
// Opti soll nicht angezeigt werden, dafuer aber MW | |||
for (let i = 1; i <= this.anzMw; i++) { | |||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR"), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i)), getColor(player.getPos(i)), 0); | |||
} | |||
} | } | ||
} | } | ||
// Werte mit Ende 18 | |||
if (this.skillE) { | |||
this.addAndFillCell(playerRow, player.getSkill(__TIME.end), __COLOR, 2); | |||
} | |||
if (this.optiE) { | |||
for (let i = 1; i <= this.anzOptiE; i++) { | |||
if (player.isGoalie) { | |||
} | if (i == 1) { | ||
// TOR-Opti anzeigen | |||
// | this.addAndFillCell(playerRow, player.getOpti("TOR", __TIME.end), getColor("TOR"), 2); | ||
} else { | |||
// TOR, aber nicht bester Opti -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-Opti anzeigen | |||
this.addAndFillCell(playerRow, player.getOpti(player.getPos(i), __TIME.end), getColor(player.getPos(i)), 2); | |||
if ( | } | ||
for (let | if (this.mwE && (this.anzMwE >= i)) { | ||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR", __TIME.end), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i), __TIME.end), getColor(player.getPos(i)), 0); | |||
} | |||
} | |||
} | |||
// Verbleibende MW anzeigen | |||
if (this.mwE) { | |||
for (let i = this.anzOptiE + 1; i <= this.anzMwE; i++) { | |||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR", __TIME.end), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i), __TIME.end), getColor(player.getPos(i)), 0); | |||
} | |||
} | |||
} | |||
} else if (this.mwE) { | |||
// Opti soll nicht angezeigt werden, dafuer aber MW | |||
for (let i = 1; i <= this.anzMwE; i++) { | |||
if (player.isGoalie) { | |||
if (i == 1) { | |||
// TOR-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue("TOR", __TIME.end), getColor("TOR"), 0); | |||
} else { | |||
// TOR, aber nicht bester MW -> nur Zelle hinzufuegen | |||
this.addCell(playerRow); | |||
} | |||
} else { | |||
// Feld-MW anzeigen | |||
this.addAndFillCell(playerRow, player.getMarketValue(player.getPos(i), __TIME.end), getColor(player.getPos(i)), 0); | |||
} | |||
} | } | ||
} | } | ||
} | }; // Ende addValues(player, playerRow) | ||
} | } | ||
// Klasse | // Klasse PlayerRecord ****************************************************************** | ||
function | function PlayerRecord(age, skills, isGoalie) { | ||
// Zu benutzende Marktwertformel | |||
const __MWFORMEL = { | |||
'alt' : 0, // Marktwertformel bis Saison 9 inklusive | |||
'S10' : 1 // Marktwertformel MW5 ab Saison 10 | |||
}; | |||
' | |||
' | |||
} | |||
this.mwFormel = __MWFORMEL.S10; // Neue Formel, genauer in initPlayer() | |||
this.age = age; | this.age = age; | ||
this.skills = skills; | |||
this.isGoalie = isGoalie; | this.isGoalie = isGoalie; | ||
// in this.initPlayer() definiert: | // in this.initPlayer() definiert: | ||
// this.zatGeb: ZAT, an dem der Spieler Geburtstag hat, -1 fuer "noch nicht zugewiesen", also | // this.zatGeb: ZAT, an dem der Spieler Geburtstag hat, -1 fuer "noch nicht zugewiesen", also "?" | ||
// this.zatAge: Bisherige erfolgte Trainings-ZATs | // this.zatAge: Bisherige erfolgte Trainings-ZATs | ||
// this.positions[][]: Positionstext und Opti; TOR-Index ist 5 | |||
// this.positions[][]: | |||
// this.skillsEnd[]: Berechnet aus this.skills, this.age und aktuellerZat | // this.skillsEnd[]: Berechnet aus this.skills, this.age und aktuellerZat | ||
this.toString = function() { | |||
let result = "Alter\t\t" + this.age + "\n\n"; | |||
result += "Aktuelle Werte\n"; | |||
result += "Skillschnitt\t" + this.getSkill().toFixed(2) + "\n"; | |||
result += "Optis und Marktwerte"; | |||
for (let pos of this.positions) { | |||
result += "\n\t" + pos + " \t"; | |||
result += this.getOpti(pos).toFixed(2) + "\t"; | |||
result += getNumberString(this.getMarketValue(pos).toString()); | |||
} | |||
result += "\n\nWerte mit Ende 18\n"; | |||
result += "Skillschnitt\t" + this.getSkill(__TIME.end).toFixed(2) + "\n"; | |||
result += "Optis und Marktwerte"; | |||
for (let pos of this.positions) { | |||
result += "\n\t" + this.getPos()[i] + " \t"; | |||
result += this.getOpti(pos, __TIME.end).toFixed(2) + "\t"; | |||
result += getNumberString(this.getMarketValue(pos, __TIME.end).toString()); | |||
} | |||
return result; | |||
}; // Ende this.toString() | |||
// Berechnet die Opti-Werte, sortiert das Positionsfeld und berechnet die Einzelskills mit Ende 18 | |||
this.initPlayer = function(saison, currZAT, gebZAT) { | |||
this.zatGeb = gebZAT; | |||
this.zatAge = this.getZatAge(currZAT); | |||
this.mwFormel = (saison < 10) ? __MWFORMEL.alt : __MWFORMEL.S10; | |||
this.positions = []; | |||
// ABW | |||
this.positions[0] = []; | |||
this.positions[0][0] = "ABW"; | |||
this.positions[0][1] = this.getOpti("ABW"); | |||
// DMI | |||
this.positions[1] = []; | |||
this.positions[1][0] = "DMI"; | |||
this.positions[1][1] = this.getOpti("DMI"); | |||
// MIT | |||
this.positions[2] = []; | |||
this.positions[2][0] = "MIT"; | |||
this.positions[2][1] = this.getOpti("MIT"); | |||
// OMI | |||
this.positions[3] = []; | |||
this.positions[3][0] = "OMI"; | |||
this.positions[3][1] = this.getOpti("OMI"); | |||
// STU | |||
this.positions[4] = []; | |||
this.positions[4][0] = "STU"; | |||
this.positions[4][1] = this.getOpti("STU"); | |||
// TOR | |||
this.positions[5] = []; | |||
this.positions[5][0] = "TOR"; | |||
this.positions[5][1] = this.getOpti("TOR"); | |||
// Sortieren | |||
sortPositionArray(this.positions); | |||
// Einzelskills mit Ende 18 berechnen | |||
this.skillsEnd = []; | |||
const __ZATMAX = (18 - 12) * 72 - 1; | |||
const __ZATSOFAR = this.zatAge; | |||
const __ZATTILLEND = __ZATMAX - __ZATSOFAR; | |||
for (let i in this.skills) { | |||
const __SKILL = this.skills[i]; | |||
if (isTrainableSkill(i)) { | |||
// Auf ganze Zahl runden und parseInt, da das sonst irgendwie als String interpretiert wird | |||
this.skillsEnd[i] = parseInt((__SKILL * (1 + __ZATTILLEND / __ZATSOFAR)).toFixed(0), 10); | |||
} else { | |||
this.skillsEnd[i] = __SKILL; | |||
} | |||
} | |||
}; // Ende this.iniPlayer() | |||
this.getZatAge = function(currZAT) { | |||
if (this.age < 13) { | |||
return 0; // noch nicht trainiert | |||
} else { | |||
let ZATs = (this.age - ((currZAT < this.zatGeb) ? 12 : 13)) * 72; // Basiszeit fuer die Jahre seit Jahrgang 13 | |||
if (this.zatGeb < 0) { | |||
return ZATs + currZAT; // Zaehlung begann Anfang der Saison (und der Geburtstag wird erst nach dem Ziehen bestimmt) | |||
} else { | |||
return ZATs + currZAT - this.zatGeb; // Verschiebung relativ zum Geburtstag (von -zatGeb, ..., 0, ..., 71 - zatGeb) | |||
} | |||
} | |||
}; | |||
this.getAge = function(when = __TIME.now) { | |||
if (this.mwFormel === __MWFORMEL.alt) { | |||
return (when === __TIME.end) ? 18 : this.age; | |||
} else { // Geburtstage ab Saison 10... | |||
return (when === __TIME.end) ? 18.00 : (13.00 + this.zatAge / 72); | |||
} | |||
}; | |||
this.getPos = function(idx) { | |||
const __IDXOFFSET = 1; | |||
return this.positions[idx - __IDXOFFSET][0]; | |||
}; | |||
this.getSkill = function(when = __TIME.now) { | |||
const __SKILLS = (when === __TIME.end) ? this.skillsEnd : this.skills; | |||
let result = 0; | |||
for (let skill of __SKILLS) { | |||
result += skill; | |||
} | |||
return result / __SKILLS.length; | |||
}; | |||
this.getOpti = function(pos, when = __TIME.now) { | |||
const __SKILLS = (when === __TIME.end) ? this.skillsEnd : this.skills; | |||
const __IDXPRISKILLS = getIdxPriSkills(pos); | |||
const __IDXSECSKILLS = getIdxSecSkills(pos); | |||
let sumPriSkills = 0; | |||
let sumSecSkills = 0; | |||
for (let idx of __IDXPRISKILLS) { | |||
sumPriSkills += __SKILLS[idx]; | |||
} | |||
for (let idx of __IDXSECSKILLS) { | |||
sumSecSkills += __SKILLS[idx]; | |||
} | |||
return (5 * sumPriSkills + sumSecSkills) / 27; | |||
}; | |||
this.getMarketValue = function(pos, when = __TIME.now) { | |||
const __AGE = this.getAge(when); | |||
if (this.mwFormel === __MWFORMEL.alt) { | |||
return Math.round(Math.pow((1 + this.getSkill(when)/100) * (1 + this.getOpti(pos, when)/100)* (2 - __AGE/100), 10) * 2); // Alte Formel bis Saison 9 | |||
} else { // MW-Formel ab Saison 10... | |||
const __MW5TF = 1.00; // Zwischen 0.97 und 1.03 | |||
return Math.round(Math.pow(1 + this.getSkill(when)/100, 5.65) * Math.pow(1 + this.getOpti(pos, when)/100, 8.1) * Math.pow(1 + (100 - __AGE)/49, 10) * __MW5TF); | |||
} | |||
}; | |||
} | |||
} | } | ||
// Funktionen fuer die HTML-Seite ******************************************************* | // Funktionen fuer die HTML-Seite ******************************************************* | ||
// Liest | // Liest das Alter aus | ||
function getAgeFromHTML(cells, colIdxAge) { | |||
return parseInt(cells[colIdxAge].textContent, 10); | |||
function | |||
} | } | ||
// Liest | // Liest das Geburtsdatum aus | ||
function getGebFromHTML(cells, colIdxGeb) { | |||
const __TEXT = ((cells[colIdxGeb] === undefined) ? '?' : cells[colIdxGeb].textContent); | |||
function | |||
const | |||
return | return parseInt((__TEXT === '?') ? -1 : __TEXT, 10); | ||
} | } | ||
// Liest die Einzelskills aus | |||
// Liest die Einzelskills aus | |||
function getSkillsFromHTML(cells, colIdx) { | function getSkillsFromHTML(cells, colIdx) { | ||
const __RESULT = []; | const __RESULT = []; | ||
for (let i = colIdx.Einz; i < colIdx.Zus; i++) { | for (let i = colIdx.Einz; i < colIdx.Zus; i++) { | ||
__RESULT[i - colIdx.Einz] = | __RESULT[i - colIdx.Einz] = parseInt(cells[i].textContent, 10); | ||
} | } | ||
Zeile 5.506: | Zeile 1.145: | ||
// Liest aus, ob der Spieler Torwart oder Feldspieler ist | // Liest aus, ob der Spieler Torwart oder Feldspieler ist | ||
function isGoalieFromHTML(cells, colIdxClass) { | function isGoalieFromHTML(cells, colIdxClass) { | ||
return (cells[colIdxClass].className == | return (cells[colIdxClass].className == "TOR"); | ||
} | } | ||
Zeile 5.701: | Zeile 1.175: | ||
length--; | length--; | ||
} | } | ||
} | |||
// Fuegt in die uebergebene Zahl Tausender-Trennpunkte ein | |||
// Wandelt einen etwaig vorhandenen Dezimalpunkt in ein Komma um | |||
function getNumberString(numberString) { | |||
if (numberString.lastIndexOf(".") != -1) { | |||
// Zahl enthaelt Dezimalpunkt | |||
const __VORKOMMA = numberString.substring(0, numberString.lastIndexOf(".")); | |||
const __NACHKOMMA = numberString.substring(numberString.lastIndexOf(".") + 1, numberString.length); | |||
return getNumberString(__VORKOMMA) + "," + __NACHKOMMA; | |||
} else { | |||
// Kein Dezimalpunkt, fuege Tausender-Trennpunkte ein: | |||
// String umdrehen, nach jedem dritten Zeichen Punkt einfuegen, dann wieder umdrehen: | |||
const __TEMP = reverseString(numberString); | |||
let result = ""; | |||
for (let i = 0; i < __TEMP.length; i++) { | |||
if ((i > 0) && (i % 3 === 0)) { | |||
result += "."; | |||
} | |||
result += __TEMP.substr(i, 1); | |||
} | |||
return reverseString(result); | |||
} | |||
} | |||
// Dreht den uebergebenen String um | |||
function reverseString(string) { | |||
let result = ""; | |||
for (let i = string.length - 1; i >= 0; i--) { | |||
result += string.substr(i, 1); | |||
} | |||
return result; | |||
} | } | ||
Zeile 5.706: | Zeile 1.217: | ||
// Die Indizes gehen von 0 (SCH) bis 16 (EIN) | // Die Indizes gehen von 0 (SCH) bis 16 (EIN) | ||
function isTrainableSkill(idx) { | function isTrainableSkill(idx) { | ||
const __TRAINABLESKILLS = | const __TRAINABLESKILLS = [0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 15]; | ||
let result = false; | let result = false; | ||
for (let idxTrainable of __TRAINABLESKILLS) { | for (let idxTrainable of __TRAINABLESKILLS) { | ||
if ( | if (idx == idxTrainable) { | ||
result = true; | result = true; | ||
break; | break; | ||
Zeile 5.718: | Zeile 1.228: | ||
return result; | return result; | ||
} | } | ||
Zeile 5.761: | Zeile 1.233: | ||
function getIdxPriSkills(pos) { | function getIdxPriSkills(pos) { | ||
switch (pos) { | switch (pos) { | ||
case | case "TOR" : return new Array(2, 3, 4, 5); | ||
case | case "ABW" : return new Array(2, 3, 4, 15); | ||
case | case "DMI" : return new Array(1, 4, 9, 11); | ||
case | case "MIT" : return new Array(1, 3, 9, 11); | ||
case | case "OMI" : return new Array(1, 5, 9, 11); | ||
case | case "STU" : return new Array(0, 2, 3, 5); | ||
default : | default : return []; | ||
} | } | ||
} | } | ||
// Gibt die Indizes der | // Gibt die Indizes der Sekundaerskills zurueck | ||
function getIdxSecSkills(pos) { | function getIdxSecSkills(pos) { | ||
switch (pos) { | switch (pos) { | ||
case | case "TOR" : return new Array(0, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); | ||
case | case "ABW" : return new Array(0, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16); | ||
case | case "DMI" : return new Array(0, 2, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16); | ||
case | case "MIT" : return new Array(0, 2, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16); | ||
case | case "OMI" : return new Array(0, 2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 15, 16); | ||
case | case "STU" : return new Array(1, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); | ||
default : | default : return []; | ||
} | } | ||
} | } | ||
Zeile 5.787: | Zeile 1.259: | ||
function getColor(pos) { | function getColor(pos) { | ||
switch (pos) { | switch (pos) { | ||
case | case "TOR" : return "#FFFF00"; | ||
case | case "ABW" : return "#00FF00"; | ||
case | case "DMI" : return "#3366FF"; | ||
case | case "MIT" : return "#66FFFF"; | ||
case | case "OMI" : return "#FF66FF"; | ||
case | case "STU" : return "#FF0000"; | ||
case | case "LEI" : return "#FFFFFF"; | ||
default : return ""; | |||
default : | |||
} | } | ||
} | } | ||
// ==================== Ende Abschnitt genereller Code zur Anzeige der Jugend ==================== | // ==================== Ende Abschnitt genereller Code zur Anzeige der Jugend ==================== | ||
// ==================== Abschnitt fuer sonstige Parameter ==================== | // ==================== Abschnitt fuer sonstige Parameter ==================== | ||
// | // Verarbeitet die URL der Seite und ermittelt die Nummer der gewuenschten Unterseite | ||
// url: Adresse der Seite | |||
function getPageIdFromURL(url) { | |||
// Variablen zur Identifikation der Seite | |||
const __INDEXS = url.lastIndexOf("page="); | |||
// | const __HAUPT = url.match(/haupt\.php/); // Ansicht "Haupt" (Managerbuero) | ||
const __JU = url.match(/ju\.php/); // Ansicht "Jugendteam" | |||
function | let page = -1; // Seitenindex (Rueckgabewert) | ||
// Wert von page (Seitenindex) ermitteln... | |||
// Annahme: Entscheidend ist jeweils das letzte Vorkommnis von "page=" und ggf. von '&' | |||
if (__HAUPT) { | |||
// | page = 0; | ||
} else if (__JU) { | |||
if (__INDEXS < 0) { | |||
page = 1; | |||
// | } else if (url.indexOf('&', __INDEXS) < 0) { | ||
// Wert von page setzt sich aus allen Zeichen hinter "page=" zusammen | |||
page = parseInt(url.substring(__INDEXS + 5, url.length), 10); | |||
} else { | |||
// Wert von page setzt sich aus allen Zeichen zwischen "page=" und '&' zusammen | |||
page = parseInt(url.substring(__INDEXS + 5, url.indexOf('&', __INDEXS)), 10); | |||
} | |||
// | |||
} | |||
// | |||
} | } | ||
} | } | ||
return | return page; | ||
} | } | ||
// Ermittelt, wie das eigene Team heisst und aus welchem Land bzw. Liga es kommt (zur Unterscheidung von Erst- und Zweitteam) | // Ermittelt, wie das eigene Team heisst und aus welchem Land bzw. Liga es kommt (zur Unterscheidung von Erst- und Zweitteam) | ||
// cell: Tabellenzelle mit den Parametern zum Team " | // cell: Tabellenzelle mit den Parametern zum Team "<b>Willkommen im Managerbüro von TEAM</b><br>LIGA LAND<a href=..." | ||
// return Im Beispiel { 'Team' : "TEAM", 'Liga' : "LIGA", 'Land' : "LAND" }, | |||
// return Im Beispiel { 'Team' : "TEAM", 'Liga' : "LIGA", 'Land' : "LAND" | // z.B. { 'Team' : "Choromonets Odessa", 'Liga' : "1. Liga", 'Land' : "Ukraine" } | ||
// z.B. { 'Team' : "Choromonets Odessa", 'Liga' : "1. Liga", 'Land' : "Ukraine" | function getTeamParamsFromCell(cell) { | ||
function | const __SEARCHSTART = " von "; | ||
const | const __SEARCHMIDDLE = "</b><br>"; | ||
const __SEARCHLIGA = ". Liga "; | |||
const __SEARCHEND = "<a href="; | |||
let teamParams = cell.innerHTML.substring(cell.innerHTML.indexOf(__SEARCHSTART) + __SEARCHSTART.length, cell.innerHTML.indexOf(__SEARCHEND)); | |||
let land = teamParams.substring(teamParams.indexOf(__SEARCHLIGA) + __SEARCHLIGA.length); | |||
const __SEARCHMIDDLE = | |||
const __SEARCHLIGA | |||
const | |||
let land = | |||
if (land.charAt(1) == ' ') { // Land z.B. hinter "2. Liga A " statt "1. Liga " | |||
land = land.substr(2); | |||
} | } | ||
const __TEAM = | const __TEAM = teamParams.substring(0, teamParams.indexOf(__SEARCHMIDDLE)); | ||
const __LIGA = teamParams.substring(teamParams.indexOf(__SEARCHMIDDLE) + __SEARCHMIDDLE.length, | |||
teamParams.length - land.length - 1); | |||
const __RET = { | |||
'Team' : __TEAM, | |||
'Liga' : __LIGA, | |||
'Land' : land | |||
}; | |||
return | return __RET; | ||
} | } | ||
Zeile 6.211: | Zeile 1.334: | ||
// return ZAT-Nummer im Text | // return ZAT-Nummer im Text | ||
function getZATNrFromCell(cell) { | function getZATNrFromCell(cell) { | ||
const __TEXT = | const __TEXT = cell.textContent.split(' '); | ||
let ZATNr = 0; | let ZATNr = 0; | ||
Zeile 6.225: | Zeile 1.348: | ||
} | } | ||
// ==================== Ende Abschnitt fuer sonstige Parameter | // ==================== Ende Abschnitt fuer sonstige Parameter ==================== | ||
// ==================== Hauptprogramm ==================== | // ==================== Hauptprogramm ==================== | ||
Zeile 6.233: | Zeile 1.354: | ||
// Verarbeitet Ansicht "Haupt" (Managerbuero) zur Ermittlung des aktuellen ZATs | // Verarbeitet Ansicht "Haupt" (Managerbuero) zur Ermittlung des aktuellen ZATs | ||
function procHaupt() { | function procHaupt() { | ||
const __TEAMPARAMS = | const __TTAGS = document.getElementsByTagName("table"); | ||
const __TEAMPARAMS = getTeamParamsFromCell(__TTAGS[1].rows[0].cells[1]); // Link mit Team, Liga, Land... | |||
buildOptions(__OPTCONFIG, __OPTSET, { | |||
'teamParams' : __TEAMPARAMS, | |||
'hideMenu' : true | |||
}); | |||
const __NEXTZAT = getZATNrFromCell(__TTAGS[0].rows[2].cells[0]); // "Der naechste ZAT ist ZAT xx und ..." | |||
const __CURRZAT = __NEXTZAT - 1; | |||
if (__CURRZAT >= 0) { | |||
console.log("Aktueller ZAT: " + __CURRZAT); | |||
setOpt(__OPTSET.aktuellerZat, __CURRZAT, false); | |||
} | |||
} | } | ||
// Verarbeitet Ansicht "Teamuebersicht" | // Verarbeitet Ansicht "Teamuebersicht" | ||
function procTeamuebersicht() { | function procTeamuebersicht() { | ||
const __ROWOFFSETUPPER = 1; | const __ROWOFFSETUPPER = 1; // Header-Zeile | ||
const __ROWOFFSETLOWER = 1; | const __ROWOFFSETLOWER = 1; // Ziehen-Button | ||
const __COLUMNINDEX = { | const __COLUMNINDEX = { | ||
'Age' : 0, | |||
'Geb' : 1, | |||
'Flg' : 2, | |||
'Land' : 3, | |||
'U' : 4, | |||
'Skill' : 5, | |||
'Tal' : 6, | |||
'Akt' : 7, | |||
'Auf' : 8, | |||
'Zus' : 9 | |||
}; | |||
buildOptions(__OPTCONFIG, __OPTSET); | |||
const __TTAGS = document.getElementsByTagName("table"); | |||
const __TABLE = __TTAGS[1]; | |||
const __ROWS = __TABLE.rows; | |||
const __BIRTHDAYS = []; | |||
for (let i = __ROWOFFSETUPPER; i < __ROWS.length - __ROWOFFSETLOWER; i++) { | |||
__BIRTHDAYS[i - __ROWOFFSETUPPER] = getGebFromHTML(__ROWS[i].cells, __COLUMNINDEX.Geb); | |||
} | |||
setOpt(__OPTSET.birthdays, __BIRTHDAYS, false); | |||
// Format der Trennlinie zwischen den Monaten... | |||
const __BORDERSTRING = __OPTSET.sepStyle.Value + ' ' + __OPTSET.sepColor.Value + ' ' + __OPTSET.sepWidth.Value; | |||
separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Age, __ROWOFFSETUPPER, __ROWOFFSETLOWER, -1, 0); | |||
} | } | ||
// Verarbeitet Ansicht "Spielereinzelwerte" | // Verarbeitet Ansicht "Spielereinzelwerte" | ||
function procSpielereinzelwerte() { | function procSpielereinzelwerte() { | ||
const __ROWOFFSETUPPER = 1; | const __ROWOFFSETUPPER = 1; // Header-Zeile | ||
const __ROWOFFSETLOWER = 0; | const __ROWOFFSETLOWER = 0; | ||
const __COLUMNINDEX = { | const __COLUMNINDEX = { | ||
'Flg' : 0, | |||
'Land' : 1, | |||
'U' : 2, | |||
'Age' : 3, | |||
'Einz' : 4, // ab hier die Einzelskills | |||
'SCH' : 4, | |||
'ABS' : 4, // TOR | |||
'BAK' : 5, | |||
'STS' : 5, // TOR | |||
'KOB' : 6, | |||
'FAN' : 6, // TOR | |||
'ZWK' : 7, | |||
'STB' : 7, // TOR | |||
'DEC' : 8, | |||
'SPL' : 8, // TOR | |||
'GES' : 9, | |||
'REF' : 9, // TOR | |||
'FUQ' : 10, | |||
'ERF' : 11, | |||
'AGG' : 12, | |||
'PAS' : 13, | |||
'AUS' : 14, | |||
'UEB' : 15, | |||
'WID' : 16, | |||
'SEL' : 17, | |||
'DIS' : 18, | |||
'ZUV' : 19, | |||
'EIN' : 20, | |||
'Zus' : 21 // Zusaetze hinter den Einzelskills | |||
}; | |||
const __TTAGS = document.getElementsByTagName("table"); | |||
const __TABLE = __TTAGS[1]; | |||
const __ROWS = __TABLE.rows; | |||
const __HEADERS = __ROWS[0]; | |||
buildOptions(__OPTCONFIG, __OPTSET); | |||
const __TITLECOLOR = getColor("LEI"); // "#FFFFFF" | |||
const __COLMAN = new ColumnManager(__OPTSET); | |||
__COLMAN.addTitles(__HEADERS, __TITLECOLOR); | |||
const __PLAYERS = init(__ROWS, __OPTSET, __COLUMNINDEX, __ROWOFFSETUPPER, __ROWOFFSETLOWER); | |||
for (let i = 0; i < __PLAYERS.length; i++) { | |||
__COLMAN.addValues(__PLAYERS[i], __ROWS[i + __ROWOFFSETUPPER], __TITLECOLOR); | |||
} | } | ||
// | // Format der Trennlinie zwischen den Monaten... | ||
const __BORDERSTRING = __OPTSET.sepStyle.Value + ' ' + __OPTSET.sepColor.Value + ' ' + __OPTSET.sepWidth.Value; | |||
separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Age, __ROWOFFSETUPPER, __ROWOFFSETLOWER, -1, 0); | |||
} | } | ||
// | // URL-Legende: | ||
// page=0: Managerbuero | |||
// page=1: Teamuebersicht | |||
// page=2: Spielereinzelwerte | |||
// Verzweige in unterschiedliche Verarbeitungen je nach Wert von page: | |||
switch (getPageIdFromURL(window.location.href)) { | |||
case 0: procHaupt(); break; | |||
case 1: procTeamuebersicht(); break; | |||
case 2: procSpielereinzelwerte(); break; | |||
default: break; | |||
} | } | ||
console.log("SCRIPT END"); | |||
// *** EOF *** | // *** EOF *** | ||
</pre> | </pre> |