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 8: | Zeile 8: | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Version''' | | '''Version''' | ||
| '''0. | | '''0.60 (WebExtensions)''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Autor''' | | '''Autor''' | ||
Zeile 36: | Zeile 36: | ||
|- 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'''<br> '''Erweiterte Optionen auch auf der Seite'''<br> '''Zusatzspalten Talent/Quote/Aufw./Geb./Alter'''<br> '''Zusatzspalten Quote/Alter/Pos in der Übersicht'''<br> '''Zusatzspalten Alter ersetzen/Aufwertungen kurz+TOR'''<br> '''Zusatzspalten fix/tr./%H/%N/Prios jetzt und Ende'''<br> '''Interaktive Menü-Optionen'''<br> '''Gemeinsame Code- und Datenbasis'''<br> '''Qualitätsbalken'''<br> '''Markierung der Primärskills bei Einzelwerten und Aufwertungen'''<br> '''Beachtung von Jugendförderung und Doppelpositionen'''<br> '''Warnung vor Ende 18 in | | '''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'''<br> '''Erweiterte Optionen auch auf der Seite'''<br> '''Zusatzspalten Talent/Quote/Aufw./Geb./Alter'''<br> '''Zusatzspalten Quote/Alter/Pos in der Übersicht'''<br> '''Zusatzspalten Alter ersetzen/Aufwertungen kurz+TOR'''<br> '''Zusatzspalten fix/tr./%H/%N/Prios jetzt und Ende'''<br> '''Interaktive Menü-Optionen'''<br> '''Gemeinsame Code- und Datenbasis'''<br> '''Qualitätsbalken'''<br> '''Markierung der Primärskills bei Einzelwerten und Aufwertungen'''<br> '''Beachtung von Jugendförderung und Doppelpositionen'''<br> '''Warnung vor Ende 18 in letzer Periode und mehr am letzten ZAT'''<br> '''Reguläre Ausdrücke im @include'''<br> '''Neues Design und Seite "Opt. Skill"''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
Zeile 48: | Zeile 48: | ||
// @name OS2.jugend | // @name OS2.jugend | ||
// @namespace http://os.ongapo.com/ | // @namespace http://os.ongapo.com/ | ||
// @version 0. | // @version 0.60 | ||
// @copyright 2013+ | // @copyright 2013+ | ||
// @author Sven Loges (SLC) / Andreas Eckes (Strindheim BK) | // @author Sven Loges (SLC) / Andreas Eckes (Strindheim BK) | ||
Zeile 124: | Zeile 124: | ||
'AltHotkey' : 'k', | 'AltHotkey' : 'k', | ||
'FormLabel' : "Prognose Einzelwerte" | 'FormLabel' : "Prognose Einzelwerte" | ||
}, | }, | ||
'zeigeBalken' : { // Spaltenauswahl fuer den Qualitaetsbalken des Talents (true = anzeigen, false = nicht anzeigen) | 'zeigeBalken' : { // Spaltenauswahl fuer den Qualitaetsbalken des Talents (true = anzeigen, false = nicht anzeigen) | ||
Zeile 224: | Zeile 136: | ||
'FormLabel' : "Balken Qualit\xE4t" | 'FormLabel' : "Balken Qualit\xE4t" | ||
}, | }, | ||
'absBalken' : { | 'absBalken' : { // Spaltenauswahl fuer den Guetebalken des Talents absolut statt nach Foerderung (true = absolut, false = relativ nach Foerderung) | ||
'Name' : "absBar", | 'Name' : "absBar", | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
Zeile 585: | Zeile 497: | ||
'FreeValue' : true, | 'FreeValue' : true, | ||
'SelValue' : false, | 'SelValue' : false, | ||
'Choice' : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 | 'Choice' : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ], | ||
'Default' : | 'Default' : 12, | ||
'Action' : __OPTACTION.NXT, | 'Action' : __OPTACTION.NXT, | ||
'Label' : "Saison: $", | 'Label' : "Saison: $", | ||
Zeile 732: | Zeile 644: | ||
'Label' : "Aufwertungen:" | 'Label' : "Aufwertungen:" | ||
}, | }, | ||
' | 'zatAges' : { // Datenspeicher fuer (gebrochene) Alter der Jugendspieler | ||
'Name' : " | 'Name' : "zatAges", | ||
'Type' : __OPTTYPES.SD, | 'Type' : __OPTTYPES.SD, | ||
'Hidden' : true, | 'Hidden' : true, | ||
'Serial' : true, | 'Serial' : true, | ||
'AutoReset' : | 'AutoReset' : true, | ||
'Permanent' : true, | 'Permanent' : true, | ||
'Default' : [], | 'Default' : [], | ||
'Submit' : undefined, | 'Submit' : undefined, | ||
'Cols' : | 'Cols' : 36, | ||
'Rows' : | 'Rows' : 2, | ||
'Replace' : null, | 'Replace' : null, | ||
'Space' : 0, | 'Space' : 0, | ||
'Label' : " | 'Label' : "ZAT-Alter:" | ||
}, | }, | ||
'trainiert' : { // Datenspeicher fuer Trainingsquoten der Jugendspieler | |||
'Name' : "numProgresses", | |||
'Type' : __OPTTYPES.SD, | |||
'trainiert' : { // Datenspeicher fuer Trainingsquoten der Jugendspieler | |||
'Name' : "numProgresses", | |||
'Type' : __OPTTYPES.SD, | |||
'Hidden' : true, | 'Hidden' : true, | ||
'Serial' : true, | 'Serial' : true, | ||
Zeile 3.952: | Zeile 3.833: | ||
// Optionen mit Daten, die ZAT- und Team-bezogen gemerkt werden... | // Optionen mit Daten, die ZAT- und Team-bezogen gemerkt werden... | ||
__TEAMCLASS.optSelect = { | __TEAMCLASS.optSelect = { | ||
'datenZat' | 'datenZat' : true, | ||
'oldDatenZat' | 'oldDatenZat' : true, | ||
'fingerprints' | 'fingerprints' : true, | ||
'birthdays' | 'birthdays' : true, | ||
'tClasses' | 'tClasses' : true, | ||
'progresses' | 'progresses' : true, | ||
'zatAges' : true, | |||
'trainiert' : true, | |||
'zatAges' | 'positions' : true, | ||
'trainiert' | 'skills' : true, | ||
'positions' | 'foerderung' : true | ||
'skills' | |||
'foerderung' | |||
}; | }; | ||
Zeile 4.034: | Zeile 3.913: | ||
// Erschafft die Spieler-Objekte und fuellt sie mit Werten | // Erschafft die Spieler-Objekte und fuellt sie mit Werten | ||
// | // reloadData: true = Teamuebersicht, false = Spielereinzelwerte | ||
function init(playerRows, optSet, colIdx, offsetUpper = 1, offsetLower = 0, reloadData = false) { | |||
storePlayerDataFromHTML(playerRows, optSet, colIdx, offsetUpper, offsetLower, reloadData); | |||
function init(playerRows, optSet, colIdx, offsetUpper = 1, offsetLower = 0, | |||
storePlayerDataFromHTML(playerRows, optSet, colIdx, offsetUpper, offsetLower, | |||
const __SAISON = getOptValue(optSet.saison); | const __SAISON = getOptValue(optSet.saison); | ||
Zeile 4.047: | Zeile 3.921: | ||
const __GEALTERT = ((__AKTZAT >= 72) ? (getIntFromHTML(playerRows[playerRows.length - offsetLower - 1].cells, colIdx.Age) < 13) : false); | const __GEALTERT = ((__AKTZAT >= 72) ? (getIntFromHTML(playerRows[playerRows.length - offsetLower - 1].cells, colIdx.Age) < 13) : false); | ||
const __CURRZAT = (__GEALTERT ? 0 : __AKTZAT); | const __CURRZAT = (__GEALTERT ? 0 : __AKTZAT); | ||
const __DONATION = getOptValue(optSet.foerderung); | const __DONATION = getOptValue(optSet.foerderung); | ||
const __BIRTHDAYS = getOptValue(optSet.birthdays, []); | const __BIRTHDAYS = getOptValue(optSet.birthdays, []); | ||
Zeile 4.057: | Zeile 3.929: | ||
const __POSITIONS = getOptValue(optSet.positions, []); | const __POSITIONS = getOptValue(optSet.positions, []); | ||
const __SKILLS = getOptValue(optSet.skills, []); | const __SKILLS = getOptValue(optSet.skills, []); | ||
const __BASEDATA = [ __BIRTHDAYS, __TCLASSES, __PROGRESSES ]; // fuer initPlayer | const __BASEDATA = [ __BIRTHDAYS, __TCLASSES, __PROGRESSES ]; // fuer initPlayer | ||
const __DATA = ( | const __DATA = (reloadData ? [ __BASEDATA, __SKILLS ] : [ __SKILLS, __BASEDATA ]); // fuer initPlayer: [0] = von HTML-Seite, [1] = aus gespeicherten Daten | ||
const __IDMAP = getPlayerIdMap(optSet); | const __IDMAP = getPlayerIdMap(optSet); | ||
const __CATIDS = __IDMAP.catIds; | const __CATIDS = __IDMAP.catIds; | ||
Zeile 4.073: | Zeile 3.944: | ||
const __AGE = getIntFromHTML(__CELLS, colIdx.Age); | const __AGE = getIntFromHTML(__CELLS, colIdx.Age); | ||
const __ISGOALIE = isGoalieFromHTML(__CELLS, colIdx.Age); | const __ISGOALIE = isGoalieFromHTML(__CELLS, colIdx.Age); | ||
const __NEWPLAYER = new PlayerRecord(__LAND, __AGE, __ISGOALIE, __SAISON, __CURRZAT, __DONATION); | const __NEWPLAYER = new PlayerRecord(__LAND, __AGE, __ISGOALIE, __SAISON, __CURRZAT, __DONATION); | ||
__NEWPLAYER.initPlayer(__DATA[0], j, | __NEWPLAYER.initPlayer(__DATA[0], j, ! reloadData); | ||
const __IDX = selectPlayerIndex(__NEWPLAYER, j, __CATIDS); | const __IDX = selectPlayerIndex(__NEWPLAYER, j, __CATIDS); | ||
__NEWPLAYER.initPlayer(__DATA[1], __IDX, | __NEWPLAYER.initPlayer(__DATA[1], __IDX, reloadData); | ||
__NEWPLAYER.prognoseSkills(); | __NEWPLAYER.prognoseSkills(); | ||
if ( | if (reloadData) { | ||
__NEWPLAYER.setZusatz(__ZATAGES[__IDX], __TRAINIERT[__IDX], __POSITIONS[__IDX]); | __NEWPLAYER.setZusatz(__ZATAGES[__IDX], __TRAINIERT[__IDX], __POSITIONS[__IDX]); | ||
} | } | ||
__PLAYERS[j++] = __NEWPLAYER; | __PLAYERS[j++] = __NEWPLAYER; | ||
Zeile 4.095: | Zeile 3.962: | ||
} | } | ||
if ( | if (reloadData) { | ||
setPlayerData(__PLAYERS, optSet); | |||
} else { | |||
calcPlayerData(__PLAYERS, optSet); | calcPlayerData(__PLAYERS, optSet); | ||
} | } | ||
Zeile 4.136: | Zeile 4.003: | ||
// Berechnet die Identifikations-IDs (Fingerprints) der Spieler neu und speichert diese | // Berechnet die Identifikations-IDs (Fingerprints) der Spieler neu und speichert diese | ||
function storePlayerIds(players, optSet) { | function storePlayerIds(players, optSet) { | ||
const __FINGERPRINTS = []; | const __FINGERPRINTS = []; | ||
Zeile 4.153: | Zeile 4.018: | ||
// Sucht fuer den Spieler den Eintrag aus catIds heraus und gibt den (geloeschten) Index zurueck | // Sucht fuer den Spieler den Eintrag aus catIds heraus und gibt den (geloeschten) Index zurueck | ||
function selectPlayerIndex(player, index, catIds) { | function selectPlayerIndex(player, index, catIds) { | ||
const __MYCAT = player.getCat(); | const __MYCAT = player.getCat(); | ||
Zeile 4.172: | Zeile 4.033: | ||
// Speichtert die abgeleiteten Werte in den Spieler-Objekten | // Speichtert die abgeleiteten Werte in den Spieler-Objekten | ||
function setPlayerData(players, optSet) { | function setPlayerData(players, optSet) { | ||
const __ZATAGES = []; | const __ZATAGES = []; | ||
const __TRAINIERT = []; | const __TRAINIERT = []; | ||
Zeile 4.185: | Zeile 4.042: | ||
if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | ||
__ZATAGES[i] = __ZUSATZ.zatAge; | |||
__ZATAGES[i] = __ZUSATZ.zatAge | |||
} | } | ||
__TRAINIERT[i] = __ZUSATZ.trainiert; | __TRAINIERT[i] = __ZUSATZ.trainiert; | ||
__POSITIONS[i] = __ZUSATZ.bestPos; | __POSITIONS[i] = __ZUSATZ.bestPos; | ||
} | } | ||
setOpt(optSet.zatAges, __ZATAGES, false); | setOpt(optSet.zatAges, __ZATAGES, false); | ||
setOpt(optSet.trainiert, __TRAINIERT, false); | setOpt(optSet.trainiert, __TRAINIERT, false); | ||
Zeile 4.208: | Zeile 4.054: | ||
// Berechnet die abgeleiteten Werte in den Spieler-Objekten neu und speichert diese | // Berechnet die abgeleiteten Werte in den Spieler-Objekten neu und speichert diese | ||
function calcPlayerData(players, optSet) { | function calcPlayerData(players, optSet) { | ||
const __ZATAGES = []; | const __ZATAGES = []; | ||
Zeile 4.219: | Zeile 4.063: | ||
if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | ||
__ZATAGES[i] = __ZUSATZ.zatAge; | __ZATAGES[i] = __ZUSATZ.zatAge; | ||
} | } | ||
__TRAINIERT[i] = __ZUSATZ.trainiert; | __TRAINIERT[i] = __ZUSATZ.trainiert; | ||
__POSITIONS[i] = __ZUSATZ.bestPos; | __POSITIONS[i] = __ZUSATZ.bestPos; | ||
} | } | ||
Zeile 4.230: | Zeile 4.074: | ||
} | } | ||
// Ermittelt die | // Ermittelt die Werte in den Spieler-Objekten aus den Daten der Seite und speichert diese | ||
// | // reloadData: true = Teamuebersicht, false = Spielereinzelwerte | ||
function storePlayerDataFromHTML(playerRows, optSet, colIdx, offsetUpper = 1, offsetLower = 0, reloadData = false) { | |||
if (reloadData) { | |||
const __BIRTHDAYS = []; | |||
const __TCLASSES = []; | |||
const __PROGRESSES = []; | |||
function storePlayerDataFromHTML(playerRows, optSet, colIdx, offsetUpper = 1, offsetLower = 0, | |||
const | for (let i = offsetUpper, j = 0; i < playerRows.length - offsetLower; i++) { | ||
const __CELLS = playerRows[i].cells; | |||
if (__CELLS.length > 1) { | |||
} | __BIRTHDAYS[j] = getIntFromHTML(__CELLS, colIdx.Geb); | ||
__TCLASSES[j] = getTalentFromHTML(__CELLS, colIdx.Tal); | |||
__PROGRESSES[j] = getAufwertFromHTML(__CELLS, colIdx.Auf, getOptValue(optSet.shortAufw, true)); | |||
j++; | |||
} | |||
} | |||
setOpt(optSet.birthdays, __BIRTHDAYS, false); | |||
setOpt(optSet.tClasses, __TCLASSES, false); | |||
setOpt(optSet.progresses, __PROGRESSES, false); | |||
} else { | |||
const __SKILLS = []; | |||
for (let i = offsetUpper, j = 0; i < playerRows.length - offsetLower; i++) { | |||
const __CELLS = playerRows[i].cells; | |||
if (__CELLS.length > 1) { | |||
__SKILLS[j++] = getSkillsFromHTML(__CELLS, colIdx); | |||
} | |||
} | |||
setOpt(optSet.skills, __SKILLS, false); | |||
} | } | ||
} | |||
// Trennt die Gruppen (z.B. Jahrgaenge) mit Linien | |||
// Trennt die Gruppen (z.B. Jahrgaenge) mit Linien | |||
function separateGroups(rows, borderString, colIdxSort = 0, offsetUpper = 1, offsetLower = 0, offsetLeft = -1, offsetRight = 0, formatFun = sameValue) { | function separateGroups(rows, borderString, colIdxSort = 0, offsetUpper = 1, offsetLower = 0, offsetLeft = -1, offsetRight = 0, formatFun = sameValue) { | ||
if (offsetLeft < 0) { | if (offsetLeft < 0) { | ||
Zeile 4.290: | Zeile 4.115: | ||
} | } | ||
for (let i = offsetUpper, newVal, oldVal = formatFun | for (let i = offsetUpper, newVal, oldVal = formatFun(rows[i].cells[colIdxSort].textContent); i < rows.length - offsetLower - 1; i++, oldVal = newVal) { | ||
newVal = formatFun | newVal = formatFun(rows[i + 1].cells[colIdxSort].textContent); | ||
if (newVal !== oldVal) { | if (newVal !== oldVal) { | ||
for (let j = offsetLeft; j < rows[i].cells.length - offsetRight; j++) { | for (let j = offsetLeft; j < rows[i].cells.length - offsetRight; j++) { | ||
Zeile 4.322: | Zeile 4.147: | ||
this.colIdx = colIdx; | this.colIdx = colIdx; | ||
this.fpId = (__BIRTHDAYS && __TCLASSES && __POSITIONS && getValue(__SHOWCOL.zeigeId, __SHOWALL) && getOptValue(optSet.zeigeId)); | this.fpId = (__BIRTHDAYS && __TCLASSES && __POSITIONS && getValue(__SHOWCOL.zeigeId, __SHOWALL) && getOptValue(optSet.zeigeId)); | ||
this.bar = (__PROJECTION && getValue(__SHOWCOL.zeigeBalken, __SHOWALL) && getOptValue(optSet.zeigeBalken)); | this.bar = (__PROJECTION && getValue(__SHOWCOL.zeigeBalken, __SHOWALL) && getOptValue(optSet.zeigeBalken)); | ||
this.barAbs = getOptValue(optSet.absBalken); | this.barAbs = getOptValue(optSet.absBalken); | ||
Zeile 4.515: | Zeile 4.330: | ||
}, // Ende addTitles() | }, // Ende addTitles() | ||
'addValues' : function(player, playerRow, color = "#FFFFFF") { | 'addValues' : function(player, playerRow, color = "#FFFFFF") { | ||
const __IDXPRI = getIdxPriSkills(player.getPos()); | const __IDXPRI = getIdxPriSkills(player.getPos()); | ||
const __COLOR = | const __COLALERT = getColor('STU'); // rot | ||
const __COLOR = ((player.zatLeft < 1) ? __COLALERT : player.isGoalie ? getColor('TOR') : color); | |||
const __POS1COLOR = getColor((player.getPosPercent() > 99.99) ? 'LEI' : player.getPos()); | const __POS1COLOR = getColor((player.getPosPercent() > 99.99) ? 'LEI' : player.getPos()); | ||
const __OSBLAU = getColor(""); | const __OSBLAU = getColor(""); | ||
Zeile 4.560: | Zeile 4.372: | ||
this.addAndFillCell(playerRow, player.getAge(), __COLOR, null, 2); | this.addAndFillCell(playerRow, player.getAge(), __COLOR, null, 2); | ||
} | } | ||
if ( | if (player.zatLeft < 6) { // Abrechnungszeitraum vor dem letztmoeglichen Ziehen... | ||
formatCell(playerRow.cells[this.colIdx.Age], true, | formatCell(playerRow.cells[this.colIdx.Age], true, __COLALERT, null, 1.0); | ||
} | } | ||
if (this.fix) { | if (this.fix) { | ||
Zeile 4.611: | Zeile 4.423: | ||
} | } | ||
// | // Werte mit Ende 18 | ||
if (this.colIdx.Einz) { | if (this.substSkills) { | ||
convertArrayFromHTML(playerRow.cells, this.colIdx.Einz, player.skillsEnd, function(value, cell, unused, index) { | |||
if (~ __IDXPRI.indexOf(index)) { | |||
formatCell(cell, true, __OSBLAU, __POS1COLOR, 1.0); | |||
} | |||
return value; | |||
}); | |||
} else if (this.colIdx.Einz) { | |||
convertArrayFromHTML(playerRow.cells, this.colIdx.Einz, player.skills.length, function(value, cell, unused, index) { | |||
if (~ __IDXPRI.indexOf(index)) { | if (~ __IDXPRI.indexOf(index)) { | ||
formatCell(cell, true, | formatCell(cell, true, __POS1COLOR, null, 1.0); | ||
} | } | ||
return value; | return value; | ||
}); | }); | ||
} | } | ||
if (this.trE) { | if (this.trE) { | ||
Zeile 4.670: | Zeile 4.480: | ||
} | } | ||
} | } | ||
} | } // Ende addValues(player, playerRow) | ||
}); | }); | ||
Zeile 4.723: | Zeile 4.522: | ||
// this.trainiert: Anzahl der erfolgreichen Trainingspunkte | // this.trainiert: Anzahl der erfolgreichen Trainingspunkte | ||
// indirekt this.zatAge und this.bestPos | // indirekt this.zatAge und this.bestPos | ||
// in this.getPos() definiert: | // in this.getPos() definiert: | ||
Zeile 4.768: | Zeile 4.563: | ||
return result; | return result; | ||
}, // Ende this.toString() | }, // Ende this.toString() | ||
'initPlayer' : function(data, index, | 'initPlayer' : function(data, index, skillData = false) { // skillData: true = Skilldaten, false = Basiswerte (Geb., Talent, Aufwertungen) | ||
if (data !== undefined) { | if (data !== undefined) { | ||
if ( | if (skillData) { | ||
this.setSkills(data[index]); | this.setSkills(data[index]); | ||
} else | } else { | ||
this.setGeb(data[0][index]); | this.setGeb(data[0][index]); | ||
this.talent = data[1][index]; | this.talent = data[1][index]; | ||
this.aufwert = data[2][index]; | this.aufwert = data[2][index]; | ||
} | } | ||
} | } | ||
}, // Ende this.initPlayer() | }, // Ende this.initPlayer() | ||
'setSkills' : function(skills) { | 'setSkills' : function(skills) { | ||
// Berechnet die Opti-Werte, sortiert das Positionsfeld und berechnet die Einzelskills mit Ende 18 | // Berechnet die Opti-Werte, sortiert das Positionsfeld und berechnet die Einzelskills mit Ende 18 | ||
Zeile 4.887: | Zeile 4.661: | ||
if (when === this.__TIME.end) { | if (when === this.__TIME.end) { | ||
return (18 - 12) * 72 - 1; // (max.) Trainings-ZATs bis Ende 18 | return (18 - 12) * 72 - 1; // (max.) Trainings-ZATs bis Ende 18 | ||
} else | } else { | ||
return this.zatAge; | return this.zatAge; | ||
} | } | ||
}, | }, | ||
Zeile 4.904: | Zeile 4.674: | ||
return this.zatLeft; | return this.zatLeft; | ||
}, | }, | ||
'getAge' : function(when = this.__TIME.now) { | 'getAge' : function(when = this.__TIME.now) { | ||
Zeile 5.130: | Zeile 4.891: | ||
}); | }); | ||
// | // Funktionen fuer die HTML-Seite ******************************************************* | ||
function | // Liest eine Zahl aus der Spalte einer Zeile der Tabelle aus (z.B. Alter, Geburtsdatum) | ||
// cells: Die Zellen einer Zeile | |||
// colIdxInt: Spaltenindex der gesuchten Werte | |||
// return Spalteneintrag als Zahl (-1 fuer "keine Zahl", undefined fuer "nicht gefunden") | |||
function getIntFromHTML(cells, colIdxInt) { | |||
const __CELL = getValue(cells[colIdxInt], { }); | |||
const __TEXT = __CELL.textContent; | |||
if (__TEXT !== undefined) { | |||
try { | |||
const __VALUE = parseInt(__TEXT, 10); | |||
if (! isNaN(__VALUE)) { | |||
return __VALUE; | |||
} | |||
} catch (ex) { } | |||
return -1; | |||
} | } | ||
return undefined; | |||
} | } | ||
// Liest eine Dezimalzahl aus der Spalte einer Zeile der Tabelle aus | |||
// cells: Die Zellen einer Zeile | |||
// colIdxInt: Spaltenindex der gesuchten Werte | |||
// return Spalteneintrag als Dezimalzahl (undefined fuer "keine Zahl" oder "nicht gefunden") | |||
function getFloatFromHTML(cells, colIdxFloat) { | |||
const __CELL = getValue(cells[colIdxFloat], { }); | |||
const __TEXT = __CELL.textContent; | |||
if (__TEXT !== undefined) { | |||
try { | |||
return parseFloat(__TEXT); | |||
} catch (ex) { } | |||
} | |||
return undefined; | |||
} | |||
// Liest einen String aus der Spalte einer Zeile der Tabelle aus | |||
// cells: Die Zellen einer Zeile | |||
// colIdxStr: Spaltenindex der gesuchten Werte | |||
// return Spalteneintrag als String ("" fuer "nicht gefunden") | |||
function getStringFromHTML(cells, colIdxStr) { | |||
const __CELL = getValue(cells[colIdxStr], { }); | |||
const __TEXT = __CELL.textContent; | |||
return getValue(__TEXT.toString(), ""); | |||
} | |||
// | // Liest die Talentklasse ("wenig", "normal", "hoch") aus der Spalte einer Zeile der Tabelle aus | ||
// cells: Die Zellen einer Zeile | |||
// colIdxStr: Spaltenindex der gesuchten Werte | |||
// return Talent als Zahl (-1=wenig, 0=normal, +1=hoch) | |||
function getTalentFromHTML(cells, colIdxTal) { | |||
const __TEXT = getStringFromHTML(cells, colIdxTal); | |||
return parseInt((__TEXT === 'wenig') ? -1 : (__TEXT === 'hoch') ? +1 : 0, 10); | |||
} | |||
// Liest die Einzelskills aus der Spalte einer Zeile der Tabelle aus | |||
// cells: Die Zellen einer Zeile | |||
// colIdx: Liste von Spaltenindices der gesuchten Werte mit den Eintraegen | |||
// 'Einz' (erste Spalte) und 'Zus' (Spalte hinter dem letzten Eintrag) | |||
// return Skills als Array von Zahlen | |||
function getSkillsFromHTML(cells, colIdx) { | |||
const __RESULT = []; | |||
for (let i = colIdx.Einz; i < colIdx.Zus; i++) { | |||
__RESULT[i - colIdx.Einz] = getIntFromHTML(cells, i); | |||
} | |||
return __RESULT; | |||
} | |||
// Liest aus, ob der Spieler Torwart oder Feldspieler ist | |||
// cells: Die Zellen einer Zeile | |||
// colIdxClass: Spaltenindex einer fuer TOR eingefaerbten Zelle | |||
// return Angabe, der Spieler Torwart oder Feldspieler ist | |||
function isGoalieFromHTML(cells, colIdxClass) { | |||
return (cells[colIdxClass].className === 'TOR'); | |||
} | } | ||
// Liest einen String aus der Spalte einer Zeile der Tabelle aus, nachdem dieser konvertiert wurde | |||
// cells: Die Zellen einer Zeile | |||
// colIdxStr: Spaltenindex der gesuchten Werte | |||
// convertFun: Funktion, die den Wert konvertiert | |||
// return Spalteneintrag als String ("" fuer "nicht gefunden") | |||
function convertStringFromHTML(cells, colIdxStr, convertFun = sameValue) { | |||
const __CELL = getValue(cells[colIdxStr], { }); | |||
const __TEXT = convertFun(__CELL.textContent, __CELL, colIdxStr, 0); | |||
if (__TEXT !== undefined) { | |||
__CELL.innerHTML = __TEXT; | |||
} | |||
return getValue(__TEXT.toString(), ""); | |||
} | |||
// Liest ein Array von String-Werten aus den Spalten ab einer Zeile der Tabelle aus, nachdem diese konvertiert wurden | |||
// cells: Die Zellen einer Zeile | |||
// colIdxArr: Erster Spaltenindex der gesuchten Werte | |||
// arrOrLength: Entweder ein Datenarray zum Fuellen oder die Anzahl der zu lesenden Werte | |||
// convertFun: Funktion, die die Werte konvertiert | |||
// return Array mit Spalteneintraegen als String ("" fuer "nicht gefunden") | |||
function convertArrayFromHTML(cells, colIdxArr, arrOrLength = 1, convertFun = sameValue) { | |||
const __ARR = ((typeof arrOrSize === 'number') ? { } : arrOrLength); | |||
const __LENGTH = getValue(__ARR.length, arrOrLength); | |||
const __RET = []; | |||
for (let index = 0, colIdx = colIdxArr; index < __LENGTH; index++, colIdx++) { | |||
const __CELL = getValue(cells[colIdx], { }); | |||
const __TEXT = convertFun(getValue(__ARR[index], __CELL.textContent), __CELL, colIdx, index); | |||
if (__TEXT !== undefined) { | |||
__CELL.innerHTML = __TEXT; | |||
} | |||
__RET.push(getValue(__TEXT, "").toString()); | |||
} | |||
return __RET; | |||
} | |||
// Konvertiert den Aufwertungstext einer Zelle auf der Jugend-Teamuebersicht | |||
// value: Der Inhalt dieser Zeile ("+1 SKI +1 OPT" bzw. "+2 SKI) | |||
// cell: Zelle, in der der Text stand (optional) | |||
// return Der konvertierte String ("SKI OPT" bzw. "SKI SKI") | |||
function convertAufwertung(value, cell = undefined) { | |||
if (value !== undefined) { | |||
value = value.replace(/\+2 (\w+)/, "$1 $1").replace(/\+1 /g, ""); | |||
if (cell) { | |||
if (cell.className === 'TOR') { | |||
value = convertGoalieSkill(value); | |||
} | |||
cell.align = 'left'; | |||
} | |||
} | |||
} | |||
return value; | |||
} | |||
// | // Konvertiert die allgemeinen Skills in die eines Torwarts | ||
// value: Ein Text, der die Skillnamen enthaelt | |||
// return Der konvertierte String mit Aenderungen (z.B. "FAN" statt "KOB") oder unveraendert | |||
function convertGoalieSkill(value) { | |||
if (value !== undefined) { | |||
value = value.replace(/\w+/g, getGoalieSkill); | |||
} | |||
return value; | |||
} | |||
// Konvertiert einen Aufwertungstext fuer einen Skillnamen in den fuer einen Torwart | |||
// name: Allgemeiner Skillname (abgeleitet von den Feldspielern) | |||
// return Der konvertierte String (z.B. "FAN" statt "KOB") oder unveraendert | |||
function getGoalieSkill(name) { | |||
const __GOALIESKILLS = { | |||
'SCH' : 'ABS', | |||
'BAK' : 'STS', | |||
'KOB' : 'FAN', | |||
'ZWK' : 'STB', | |||
'DEC' : 'SPL', | |||
'GES' : 'REF' | |||
}; | |||
return getValue(__GOALIESKILLS[name], name); | |||
} | } | ||
// Liest die Aufwertungen eines Spielers aus und konvertiert je nachdem, ob der Spieler Torwart oder Feldspieler ist | |||
// cells: Die Zellen einer Zeile | |||
// colIdxAuf: Spaltenindex der gesuchten Aufwertungen | |||
// shortForm: true = abgekuerzt, false = Originalform | |||
// return Konvertierte Aufwertungen (kurze oder lange Form, aber in jedem Fall fuer Torwart konvertiert) | |||
function getAufwertFromHTML(cells, colIdxAuf, shortForm = true) { | |||
const __ISGOALIE = isGoalieFromHTML(cells, colIdxAuf); | |||
return convertStringFromHTML(cells, colIdxAuf, (shortForm ? convertAufwertung : __ISGOALIE ? convertGoalieSkill : undefined)); | |||
} | |||
// Identitaetsfunktion. Konvertiert nichts, sondern liefert einfach den Wert zurueck | |||
// value: Der uebergebene Wert | |||
// return Derselbe Wert | |||
function sameValue(value) { | |||
return value; | |||
} | |||
// | // Liefert den ganzzeiligen Anteil einer Zahl zurueck, indem alles hinter einem Punkt abgeschnitten wird | ||
// value: Eine uebergebene Dezimalzahl | |||
// return Der ganzzeilige Anteil dieser Zahl | |||
function floorValue(value, dot = '.') { | |||
if ((value === 0) || (value && isFinite(value))) { | |||
const __VALUE = value.toString(); | |||
const __INDEXDOT = (__VALUE ? __VALUE.indexOf(dot) : -1); | |||
return Number((~ __INDEXDOT) ? __VALUE.substring(0, __INDEXDOT) : __VALUE); | |||
} else { | |||
return value; | |||
} | |||
} | |||
// | // Liefert einen rechtsbuendigen Text zurueck, der links aufgefuellt wird | ||
// | // value: Ein uebergebener Wert | ||
// | // size: Zielbreite (clipping fuer < 0: Abschneiden, falls zu lang) | ||
// return | // char: Zeichen zum Auffuellen | ||
function | // return Ein String, der mindestens |size| lang ist (oder genau, falls size < 0, also clipping) | ||
const | function padLeft(value, size = 4, char = ' ') { | ||
const | const __SIZE = Math.abs(size); | ||
const __CLIP = (size < 0); | |||
const __VALUE = (value ? value.toString() : ""); | |||
let i = __VALUE.length; | |||
let str = ""; | |||
while (i < __SIZE) { | |||
str += char; | |||
i += char.length; | |||
} | |||
str = ((i > __SIZE) ? str.slice(0, __SIZE - __VALUE.length - 1) : str) + __VALUE; | |||
return (__CLIP ? str.slice(size) : str); | |||
} | |||
return | // Liefert eine rechtsbuendigen Zahl zurueck, der links (mit Nullen) aufgefuellt wird | ||
// value: Eine uebergebene Zahl | |||
// size: Zielbreite (Default: 2) | |||
// char: Zeichen zum Auffuellen (Default: '0') | |||
// forceClip: Abschneiden erzwingen, falls zu lang? | |||
// return Eine Zahl als String, der mindestens 'size' lang ist (oder genau, falls size < 0, also clipping) | |||
function padNumber(value, size = 2, char = '0') { | |||
if ((value === 0) || (value && isFinite(value))) { | |||
return padLeft(value, size, char); | |||
} else { | |||
return value; | |||
} | } | ||
} | |||
// Hilfsfunktionen ********************************************************************** | |||
// | // Sortiert das Positionsfeld per BubbleSort | ||
function sortPositionArray(array) { | |||
const __TEMP = []; | |||
let transposed = true; | |||
function | // TOR soll immer die letzte Position im Feld sein, deshalb - 1 | ||
const | let length = array.length - 1; | ||
while (transposed && (length > 1)) { | |||
transposed = false; | |||
for (let i = 0; i < length - 1; i++) { | |||
} | // Vergleich Opti-Werte: | ||
if (array[i][1] < array[i + 1][1]) { | |||
// vertauschen | |||
__TEMP[0] = array[i][0]; | |||
__TEMP[1] = array[i][1]; | |||
array[i][0] = array[i + 1][0]; | |||
array[i][1] = array[i + 1][1]; | |||
array[i + 1][0] = __TEMP[0]; | |||
array[i + 1][1] = __TEMP[1]; | |||
transposed = true; | |||
} | |||
} | |||
length--; | |||
} | } | ||
} | |||
return | // 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 | return result; | ||
} | } | ||
// | // Schaut nach, ob der uebergebene Index zu einem trainierbaren Skill gehoert | ||
// | // Die Indizes gehen von 0 (SCH) bis 16 (EIN) | ||
function isTrainableSkill(idx) { | |||
const __TRAINABLESKILLS = getIdxTrainableSkills(); | |||
function | const __IDX = parseInt(idx, 10); | ||
const | let result = false; | ||
for (let idxTrainable of __TRAINABLESKILLS) { | |||
if (__IDX === idxTrainable) { | |||
result = true; | |||
break; | |||
} | |||
} | |||
return | return result; | ||
} | } | ||
// | // Gibt alle Skill-Namen zurueck | ||
function getAllSkillNames(isGoalie = false) { | |||
if (isGoalie) { | |||
return [ 'ABS', 'STS', 'FAN', 'STB', 'SPL', 'REF', 'FUQ', 'ERF', 'AGG', 'PAS', 'AUS', 'UEB', 'WID', 'SEL', 'DIS', 'ZUV', 'EIN' ]; | |||
} else { | |||
return [ 'SCH', 'BAK', 'KOB', 'ZWK', 'DEC', 'GES', 'FUQ', 'ERF', 'AGG', 'PAS', 'AUS', 'UEB', 'WID', 'SEL', 'DIS', 'ZUV', 'EIN' ]; | |||
} | |||
} | |||
// Gibt den Skill-Namen zu einem Index zurueck | |||
function getSkillName(idx, isGoalie = false) { | |||
const __ALLNAMES = getAllSkillNames(isGoalie); | |||
return | return __ALLNAMES[idx]; | ||
} | } | ||
// | // Gibt den Skill-Namen zu einem Index-Array zurueck | ||
function getSkillNameArray(idxArr, isGoalie = false) { | |||
return (idxArr ? idxArr.map(function(item) { | |||
return getSkillName(item, isGoalie); | |||
function | }) : idxArr); | ||
return ( | |||
} | } | ||
// | // Gibt die Indizes aller Skills zurueck | ||
function getIdxAllSkills() { | |||
return [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; | |||
} | |||
function | |||
// Gibt die Indizes der trainierbaren Skills zurueck | |||
function getIdxTrainableSkills() { | |||
return [ 0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 15 ]; | |||
} | |||
return | // Gibt die Indizes der Fixskills zurueck | ||
function getIdxFixSkills() { | |||
return [ 6, 7, 12, 13, 14, 16 ]; | |||
} | } | ||
// | // Gibt die Indizes der Primaerskills zurueck | ||
function getIdxPriSkills(pos) { | |||
switch (pos) { | |||
case 'TOR' : return [ 2, 3, 4, 5 ]; | |||
case 'ABW' : return [ 2, 3, 4, 15 ]; | |||
case 'DMI' : return [ 1, 4, 9, 11 ]; | |||
case 'MIT' : return [ 1, 3, 9, 11 ]; | |||
case 'OMI' : return [ 1, 5, 9, 11 ]; | |||
case 'STU' : return [ 0, 2, 3, 5 ]; | |||
default : return []; | |||
} | |||
} | |||
// Gibt die Indizes der (trainierbaren) Sekundaerskills zurueck | |||
function getIdxSecSkills(pos) { | |||
switch (pos) { | |||
case 'TOR' : return [ 0, 1, 8, 9, 10, 11, 15 ]; | |||
case 'ABW' : return [ 0, 1, 5, 8, 9, 10, 11 ]; | |||
case 'DMI' : return [ 0, 2, 3, 5, 8, 10, 15 ]; | |||
case 'MIT' : return [ 0, 2, 4, 5, 8, 10, 15 ]; | |||
case 'OMI' : return [ 0, 2, 3, 4, 8, 10, 15 ]; | |||
case 'STU' : return [ 1, 4, 8, 9, 10, 11, 15 ]; | |||
default : return []; | |||
} | |||
} | |||
// Gibt die zur Position gehoerige Farbe zurueck | |||
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"; | |||
case "" : return "#111166"; // osBlau | |||
default : return ""; | |||
} | } | ||
} | } | ||
// | // ==================== Ende Abschnitt genereller Code zur Anzeige der Jugend ==================== | ||
// ==================== Abschnitt fuer interne IDs auf den Seiten ==================== | |||
const __GAMETYPENRN = { // "Blind FSS gesucht!" | |||
'unbekannt' : -1, | |||
'reserviert' : 0, | |||
'Frei' : 0, | |||
'spielfrei' : 0, | |||
'Friendly' : 1, | |||
'Liga' : 2, | |||
'LP' : 3, | |||
'OSEQ' : 4, | |||
'OSE' : 5, | |||
'OSCQ' : 6, | |||
'OSC' : 7, | |||
'Supercup' : 10 | |||
}; | |||
const __GAMETYPEALIASES = { | |||
'unbekannt' : "unbekannt", | |||
'reserviert' : undefined, | |||
'Frei' : undefined, | |||
'spielfrei' : "", | |||
'Friendly' : "FSS", | |||
'Liga' : undefined, | |||
'LP' : "Pokal", | |||
'OSEQ' : undefined, | |||
'OSE' : undefined, | |||
'OSCQ' : undefined, | |||
'OSC' : undefined, | |||
'Supercup' : "Super" | |||
}; | |||
const __GAMETYPES = reverseMapping(__GAMETYPENRN); | |||
const __LIGANRN = { | |||
'unbekannt' : 0, | |||
'1. Liga' : 1, | |||
'2. Liga A' : 2, | |||
'2. Liga B' : 3, | |||
'3. Liga A' : 4, | |||
'3. Liga B' : 5, | |||
'3. Liga C' : 6, | |||
'3. Liga D' : 7 | |||
}; | |||
const __LIGATYPES = reverseMapping(__LIGANRN); | |||
const __LANDNRN = { | |||
'unbekannt' : 0, | |||
'Albanien' : 45, | |||
'Andorra' : 95, | |||
'Armenien' : 83, | |||
'Aserbaidschan' : 104, | |||
'Belgien' : 12, | |||
'Bosnien-Herzegowina' : 66, | |||
'Bulgarien' : 42, | |||
'D\xE4nemark' : 8, | |||
'Deutschland' : 6, | |||
'England' : 1, | |||
'Estland' : 57, | |||
'Far\xF6er' : 68, | |||
'Finnland' : 40, | |||
'Frankreich' : 32, | |||
'Georgien' : 49, | |||
'Griechenland' : 30, | |||
'Irland' : 5, | |||
'Island' : 29, | |||
'Israel' : 23, | |||
'Italien' : 10, | |||
'Kasachstan' : 105, | |||
'Kroatien' : 24, | |||
'Lettland' : 97, | |||
'Liechtenstein' : 92, | |||
'Litauen' : 72, | |||
'Luxemburg' : 93, | |||
'Malta' : 69, | |||
'Mazedonien' : 86, | |||
'Moldawien' : 87, | |||
'Niederlande' : 11, | |||
'Nordirland' : 4, | |||
'Norwegen' : 9, | |||
'\xD6sterreich' : 14, | |||
'Polen' : 25, | |||
'Portugal' : 17, | |||
'Rum\xE4nien' : 28, | |||
'Russland' : 19, | |||
'San Marino' : 98, | |||
'Schottland' : 2, | |||
'Schweden' : 27, | |||
'Schweiz' : 37, | |||
'Serbien und Montenegro' : 41, | |||
'Slowakei' : 70, | |||
'Slowenien' : 21, | |||
'Spanien' : 13, | |||
'Tschechien' : 18, | |||
'T\xFCrkei' : 39, | |||
'Ukraine' : 20, | |||
'Ungarn' : 26, | |||
'Wales' : 3, | |||
'Weissrussland' : 71, | |||
'Zypern' : 38 | |||
}; | |||
const __LAENDER = reverseMapping(__LANDNRN); | |||
const __TLALAND = { | |||
undefined : 'unbekannt', | |||
'ALB' : 'Albanien', | |||
'AND' : 'Andorra', | |||
'ARM' : 'Armenien', | |||
'AZE' : 'Aserbaidschan', | |||
'BEL' : 'Belgien', | |||
'BIH' : 'Bosnien-Herzegowina', | |||
'BUL' : 'Bulgarien', | |||
'DEN' : 'D\xE4nemark', | |||
'GER' : 'Deutschland', | |||
'ENG' : 'England', | |||
'EST' : 'Estland', | |||
'FRO' : 'Far\xF6er', | |||
'FIN' : 'Finnland', | |||
'FRA' : 'Frankreich', | |||
'GEO' : 'Georgien', | |||
'GRE' : 'Griechenland', | |||
'IRL' : 'Irland', | |||
'ISL' : 'Island', | |||
'ISR' : 'Israel', | |||
'ITA' : 'Italien', | |||
'KAZ' : 'Kasachstan', | |||
'CRO' : 'Kroatien', | |||
'LVA' : 'Lettland', | |||
'LIE' : 'Liechtenstein', | |||
'LTU' : 'Litauen', | |||
'LUX' : 'Luxemburg', | |||
'MLT' : 'Malta', | |||
'MKD' : 'Mazedonien', | |||
'MDA' : 'Moldawien', | |||
'NED' : 'Niederlande', | |||
'NIR' : 'Nordirland', | |||
'NOR' : 'Norwegen', | |||
'AUT' : '\xD6sterreich', | |||
'POL' : 'Polen', | |||
'POR' : 'Portugal', | |||
'ROM' : 'Rum\xE4nien', | |||
'RUS' : 'Russland', | |||
'SMR' : 'San Marino', | |||
'SCO' : 'Schottland', | |||
'SWE' : 'Schweden', | |||
'SUI' : 'Schweiz', | |||
'SCG' : 'Serbien und Montenegro', | |||
'SVK' : 'Slowakei', | |||
'SVN' : 'Slowenien', | |||
'ESP' : 'Spanien', | |||
'CZE' : 'Tschechien', | |||
'TUR' : 'T\xFCrkei', | |||
'UKR' : 'Ukraine', | |||
'HUN' : 'Ungarn', | |||
'WAL' : 'Wales', | |||
'BLR' : 'Weissrussland', | |||
'CYP' : 'Zypern' | |||
}; | |||
const __LANDTLAS = reverseMapping(__TLALAND); | |||
// | // ==================== Abschnitt fuer Daten des Spielplans ==================== | ||
// Gibt die ID fuer den Namen eines Wettbewerbs zurueck | |||
// gameType: Name des Wettbewerbs eines Spiels | |||
// defValue: Default-Wert | |||
// return OS2-ID fuer den Spieltyp (1 bis 7 oder 10), 0 fuer "spielfrei"/"Frei"/"reserviert", -1 fuer ungueltig | |||
function getGameTypeID(gameType, defValue = __GAMETYPENRN.unbekannt) { | |||
return getValue(__GAMETYPENRN[gameType], defValue); | |||
} | } | ||
// | // Gibt den Namen eines Wettbewerbs zurueck | ||
// | // id: OS2-ID des Wettbewerbs eines Spiels (1 bis 7 oder 10), 0 fuer "spielfrei"/"Frei"/"reserviert", -1 fuer ungueltig | ||
// | // defValue: Default-Wert | ||
// | // return Spieltyp fuer die uebergebene OS2-ID | ||
// return | function getGameType(id, defValue) { | ||
function | return getValue(__GAMETYPES[id], defValue); | ||
} | |||
// Gibt den alternativen (Kurznamen) fuer den Namen eines Wettbewerbs zurueck | |||
// gameType: Name des Wettbewerbs eines Spiels | |||
// return Normalerweise den uebergebenen Parameter, in Einzelfaellen eine Kurzversion | |||
function getGameTypeAlias(gameType) { | |||
return getValue(__GAMETYPEALIASES[gameType], getValue(gameType, __GAMETYPEALIASES.unbekannt)); | |||
return ( | |||
} | } | ||
// | // Gibt den Namen des Landes mit dem uebergebenen Kuerzel (TLA) zurueck. | ||
// | // tla: Kuerzel (TLA) des Landes | ||
// defValue: Default-Wert | |||
// | // return Name des Landes, 'unbekannt' fuer undefined | ||
function getLandName(tla, defValue = __TLALAND[undefined]) { | |||
// return | return getValue(__TLALAND[tla], defValue); | ||
function | |||
} | } | ||
// | // Gibt die ID des Landes mit dem uebergebenen Namen zurueck. | ||
// land: Name des Landes | |||
// defValue: Default-Wert | |||
// return OS2-ID des Landes, 0 fuer ungueltig | |||
function getLandNr(land, defValue = __LANDNRN.unbekannt) { | |||
return getValue(__LANDNRN[land], defValue); | |||
} | |||
// | // Gibt die ID der Liga mit dem uebergebenen Namen zurueck. | ||
function | // land: Name der Liga | ||
// defValue: Default-Wert | |||
// return OS2-ID der Liga, 0 fuer ungueltig | |||
function getLigaNr(liga, defValue = __LIGANRN.unbekannt) { | |||
return getValue(__LIGANRN[liga], defValue); | |||
} | |||
// Kehrt das Mapping eines Objekts um und liefert ein neues Objekt zurueck. | |||
// obj: Objekt mit key => value | |||
// convFun: Konvertierfunktion fuer die Werte | |||
// return Neues Objekt mit value => key (doppelte value-Werte fallen heraus!) | |||
function reverseMapping(obj, convFun) { | |||
if (! obj) { | |||
return obj; | |||
} | } | ||
const __RET = { }; | |||
for (let key in obj) { | |||
const | const __VALUE = obj[key]; | ||
__RET[__VALUE] = (convFun ? convFun(key) : key); | |||
} | } | ||
return | return __RET; | ||
} | } | ||
// | // ==================== Abschnitt fuer sonstige Parameter ==================== | ||
// | // Formatiert eine Zelle um (mit einfachen Parametern) | ||
function | // cell: Zu formatierende Zelle | ||
// bold: Inhalt fett darstellen (true = ja, false = nein) | |||
// color: Falls angegeben, die Schriftfarbe | |||
// bgColor: Falls angegeben, die Hintergrundfarbe | |||
} | // opacity: Falls angegeben, die Opazitaet | ||
// return Die formatierte Zelle | |||
function formatCell(cell, bold = true, color = undefined, bgColor = undefined, opacity = undefined) { | |||
if (cell) { | |||
if (bold) { | |||
cell.style.fontWeight = 'bold'; | |||
} | |||
if (color) { | |||
cell.style.color = color; | |||
} | |||
if (bgColor) { | |||
cell.style.backgroundColor = bgColor; | |||
} | |||
if (opacity) { | |||
cell.style.opacity = opacity; | |||
} | |||
} | |||
return cell; | |||
return | |||
} | } | ||
// | // Ermittelt die auszugewaehlenden Werte eines Selects (Combo-Box) als Array zurueck | ||
// element: 'select'-Element oder dessen Name auf der HTML-Seite mit 'option'-Eintraegen der Combo-Box | |||
// valType: Typ-Klasse der Optionswerte ('String', 'Number', ...) | |||
// valFun: Funktion zur Ermittlung des Wertes eines 'option'-Eintrags (getSelectedOptionText, getSelectedValue, ...) | |||
// defValue: Default-Wert, falls nichts selektiert ist | |||
// return Array mit den Options-Werten | |||
function getSelectionArray(element, valType = 'String', valFun = getSelectedValue, defValue = undefined) { | |||
const __SELECT = ((typeof element) === 'string' ? getValue(document.getElementsByName(element), [])[0] : element); | |||
return (__SELECT ? [].map.call(__SELECT.options, function(option) { | |||
function | return this[valType](getValue(valFun(option), defValue)); | ||
}) : undefined); | |||
} | } | ||
// | // Ermittelt den ausgewaehlten Wert eines Selects (Combo-Box) und gibt diesen zurueck | ||
function | // element: 'select'-Element oder dessen Name auf der HTML-Seite mit 'option'-Eintraegen der Combo-Box | ||
return [ | // valType: Typ-Klasse der Optionswerte ('String', 'Number', ...) | ||
// valFun: Funktion zur Ermittlung des Wertes eines 'option'-Eintrags (getSelectedOptionText, getSelectedValue, ...) | |||
// defValue: Default-Wert, falls nichts selektiert ist | |||
// return Ausgewaehlter Wert | |||
function getSelection(element, valType = 'String', valFun = getSelectedOptionText, defValue = undefined) { | |||
const __SELECT = ((typeof element) === 'string' ? getValue(document.getElementsByName(element), [])[0] : element); | |||
return this[valType](getValue(valFun(__SELECT), defValue)); | |||
} | } | ||
// | // Ermittelt den ausgewaehlten Wert einer Combo-Box und gibt diesen zurueck | ||
// comboBox: Alle 'option'-Eintraege der Combo-Box | |||
// defValue: Default-Wert, falls nichts selektiert ist | |||
// valType: Typ-Klasse der Optionswerte ('String', 'Number', ...) | |||
// return Ausgewaehlter Wert | |||
function getSelectionFromComboBox(comboBox, defValue = undefined, valType = 'String') { | |||
let selection; | |||
for (let i = 0; i < comboBox.length; i++) { | |||
const __ENTRY = comboBox[i]; | |||
if (__ENTRY.outerHTML.match(/selected/)) { | |||
selection = __ENTRY.textContent; | |||
} | |||
} | } | ||
return this[valType](getValue(selection, defValue)); | |||
} | } | ||
// | // Liefert den Text (textContent) einer selektierten Option | ||
function | // element: 'select'-Element auf der HTML-Seite mit 'option'-Eintraegen der Combo-Box | ||
// return Wert der Selektion (textContent) | |||
function getSelectedOptionText(element) { | |||
const __SELECTEDOPTIONS = getValue(element, { }).selectedOptions; | |||
const __OPTION = getValue(__SELECTEDOPTIONS, { })[0]; | |||
return (__OPTION ? __OPTION.textContent : undefined); | |||
} | |||
// Liefert den 'value' einer selektierten Option | |||
// element: 'select'-Element auf der HTML-Seite mit 'option'-Eintraegen der Combo-Box | |||
} | // return Wert der Selektion ('value') | ||
function getSelectedValue(element) { | |||
return getValue(element, { }).value; | |||
} | } | ||
// ==================== Ende Abschnitt | // ==================== Ende Abschnitt fuer sonstige Parameter ==================== | ||
// ==================== Abschnitt fuer | // ==================== Abschnitt fuer sonstige Parameter des Spielplans ==================== | ||
const | const __TEAMSEARCHHAUPT = { // Parameter zum Team "<b>Willkommen im Managerbüro von TEAM</b><br>LIGA LAND<a href=..." | ||
' | 'Zeile' : 0, | ||
'Spalte' : 1, | |||
'start' : " von ", | |||
'middle' : "</b><br>", | |||
' | 'liga' : ". Liga", | ||
' | 'land' : ' ', | ||
'end' : "<a href=" | |||
' | |||
' | |||
' | |||
' | |||
}; | }; | ||
const | const __TEAMSEARCHTEAM = { // Parameter zum Team "<b>TEAM - LIGA <a href=...>LAND</a></b>" | ||
'Zeile' : 0, | |||
' | 'Spalte' : 0, | ||
' | 'start' : "<b>", | ||
' | 'middle' : " - ", | ||
' | 'liga' : ". Liga", | ||
' | 'land' : 'target="_blank">', | ||
'end' : "</a></b>" | |||
' | |||
' | |||
}; | }; | ||
// 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 "startTEAMmiddleLIGA...landLANDend", LIGA = "#liga[ (A|B|C|D)]" | |||
// teamSeach: Muster fuer die Suche, die Eintraege fuer 'start', 'middle', 'liga', 'land' und 'end' enthaelt | |||
// return Im Beispiel { 'Team' : "TEAM", 'Liga' : "LIGA", 'Land' : "LAND", 'LdNr' : LAND-NUMMER, 'LgNr' : LIGA-NUMMER }, | |||
// z.B. { 'Team' : "Choromonets Odessa", 'Liga' : "1. Liga", 'Land' : "Ukraine", 'LdNr' : 20, 'LgNr' : 1 } | |||
function getTeamParamsFromTable(table, teamSearch = undefined) { | |||
const __TEAMSEARCH = getValue(teamSearch, __TEAMSEARCHHAUPT); | |||
const __TEAMCELLROW = getValue(__TEAMSEARCH.Zeile, 0); | |||
const __TEAMCELLCOL = getValue(__TEAMSEARCH.Spalte, 0); | |||
const __TEAMCELLSTR = (table === undefined) ? "" : table.rows[__TEAMCELLROW].cells[__TEAMCELLCOL].innerHTML; | |||
const | const __SEARCHSTART = __TEAMSEARCH.start; | ||
const __SEARCHMIDDLE = __TEAMSEARCH.middle; | |||
const __SEARCHLIGA = __TEAMSEARCH.liga; | |||
const __SEARCHLAND = __TEAMSEARCH.land; | |||
const __SEARCHEND = __TEAMSEARCH.end; | |||
const __INDEXSTART = __TEAMCELLSTR.indexOf(__SEARCHSTART); | |||
const __INDEXEND = __TEAMCELLSTR.indexOf(__SEARCHEND); | |||
let teamParams = __TEAMCELLSTR.substring(__INDEXSTART + __SEARCHSTART.length, __INDEXEND); | |||
const __INDEXLIGA = teamParams.indexOf(__SEARCHLIGA); | |||
const __INDEXMIDDLE = teamParams.indexOf(__SEARCHMIDDLE); | |||
let land = ((~ __INDEXLIGA) ? teamParams.substring(__INDEXLIGA + __SEARCHLIGA.length) : undefined); | |||
const __TEAMNAME = ((~ __INDEXMIDDLE) ? teamParams.substring(0, __INDEXMIDDLE) : undefined); | |||
let liga = (((~ __INDEXLIGA) && (~ __INDEXMIDDLE)) ? teamParams.substring(__INDEXMIDDLE + __SEARCHMIDDLE.length) : undefined); | |||
if (land !== undefined) { | |||
if (land.charAt(2) === ' ') { // Land z.B. hinter "2. Liga A " statt "1. Liga " | |||
land = land.substr(2); | |||
' | } | ||
if (liga !== undefined) { | |||
liga = liga.substring(0, liga.length - land.length); | |||
} | |||
const __INDEXLAND = land.indexOf(__SEARCHLAND); | |||
if (~ __INDEXLAND) { | |||
land = land.substr(__INDEXLAND + __SEARCHLAND.length); | |||
} | |||
} | |||
const __TEAM = new Team(__TEAMNAME, land, liga); | |||
return __TEAM; | |||
} | |||
// Verarbeitet die URL der Seite und ermittelt die Nummer der gewuenschten Unterseite | |||
// url: Adresse der Seite | |||
// leafs: Liste von Filenamen mit der Default-Seitennummer (falls Query-Parameter nicht gefunden) | |||
// item: Query-Parameter, der die Nummer der Unterseite angibt | |||
// return Parameter aus der URL der Seite als Nummer | |||
function getPageIdFromURL(url, leafs, item = 'page') { | |||
const __URI = new URI(url); | |||
const __LEAF = __URI.getLeaf(); | |||
for (let leaf in leafs) { | |||
if (__LEAF === leaf) { | |||
const __DEFAULT = leafs[leaf]; | |||
const | |||
return getValue(__URI.getQueryPar(item), __DEFAULT); | |||
} | |||
} | |||
return -1; | |||
} | |||
// Gibt die laufende Nummer des ZATs im Text einer Zelle zurueck | |||
// cell: Tabellenzelle mit der ZAT-Nummer im Text | |||
// return ZAT-Nummer im Text | |||
function getZATNrFromCell(cell) { | |||
const __TEXT = ((cell === undefined) ? [] : cell.textContent.split(' ')); | |||
let ZATNr = 0; | |||
for (let i = 1; (ZATNr === 0) && (i < __TEXT.length); i++) { | |||
if (__TEXT[i - 1] === "ZAT") { | |||
if (__TEXT[i] !== "ist") { | |||
ZATNr = parseInt(__TEXT[i], 10); | |||
} | |||
} | |||
} | |||
return ZATNr; | |||
} | |||
// ==================== Ende Abschnitt fuer sonstige Parameter des Spielplans ==================== | |||
// ==================== Abschnitt fuer | // ==================== Ende Abschnitt fuer Spielplan und ZATs ==================== | ||
// | // ==================== Hauptprogramm ==================== | ||
// | // Verarbeitet Ansicht "Haupt" (Managerbuero) zur Ermittlung des aktuellen ZATs | ||
function procHaupt() { | |||
const __TEAMPARAMS = getTeamParamsFromTable(getTable(1), __TEAMSEARCHHAUPT); // Link mit Team, Liga, Land... | |||
function | |||
return buildOptions(__OPTCONFIG, __OPTSET, { | |||
'teamParams' : __TEAMPARAMS, | |||
'hideMenu' : true | |||
}).then(async optSet => { | |||
const __ZATCELL = getProp(getProp(getRows(0), 2), 'cells', { })[0]; | |||
const __NEXTZAT = getZATNrFromCell(__ZATCELL); // "Der naechste ZAT ist ZAT xx und ..." | |||
const __CURRZAT = __NEXTZAT - 1; | |||
const __DATAZAT = getOptValue(__OPTSET.datenZat); | |||
// | // Stand der alten Daten merken... | ||
setOpt(__OPTSET.oldDatenZat, __DATAZAT, false); | |||
if (__CURRZAT >= 0) { | |||
__LOG[2]("Aktueller ZAT: " + __CURRZAT); | |||
// | // Neuen aktuellen ZAT speichern... | ||
setOpt(__OPTSET.aktuellerZat, __CURRZAT, false); | |||
if (__CURRZAT !== __DATAZAT) { | |||
__LOG[2](__LOG.changed(__DATAZAT, __CURRZAT)); | |||
// ... und ZAT-bezogene Daten als veraltet markieren (ausser 'skills' und 'positions') | |||
await __TEAMCLASS.deleteOptions({ | |||
'skills' : true, | |||
'positions' : true, | |||
'datenZat' : true, | |||
'oldDatenZat' : true | |||
}).catch(defaultCatch); | |||
// Neuen Daten-ZAT speichern... | |||
setOpt(__OPTSET.datenZat, __CURRZAT, false); | |||
} | |||
} | |||
}); | |||
} | |||
// Verarbeitet Ansicht "Optionen" zur Ermittlung der Jugendfoerderung | |||
function procOptionen() { | |||
return buildOptions(__OPTCONFIG, __OPTSET, { | |||
'menuAnchor' : getTable(0, 'div'), | |||
'hideMenu' : true, | |||
'getDonation' : true, | |||
'showForm' : { | |||
'foerderung' : true, | |||
'showForm' : true | |||
} | |||
}); | |||
} | } | ||
// == | // Verarbeitet Ansicht "Teamuebersicht" | ||
function procTeamuebersicht() { | |||
const __ROWOFFSETUPPER = 1; // Header-Zeile | |||
const __ROWOFFSETLOWER = 1; // Ziehen-Button | |||
const __COLUMNINDEX = { | |||
'Age' : 0, | |||
'Geb' : 1, | |||
'Flg' : 2, | |||
'Land' : 3, | |||
'U' : 4, | |||
'Skill' : 5, | |||
'Tal' : 6, | |||
'Akt' : 7, | |||
'Auf' : 8, | |||
'Zus' : 9 | |||
}; | |||
} | |||
return | if (getElement('transfer') !== undefined) { | ||
__LOG[2]("Ziehen-Seite"); | |||
} else if (getRows(1) === undefined) { | |||
__LOG[2]("Diese Seite ist ohne Team nicht verf\xFCgbar!"); | |||
} else { | |||
return buildOptions(__OPTCONFIG, __OPTSET, { | |||
'menuAnchor' : getTable(0, 'div'), | |||
'showForm' : { | |||
'kennzeichenEnde' : true, | |||
'shortAufw' : true, | |||
'sepStyle' : true, | |||
'sepColor' : true, | |||
'sepWidth' : true, | |||
'saison' : true, | |||
'aktuellerZat' : true, | |||
'foerderung' : true, | |||
'team' : true, | |||
'zeigeBalken' : true, | |||
'absBalken' : true, | |||
'zeigeId' : true, | |||
'ersetzeAlter' : true, | |||
'zeigeAlter' : true, | |||
'zeigeQuote' : true, | |||
'zeigePosition' : true, | |||
'zeigeZatDone' : true, | |||
'zeigeZatLeft' : true, | |||
'zeigeFixSkills' : true, | |||
'zeigeTrainiert' : true, | |||
'zeigeAnteilPri' : true, | |||
'zeigeAnteilSec' : true, | |||
'zeigePrios' : true, | |||
'zeigeSkill' : true, | |||
'anzahlOpti' : true, | |||
'anzahlMW' : true, | |||
'zeigeTrainiertEnde' : true, | |||
'zeigeAnteilPriEnde' : true, | |||
'zeigeAnteilSecEnde' : true, | |||
'zeigePriosEnde' : true, | |||
'zeigeSkillEnde' : true, | |||
'anzahlOptiEnde' : true, | |||
'anzahlMWEnde' : true, | |||
'zatAges' : true, | |||
'trainiert' : true, | |||
'positions' : true, | |||
'skills' : true, | |||
'reset' : true, | |||
'showForm' : true | |||
}, | |||
'formWidth' : 1 | |||
}).then(optSet => { | |||
const __ROWS = getRows(1); | |||
const __HEADERS = __ROWS[0]; | |||
const __TITLECOLOR = getColor('LEI'); // "#FFFFFF" | |||
const __PLAYERS = init(__ROWS, __OPTSET, __COLUMNINDEX, __ROWOFFSETUPPER, __ROWOFFSETLOWER, true); | |||
const __COLMAN = new ColumnManager(__OPTSET, __COLUMNINDEX, { | |||
'Default' : true, | |||
'ersetzeSkills' : false, | |||
'zeigeGeb' : false, | |||
'zeigeSkill' : false, | |||
'zeigeTal' : false, | |||
'zeigeAufw' : false | |||
}); | |||
__COLMAN.addTitles(__HEADERS, __TITLECOLOR); | |||
for (let i = __ROWOFFSETUPPER, j = 0; i < __ROWS.length - __ROWOFFSETLOWER; i++) { | |||
if (__ROWS[i].cells.length > 1) { | |||
__COLMAN.addValues(__PLAYERS[j++], __ROWS[i], __TITLECOLOR); | |||
} | |||
} | |||
// Format der Trennlinie zwischen den Jahrgaengen... | |||
//const __BORDERSTRING = getOptValue(__OPTSET.sepStyle) + ' ' + getOptValue(__OPTSET.sepColor) + ' ' + getOptValue(__OPTSET.sepWidth); | |||
// | //separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Age, __ROWOFFSETUPPER, __ROWOFFSETLOWER, -1, 0, floorValue); | ||
}); | |||
} | } | ||
return | // Promise fuer alle Faelle ohne Rueckgabewert... | ||
return Promise.resolve(); | |||
} | } | ||
// | // Verarbeitet Ansicht "Spielereinzelwerte" | ||
function procSpielereinzelwerte() { | |||
const __ROWOFFSETUPPER = 1; // Header-Zeile | |||
function | const __ROWOFFSETLOWER = 0; | ||
const | |||
const | |||
const __COLUMNINDEX = { | |||
} | 'Flg' : 0, | ||
'Land' : 1, | |||
'U' : 2, | |||
'X' : 3, | |||
'Age' : 4, | |||
'Einz' : 5, // ab hier die Einzelskills | |||
'SCH' : 5, | |||
'ABS' : 5, // TOR | |||
'BAK' : 6, | |||
'STS' : 6, // TOR | |||
'KOB' : 7, | |||
'FAN' : 7, // TOR | |||
'ZWK' : 8, | |||
'STB' : 8, // TOR | |||
'DEC' : 9, | |||
'SPL' : 9, // TOR | |||
'GES' : 10, | |||
'REF' : 10, // TOR | |||
'FUQ' : 11, | |||
'ERF' : 12, | |||
'AGG' : 13, | |||
'PAS' : 14, | |||
'AUS' : 15, | |||
'UEB' : 16, | |||
'WID' : 17, | |||
'SEL' : 18, | |||
'DIS' : 19, | |||
'ZUV' : 20, | |||
'EIN' : 21, | |||
'Zus' : 22 // Zusaetze hinter den Einzelskills | |||
}; | |||
if (getRows(1) === undefined) { | |||
__LOG[2]("Diese Seite ist ohne Team nicht verf\xFCgbar!"); | |||
} else { | |||
return buildOptions(__OPTCONFIG, __OPTSET, { | |||
'menuAnchor' : getTable(0, 'div'), | |||
'hideForm' : { | |||
'zatAges' : true, | |||
// | 'trainiert' : true, | ||
'positions' : true, | |||
'skills' : true, | |||
'shortAufw' : true | |||
}, | |||
'formWidth' : 1 | |||
}).then(optSet => { | |||
const __ROWS = getRows(1); | |||
const __HEADERS = __ROWS[0]; | |||
const __TITLECOLOR = getColor('LEI'); // "#FFFFFF" | |||
const __PLAYERS = init(__ROWS, __OPTSET, __COLUMNINDEX, __ROWOFFSETUPPER, __ROWOFFSETLOWER, false); | |||
const __COLMAN = new ColumnManager(__OPTSET, __COLUMNINDEX, true); | |||
__COLMAN.addTitles(__HEADERS, __TITLECOLOR); | |||
for (let i = __ROWOFFSETUPPER, j = 0; i < __ROWS.length - __ROWOFFSETLOWER; i++) { | |||
if (__ROWS[i].cells.length > 1) { | |||
__COLMAN.addValues(__PLAYERS[j++], __ROWS[i], __TITLECOLOR); | |||
} | |||
} | |||
// | // Format der Trennlinie zwischen den Jahrgaengen... | ||
//const __BORDERSTRING = getOptValue(__OPTSET.sepStyle) + ' ' + getOptValue(__OPTSET.sepColor) + ' ' + getOptValue(__OPTSET.sepWidth); | |||
// | |||
//separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Age, __ROWOFFSETUPPER, __ROWOFFSETLOWER, -1, 0, floorValue); | |||
}); | |||
} | } | ||
// Promise fuer alle Faelle ohne Rueckgabewert... | |||
return Promise.resolve(); | |||
return | |||
} | } | ||
// Verarbeitet | // Verarbeitet Ansicht "Opt. Skill" | ||
function procOptSkill() { | |||
const __ROWOFFSETUPPER = 1; // Header-Zeile | |||
const __ROWOFFSETLOWER = 0; | |||
function | |||
const | |||
const | |||
const __COLUMNINDEX = { | |||
'Flg' : 0, | |||
'Land' : 1, | |||
'U' : 2, | |||
'Age' : 3, | |||
'Skill' : 4, | |||
'TOR' : 5, | |||
'ABW' : 6, | |||
'DMI' : 7, | |||
'MIT' : 8, | |||
'OMI' : 9, | |||
'STU' : 10, | |||
'Zus' : 11 // Zusaetze hinter den OptSkills | |||
const __COLUMNINDEX = { | |||
'Flg' : 0, | |||
'Land' : 1, | |||
'U' : 2, | |||
' | |||
' | |||
' | |||
' | |||
' | |||
' | |||
' | |||
' | |||
' | |||
}; | }; | ||
Zeile 6.489: | Zeile 5.983: | ||
'menuAnchor' : getTable(0, 'div'), | 'menuAnchor' : getTable(0, 'div'), | ||
'hideForm' : { | 'hideForm' : { | ||
'zatAges' : true, | |||
'trainiert' : true, | |||
'positions' : true, | |||
'skills' : true, | |||
'shortAufw' : true | |||
'zatAges' | |||
'trainiert' | |||
'positions' | |||
'skills' | |||
'shortAufw' | |||
}, | }, | ||
'formWidth' : 1 | 'formWidth' : 1 | ||
Zeile 6.508: | Zeile 5.995: | ||
const __TITLECOLOR = getColor('LEI'); // "#FFFFFF" | const __TITLECOLOR = getColor('LEI'); // "#FFFFFF" | ||
const __PLAYERS = init(__ROWS, __OPTSET, __COLUMNINDEX, __ROWOFFSETUPPER, __ROWOFFSETLOWER, | const __PLAYERS = init(__ROWS, __OPTSET, __COLUMNINDEX, __ROWOFFSETUPPER, __ROWOFFSETLOWER, false); | ||
const __COLMAN = new ColumnManager(__OPTSET, __COLUMNINDEX, true); | const __COLMAN = new ColumnManager(__OPTSET, __COLUMNINDEX, true); | ||
//__COLMAN.addTitles(__HEADERS, __TITLECOLOR); | |||
// | |||
for (let i = __ROWOFFSETUPPER, j = 0; i < __ROWS.length - __ROWOFFSETLOWER; i++) { | for (let i = __ROWOFFSETUPPER, j = 0; i < __ROWS.length - __ROWOFFSETLOWER; i++) { | ||
if (__ROWS[i].cells.length > 1) { | if (__ROWS[i].cells.length > 1) { | ||
__COLMAN.addValues(__PLAYERS[j++], __ROWS[i], __TITLECOLOR | //__COLMAN.addValues(__PLAYERS[j++], __ROWS[i], __TITLECOLOR); | ||
} | } | ||
} | } | ||
// Format der Trennlinie zwischen den Jahrgaengen... | // Format der Trennlinie zwischen den Jahrgaengen... | ||
//const __BORDERSTRING = getOptValue(__OPTSET.sepStyle) + ' ' + getOptValue(__OPTSET.sepColor) + ' ' + getOptValue(__OPTSET.sepWidth); | |||
//separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Age, __ROWOFFSETUPPER, __ROWOFFSETLOWER, -1, 0, floorValue); | |||
}); | }); | ||
} | } |