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.61 (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"'''<br> '''Gruppierung nach Jahrgängen U13 bis U18 (per Option)''' | ||
|- 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.61 | ||
// @copyright 2013+ | // @copyright 2013+ | ||
// @author Sven Loges (SLC) / Andreas Eckes (Strindheim BK) | // @author Sven Loges (SLC) / Andreas Eckes (Strindheim BK) | ||
Zeile 145: | Zeile 145: | ||
'AltLabel' : "Nur Saisons anzeigen", | 'AltLabel' : "Nur Saisons anzeigen", | ||
'AltHotkey' : 'u', | 'AltHotkey' : 'u', | ||
'FormLabel' : "Jahrg\xE4nge U13 bis | 'FormLabel' : "Jahrg\xE4nge U13 bis U18" | ||
}, | }, | ||
'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 585: | Zeile 519: | ||
'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 731: | Zeile 665: | ||
'Space' : 0, | 'Space' : 0, | ||
'Label' : "Aufwertungen:" | 'Label' : "Aufwertungen:" | ||
}, | }, | ||
'zatAges' : { // Datenspeicher fuer (gebrochene) Alter der Jugendspieler | 'zatAges' : { // Datenspeicher fuer (gebrochene) Alter der Jugendspieler | ||
Zeile 3.952: | Zeile 3.855: | ||
// 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.047: | Zeile 3.948: | ||
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.073: | Zeile 3.972: | ||
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); | ||
Zeile 4.088: | Zeile 3.985: | ||
__NEWPLAYER.setZusatz(__ZATAGES[__IDX], __TRAINIERT[__IDX], __POSITIONS[__IDX]); | __NEWPLAYER.setZusatz(__ZATAGES[__IDX], __TRAINIERT[__IDX], __POSITIONS[__IDX]); | ||
} | } | ||
__PLAYERS[j++] = __NEWPLAYER; | __PLAYERS[j++] = __NEWPLAYER; | ||
Zeile 4.156: | Zeile 4.051: | ||
// index: Position des Spielers im neuen Array von Spielerdaten | // index: Position des Spielers im neuen Array von Spielerdaten | ||
// catIds: PlayerIdMap zum Finden des Spielers ueber die Spielerdaten | // catIds: PlayerIdMap zum Finden des Spielers ueber die Spielerdaten | ||
// return Original-Index der Daten dieses Spielers im Array von Spielerdaten | // return Original-Index der Daten dieses Spielers im Array von Spielerdaten | ||
function selectPlayerIndex(player, index, catIds) { | function selectPlayerIndex(player, index, catIds) { | ||
const __MYCAT = player.getCat(); | const __MYCAT = player.getCat(); | ||
Zeile 4.175: | Zeile 4.070: | ||
// optSet: Gesetzte Optionen (und Config) | // optSet: Gesetzte Optionen (und Config) | ||
function setPlayerData(players, optSet) { | function setPlayerData(players, optSet) { | ||
const __ZATAGES = []; | const __ZATAGES = []; | ||
const __TRAINIERT = []; | const __TRAINIERT = []; | ||
Zeile 4.185: | Zeile 4.078: | ||
if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | if (__ZUSATZ.zatAge !== undefined) { // braucht Geburtstag fuer gueltige Werte! | ||
__ZATAGES[i] = __ZUSATZ.zatAge; | |||
} | |||
__TRAINIERT[i] = __ZUSATZ.trainiert; | |||
__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.219: | Zeile 4.101: | ||
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.328: | Zeile 4.210: | ||
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.391: | ||
}, // 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.433: | ||
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.723: | Zeile 4.596: | ||
// 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.781: | Zeile 4.650: | ||
} | } | ||
}, // 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.737: | ||
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.750: | ||
return this.zatLeft; | return this.zatLeft; | ||
}, | }, | ||
'getAge' : function(when = this.__TIME.now) { | 'getAge' : function(when = this.__TIME.now) { | ||
Zeile 5.130: | Zeile 4.967: | ||
}); | }); | ||
// | // Funktionen fuer die HTML-Seite ******************************************************* | ||
// 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 | // cells: Die Zellen einer Zeile | ||
// | // colIdxAuf: Spaltenindex der gesuchten Aufwertungen | ||
// return | // shortForm: true = abgekuerzt, false = Originalform | ||
function | // return Konvertierte Aufwertungen (kurze oder lange Form, aber in jedem Fall fuer Torwart konvertiert) | ||
const | 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; | |||
} | |||
// Existenzfunktion. Liefert zurueck, ob ein Wert belegt ist | |||
// value: Der uebergebene Wert | |||
// return Angabe ob Wert belegt ist | |||
function existValue(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 | return (__CLIP ? str.slice(size) : str); | ||
} | } | ||
// | // Liefert eine rechtsbuendigen Zahl zurueck, der links (mit Nullen) aufgefuellt wird | ||
// | // value: Eine uebergebene Zahl | ||
// | // size: Zielbreite (Default: 2) | ||
// return | // char: Zeichen zum Auffuellen (Default: '0') | ||
function | // 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--; | |||
} | |||
} | } | ||
// | // 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 = ""; | |||
function | |||
for (let i = string.length - 1; i >= 0; i--) { | |||
result += string.substr(i, 1); | |||
} | } | ||
return | return result; | ||
} | } | ||
Zeile 6.237: | Zeile 5.814: | ||
return buildOptions(__OPTCONFIG, __OPTSET, { | return buildOptions(__OPTCONFIG, __OPTSET, { | ||
'teamParams' : __TEAMPARAMS, | 'teamParams' : __TEAMPARAMS, | ||
'hideMenu' : true | |||
'hideMenu' : true | |||
}).then(async optSet => { | }).then(async optSet => { | ||
const __ZATCELL = getProp(getProp(getRows(0), 2), 'cells', { })[0]; | const __ZATCELL = getProp(getProp(getRows(0), 2), 'cells', { })[0]; | ||
Zeile 6.267: | Zeile 5.833: | ||
__LOG[2](__LOG.changed(__DATAZAT, __CURRZAT)); | __LOG[2](__LOG.changed(__DATAZAT, __CURRZAT)); | ||
// ... und ZAT-bezogene Daten als veraltet markieren (ausser 'skills' | // ... und ZAT-bezogene Daten als veraltet markieren (ausser 'skills' und 'positions') | ||
await __TEAMCLASS.deleteOptions({ | await __TEAMCLASS.deleteOptions({ | ||
'skills' : true, | 'skills' : true, | ||
'positions' : true, | 'positions' : true, | ||
'datenZat' : true, | 'datenZat' : true, | ||
'oldDatenZat' : true | 'oldDatenZat' : true | ||
}).catch(defaultCatch); | }).catch(defaultCatch); | ||
Zeile 6.280: | Zeile 5.845: | ||
} | } | ||
} | } | ||
}); | }); | ||
} | } | ||
Zeile 6.298: | Zeile 5.855: | ||
'getDonation' : true, | 'getDonation' : true, | ||
'showForm' : { | 'showForm' : { | ||
'foerderung | 'foerderung' : true, | ||
'showForm' : true | |||
'showForm' | |||
} | } | ||
}); | }); | ||
Zeile 6.337: | Zeile 5.887: | ||
'menuAnchor' : getTable(0, 'div'), | 'menuAnchor' : getTable(0, 'div'), | ||
'showForm' : { | 'showForm' : { | ||
'kennzeichenEnde' | 'kennzeichenEnde' : true, | ||
'shortAufw' | 'shortAufw' : true, | ||
'sepStyle' | 'sepStyle' : true, | ||
'sepColor' | 'sepColor' : true, | ||
'sepWidth' | 'sepWidth' : true, | ||
'saison' | 'saison' : true, | ||
'aktuellerZat' | 'aktuellerZat' : true, | ||
'foerderung' | 'foerderung' : true, | ||
'team' | 'team' : true, | ||
'zeigeJahrgang' | 'zeigeJahrgang' : true, | ||
'zeigeUxx' | 'zeigeUxx' : true, | ||
'zeigeBalken' : true, | |||
'absBalken' : true, | |||
'zeigeId' : true, | |||
'ersetzeAlter' : true, | |||
'zeigeAlter' : true, | |||
'zeigeQuote' : true, | |||
'zeigeBalken' | 'zeigePosition' : true, | ||
'absBalken' | 'zeigeZatDone' : true, | ||
'zeigeId' | 'zeigeZatLeft' : true, | ||
'ersetzeAlter' | 'zeigeFixSkills' : true, | ||
'zeigeAlter' | 'zeigeTrainiert' : true, | ||
'zeigeQuote' | 'zeigeAnteilPri' : true, | ||
'zeigePosition' | 'zeigeAnteilSec' : true, | ||
'zeigeZatDone' | 'zeigePrios' : true, | ||
'zeigeZatLeft' | 'anzahlOpti' : true, | ||
'zeigeFixSkills' | 'anzahlMW' : true, | ||
'zeigeTrainiert' | 'zeigeTrainiertEnde' : true, | ||
'zeigeAnteilPri' | 'zeigeAnteilPriEnde' : true, | ||
'zeigeAnteilSec' | 'zeigeAnteilSecEnde' : true, | ||
'zeigePrios' | 'zeigePriosEnde' : true, | ||
'anzahlOpti' | 'zeigeSkillEnde' : true, | ||
'anzahlMW' | 'anzahlOptiEnde' : true, | ||
'zeigeTrainiertEnde' | 'anzahlMWEnde' : true, | ||
'zeigeAnteilPriEnde' | 'zatAges' : true, | ||
'zeigeAnteilSecEnde' | 'trainiert' : true, | ||
'zeigePriosEnde' | 'positions' : true, | ||
'zeigeSkillEnde' | 'skills' : true, | ||
'anzahlOptiEnde' | 'reset' : true, | ||
'anzahlMWEnde' | 'showForm' : true | ||
'zatAges' | |||
'trainiert' | |||
'positions' | |||
'skills' | |||
'reset' | |||
'showForm' | |||
}, | }, | ||
'formWidth' : 1 | 'formWidth' : 1 | ||
Zeile 6.417: | Zeile 5.960: | ||
separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Land, __ROWOFFSETUPPER, __ROWOFFSETLOWER, 0, 0, existValue); | separateGroups(__ROWS, __BORDERSTRING, __COLUMNINDEX.Land, __ROWOFFSETUPPER, __ROWOFFSETLOWER, 0, 0, existValue); | ||
} | } | ||
}); | }); | ||
} | } | ||
Zeile 6.489: | Zeile 6.011: | ||
'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.560: | Zeile 6.075: | ||
'menuAnchor' : getTable(0, 'div'), | 'menuAnchor' : getTable(0, 'div'), | ||
'showForm' : { | 'showForm' : { | ||
'kennzeichenEnde' | 'kennzeichenEnde' : true, | ||
'sepStyle' | 'sepStyle' : true, | ||
'sepColor' | 'sepColor' : true, | ||
'sepWidth' | 'sepWidth' : true, | ||
'saison' | 'saison' : true, | ||
'aktuellerZat' | 'aktuellerZat' : true, | ||
'foerderung' | 'foerderung' : true, | ||
'team' | 'team' : true, | ||
'zeigeJahrgang' | 'zeigeJahrgang' : true, | ||
'zeigeUxx' | 'zeigeUxx' : true, | ||
'zeigeBalken' : true, | |||
'absBalken' : true, | |||
'zeigeId' : true, | |||
'ersetzeAlter' : true, | |||
'zeigeAlter' : true, | |||
'zeigeQuote' : true, | |||
'zeigeBalken' | 'zeigePosition' : true, | ||
'absBalken' | 'zeigeZatDone' : true, | ||
'zeigeId' | 'zeigeZatLeft' : true, | ||
'ersetzeAlter' | 'zeigeFixSkills' : true, | ||
'zeigeAlter' | 'zeigeTrainiert' : true, | ||
'zeigeQuote' | 'zeigeAnteilPri' : true, | ||
'zeigePosition' | 'zeigeAnteilSec' : true, | ||
'zeigeZatDone' | 'zeigePrios' : true, | ||
'zeigeZatLeft' | 'zeigeAufw' : true, | ||
'zeigeFixSkills' | 'zeigeGeb' : true, | ||
'zeigeTrainiert' | 'zeigeTal' : true, | ||
'zeigeAnteilPri' | 'anzahlOpti' : true, | ||
'zeigeAnteilSec' | 'anzahlMW' : true, | ||
'zeigePrios' | 'zeigeTrainiertEnde' : true, | ||
'zeigeAufw' | 'zeigeAnteilPriEnde' : true, | ||
'zeigeGeb' | 'zeigeAnteilSecEnde' : true, | ||
'zeigeTal' | 'zeigePriosEnde' : true, | ||
'anzahlOpti' | 'zeigeSkillEnde' : true, | ||
'anzahlMW' | 'anzahlOptiEnde' : true, | ||
'zeigeTrainiertEnde' | 'anzahlMWEnde' : true, | ||
'zeigeAnteilPriEnde' | 'zatAges' : true, | ||
'zeigeAnteilSecEnde' | 'trainiert' : true, | ||
'zeigePriosEnde' | 'positions' : true, | ||
'zeigeSkillEnde' | 'skills' : true, | ||
'anzahlOptiEnde' | 'reset' : true, | ||
'anzahlMWEnde' | 'showForm' : true | ||
'zatAges' | |||
'trainiert' | |||
'positions' | |||
'skills' | |||
'reset' | |||
'showForm' | |||
}, | }, | ||
'formWidth' : 1 | 'formWidth' : 1 |