NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name 2minmanXtended // @namespace https://openuserjs.org/users/Nilsnsn // @version 0.2.10 // @description Extended teamview and other tweaks for 2minman.com (Erweiterte Mannschaftsansicht und andere Verbesserungen für 2minman.com) // @include http://*.2minman.com/select.php?select=* // @include http://2minman.com/select.php?select=* // @include https://*.2minman.com/select.php?select=* // @include https://2minman.com/select.php?select=* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @require http://code.jquery.com/jquery-1.8.0.min.js // @require https://raw.github.com/ericmmartin/simplemodal/master/src/jquery.simplemodal.js // @run-at document-end // @author Nilsnsn (2mmxt@npfs.de) // @licence CC-BY-3.0 // @licence MIT // ==/UserScript== var _this = this, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; (function() { var $helpLink, $mainMenu, Constants, Helper, StrongnessOverview, Teammate, TeammateList, XtendTeam, baseUrl, css, heads, helpContent, node, type, uicss, xTend, xtMenuContainer, _ref; Constants = (function() { function Constants() {} Constants.ashuerden = [0, 0, 0, 0, 5.0, 5.0, 5.0, 5.0, 2.0, 0, 100]; Constants.lehrmeister = 1; Constants.calEpoch = new Date(2016, 10, 13); //13. November 2016 war ein Saisonstart Constants.jetzt = new Date(); Constants.calendar = ["T", "E", "L", "E", "L", "T", "L", "P", "L", "T", "L", "E", "L", "T", "L", "P", "L", "E", "L", "T", "L", "E", "L", "T", "L", "E", "L", "E", "L", "T", "L", "E", "L", "T", "L", "E", "T", "T", "P", "L", "E", "L", "T", "L", "E", "L", "P", "L", "T", "L", "E", "L", "T", "L", "P", "L", "T", "L", "P", "L", "E", "L", "T", "L", "E", "L", "P", "L", "T", "L", "E", "L", "E", "R", "P", "E", "E", "R"]; Constants.restSaison = function () { var heute = new Date(Constants.jetzt.getFullYear(), Constants.jetzt.getMonth(), Constants.jetzt.getDate()); var ms = Math.abs(heute-Constants.calEpoch); return 77 - Math.ceil(ms / (1000 * 60 * 60 * 24)) % 78; } Constants.spielerBewertung = ["katastrophal", "katastrophal", "katastrophal", "katastrophal", "sehr-schwach", "sehr-schwach", "sehr-schwach", "sehr-schwach", "schwach", "schwach", "maessig", "maessig", "maessig", "maessig", "durchschnittlich", "durchschnittlich", "durchschnittlich", "durchschnittlich", "durchschnittlich", "durchschnittlich", "okay", "okay", "okay", "okay", "okay", "okay", "okay", "gut", "gut", "gut", "gut", "gut", "gut", "gut", "sehr-gut", "sehr-gut", "sehr-gut", "sehr-gut", "sehr-gut", "sehr-gut", "herausragend", "herausragend", "herausragend", "herausragend", "herausragend", "herausragend", "herausragend", "herausragend"]; Constants.positions = { "T": "Tor", "A": "Abwehr", "M": "Mittelfeld", "S": "Sturm" }; Constants.headerRow = '<tr class="xt-header-row"><th colspan="12">XXX</th></tr>'; Constants.erfahrungGewinn = [0, 0.5875, 0.356025, 0.235, 0.1175, 0.0705, 0.047, 0.0235, 0.01175, 0.0005]; Constants.erfahrungAlter = function(alter) { alter = parseInt(alter, 10); if (alter >= 30 || alter < 17) { return 0; } switch (alter) { case 17: return 0.2; case 18: return 0.4; case 19: return 0.6; case 20: return 0.8; case 28: return 0.75; case 29: return 0.5; default: return 1; } }; Constants.maxStaerkeValues = { "Torwart": 40 * 1.2, "Abwehr": 200 * 1.2, "Mittelfeld": 200 * 1.2, "Sturm": 120 * 1.2, "Gesamt": 440 * 1.2, "Eingespieltheit": 100, "Moral": 75, "Taktiker": 440 * 1.2 * 0.03, "Taktgeber": 440 * 1.2 * 0.05, "Bonus": 440 * 0.05, "Auswärtsfans": 440 * 1.2 * 0.01, "Heimvorteil": 440 * 1.2 * 0.03 }; Constants.StaerkeRegExp = { "type": /([A-Z]{1}[a-zäöüß]+)[\:]?/, "Torwart": /([0-9]+(\.[0-9]+)?)\s\((\w.+)\)/, "Abwehr": /([0-9]+(\.[0-9]+)?)\s\((\w.+)\)/, "Mittelfeld": /([0-9]+(\.[0-9]+)?)\s\((\w.+)\)/, "Sturm": /([0-9]+(\.[0-9]+)?)\s\((\w.+)\)/, "Gesamt": /([0-9]+(\.[0-9]+)?)\s\((\w.+)\)/, "Eingespieltheit": /([0-9]+)(%)\s\((\w.+)\)/, "Moral": /\+ ([0-9]+(.[0-9]+)?)/, "Taktgeber": /\+ ([0-9]+(.[0-9]+)?)/, "Taktiker": /\+ ([0-9]+(.[0-9]+)?)/, "Bonus": /\+ ([0-9]+(.[0-9]+)?)/, "Auswärtsfans": /\+ ([0-9]+(.[0-9]+)?)\s(\([0-9](%)\))/, "Heimvorteil": /\+ ([0-9]+(.[0-9]+)?)\s(\([0-9](%)\))/ }; Constants.helpContents = { trainingslager: { title: 'Trainingslager', content: '<table id="xt-help-trainingslager" class="xt-table xt-help">' + '<thead><tr><th>Ort</th><th>Energie</th><th>Form</th><th>Dauer</th></tr><thead>' + '<tbody><tr><td>Trier</td><td>+1</td><td>+1</td><td>2 Tage</td></tr>' + '<tr><td>Ohlsbach</td><td>+2</td><td>+1</td><td>3 Tage</td></tr>' + '<tr><td>Offenburg</td><td>+1</td><td>+2</td><td>3 Tage</td></tr>' + '<tr><td>Überlingen</td><td>+2</td><td>+2</td><td>4 Tage</td></tr>' + '<tr><td>Moskow</td><td>+3</td><td>+2</td><td>5 Tage</td></tr>' + '<tr><td>Roma</td><td>+2</td><td>+3</td><td>5 Tage</td></tr>' + '<tr><td>Mexiko</td><td>+3</td><td>+3</td><td>6 Tage</td></tr>' + '<tr><td>New-Zealand</td><td>+4</td><td>+4</td><td>6 Tage</td></tr></tbody>' + '</table>' }, erfahrungszuwachs: { title: 'Erfahrungszuwachs', content: '<p>Ab 30 ist kein Stärkeaufstieg mehr möglich, ab 32 fällt die Spielstärke jedes Jahr um 1!</p>' + '<p>Wenn die Werte für Energie/Form unter 15/15 sind, gibt es keinen Erfahrungszuwachs.</p>' + '<table id="xt-help-erfahrungszuwachs" class="xt-table xt-help">' + '<thead><tr><th colspan="8">Erfahrungszuwachs nach Alter/Stärke</th></tr></thead>' + '<tbody>' + '<tr><th></th><th>17</th><th>18</th><th>19</th><th>20</th><th>21-27</th><th>28</th><th>29</th></tr>' + '<tr><td>1</td><td>0,1175%</td><td>0,2350%</td><td>0,3525%</td><td>0,4700%</td><td>0,5875%</td><td>0,4406%</td><td>0,3750%</td></tr>' + '<tr><td>2</td><td>0,0712%</td><td>0,1424%</td><td>0,2136%</td><td>0,2848%</td><td>0,3560%</td><td>0,2670%</td><td>0,1780%</td></tr>' + '<tr><td>3</td><td>0,0470%</td><td>0,0940%</td><td>0,1410%</td><td>0,1880%</td><td>0,2350%</td><td>0,1762%</td><td>0,1175%</td></tr>' + '<tr><td>4</td><td>0,0235%</td><td>0,0470%</td><td>0,0705%</td><td>0,0940%</td><td>0,1175%</td><td>0,0881%</td><td>0,0587%</td></tr>' + '<tr><td>5</td><td>0,0141%</td><td>0,0282%</td><td>0,0423%</td><td>0,0564%</td><td>0,0705%</td><td>0,0528%</td><td>0,0352%</td></tr>' + '<tr><td>6</td><td>0,0094%</td><td>0,0188%</td><td>0,0282%</td><td>0,0376%</td><td>0,0470%</td><td>0,0352%</td><td>0,0235%</td></tr>' + '<tr><td>7</td><td>0,0047%</td><td>0,0094%</td><td>0,0141%</td><td>0,0188%</td><td>0,0235%</td><td>0,0176%</td><td>0,0117%</td></tr>' + '<tr><td>8</td><td>0,0023%</td><td>0,0047%</td><td>0,0070%</td><td>0,0094%</td><td>0,0117%</td><td>0,0088%</td><td>0,0058%</td></tr>' + '<tr><td>9</td><td>0,0001%</td><td>0,0002%</td><td>0,0003%</td><td>0,0004%</td><td>0,0005%</td><td>0,0004%</td><td>0,0003%</td></tr>' + '</tbody>' + '</table>' }, stadionausbau: { title: 'Stadionausbau', content: '<div style="width: 420px"><table id="xt-help-stadionausbau-a" class="xt-table xt-help" style="float: left; width: 200px; margin-right: 20px;">' + '<thead><tr><th>Dauer (Tage)</th><th>Anzahl Plätze</th></tr><thead>' + '<tbody><tr><td> 1</td><td>1 - 199 </td></tr>' + '<tr><td> 2</td><td>200 - 599 </td></tr>' + '<tr><td> 3</td><td>600 - 999 </td></tr>' + '<tr><td> 4</td><td>1000 - 1399 </td></tr>' + '<tr><td> 5</td><td>1400 - 1799 </td></tr>' + '<tr><td> 6</td><td>1800 - 2199 </td></tr>' + '<tr><td> 7</td><td>2200 - 2599 </td></tr>' + '<tr><td> 8</td><td>2600 - 2999 </td></tr>' + '<tr><td> 9</td><td>3000 - 3399 </td></tr>' + '<tr><td>10</td><td>3400 - 3799 </td></tr>' + '<tr><td>11</td><td>3800 - 4199 </td></tr>' + '<tr><td>12</td><td>4200 - 4599 </td></tr>' + '<tr><td>13</td><td>4600 - 4999 </td></tr>' + '</tbody></table>' + '<table id="xt-help-stadionausbau-b" class="xt-table xt-help" style="float: left; width: 200px;">' + '<thead><tr><th>Dauer (Tage)</th><th>Anzahl Plätze</th></tr><thead>' + '<tr><td>14</td><td>5000 - 5399 </td></tr>' + '<tr><td>15</td><td>5400 - 5799 </td></tr>' + '<tr><td>16</td><td>5800 - 6199 </td></tr>' + '<tr><td>17</td><td>6200 - 6599 </td></tr>' + '<tr><td>18</td><td>6600 - 6999 </td></tr>' + '<tr><td>19</td><td>7000 - 7399 </td></tr>' + '<tr><td>20</td><td>7400 - 7799 </td></tr>' + '<tr><td>21</td><td>7800 - 8199 </td></tr>' + '<tr><td>22</td><td>8200 - 8599 </td></tr>' + '<tr><td>23</td><td>8600 - 8999 </td></tr>' + '<tr><td>24</td><td>9000 - 9399 </td></tr>' + '<tr><td>25</td><td>9400 - 9799 </td></tr>' + '<tr><td>26</td><td>9800 - 10000</td></tr></tbody>' + '</table></div><div style="clear: left; heihgt: 1px;"></div>' }, spielerbewertung: { title: 'Spielerbewertung', content: '<p>Die Spielerbewertung errechnet sich wie folgt:<br/>' + '<strong>Stärke * (Formpunkte + Energiepunkte) / 10</strong></p>' + '<p><strong>Beispiel:</strong> Ein 6er mit 15 Energiepunkten und 17 Formpunkten hat eine Bewertung von <strong>6*(15 + 17)/10 = 19,2</strong></p>' + '<p>Aus folgender Tabelle kann man nun ablesen, welche Bewertung der Spieler hat. Das gleiche ist natürlich auch umgekehrt möglich, d. h. dass man anhand der Bewertung ungefähr die Form- und Energiewerte des/der Spieler/s herausfinden kann.</p>' + '<table class="xt-table xt-help">' + '<thead><tr><th>Punkte</th><th>Bewertung</th></tr><thead>' + '<tbody><tr><td>03</td><td>katastrophal</td></tr>' + '<tr><td>07</td><td>sehr schwach</td></tr>' + '<tr><td>09</td><td>schwach</td></tr>' + '<tr><td>13</td><td>mäßig</td></tr>' + '<tr><td>19</td><td>durchschnittlich</td></tr>' + '<tr><td>26</td><td>okay</td></tr>' + '<tr><td>33</td><td>gut</td></tr>' + '<tr><td>37</td><td>sehr gut</td></tr>' + '<tr><td>41</td><td>hervorragend</td></tr>' + '<tr><td>50</td><td>Weltklasse</td></tr>' + '</tbody><table>' }, spielbenotung: { title: 'Spielbenotung', content: '<table class="xt-table xt-help"><thead><tr><th></th><th colspan="9">Einsatzpunkte</th></tr>' + '<tr><th>Anzahl Tore</th><th>+4</th><th>+3</th><th>+2</th><th>+1</th><th>0</th><th>1</th><th>2</th><th>3</th><th>4</th><tr></thead>' + '<tbody><tr><td>0</td><td>2-</td><td>3+</td><td>3</td><td>3-</td><td>4+</td><td>4</td><td>5</td><td>5-</td><td>6</td>' + '<tr><td>1</td><td>2</td><td>2-</td><td>3+</td><td>3</td><td>3-</td><td>4+</td><td>4-</td><td>5</td><td>6+</td>' + '<tr><td>2</td><td>2+</td><td>2</td><td>2-</td><td>3+</td><td>3</td><td>3-</td><td>4</td><td>5+</td><td>5-</td>' + '<tr><td>3</td><td>1-</td><td>2+</td><td>2</td><td>2-</td><td>3+</td><td>3</td><td>4+</td><td>4-</td><td>5</td>' + '<tr><td>4</td><td>1</td><td>1-</td><td>2+</td><td>2</td><td>2-</td><td>3+</td><td>3-</td><td>4</td><td>5+</td>' + '<tr><td>5</td><td>1+</td><td>1-</td><td>1.5</td><td>2+</td><td>2-</td><td>2.5</td><td>3-</td><td>4+</td><td>4.5</td>' + '<tr><td>6+</td><td>1+</td><td>1</td><td>1-</td><td>2+</td><td>2</td><td>2-</td><td>3</td><td>4+</td><td>4-</td>' }, eigenschaften: { title: 'Eigenschaften', content: '<table id="xt-help-erfahrungszuwachs" class="xt-table xt-help">' + '<thead><tr><th colspan="11">Eigenschaften nach Stufe</th></tr></thead>' + '<tbody>' + '<tr><th>Stufe</th><th>EP-Kosten</th><th>Ant./Tech.</th><th>Lehrmeister</th><th>Planer</th><th>Manager</th><th>Medienm.</th><th>Feilscher</th><th>Publikumsm.</th><th>Motivator</th><th>Taktiker</th></tr>' + '<tr><td>1</td><td>+7 (7)</td><td>60%</td><td>4,12%</td><td>30,07%</td><td>0,78%</td><td>1,06%</td><td>0,31%</td><td>1,13%</td><td>12,5%</td><td>0,75%</td></tr>' + '<tr><td>2</td><td>+11 (18)</td><td>68%</td><td>7,12%</td><td>34,36%</td><td>1,08%</td><td>1,42%</td><td>0,43%</td><td>1,5%</td><td>21,87%</td><td>1,31%</td></tr>' + '<tr><td>3</td><td>+17 (35)</td><td>74,4%</td><td>9,28%</td><td>39,27%</td><td>1,5%</td><td>1,91%</td><td>0,58%</td><td>2%</td><td>28,91%</td><td>1,73%</td></tr>' + '<tr><td>4</td><td>+27 (62)</td><td>79,52%</td><td>10,86%</td><td>44,88%</td><td>2,09%</td><td>2,56%</td><td>0,79%</td><td>2,67%</td><td>34,18%</td><td>2,05%</td></tr>' + '<tr><td>5</td><td>+41 (103)</td><td>83,62%</td><td>12%</td><td>51,29%</td><td>2,9%</td><td>3,44%</td><td>1,07%</td><td>3,56%</td><td>38,13%</td><td>2,29%</td></tr>' + '<tr><td>6</td><td>+63 (166)</td><td>86,89%</td><td>12,82%</td><td>58,62%</td><td>4,03%</td><td>4,62%</td><td>1,46%</td><td>4,75%</td><td>41,1%</td><td>2,47%</td></tr>' + '<tr><td>7</td><td>+98 (264)</td><td>89,51%</td><td>13,42%</td><td>66,99%</td><td>5,6%</td><td>6,2%</td><td>1,99%</td><td>6,33%</td><td>42,33%</td><td>2,6%</td></tr>' + '<tr><td>8</td><td>+150 (414)</td><td>91,61%</td><td>13,86%</td><td>76,56%</td><td>7,78%</td><td>8,33%</td><td>2,7%</td><td>8,44%</td><td>44,99%</td><td>2,7%</td></tr>' + '<tr><td>9</td><td>+231 (645)</td><td>93,29%</td><td>14,17%</td><td>87,5%</td><td>10,8%</td><td>11,18%</td><td>3,68%</td><td>11,25%</td><td>46,25%</td><td>2,77%</td></tr>' + '<tr><td>10</td><td>+355 (1000)</td><td>100%</td><td>15%</td><td>100%</td><td>15%</td><td>15%</td><td>5%</td><td>15%</td><td>50%</td><td>3%</td></tr>' + '</tbody>' + '</table>' } }; return Constants; })(); Helper = (function() { function Helper() {} Helper.addTooltips = function(selector) { var elements; elements = $(selector); elements.mouseover(function(e) { var tip; tip = $(this).attr('title'); $(this).attr('title', ''); $(this).closest("td").append('<div id="xt-tooltip"><div class="xt-tooltip-inner">' + tip + '</div></div>'); $('#xt-tooltip').css('top', e.pageY + 10); $('#xt-tooltip').css('left', e.pageX - 90); return $('#xt-tooltip').fadeIn('500'); }); elements.mousemove(function(e) { $('#xt-tooltip').css('top', e.pageY + 10); return $('#xt-tooltip').css('left', e.pageX - 90); }); return elements.mouseout(function() { var thisTooltip; thisTooltip = $(this).closest("td").find('div#xt-tooltip'); $(this).attr('title', thisTooltip.find('.xt-tooltip-inner').html()); return thisTooltip.remove(); }); }; Helper.addBarBg = function(dom, text, percentage, width) { var balken, container, height, wert; if (percentage > 1) { percentage = percentage / 100; } $(dom).addClass("xt-bar").html(""); height = 26; if (!width) { width = $(dom).width(); } container = document.createElement("div"); $(container).addClass("xt-bar-container"); balken = document.createElement("div"); $(balken).addClass("xt-bar-balken"); balken.style.width = (percentage * width) + "px"; balken.style.height = height + "px"; $(container).append(balken); wert = document.createElement("div"); $(wert).addClass("xt-bar-wert"); wert.style.width = width + "px"; wert.style.height = height + "px"; wert.style.lineHeight = height + "px"; $(wert).append(text); $(container).append(wert); return $(dom).append(container); }; Helper.round = function(n) { return Math.round(n * 100 + ((n * 1000) % 10 > 4 ? 1 : 0)) / 100; }; return Helper; })(); Teammate = (function() { function Teammate(dom) { var index, item, tds, _i, _len; this.dom = dom; _this.toString = __bind(_this.toString, this); _this.getEffektiveStaerke = __bind(_this.getEffektiveStaerke, this); _this.alterDom = __bind(_this.alterDom, this); _this.alterErfahrungTD = __bind(_this.alterErfahrungTD, this); _this.alterStatusTD = __bind(_this.alterStatusTD, this); _this.calcMinAnzahlTrainingBisAufstieg = __bind(_this.calcMinAnzahlTrainingBisAufstieg, this); tds = $(this.dom).find("td"); for (index = _i = 0, _len = tds.length; _i < _len; index = ++_i) { item = tds[index]; switch (index) { case 1: this.position = $(item).text().replace(/^\s+|\s+$/g, ""); break; case 2: this.name = $(item).text().replace(/^\s+|\s+$/g, ""); break; case 3: this.alter = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); break; case 4: this.staerke = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); break; case 5: this.energie = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); break; case 6: this.form = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); break; case 7: this.gk = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); Helper.addBarBg(item, this.gk, this.gk / 5, 25); break; case 8: this.erfahrung = parseFloat($(item).text().replace(/^\s+|\s+$/g, "").replace(/\(|\)|\%/g, "")); this.erfahrungTD = item; break; case 9: this.spiele = parseInt($(item).text().replace(/^\s+|\s+$/g, ""), 10); break; case 10: this.nation = $(item).text().replace(/^\s+|\s+$/g, ""); break; case 11: this.status = $(item).text().replace(/^\s+|\s+$/g, ""); this.statusTD = item; } } this.effStaerke = this.getEffektiveStaerke(); this.alterStatusTD(this.statusTD); this.alterErfahrungTD(this.erfahrungTD); this.aufstiegsberechtigt = false; this.alterDom(); } Teammate.isTeammate = function(dom) { return $(dom).find("td").length >= 12; }; Teammate.prototype.calcMinAnzahlTrainingBisAufstieg = function() { if (this.erfahrung > Constants.ashuerden[this.staerke]) { return 0; } //Benötigte Erfahrung var beGesamt = (Constants.ashuerden[this.staerke] - this.erfahrung) / Constants.lehrmeister; var restTage = Constants.restSaison(); var tage = Math.ceil(beGesamt / (Constants.erfahrungAlter(this.alter) * Constants.erfahrungGewinn[this.staerke])); var endTage = tage; if (tage>restTage) { var beRest = restTage * Constants.erfahrungAlter(this.alter) * Constants.erfahrungGewinn[this.staerke]; var beTmp = 0; endTage = restTage; var s = 1; while (beGesamt > beRest + beTmp) { var ramp = (Constants.erfahrungAlter(this.alter+s) * Constants.erfahrungGewinn[this.staerke]); if (ramp <= 0) beGesamt = -99; else { var tmpTage = Math.ceil((beGesamt-beRest-beTmp) / ramp); if (tmpTage>78) { beTmp+= 78 * ramp; endTage+= 78; } else { beTmp+= tmpTage * ramp; endTage+= tmpTage; } s++; } } } if (beGesamt<0) return -99; else return endTage; }; Teammate.prototype.alterStatusTD = function(dom) { var alpha, maxStaerke; $(dom).addClass("status"); if (this.status === "Ok.") { maxStaerke = 40; alpha = this.effStaerke >= maxStaerke ? 1 : Math.floor(this.effStaerke / maxStaerke * 100) / 100; dom.style.backgroundColor = "rgba(0,0,255," + alpha + ")"; if (alpha > 0.6) { dom.style.color = "#eeeeee"; } return $(dom).html(this.effStaerke); } }; Teammate.prototype.alterErfahrungTD = function(dom) { var erf, anzahl, container, div, title, width, widthMax; anzahl = 0; widthMax = 100; erf = this.erfahrung + '%'; width = this.erfahrung >= Constants.ashuerden[this.staerke] ? widthMax : parseInt(this.erfahrung / Constants.ashuerden[this.staerke] * widthMax, 10); $(dom).addClass("erfahrung"); if (this.alter > 29) { $(dom).addClass("zu-alt"); } else if (width === widthMax) { $(dom).addClass("aufstieg"); } width = width + "px"; div = document.createElement("div"); div.style.width = width; $(div).addClass("balken"); $(dom).html(""); container = document.createElement("div"); $(container).addClass("container"); $(container).append(div); if (this.alter > 29) { title = "Nie wieder aufstiegsberechtigt"; } else if (this.erfahrung >= Constants.ashuerden[this.staerke]) { /* Beginn: Deactivated, spohl, 02.05.2014: */ /* if (this.spiele >= 5) { */ /* End: Deactivated, spohl, 02.05.2014. */ this.aufstiegsberechtigt = true; title = "Aufstiegsberechtigt"; /* Beginn: Deactivated, spohl, 02.05.2014: */ /* } else { title = "Aufstiegsberechtigt, aber noch nicht genügend Spiele in dieser Saison."; } */ /* End: Deactivated, spohl, 02.05.2014. */ } else { anzahl = this.calcMinAnzahlTrainingBisAufstieg(); if (anzahl<0) title = "Kann die Aufstiegshürde (vermutlich) nicht mehr erreichen<sup>1</sup>"; else { title = "Noch " + (anzahl === 0 ? "" : "mindestens ") + "<strong>" + (anzahl > 0 ? anzahl : 1) + "</strong> Tag" + (anzahl > 1 ? "e" : "") + " (Training/Spiele) bis <strong>" + this.name + "</strong> aufstiegsberechtigt ist.<sup>1</sup>"; erf = erf + ' (' + anzahl; if (anzahl>Constants.restSaison()) erf = erf + '*'; erf = erf + '*)'; } } $(container).append('<div class="wert" title="' + title + '">' + erf + '</div>'); return $(dom).append(container); }; Teammate.prototype.alterDom = function() { var effStaerkeRounded, formClass; if (this.status.match(/Rot/g)) { $(this.dom).addClass("statrot"); } else if (this.status.match(/Gelb/g)) { $(this.dom).addClass("statgelb"); } else if (this.status.match(/Verl/g)) { $(this.dom).addClass("statverl"); } else if (this.status.match(/TL/g)) { $(this.dom).addClass("stattl"); } if (this.status.match(/Ok/g)) { $(this.dom).addClass("ok"); } else { $(this.dom).addClass("verhindert"); } formClass = 0; if (this.form >= 5 && this.energie >= 5) formClass++; if (this.form >= 14 && this.energie >= 14) formClass++; if (this.form >= 17 && this.energie >= 17) formClass++; if (this.form >= 20 && this.energie >= 20) formClass++; $(this.dom).addClass("form" + formClass); effStaerkeRounded = Math.ceil(this.effStaerke); $(this.dom).addClass(Constants.spielerBewertung[effStaerkeRounded]); return true; }; Teammate.prototype.getEffektiveStaerke = function() { return Helper.round(this.staerke * (this.energie + this.form) / 10); }; Teammate.prototype.toString = function() { return this.position + " | " + this.name + " | " + this.alter + " | " + this.staerke + " | " + this.energie + " | " + this.form + " | " + this.gk + " | " + this.erfahrung + " | " + this.spiele + " | " + this.nation + " | " + this.status; }; return Teammate; })(); TeammateList = (function() { function TeammateList() { _this.getStatisic = __bind(_this.getStatisic, this); _this.remove = __bind(_this.remove, this); _this.add = __bind(_this.add, this); var pos, _i, _len, _ref; this.list = []; this.total = { staerke: 0, effStaerke: 0, alter: 0, energie: 0, form: 0, count: 0, aufstieg: 0 }; _ref = ["T", "A", "M", "S"]; for (_i = 0, _len = _ref.length; _i < _len; _i++) { pos = _ref[_i]; this.total[pos] = { staerke: 0, effStaerke: 0, alter: 0, energie: 0, form: 0, count: 0, aufstieg: 0 }; } this.averages = jQuery.extend(true, {}, this.total); } TeammateList.prototype.add = function(teammate) { var effStaerke; this.list.push(teammate); this.total.staerke += teammate.staerke; this.total[teammate.position].staerke += teammate.staerke; effStaerke = teammate.getEffektiveStaerke(); this.total.effStaerke += effStaerke; this.total[teammate.position].effStaerke += effStaerke; this.total.alter += teammate.alter; this.total[teammate.position].alter += teammate.alter; this.total.energie += teammate.energie; this.total[teammate.position].energie += teammate.energie; this.total.form += teammate.form; this.total[teammate.position].form += teammate.form; this.total.count++; this.total[teammate.position].count++; if (teammate.aufstiegsberechtigt === true) { this.total.aufstieg++; return this.total[teammate.position].aufstieg++; } }; TeammateList.prototype.remove = function(teammate) { var index, item, _i, _len, _ref; _ref = this.list; for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { item = _ref[index]; if (teammate === item) { this.list.splice(index, 1); return true; } } return false; }; TeammateList.prototype.getStatisic = function() { var pos, _i, _len, _ref; this.total.effStaerke = Helper.round(this.total.effStaerke); this.averages.staerke = Helper.round(this.total.staerke / this.list.length); this.averages.effStaerke = Helper.round(this.total.effStaerke / this.list.length); this.averages.alter = Helper.round(this.total.alter / this.list.length); this.averages.energie = Helper.round(this.total.energie / this.list.length); this.averages.form = Helper.round(this.total.form / this.list.length); _ref = ["T", "A", "M", "S"]; for (_i = 0, _len = _ref.length; _i < _len; _i++) { pos = _ref[_i]; this.total[pos].effStaerke = Helper.round(this.total[pos].effStaerke); this.averages[pos].staerke = Helper.round(this.total[pos].staerke / this.total[pos].count); this.averages[pos].effStaerke = Helper.round(this.total[pos].effStaerke / this.total[pos].count); this.averages[pos].alter = Helper.round(this.total[pos].alter / this.total[pos].count); this.averages[pos].energie = Helper.round(this.total[pos].energie / this.total[pos].count); this.averages[pos].form = Helper.round(this.total[pos].form / this.total[pos].count); } return { total: this.total, averages: this.averages, counts: this.counts }; }; return TeammateList; })(); StrongnessOverview = (function() { function StrongnessOverview(dom) { var beschriftung, bewertung, fanvorteil, counter, index, item, maxValue, percentage, tds, trs, typeTd, typeTxt, value, valueTd, _i, _len; this.dom = dom; trs = $(this.dom).find("tr"); counter = 0; for (index = _i = 0, _len = trs.length; _i < _len; index = ++_i) { item = trs[index]; tds = $(item).find("td"); if (tds.length !== 2) { continue; } typeTd = tds[0]; Constants.StaerkeRegExp["type"].exec($(typeTd).text()); typeTxt = RegExp.$1; valueTd = tds[1]; Constants.StaerkeRegExp[typeTxt].exec($(valueTd).text()); value = RegExp.$1; bewertung = RegExp.$3; fanvorteil = RegExp.$4; beschriftung = bewertung === "" ? "+ " : (fanvorteil === "" ? "" : "+ "); beschriftung += value; if (bewertung !== "") { beschriftung += (RegExp.$2 === "%" ? "%" : "") + (fanvorteil === "%" ? " " : " - ") + bewertung; } maxValue = Constants.maxStaerkeValues[typeTxt]; percentage = parseInt(value / maxValue * 100, 10) / 100; if (percentage > 1) { percentage = 1; } valueTd.style.backgroundColor = typeTd.style.backgroundColor = "rgba(0,0,255," + (0.25+3*percentage/4) + ")"; // if (percentage > 0.3) { typeTd.style.color = valueTd.style.color = "#eeeeee"; // } Helper.addBarBg(valueTd, beschriftung, percentage); } } return StrongnessOverview; })(); XtendTeam = (function() { function XtendTeam() { _this.buildStatistic = __bind(_this.buildStatistic, this); _this.buildLegend = __bind(_this.buildLegend, this); _this.buildTMList = __bind(_this.buildTMList, this); var $infoTables; this.teammates = new TeammateList(); this.table = $(".content_main > form > table")[0]; this.table.id = "teammates"; $(this.table).addClass("teammates xt-table"); this.rows = $(this.table).find("tr"); this.buildTMList(); this.buildLegend(); Helper.addTooltips('.erfahrung .wert'); $infoTables = $("#info_content table"); if ($infoTables.length === 3) { this.strongnessTable = $infoTables[0]; } else { this.strongnessTable = $infoTables[1]; } $(this.strongnessTable).addClass("xt-table xt-table-strongness"); this.strongnessOV = new StrongnessOverview(this.strongnessTable); this.buildStatistic(); } XtendTeam.prototype.buildTMList = function() { var header, index, item, pos, tm, _i, _len, _ref; pos = "X"; header = $(this.table).find("tr")[0]; $(header).addClass("xt-spaltenbeschriftung"); _ref = this.rows; for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { item = _ref[index]; if (index !== 0 && index !== this.rows.length - 1 && Teammate.isTeammate(item)) { tm = new Teammate(item); if (tm.position !== pos) { pos = tm.position; $(item).before(Constants.headerRow.replace(/XXX/, Constants.positions[pos])); $(item).before($(header).clone(true)); } this.teammates.add(tm); $(item).addClass("teammate"); } } return $(header).remove(); }; XtendTeam.prototype.buildLegend = function() { var alpha, color, container, fitness, footnote, form, num, textFitness, _i, _j; container = document.createElement("div"); $(container).addClass("xt-legende"); form = document.createElement("div"); $(form).addClass("xt-legende-form"); $(container).append(form); fitness = document.createElement("div"); $(fitness).addClass("xt-legende-fitness"); $(container).append(fitness); footnote = document.createElement("div"); $(footnote).addClass("xt-legende-footnote"); $(footnote).append('<p><sup>1</sup> Die Berechnung der verbleibenden Tage bis zur Aufstiegsberechtigung beruht auf der Annahme, dass ein Spieler jeden Tag Erfahrung sammelt. Steigendes Alter wird berücksichtigt, ein dadurch eventueller Verlust der Aufstiegsberechtigung nicht.</p><p><sup>* **</sup> Restdauer der Saison: ' + Constants.restSaison() + ' Tage'); $(container).append(footnote); for (num = _i = 1; _i < 11; num = ++_i) { alpha = num / 10; color = alpha > 0.6 ? "#eeeeee" : "black"; $(form).append('<div style="color: ' + color + '; background-color: rgba(0,0,255,' + alpha + ');">' + (alpha < 1 ? alpha * 40 : "40+" + '</div>')); } $(form).append('<p><strong>Status:</strong> Je höher die effektive Stärke, je dunkler das Blau. Grau, wenn verhindert.</p>'); textFitness = ["min. eins unter 5", "jew. über 5", "jew. über 14", "jew. über 17", "jew. über 20"]; for (num = _j = 0; _j < 5; num = ++_j) { $(fitness).append('<div class="form' + num + '">' + textFitness[num] + '</div>'); } $(fitness).append('<p><strong>Energie/Form:</strong> Grün: aufstellbar, rot: Trainingslager?</p>'); return $(this.table).after(container); }; XtendTeam.prototype.buildStatistic = function() { var container, content, createRow, statistic, topic; statistic = this.teammates.getStatisic(); container = document.createElement("div"); $(container).addClass("xt-statistic"); topic = document.createElement("div"); $(topic).addClass("info_topic closed"); $(topic).append('<span class="open">▼ </span><span class="closed">▶ </span>Statistik'); $(container).append(topic); content = document.createElement("div"); content.id = "xt-statistic-content"; content.style.display = "none"; $(container).append(content); createRow = function(header, cols, className, percentage) { var col, ret, _i, _len; percentage = Helper.round(percentage * 100); if (percentage > 100) { percentage = 100; } ret = '<tr class="' + className + ' xt-header-row"><th colspan="' + cols.length + '">' + '<div class="xt-bg" style="width: ' + percentage + '%;">' + '<div class="xt-value">' + header + '</div>' + '</div>' + '</th></tr>' + '<tr class="' + className + '">'; for (_i = 0, _len = cols.length; _i < _len; _i++) { col = cols[_i]; ret += '<td>' + col + '</td>'; } ret += '</tr>'; return ret; }; $(content).append('<table class="xt-table">' + '<thead>' + '<tr><th>T</th><th>A</th><th>M</th><th>S</th><th>G</th></tr>' + '</thead>' + '<tbody>' + createRow("Anzahl Spieler", [statistic.total.T.count, statistic.total.A.count, statistic.total.M.count, statistic.total.S.count, statistic.total.count], "even", statistic.total.count / 24) + createRow("Stärke", [statistic.total.T.staerke, statistic.total.A.staerke, statistic.total.M.staerke, statistic.total.S.staerke, statistic.total.staerke], "odd", statistic.total.staerke / (10 * statistic.total.count)) + createRow("Eff. Stärke", [statistic.total.T.effStaerke, statistic.total.A.effStaerke, statistic.total.M.effStaerke, statistic.total.S.effStaerke, statistic.total.effStaerke], "even", statistic.total.effStaerke / (statistic.total.staerke * 4)) + createRow("Eff. Stärke Ø", [statistic.averages.T.effStaerke, statistic.averages.A.effStaerke, statistic.averages.M.effStaerke, statistic.averages.S.effStaerke, statistic.averages.effStaerke], "odd", statistic.averages.effStaerke / (statistic.averages.staerke * 4)) + createRow("Energie Ø", [statistic.averages.T.energie, statistic.averages.A.energie, statistic.averages.M.energie, statistic.averages.S.energie, statistic.averages.energie], "even", statistic.averages.energie / 20) + createRow("Form Ø", [statistic.averages.T.form, statistic.averages.A.form, statistic.averages.M.form, statistic.averages.S.form, statistic.averages.form], "odd", statistic.averages.form / 20) + createRow("Alter Ø", [statistic.averages.T.alter, statistic.averages.A.alter, statistic.averages.M.alter, statistic.averages.S.alter, statistic.averages.alter], "even", (statistic.averages.alter - 17) / 32) + '</tbody>' + '</table>'); $($("#info_content .info_topic")[2]).before(container); $(topic).click(function(e) { $("#xt-statistic-content").toggle(300); return $(e.target).toggleClass("closed").toggleClass("open"); }); return true; }; return XtendTeam; })(); $mainMenu = $('#menu'); xtMenuContainer = document.createElement('div'); xtMenuContainer.id = 'xt-menu'; $mainMenu.append(xtMenuContainer); $(xtMenuContainer).append('<h3 class="xt-headline">Hilfe</h3>'); _ref = Constants.helpContents; for (type in _ref) { helpContent = _ref[type]; $helpLink = $('<a href="#" class="xt-link" rel="xt-dialog-modal-' + type + '">' + helpContent.title + '</a>'); $('body').append('<div style="display: none;" id="xt-dialog-modal-' + type + '" class="xt-dialog-modal"><h2>Hilfe – ' + helpContent.title + '</h2>' + helpContent.content + '</div>'); $(xtMenuContainer).append($helpLink); $helpLink.click(function() { $("#" + $(this).attr('rel')).modal({ overlayClose: true }); return false; }); } baseUrl = location.href.split("?")[0]; if (location.href.match(/select=team/) && !location.href.match(/select=team&ac=1/)) { GM_xmlhttpRequest({ method: 'GET', url: baseUrl + '?select=eigenschaften', overrideMimeType: "text/html; charset=ISO-8859-1", onload: function(response) { Constants.lehrmeister = Constants.lehrmeister + parseInt(response.responseText.split("<span id='lehrmeister'>")[1].split('</span>')[0]) / 100; if (response.responseText.split('+5% Aufstiegswahrscheinlichkeit<br/>(20% mit Lehrmeister) <span style="font-size: 20px; ')[1].split('" id="haken_1">')[0] == 'display:block;') { Constants.lehrmeister = Constants.lehrmeister + 0.05; } xTend = new XtendTeam(); }, onerror: function(response) { xTend = new XtendTeam(); }, onabort: function(response) { xTend = new XtendTeam(); }, ontimeout: function(response) { xTend = new XtendTeam(); } }); } else if (location.href.match(/select=bericht&vereinnr=[0-9]+&details=4/)) { GM_xmlhttpRequest({ method: 'GET', url: baseUrl + '?select=finanzen&stadion=1', overrideMimeType: "text/html; charset=ISO-8859-1", onload: function(responseDetails) { var $content, $table, content, holder, table, tables, _i, _len; holder = document.createElement('div'); holder.innerHTML = responseDetails.responseText.split('<div id=\'content\'>')[1].split('<div id="info">')[0]; tables = $(holder).find(".content_main table"); content = document.createElement("div"); $content = $(content); for (_i = 0, _len = tables.length; _i < _len; _i++) { table = tables[_i]; $table = $(table); $content.append("<h3 class=\"xt-headline\">" + $($(table).find("tr")[0]).text() + "</h3>"); $($table.addClass("xt-table").find("tr")[0]).remove(); $content.append(table); } $(content).addClass("content_main xt-stadion"); return $('#content').append('<div class="content_icon"><img src="img/tab_logo.png"></div><div class="content_topic">Stadion<p class="content_subtopic">Eintrittspreise festlegen</p></div>', content); } }); } else if (location.href.match(/select=chronik&vereinnr=[0-9]/)) { } css = ".content_main { margin: 50px 0 20px 0; }" + "#content table.teammates tr:last-child td { padding: 10px 0 0 0; }" + "table.teammates tr:last-child td img { display: none; }" + "table.teammates tr:last-child td input { line-height: 20px; border: 0 none; padding: 3px 10px; cursor: pointer; }" + "table.teammates font { color: black; } " + "table.teammates td:last-child { }" + ".xt-table { border-collapse: collapse; background: 0 none; font-size: 11px; font-family: Calibri, 'Trebuchet MS'; }" + ".xt-table td, .xt-table th { border: 1px solid #E8F6E7; height: 20px; line-height: 20px; }" + ".xt-table .xt-header-row th { padding-top: 15px; font-size: 15px; text-shadow: 1px 1px 0px white; text-align: left; vertical-align: bottom; }" + ".form0 td, div.form0 { background-color: #c30 }" + ".form1 td, div.form1 { background-color: #FF7953 }" + ".form2 td, div.form2 { background-color: #FBFF64 }" + ".form3 td, div.form3 { background-color: #72FF42 }" + ".form4 td, div.form4 { background-color: #31C400 }" + "table.teammates tr.statrot > td:last-child," + "table.teammates tr.statgelb > td:last-child," + "table.teammates tr.statverl > td:last-child," + "table.teammates tr.stattl > td:last-child { background-color: grey; font-weight: bold; padding: 0 3px; }" + "table.teammates td.xt-bar { padding: 0; }" + "#content #teammates td.erfahrung { width: 60px; height: 26px; padding: 0; }" + "td.erfahrung .container { position: relative; width: 100px; height: 26px; }" + "td.erfahrung div.balken, td.erfahrung div.wert { top: 0; left: 0; position: absolute; height: 26px; line-height: 26px; z-index: 0 }" + "td.erfahrung div.wert { width: 100px; z-index: 100; cursor: pointer; }" + "td.erfahrung div.balken { background-color: rgba(0,0,0,0.25); }" + "td.erfahrung.aufstieg div.wert, td.erfahrung.zu-alt div.wert { color: #eeeeee; font-weight: bold; }" + "td.erfahrung.zu-alt { background-color: #700; }" + "td.erfahrung.aufstieg div.balken { background-color: rgba(0,0,0,0.9); }" + ".xt-bar { padding: 0; margin: 0 }" + ".xt-bar .xt-bar-container { position: relative; height: 26px; }" + ".xt-bar .xt-bar-container .xt-bar-balken, .xt-bar .xt-bar-container .xt-bar-wert { position: absolute; top: 0; left: 0; }" + ".xt-bar .xt-bar-container .xt-bar-balken { background: rgba(0,0,0,0.25); z-index: 0 }" + ".xt-bar .xt-bar-container .xt-bar-wert { font-weight: bold; z-index: 100 }" + "#info td.xt-bar { padding: 0; }" + ".xt-table-strongness td { background-color: grey }" + ".xt-table-strongness .xt-bar-wert { text-indent: 6px }" + ".xt-legende { padding: 20px 0; margin-left: 10px; }" + ".xt-legende .xt-legende-form { }" + ".xt-legende .xt-legende-fitness, .xt-legende .xt-legende-footnote { clear: left; padding-top: 15px; font-style: italic; }" + ".xt-legende .xt-legende-form div, .xt-legende .xt-legende-fitness div { height: 26px; line-height: 26px; text-align: center; width: 10%; float: left; }" + ".xt-legende .xt-legende-fitness div { width: 20%; }" + ".xt-legende .xt-legende-form p, .xt-legende .xt-legende-fitness p { font-style: italic; clear: left; line-height: 26px; }" + ".xt-statistic .info_topic { cursor: pointer; }" + ".xt-statistic span.closed, .xt-statistic span.open { float: left; width: 12px; font-size: .8em; }" + ".xt-statistic span.open { margin-top: 1px; }" + ".xt-statistic .closed .closed { display: block; }" + ".xt-statistic .closed .open { display: none; }" + ".xt-statistic .open .closed { display: none; }" + ".xt-statistic .open .open { display: block; }" + ".xt-statistic .xt-table { width: 100%; }" + ".xt-statistic .xt-table td, .xt-statistic .xt-table th { background-color: #C1DCB5; text-align: center; }" + ".xt-statistic .xt-table td:last-child { font-weight: bold; background-color: #B2CBA8; }" + ".xt-statistic .xt-table tbody th { text-align: left; padding: 0; }" + ".xt-statistic .xt-table .xt-bg { background-color: #B2CBA8; padding: 3px 0; text-indent: 3px; }" + ".xt-statistic .xt-table .xt-value { width: 150px; }" + ".xt-statistic .xt-table thead th { background-color: transparent; padding: 0; height: auto; line-height: 11px; }" + ".xt-statistic .xt-table .xt-header-row th { font-size: 11px; padding-top: 0; line-height: 11px; background-color: transparent; }" + ".xt-trigger { margin: 10px 0 5px 0; cursor: pointer }" + ".xt-help { margin-left: 0 }" + ".xt-help.xt-table td { background-color: #C1DCB5; }" + ".xt-help.xt-table td:first-child, .xt-help.xt-table th { font-weight: bold; background-color: #B2CBA8; text-shadow: 1px 1px 0px white; }" + ".xt-stadion .xt-table td { text-align: left; background-color: #C1DCB5; }" + ".xt-stadion .xt-table td:first-child { font-weight: bold; text-shadow: 1px 1px 0px white; }" + "#xt-tooltip { position:absolute; z-index:9999; width:180px; background-color: rgba(0,0,0,0.8); border: 1px solid rgb(51,51,51); -webkit-border-radius: 10px; border-radius: 10px; }" + "#xt-tooltip .xt-tooltip-inner { color:#eeeeee; font-size: 11px; font-family: Calibri, 'Trebuchet MS'; padding:5px; }" + "#content .xt-headline, #menu .xt-headline { margin: 10px 0 5px 10px; height: auto; text-shadow: 1px 1px 0px white; font-size: 13px; }" + "#menu .vlogo_size { border: 0 none; }" + "#menu .xt-headline { margin: 20px 0 5px 15px; }" + "#menu .xt-link { display: block; margin: 5px 0 5px 15px; }" + ".content_icon img { width: 30px; margin-top: 3px; }" + ".xt-dialog-modal { padding-bottom: 20px; }" + ".xt-dialog-modal p { margin: 5px 0; width: 400px; }" + "#simplemodal-overlay { background-color: #000; }" + "#simplemodal-container { background-color: #E8F6E7; border: 8px solid #999; padding: 20px; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; }" + "#simplemodal-container h2 { font-size: 16px; height: auto; text-shadow: 1px 1px 0px white; margin: 0 0 15px; }" + "@media (min-width: 990px) {" + "#window_ads { display: none; }" + "#window_2mm { position: realtive; margin-top: -7px; }" + "#header_bg {position: fixed; z-index: 10000; width: 986px; }" + "#content {margin-left: 179px; margin-top: 97px; }" + "#menu { position: fixed; top: 77px; background-color: rgba(232, 246, 231, .9); z-index: 1000; }" + "#info { margin-top: 57px; }" + "}"; css = css.replace(/; /g, ' !important;'); if (typeof GM_addStyle !== "undefined") { return GM_addStyle(css); } else if (typeof PRO_addStyle !== "undefined") { return PRO_addStyle(css); } else if (typeof addStyle !== "undefined") { return addStyle(css); } else { heads = document.getElementsByTagName("head"); if (heads.length > 0) { node = document.createElement("style"); node.type = "text/css"; node.appendChild(document.createTextNode(css)); return heads[0].appendChild(node); } } })();