WoTStatScript

More info for World of Tanks profile page. Updated for the new style.

目前为 2015-09-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WoTStatScript
  3. // @version 0.9.10.0.3
  4. // @description More info for World of Tanks profile page. Updated for the new style.
  5. // @author Orrie
  6. // @namespace http://forum.worldoftanks.eu/index.php?/topic/263423-
  7. // @icon http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/icon.png
  8. // @include http://worldoftanks.eu/*/accounts/*/*
  9. // @include http://worldoftanks.ru/*/accounts/*/*
  10. // @include http://worldoftanks.com/*/accounts/*/*
  11. // @include http://worldoftanks.asia/*/accounts/*/*
  12. // @include http://worldoftanks.kr/*/accounts/*/*
  13. // @grant GM_xmlhttpRequest
  14. // @license MIT License
  15. // ==/UserScript==
  16. /*
  17. Changelog: http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/WoTStatScript-changelog.txt
  18. */
  19. (function() {
  20. // global vars
  21. var d = document, c = d.cookie;
  22.  
  23. // get server info and webpage
  24. var wg = {host:d.location.host, href:d.location.href, clan:{}};
  25. wg.srv = wg.host.match(/(eu|ru|na|com|asia|kr)/)[0].replace(/com/,"na");
  26.  
  27. // script variables
  28. var sc = {
  29. vers: "0.9.10.0.3",
  30. host: "http://greasyfork.org/scripts/661-wotstatscript",
  31. user: "http://forum.wotlabs.net/index.php?/user/1618-orrie/",
  32. top: {
  33. eu: "http://forum.worldoftanks.eu/index.php?showtopic=263423",
  34. na: "http://forum.worldoftanks.com/index.php?showtopic=404652"
  35. },
  36. wn: "http://www.wnefficiency.net/exp/expected_tank_values_latest.json",
  37. nm: {
  38. id: "orrie_js_174043" // noobmeter api id
  39. },
  40. loc: c.match(/hllang=(\w+)/)[1],
  41. locSup: ["en", "ru", "cz", "de", "fr", "pl", "es", "tr"]
  42. };
  43. // script threadlink
  44. sc.link = "<div class='b-scriptlink'><a target='_blank' href="+sc.host+">Script</a> version "+sc.vers+" - <a target='_blank' href="+((wg.srv == "na") ? sc.top.na : sc.top.eu)+">Thread</a></div>";
  45.  
  46. // external site support
  47. var srv = {
  48. wl: false, // wotlabs
  49. nm: false, // noobmeter
  50. ws: false, // wotstats
  51. cs: false, // wotcs
  52. wlife: false, // wot-life
  53. as: false, // away stats
  54. //wn: false, // wot-numbers
  55. //tb: false, // tomatobot
  56. ct: false, // clan tools
  57. aos: false, // age of strife
  58. kttc: false, // kttc
  59. wots: false, // wots
  60. ch: false, // clan history
  61. wr: false // wotreplays
  62. };
  63.  
  64. // determine browser types
  65. var web = {
  66. gecko: typeof InstallTrigger !== 'undefined',
  67. opera: !!window.opera || /opera|opr/i.test(navigator.userAgent),
  68. chrome: !!window.chrome && !!window.chrome.webstore,
  69. safari: /constructor/i.test(window.HTMLElement)
  70. };
  71.  
  72. // fetch wnefficiency values - check if array exists in localStorage, otherwise fetch and reload page
  73. var statObj = {},
  74. wnExpValues = JSON.parse(localStorage.getItem("wnExpValues")),
  75. wnExpDate = JSON.parse(localStorage.getItem("wnExpDate"))+12096e5 >= Date.now(), // true if timestamp is less than 2 weeks old, refresh list if false.
  76. wnExpVers = JSON.parse(localStorage.getItem("wnExpVers")) || "";
  77. if (wnExpVers[0]==sc.vers && wnExpValues && wnExpDate) {
  78. statObj = wnExpValues.data;
  79. }
  80. else {
  81. reqHnd(sc.wn, wnHnd, wnHnd_error);
  82. }
  83.  
  84. // inserting style into head
  85. var style = elem("style", "wotstatscript", "", "text/css");
  86. d.head.appendChild(style);
  87.  
  88. // inserting functions into head as scripts
  89. var scripts = [copyClipboard];
  90. for (var _j=0, _j_len = scripts.length; _j<_j_len; ++_j) {
  91. var script = elem("script", "wotstatscript", "", "text/javascript");
  92. script.textContent = scripts[_j].toString();
  93. d.head.appendChild(script);
  94. }
  95.  
  96. // colour scale array
  97. var colArr = {
  98. // col wr bat sr hr dmg wgr wn8 wn7 eff nm
  99. sUni: [ "#5A3175", 65, 30000, 50, 80, 300, 9900, 2900, 2050, 2050, 2000 ], // 99.99% super unicum
  100. uni: [ "#83579D", 60, 25000, 46, 75, 270, 9000, 2450, 1850, 1800, 1950 ], // 99.90% unicum
  101. gr8: [ "#3972C6", 56, 21000, 42, 70, 240, 8500, 2000, 1550, 1500, 1750 ], // 99.00% great
  102. vGud: [ "#4099BF", 54, 17000, 38, 65, 210, 6500, 1600, 1350 ], // 95.00% very good
  103. good: [ "#4D7326", 52, 13000, 34, 60, 180, 5000, 1200, 1100, 1200, 1450 ], // 82.00% good
  104. aAvg: [ "#849B24", 50, 10000, 30, 55, 150, 4000, 900 ], // 63.00% above average
  105. avg: [ "#CCB800", 48, 7000, 25, 50, 120, 3000, 650, 900, 900, 1250 ], // 40.00% average
  106. bAvg: [ "#CC7A00", 47, 3000, 20, 45, 90, 2000, 450, 700, 600, 1150 ], // 20.00% below average
  107. bas: [ "#CD3333", 46, 1000, 15, 40, 60, 1500, 300, 500 ], // 6.00% basic
  108. beg: [ "#930D0D", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], // 0.00% beginner
  109. dft: [ "#6B6B6B" ], // default
  110. id: { "col": 0, "wr": 1, "bat": 2, "sr": 3, "hr": 4, "dmg": 5, "wgr": 6, "wn8": 7, "wn7": 8, "eff": 9, "nm": 10 } // type identifier
  111. };
  112.  
  113. // localization
  114. // cz-czech - Crabtr33 and Ragnarocek
  115. // de-german - ArtiOpa, Crakker and multimill
  116. // fr-french - SuperPommeDeTerre
  117. // pl-polish - KeluMocy and pokapokami
  118. // es-spanish - Frodo45127
  119. // tr-turkish - Ufuko
  120. // ru-russian - dimon222
  121. var loc = {
  122. // thousands separator
  123. sym: { en: ",", ru: " ", cz: " ", de: ".", fr: " ", pl: " ", es:".", tr: "."},
  124. // profile page
  125. p01: { en: "Go to Bottom", ru: "Пролистать вниз", cz: "Konec stránky", de: "nach unten", fr: "Aller à la fin", pl: "Koniec strony", es: "Ir al final", tr: "Aşağı İn" },
  126. p02: { en: "Go to Top", ru: "Пролистать наверх", cz: "Začátek stránky", de: "nach oben", fr: "Aller au début", pl: "Początek strony", es: "Ir al principio", tr: "Yukarı Çık" },
  127. p03: { en: "Days Ago", ru: "Дней назад", cz: "dnů", de: "Tage in WOT aktiv", fr: "jours", pl: "Dni temu", es: "Días", tr: "Gün Önce" },
  128. p04: { en: "Player Stats:", ru: "Статистика игрока:", cz: "Stat. hráče:", de: "Spielerstatistik", fr: "Statistiques du joueur:", pl: "Statystyki gracza:", es: "Estadísticas del jugador:", tr: "Oyuncu Statları" },
  129. p05: { en: "Signature:", ru: "Подпись:", cz: "Podpis:", de: "Forumsignatur", fr: "Signature:", pl: "Sygnatura do forum:", es: "Firma", tr: "İmza" },
  130. p06: { en: "Light", ru: "Светлые тона", cz: "Světlý", de: "Signatur Weiß", fr: "Claire", pl: "Jasna", es: "Clara", tr: "Açık" },
  131. p07: { en: "Dark", ru: "Тёмные тона", cz: "Tmavý", de: "Signatur Schwarz", fr: "Foncée", pl: "Ciemna", es: "Oscura", tr: "Koyu" },
  132. p08: { en: "Replays:", ru: "Реплеи:", cz: "Záznamy:", de: "Replays", fr: "Replays:", pl: "Powtórki:", es: "Repeticiones:", tr: "Replayler" },
  133. p09: { en: "Victories", ru: "Победы", cz: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstw", es: "Victorias", tr: "Zaferler" },
  134. p10: { en: "Battles Participated", ru: "Участий в битвах", cz: "Počet bitev", de: "Gefechte geführt", fr: "Batailles participées", pl: "Bitew", es: "Batallas jugadas", tr: "Savaş Katılımı" },
  135. p11: { en: "Average Experience", ru: "Средний опыт", cz: "Průměrné zkušenosti", de: "Durchnittl. Erfahrung", fr: "Expérience moyenne", pl: "Średnie doświadczenie", es: "Experiencia media", tr: "Ortalama Deneyim" },
  136. p12: { en: "Average Tier", ru: "Средний уровень танка", cz: "Průměrný Tier", de: "Durchschnittl. Stufe", fr: "Tiers moyen", pl: "Średni poziom pojazdu", es: "Tier medio", tr: "Ortalama Seviye" },
  137. p13: { en: "Win/Loss Ratio", ru: "Отношение Победы/Поражения", cz: "Poměr vítězství/porážek", de: "Verhältnis Siege/ Niederlagen", fr: "Ratio Victoires/Défaites", pl: "Zwycięstwa/porażki", es: "Ratio de victorias/derrotas", tr: "Zafer/Kayıp Oranı" },
  138. p14: { en: "Performance Ratings", ru: "Рейтинги производительности", cz: "Hodnocení bojového výkonu", de: "Leistungsverhältnis", fr: "Indices de performances", pl: "Statystyki wydajności", es: "Ratios de rendimiento", tr: "Performans Değerleri" },
  139. p15: { en: "WN8", ru: "WN8", cz: "WN8", de: "WN8", fr: "WN8", pl: "WN8", es: "WN8", tr: "WN8" },
  140. p16: { en: "Efficiency", ru: "Эффективность", cz: "Efektivita", de: "Effizienz", fr: "Efficacité", pl: "Efficiency", es: "Eficiencia", tr: "Efficiency" },
  141. p17: { en: "NoobMeter", ru: "NoobMeter", cz: "NoobMeter", de: "NoobMeter", fr: "NoobMeter", pl: "NoobMeter", es: "NoobMeter", tr: "NoobMeter" },
  142. p18: { en: "Fetching...", ru: "Загрузка...", cz: "Načítám...", de: "abrufen...", fr: "Récupération...", pl: "Pobieranie...", es: "Recuperando...", tr: "Getiriliyor..." },
  143. p19: { en: "Performance Rating Calculations", ru: "Вычисления рейтинга производительности", cz: "Výpočet hodnocení bojového výkonu", de: "Leistungsberechnung", fr: "Calculs des indicateurs de performances", pl: "Obliczenia statystyk wydajności", es: "Cálculos del ratio de rendimiento", tr: "Performans Değeri Hesaplamaları" },
  144. p20: { en: "Formula Type", ru: "Тип формулы", cz: "Typ výpočtu", de: "Formel", fr: "Type de formule", pl: "Formuła", es: "Tipo de fórmula", tr: "Formül Tipi" },
  145. p21: { en: "Total", ru: "Всего", cz: "Celkem", de: "Gesamt", fr: "Total", pl: "Wynik", es: "Total", tr: "Toplam" },
  146. p22: { en: "Scaled", ru: "Шкала", cz: "Stupnice", de: "Skaliert", fr: "A l'échelle", pl: "Skalowanie", es: "Escala", tr: "Ölçek" },
  147. p23: { en: "Destroyed", ru: "Уничтожено", cz: "Zničeno", de: "Zerstört", fr: "Détruits", pl: "Fragi", es: "Destruidos", tr: "imha" },
  148. p24: { en: "Damage", ru: "Урон", cz: "Poškození", de: "Schaden", fr: "Dommages", pl: "Obrażenia", es: "Daño", tr: "Hasar" },
  149. p25: { en: "Detected", ru: "Обнаружено", cz: "Detekováno", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrycia", es: "Detectados", tr: "Tespit" },
  150. p26: { en: "Capping", ru: "Захват", cz: "Obsazení", de: "Erobert", fr: "Capture", pl: "Zdobycie bazy", es: "Capturando", tr: "İşgal" },
  151. p27: { en: "Defense", ru: "Оборона", cz: "Obrana", de: "Verteidigt", fr: "Défense", pl: "Obrona bazy", es: "Defendiendo", tr: "Savunma" },
  152. p28: { en: "Victories", ru: "Победы", cz: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstwa", es: "Victorias", tr: "Zaferler" },
  153. p29: { en: "WN8", ru: "WN8", cz: "WN8", de: "WN8", fr: "WN8", pl: "WN8", es: "WN8", tr: "WN8" },
  154. p30: { en: "WN7", ru: "WN7", cz: "WN7", de: "WN7", fr: "WN7", pl: "WN7", es: "WN7", tr: "WN7" },
  155. p31: { en: "Efficiency", ru: "Эффективность", cz: "Efektivita", de: "Effizienz", fr: "Efficacité", pl: "Efficiency", es: "Eficiencia", tr: "Efficiency" },
  156. p32: { en: "What is WN Efficiency?", ru: "Что такое WN эффективность?", cz: "Co je WN hodnocení?", de: "Was bedeutet WN Effizienz", fr: "Qu'est que l'efficacité WN ?", pl: "Czym jest statystyka wydajności WN?", es: "¿Qué es la eficiencia WN?", tr: "WN Efficiency Nedir?" },
  157. p33: { en: "Ace Tanker", ru: "Мастер", cz: "Hrdina", de: "Panzer Ass", fr: "As du char", pl: "As Pancerny", es: "As de tanques", tr: "Tank Ası" },
  158. p34: { en: "1st Class", ru: "1 степень", cz: "1. třídy", de: "1ter Klasse", fr: "Classe 1", pl: "Pierwsza Klasa", es: "Clase I", tr: "1. Sınıf" },
  159. p35: { en: "2nd Class", ru: "2 степень", cz: "2. třídy", de: "2ter Klasse", fr: "Classe 2", pl: "Druga Klasa", es: "Clase II", tr: "2. Sınıf" },
  160. p36: { en: "3rd Class", ru: "3 степень", cz: "3. třídy", de: "3ter Klasse", fr: "Classe 3", pl: "Trzecia Klasa", es: "Clase III", tr: "3. Sınıf" },
  161. p37: { en: "No Badge", ru: "Нет значка", cz: "Nezískáno", de: "kein Orden", fr: "Aucun badge", pl: "Bez odznaki", es: "Sin medalla", tr: "Rozetsiz" },
  162. p38: { en: "Total Vehicles", ru: "Общее количество танки", cz: "Celkem vozidel", de: "Alle Fahrzeuge", fr: "Nombre total de véhicules", pl: "Całkowita liczba pojazdów", es: "Total de vehículos", tr: "Toplam Araçlar" },
  163. p39: { en: "Battles Participated:", ru: "Участий в битвах:", cz: "Počet bitev:", de: "An Gefechten teilgenommen", fr: "Batailles participées:", pl: "Bitwy:", es: "Batallas jugadas:", tr: "Savaş Katılımı" },
  164. p40: { en: "Victories:", ru: "Победы:", cz: "Vítězství:", de: "Siege", fr: "Victoires:", pl: "Zwycięstwa:", es: "Victorias:", tr: "Zaferler" },
  165. p41: { en: "Defeats:", ru: "Поражения:", cz: "Porážek:", de: "Niederlagen", fr: "Défaites:", pl: "Porażki:", es: "Derrotas:", tr: "Yenilgiler" },
  166. p42: { en: "Draws:", ru: "Ничья:", cz: "Remíza:", de: "Unentschieden", fr: "Egalités:", pl: "Remisy:", es: "Empates:", tr: "Beraberlikler" },
  167. p43: { en: "Battles Survived:", ru: "Битв пережито:", cz: "Přežito bitev:", de: "Gefechte überlebt", fr: "Batailles survécues:", pl: "Przetrwane bitwy:", es: "Batallas como superviviente:", tr: "Hayatta Kalma" },
  168. p44: { en: "Average Battles per Day:", ru: "Среднее число битв за день:", cz: "Průměrný počet bitev za den:", de: "Durschnittliche Gefechte pro Tag", fr: "Nombre moyen de batailles par jour:", pl: "Średnia bitew na dzień:", es: "Media de batallas por día:", tr: "Günlük Ortalama Savaş" },
  169. p45: { en: "Experience:", ru: "Опыт:", cz: "Zkušenosti:", de: "Erfahrung", fr: "Expérience:", pl: "Doświadczenie:", es: "Experiencia:", tr: "Deneyim" },
  170. p46: { en: "Average Experience per Battle:", ru: "Средний опыт за битву:", cz: "Průměrné zkušenosti za bitvu:", de: "Durchschnittserfahrung", fr: "Expérience moyenne par bataille:", pl: "Średnie doświadczenie na bitwę:", es: "Experiencia media por batalla:", tr: "Savaş Başına Ortalama Deneyim" },
  171. p47: { en: "Maximum Experience per Battle:", ru: "Максимальный опыт за битву:", cz: "Maximální zkušenosti za bitvu:", de: "Höchste Gefechtserfahrung", fr: "Expérience maximum par bataille:", pl: "Maksymalne doświadczenie na bitwę:", es: "Experiencia máxima por batalla:", tr: "Savaş Başına Maksimum Deneyim" },
  172. p48: { en: "Destroyed:", ru: "Уничтожено:", cz: "Zničeno:", de: "Zerstört", fr: "Détruits", pl: "Zniszczeni przeciwnicy:", es: "Destruidos:", tr: "İmhalar" },
  173. p49: { en: "Deaths:", ru: "Смертей:", cz: "Nepřežil:", de: "Tode", fr: "Morts", pl: "Zniszczony:", es: "Muertes:", tr: "Ölümler" },
  174. p50: { en: "Detected:", ru: "Обнаружено", cz: "Detekováno:", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrytych:", es: "Detectados:", tr: "Tespitler" },
  175. p51: { en: "Hit Ratio:", ru: "Коэффициент попаданий:", cz: "Přesnost střelby:", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność:", es: "Ratio de impactos:", tr: "İsabet Oranı" },
  176. p52: { en: "Damage Caused:", ru: "Урона нанесено:", cz: "Udělené poškození:", de: "Schaden verursacht", fr: "Dommages causés:", pl: "Zadane obrażenia:", es: "Daño causado:", tr: "Yapılan Hasar" },
  177. p53: { en: "Damage Received:", ru: "Урона получено:", cz: "Přijaté poškození:", de: "Schaden erhalten", fr: "Dommages reçus:", pl: "Otrzymane obrażenia:", es: "Daño recibido:", tr: "Alınan Hasar" },
  178. p54: { en: "Base Capture Points:", ru: "Очки захвата:", cz: "Bodů obsazení základny:", de: "Eroberungspunkte", fr: "Points de capture de base:", pl: "Punkty przejęcia bazy:", es: "Puntos de captura:", tr: "Bölge İşgali Puanı" },
  179. p55: { en: "Base Defense Points:", ru: "Очки обороны:", cz: "Bodů obrany základny:", de: "Verteidigungspunkte", fr: "Points de défense de base:", pl: "Punkty obrony bazy:", es: "Puntos de defensa:", tr: "Bölge Savunması Puanı" },
  180. p56: { en: "Average Tier:", ru: "Средний уровень:", cz: "Průměrný Tier:", de: "Durchschnittliche Stufe", fr: "Tiers moyen:", pl: "Średni poziom pojazdów:", es: "Tier media:", tr: "Ortalama Seviye" },
  181. p57: { en: "Vehicle Tiers", ru: "Уровни техники", cz: "Tiery vozidel", de: "Fahrzeuge Stufe", fr: "Tiers du véhicule", pl: "Poziomy czołgów", es: "Tier de los vehículos:", tr: "Araç Seviyeleri" },
  182. p58: { en: "Tier", ru: "Уровень", cz: "Tier", de: "Stufe", fr: "Tiers", pl: "Poziom", es: "Tier", tr: "Seviye" },
  183. p59: { en: "Total Vehicles:", ru: "Количество техники:", cz: "Celkem vozidel:", de: "Gesamt Fahrzeuge", fr: "Nombre total de véhicules:", pl: "Całkowita liczba pojazdów:", es: "Total de vehículos:", tr: "Toplam Araçlar" },
  184. p60: { en: "Tankopedia", ru: "Танковедение", cz: "Tankpédie", de: "Tankopedia", fr: "Tankopedia", pl: "Tankopedia", es: "Tankopedia", tr: "Tankopedia" },
  185. p61: { en: "Tank Statistics", ru: "Статистика танка", cz: "Statistiky vozidel", de: "Panzer Statistik", fr: "Statistiques des chars", pl: "Statystyki czołgu", es: "Estadísticas de tanques", tr: "Tank İstatistikleri" },
  186. p62: { en: "Premium Tanks", ru: "Премиум танки", cz: "Premium tanky", de: "Premium Panzer", fr: "Chars premiums", pl: "Czołgi premium", es: "Tanques premium", tr: "Premium Tanklar" },
  187. p63: { en: "Copy stats to Clipboard", ru: "Скопировать в буфер обмена", cz: "Kopírovat Stat. do schránky", de: "Statistiken in Zwischenablage kopieren", fr: "Copier les statistiques vers le presse-papiers", pl: "Kopiuj statystyki do schowka", es: "Copiar estadísticas al portapapeles", tr: "İstatistikleri Panoya Kopyala" },
  188. p64: { en: "Press Ctrl+C, or Right-Click and Copy", ru: "Нажмите Ctrl+C или ПКМ и Скопировать", cz: "Stiskni Ctrl+C, nebo klikni pravým tl. myši a vyber Kopírovat", de: "STRG+C/ rechter Mausklick und Kopieren", fr: "Appuyez sur Ctrl+C, ou clic droit et Copier", pl: "Naciśnij Ctrl+C, lub prawy klawisz myszy i 'Kopiuj'", es: "Presiona Ctrl+C, o haz clic derecho y pulsa Copiar.", tr: "Ctrl+C Tuşuna Bas, veya Sağ Tıkla ve Kopyala" },
  189. p65: { en: "WoTStatScript not active, because of player having 0 battles", ru: "Скрипт неактивен, т.к. у игрока 0 битв", cz: "WoTStatScript není aktivní, protože hráč má 0 bitev", de: "WoTStatScript inaktiv wegen fehlender Gefechte", fr: "WoTStatScript n'est pas actif, car le joueur a 0 batailles", pl: "WoTStatScript nieaktywny, ponieważ gracz rozegrał 0 bitew", es: "El script WoTStat no está activo, porque el jugador no ha jugado ninguna batalla.", tr: "WoTStat Scipt aktif değil, çünkü oyuncunun 0 savaşı var." },
  190. p66: { en: "Clan Stats:", ru: "Статистика клана:", cz: "Stat. klanu:", de: "Clanstatistiken", fr: "Statistiques du clan:", pl: "Statystyki klanu:", es: "Estadísticas del clan:", tr: "Klan İstatistikleri" },
  191. p67: { en: "Replays:", ru: "Реплеи:", cz: "Záznamy:", de: "Replays", fr: "Replays:", pl: "Powtórki:", es: "Repeticiones:", tr: "Replayler" },
  192. p68: { en: "Tier 10 Tanks", ru: "Уровень 10 Только", cz: "Pouze Tier 10", de: "nur Stufe 10", fr: "Seulement les tiers 10", pl: "Tylko 10 tier", es: "Sólo tier 10", tr: "Seviye 10 Tanklar" },
  193. p69: { en: "Battles missing from API, ratings may be inaccurate", ru: "Отсутствует Battles от API, рейтинги могут быть неточными", cz: "Některé bitvy se z API nenačetly, hodnocení může být nepřesné", de: "Fehlende API Gefechtsdaten, Bewertungen können ungenau sein", fr: "Des batailles manquent de l'API, les indices peuvent être faussés", pl: "Brakujące bitwy, obliczenia mogą być niedokładne", es: "Faltan batallas desde la API, por lo que los ratios pueden no ser muy precisos.", tr: "Savaş bilgileri eksik, hesaplamalar hatalı olabilir." },
  194. p70: { en: "Hit Ratio", ru: "Коэффициент попаданий", cz: "Přesnost střelby", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność", es: "Ratio de impacto", tr: "İsabet Oranı" },
  195. p71: { en: "Average Damage", ru: "Средний Урона", cz: "Průměrné poškození", de: "Durchschnittlicher Schaden", fr: "Dommages moyens", pl: "Średnie obrażenia", es: "Daño medio", tr: "Ortalama Hasar" },
  196. p72: { en: "Stats for", ru: "Cтатистика для", cz: "Statistika hráče", de: "Statistik für", fr: "Statistiques pour ", pl: "Statystyki z", es: "Estadísticas para", tr: "İstatistikler" },
  197. p73: { en: "Battles:", ru: "Битвы:", cz: "Bitev:", de: "Gefechte", fr: "Batailles:", pl: "Bitew:", es: "Batallas:", tr: "Savaşlar" },
  198. p74: { en: "Clan History:", ru: "История клана:", cz: "Historie klanů:", de: "Clan Historie", fr: "Clan History:", pl: "Poprzednie klany:", es: "Clan History:", tr: "Clan History:" },
  199. p75: { en: "No Rating", ru: "Нет рейтинга", cz: "Bez hodnocení", de: "Kein Rating", fr: "No Rating", pl: "Brak klasyfikacji", es: "No Rating", tr: "No Rating" },
  200. p76: { en: "None", ru: "Никто", cz: "Žádné", de: "Kein", fr: "None", pl: "Brak", es: "None", tr: "None" },
  201. p77: { en: "Error", ru: "Oшибка", cz: "Chyba", de: "Fehler", fr: "Error", pl: "Błąd", es: "Error", tr: "Error" },
  202. p78: { en: "Missing Tanks", ru: "Missing Tanks", cz: "Missing Tanks", de: "Missing Tanks", fr: "Missing Tanks", pl: "Missing Tanks", es: "Missing Tanks", tr: "Missing Tanks" },
  203. p79: { en: "Refresh WN8 Table", ru: "Refresh WN8 Table", cz: "Refresh WN8 Table", de: "Refresh WN8 Table", fr: "Refresh WN8 Table", pl: "Refresh WN8 Table", es: "Refresh WN8 Table", tr: "Refresh WN8 Table" },
  204. //p00: { en: "", ru: "", cz: "", de: "", fr: "", pl: "", es:"", tr: ""},
  205. };
  206.  
  207. // region settings for external sites
  208. switch(wg.srv) {
  209. case ("eu"): // eu server
  210. srv.wl = srv.nm = srv.ws = srv.cs = srv.wlife = srv.as = srv.wn = srv.tb = srv.ct = srv.kttc = srv.aos = srv.ch = srv.wr = wg.srv;
  211. break;
  212. case ("ru"): // ru server
  213. srv.wl = srv.nm = srv.wn = srv.ws = srv.cs = srv.tb = srv.ct = srv.kttc = srv.wots = srv.aos = srv.ch = srv.wr = wg.srv;
  214. break;
  215. case ("na"): // na server - american english
  216. srv.wl = srv.nm = srv.ws = srv.cs = srv.wlife = srv.wn = srv.tb = srv.ct = srv.kttc = srv.aos = srv.ch = wg.srv; srv.wr = "com"; srv.wn = "us";
  217. loc.p27.en = "Defence";
  218. loc.p55.en = "Base Defence Points:";
  219. break;
  220. case ("asia"): // asia server
  221. srv.wl = srv.nm = srv.wn = srv.ws = srv.cs = "sea"; srv.ct = srv.kttc = srv.aos = srv.ch = wg.srv; srv.wr = "com";
  222. break;
  223. case ("kr"): // korean server
  224. srv.wl = srv.nm = srv.ws = srv.cs = srv.ct = srv.aos = srv.ch = wg.srv; srv.wr = "com";
  225. break;
  226. default: break;
  227. }
  228.  
  229. // set script language to english if an unsupported language is detected
  230. var locSup_div;
  231. if (sc.locSup.indexOf(sc.loc) == -1) {
  232. sc.loc = "en";
  233. locSup_div = elem("div", "b-loc-wrpr", "<div class='b-sidebar-widget clearfix'><div class='b-sidebar-widget_inner b-sidebar-widget_inner__recrut'><h2 class='b-sidebar-widget_title'>Script Translation</h2><p class='b-sidebar-widget_text'>Unsupported language detected!<br>If you want to contribute with translation, contact <a class='b-orange-arrow' href='"+sc.user+"'>Orrie</a></p></div></div>");
  234. }
  235. // process localization
  236. for (var _l in loc) {
  237. if (loc.hasOwnProperty(_l)) {
  238. loc[_l] = loc[_l][sc.loc];
  239. }
  240. }
  241.  
  242. // add language to body classname for language based styling
  243. d.body.classList.add("lang-"+sc.loc);
  244.  
  245. // variables for dropbox, css and data uri
  246. var css = {
  247. box: "border: 1px solid rgba(255, 255, 255, 0.05); box-shadow: 0 0 38px 1px rgba(0, 0, 0, 0.3) inset, 0 0 23px 1px rgba(255, 255, 255, 0.02), 0 0 5px 1px rgba(0, 0, 0, 0.5) inset;",
  248. input: "background: rgba(0, 0, 0, 0.09); box-shadow: 0 0 1px 1px rgba(255, 255, 255, 0.15) inset, 0 0 38px 1px rgba(0, 0, 0, 0.3) inset, 0 0 23px 1px rgba(255, 255, 255, 0.02), 0 0 5px 1px rgba(0, 0, 0, 0.5) inset; color: #606061;",
  249. l: [
  250. "http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img",
  251. "/static/wot/common/css/scss/context-menu/img/arrow.png",
  252. "/static/wot/common/css/scss/content/links/img/orange_arrow.png",
  253. "/static/wot/common/css/scss/content/user/img/speedometr-separator.png",
  254. "/static/wot/common/css/scss/content/links/img/ico-info.png",
  255. "/static/wot/common/css/scss/content/links/img/vertical-arrow.png",
  256. "/static/wot/common/img/common/cont-img-mask.png",
  257. "/static/wot/common/img/classes/class-ace.png",
  258. "/static/wot/common/img/classes/class-1.png",
  259. "/static/wot/common/img/classes/class-2.png",
  260. "/static/wot/common/img/classes/class-3.png"
  261. ],
  262. u: {
  263. menu: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAAABCAIAAABmEhQDAAAAHklEQVQoU2MAAj4BAR5ePi6eUTSKhgni4eFjYGAAAN9YIhjam+zlAAAAAElFTkSuQmCC",
  264. icon1:"data:image/png;base64,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",
  265. icon2:"data:image/png;base64,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",
  266. nmLogo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgUlEQVQ4y92SPWsUYRSFn/POzE4MgkhMKyKICAEjiUksgoWClY0WYifKDlj4VyxsDGvlgmhtLUiIkoSNiLEWCwN+dmvAnZl3jkV2lxArSz3d/eDe53Iu/NOabb8J6cHkfLGZbXUWq1E8c2c7kxpPhF8unfPu0bk4qqWqz+jggAtFL6uor9hhLqjZnkwHq7ip+/WRJlF50tYs0oLwF5vdPwhKKCHDguiEfpUBkKh6aMIT8MutzmJ3TDFGb/duA7L91HBTgAEYQlqHgeOH9PPt/oUCWCpezVTk7z1sFpwG7gMt4C64a7QCdGUTVF9LQ/l6feXiN80Xmw8aJ/cQxm6AIKkAXgAfgWnbZyVNgp8bjdAIqi8HW1MMeSUs2MG+ZfsTeMdwQrBs+AAgPAQ1gl0BnC82njVOboxPkGujVHhglMuORonYywfid8nXe52ltbGNC8X6JaNTQapjrGNjchH7VutYnvhHJJ3Cg8+mdXSCr4/XOlcH+7xf1d984Fx7I/D/6Dd9b6wCx93gcQAAAABJRU5ErkJggg==",
  267. rat:"data:image/png;base64,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",
  268. ratMark:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAANCAQAAADLNWwDAAAAV0lEQVQI12NgEGQQZhBhEALSQEqMQQIIgUxxBqmvRyBMKQa5H3cZpIGyDHIMir/fAkkxBgZFa/0/nxgUgQoZVNLsgExloGpkUSS1SCYgmQuxTQwkCncDAH0wFzVj5p2XAAAAAElFTkSuQmCC",
  269. tiers:"data:image/png;base64,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",
  270. bad1:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAFVklEQVR42q2Xf0idVRjHu/f95dxVBGvNJlM2lI2hbW5sqMo23SDa2JaOtWBDCuZG2QBawZis0WA4pgtMREUQFXWJiASIGgkgEBWRKSD9GYAVEDQE+qtOzweey7nck12vdODLc5/3fL/f87znx/ve94X/aDEbFc61TXSZtFk2X6PnmGUe2OVYeNZ/aw1BXAWxtN+a66A2p7nXrcYnT/vtZVEQIi3MigONtjAH2qd810N9MzcV2DsIFTmCHfbOMxVjeejQWy+dZS0y86xYUSR48fr169MHDhx4czvFoEOPD372JjefHTu1wM5GflFR0fujo6MmNzf3s97e3pJsioGPDj0++OFriwGW7yyRVp8rSOzZs+fVs2fPfj03N2ck/3xoaKgCYllZWRzs3r3bKy4u9goLCz0iebIPHnx06PHBD1/1j9KWyikkTBYjrbKlpeXvwcHBv2SaKeaLvr6+GsjHjh3zgCyBf/ToUW/fvn0ekTzZBw8+OvT44IdvSjFhWkHO7mcaXwqC4PbMzIwB7e3tJhaLfTkwMNCAoLa2NgCHDx8OGxoa/EOHDvlE8mQfPPjo0Ce98MWfcdzTaWfG152/My8vr6ygoGBgcnLSLCwsmJ6eHmbmK7nT1yCfPHkyBMePH4/Onz8fVFVVBUTyZB88+OjQ44Mfvvgzjo7npy9VLOX0FAr56b1798yjR49Md3e32b9/P8V809nZeQ7y6dOnI1BdXZ3T1NQUnjhxIiSSJ/vgwUeHHh/88MWfcVJOVyy9mEArLZOpfXb37l0zPz9vLl++jAnF/NDV1XUBcmNj4w4gy5F79erVqKamJiKSJ/vgwUeHHh/88MWfcXS84N+KCXVjlQs+qqurMxsbG+bx48dmZGTEYPrkyZNzkM+cOZML6uvrd167di2SGBHJk33w4KNDjw9++OKv48ALbTH2h6+b6uXy8vKnJSUl64uLi6ajo8PIHWPwvRhegCjHdCeQvZGQE5IjMYdInuyDBx8denzwwxd/xtHxfLjpBYXaWSzPiZ/Gx8eN7APDesseYGqXHzx48Ho2xcBHhx4f/PDFn3EYz86M+xqIdPr6Ll26ZNbX141sTjMxMcHMLN+5c6cxm2Lgo0OPD3744q/jRDqu+yrQzhLB22EY/jI2NmbkRJiHDx9isNLW1nb71q1b9YgyNXjw0aHHBz988WccW4zWkLZnIj3/lYL2vXv3/lpRUWHkYUYx38rR7bAFZS4EPjr0+OCHL/46TpS6Z9y3tW7ieDzecvHixefDw8OmsrKSdf5NrrccOXLkQ7cgtxB48NGhxwc/fO3m3fztHRcEinxBred5azdv3jT9/f3m/v37Zmpq6k+5/okYvmULcguhHx58dOjxwQ9f9Q8U8c2KoQVacYXgAzF+Lu8ec/DgQXPjxg3D2u/atWtF+tgPzRSwtLT0jEjOdfrhwUeHHh/88FX/IG1ct6CUv4V5gmrBx3I81xKJxB9RFJn8/HyeFYbNeOXKlRUt4A0iOdfphwcfHXp88MNX/f3NC3H/XEeCAkGd4B3Bp3Jkf29tbTWnTp0y8pQ109PTZnZ21jQ3N68RyblOPzz46NDjo36R8yd+i18Iob7uSwVN8oL7ubS01MgpMcQgCAyPd15+RPLUfvjo0KtPmM2XQSwl+kAN8vTF9q6s/XeCVd/3V2Xw1TAMlwU/Esm5Tj88+OhUH1rPrD7o7LeNxkCPY5XeaavgPUUby0AkB/TDg49O9dYP/6yb+9GVELwiKNJYIigmJ5Kn9Secj8JtNfcLEgR26Yhbyl2fbTcr9pzjb3N7Et1j61mf/6k539FuEXGnL8si/gEY8SzOXUsBvQAAAABJRU5ErkJggg==",
  271. bad2:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAQAAADHaLwEAAAErklEQVQYGQXAD4yWdR0A8M/39zzv8R4cB4fADmUorjRUmULKNDetVMtcTWdYbra0aJZrjmVZrY1yW26LcmuMZCZrJUbaLEfGRjUczjnHTUXaIADjPzAABLw74O55vg4ACIQQAiEAABAAAAAANSohBIAQAIoCKCAUgAKg0qq1QoVQBAgUFC231mpFqwgpAAqARqCgVdQCIVC0CBW3UVCrhAoFCEARWpWCIpyTAgFaVGgVtdBKKYwJoaUAWnQQ+h968VNfBgAApPa6iz//mn5FkToKgoIQKlCbMOvrd96775aVc7inHtr92+a55vlmRf4uNxy+oY+Vc07fuOhzd680RVFLrZDUSAW1Srlk7lUPzjAys7efPxy9ZeCP0rhhPZbM+MuRBTN6+5vLue32zfOOveeCGuOIgiJUMPHy29994MY19B6btePUwoFXdc1wjX4D1rqn++bho7P39f3H3CkPvj64WEcIIShCIoVJY7fdG9PLpaL3s6tvmHq/p/zckJPW+4Ufme/OvgWr9V3veHlEfZepoJKylopQK5OnVtdcMNWgLAe6w/6kccI9jjvrFdN0nPPuRD2TdHVcmD0w+9QZjUaIgkSr67uPLdllu2foG467DHlUOGXEB3q87IsuMTlMfMGQNzy6aOA3eoVQyQJCMe2ji1sLbfItej5w0gW11Dprkta4fpUPQ/chZ7SutH9Av0qtFQWEEPnOG252g9k4oeO0Lnaba4LWMWmm0VR6LPAVmzVb9SlaKYuQWq3TVwzuP7xZWkXbNe6499CrOKG1117TzQ2xzg7HbBydc9wZqQhRpFDQyS89PWuF5/SI6ixG3GyK804aMMsFl5niQirTrbfU97tXLBZohCxIjTRx58aXrDDdd6S+5oQXHbDEJHuEJ822xVsuauV95nrS8diwTZ8WjSxCgPPe/ueRjb5qF+XA818b2+igtThqj997xZD7muVb1f9zla5fj3nZKakIKiFVinPONWeGrt7et92RfX17tu5/ev4yZ1xmkU3escvjtu38wq5/j47O3+m1kcNrm/X2GTMmKRIpNY6W/df3PqH1yUvf2la2/PKlpec7xpzWY6Inxg7um/bmj/81eOWwb7uzro/Y7ZxGKNQgpcZou+sfhwb7H3Nw5vxn7/9VvDpt+IGHX7fQVo84dOTvK0fHf7rsE7P3KFaPj7ytQUoJUNDR41o/KKevznm5JJfnzPc93rPqm9nJZdlZa2nPxp/kUzkvP511Y5Wb9KoVRQGgqFUmu8my2Nb34YTsz0tzTS5+3/Jn01+v2/S3/ExOyQk5eaTssdLdpuvqCAQBQmgVHb2ucYVr7/jG3Gk71L6n62eHll48aI0tFhoe+/MLthmy3UljQoskAFBJtSkmWTD5mYvmzHLYQYvc6r826JrnmBOjJ39ovVNGjUutFJIAhBQqFBMMuqM8rFuEaERoa23ThmaddXb4SCuFRkgIANRaIVWmucRlpusgjOhRS+mE/9tr2HnjQiskEACAUGmFXv1S6Gg0KjQ6RjTOSq1UpAQIABAIiVoqWiEVoVU0WiGMCyQABACAkCqNokiNIgVSoBUILQBQAQAAAAgpERIhkQAAHwPlu9kMCvbXiAAAAABJRU5ErkJggg==",
  272. miss: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAMAAAAz6Z0tAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURUxpcdkCCP8KJP8MJtIAAdkEC88AANAAAP8LJusHGM8AAM8AAM8AAM8AAP8OKf8OKdAAAP8MJ88AAK2kIk4AAAATdFJOUwBH1rffDcv+/if1nzhijVC68IB97NktAAAAjElEQVQoz+3RSxIDIQgEUBkQ8K9z/8OOJi4l2afS5c6nXahzvx3fKmJt3hYBh84MDKa4dNTW6qWXYTzqey+g9HNXG2OfDxThSKpW2OaWdCSozQEJTwPSj6TLvD2/jEWS3G4bq6hEWnOsLorlPHSXtI2w8cCrowAUEsrW82aOEufi/OEbS2JOxbt/vucBz3AEu+Dj2y4AAAAASUVORK5CYII="
  273. }
  274. };
  275.  
  276. var tableBattles = filter(d.getElementsByClassName('t-personal-data_value')[2].innerHTML, 1),
  277. profileName_class = d.getElementsByClassName('b-profile-name')[0];
  278. if (tableBattles > 0) {
  279. // getting userinfo
  280. wg.name = d.getElementById('js-profile-name').innerHTML;
  281. wg.id = wg.href.match(/\/(\d+)/)[1];
  282.  
  283. // URL variables
  284. sc.nm.url = "http://noobmeter.com/player/"+srv.nm+"/"+wg.name+"/"+wg.id;
  285. sc.nm.api = "http://noobmeter.com/simpleplayerprapi/"+srv.nm+"/"+wg.name+"/"+wg.id+"/"+sc.nm.id;
  286. sc.chApi = "http://clanapi-wotcs-eu.herokuapp.com/players/"+wg.id+"/changes";
  287.  
  288. // style contents
  289. var stylePlayer = [
  290. // global rules
  291. "h3, h4 {margin: 0 0 15px; text-align: center;}",
  292. "h5 {margin: 5px 0 8px;}",
  293. "p, .reg-KR p {margin: 0;}",
  294. ".reg-KR p {line-height: 133%;}",
  295. "table {width: 100%;}",
  296. // background image fix
  297. "#js-background-parallax-translate3d-wrapper {z-index: -1;}",
  298. // header rules
  299. ".b-header {height: 194px;}",
  300. // container wrapper
  301. ".l-container-wrapper {background: none;}",
  302. // content width
  303. ".l-content {margin: 0 22px 25px; width: 955px}",
  304. // background rules
  305. ".b-background {display: flex; left: -23px; opacity: 0.5; position: absolute; width: 1000px; z-index: -1;}",
  306. ".b-background img {width: 100%;}",
  307. // profile wrapper rules
  308. ".b-profile-wrpr {margin: 15px 0 0; min-height: 156px;}",
  309. ".b-profile-wrpr td {font-weight: bold; line-height: 133%;}",
  310. ".b-profile-wrpr .t-profile-table a, .b-profile-wrpr #js-profile-clan-table a {background: url("+css.l[1]+") no-repeat 0 2px; color: #CACBCC; padding: 0 0 0 10px;}",
  311. ".b-profile-wrpr .t-profile-table a:hover, .b-profile-wrpr #js-profile-clan-table a:hover {background: url("+css.l[1]+") no-repeat -244px 2px; color: #FFFFFF;}",
  312. ".b-profile-header {font-family: Arial; position: absolute; right: 0; top: 0;}",
  313. ".b-scriptlink {"+css.input+" border-left: 1px solid #000000; border-right: 1px solid #000000; display: inline-block; text-align: center; padding: 7px 0 6px; width: 199px;}",
  314. ".b-ratingsClip {display: inline-block;}",
  315. ".b-ratingsButton {"+css.input+" display: block; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding: 7px 7px 6px;}",
  316. ".b-ratingsButton:hover {background-color: #282828; cursor: pointer;}",
  317. ".b-profile-error {background: rgba(204,0,0,0.15); border: 1px solid #510000; box-shadow: 0 0 3px #733232; color: #CACBCC; display: none; margin: 0 3px -6px 0; overflow: hidden; padding: 3px; text-align: center; text-overflow: ellipsis; white-space: nowrap; width: 220px;}",
  318. ".b-profile-error:hover {width: auto;}",
  319. // profile player rules
  320. ".b-profile-name {float: none; margin: 0; max-width: 370px;}",
  321. ".b-profile-name table {font-family: Arial;}",
  322. ".b-profile-name td:first-child {white-space: nowrap;}",
  323. ".b-header-h1__profile {margin: 0; padding: 0 0 6px;}",
  324. "body.reg-KR h1, body.reg-KR .b-header-h1 {line-height: 1;}",
  325. // profile clan rules
  326. "#js-clan-block-container {left: 385px; position: absolute; top: 25px;}",
  327. ".b-profile-clan {float: none; max-width: 360px; margin: 0;}",
  328. ".b-photo {min-height: 54px;}",
  329. "a.b-link-clan, .b-link-clan a {display: inline;}",
  330. ".b-statistic {margin: 0 0 3px;}",
  331. "#js-clan-block-container table {font-family: Arial; width: 360px;}",
  332. "#js-clan-block-container td:first-child {white-space: nowrap;}",
  333. // profile clan history rules
  334. ".b-clanHistory-wrpr {font-family: Arial; width: 750px;}",
  335. ".b-clanHistory-wrpr span {display: inline-block; font-weight: bold; line-height: 133%;}",
  336. ".b-clanHistory-wrpr .clanname {padding: 0 2px 0 0;}",
  337. ".b-clanHistory-wrpr .clantag {padding: 0 2px;}",
  338. ".b-clanHistory-wrpr .clantag.curr a {color: #F9D088;}",
  339. ".b-clanHistory-wrpr a {color: #CACBCC;}",
  340. ".b-clanHistory-wrpr a:hover {color: #FFFFFF;}",
  341. // campaign rating rules
  342. "#js-glory-points-block {margin: 2px 0;}",
  343. ".b-campaign-rating {margin: 0; padding: 10px 0 0; width: 750px;}",
  344. ".b-campaign-rating_header {display: inline-block; padding: 0 30px; position: relative; top: -5px;}",
  345. ".lang-fr .b-campaign-rating_header {padding: 0px 10px}",
  346. ".b-leadership-header_date {float: none; margin: 0; text-align: center;}",
  347. ".b-campaign-rating_header .b-header-h3__first {margin: 0;}",
  348. ".b-campaign-rating_info {display: inline-block; float: none; padding-left: 30px;}",
  349. ".b-campaign-rating_info__left-divider {background-position: 15px 0;}",
  350. ".b-campaign-rating_delta {padding: 0; position: absolute; top: 0;}",
  351. ".b-campaign-rating_links {margin: 10px 65px 0 0;}",
  352. ".reg-SG .b-campaign-rating_links, .lang-fr .b-campaign-rating_links {margin: 10px 30px 0px 0px;}",
  353. ".b-campaign-rating_message {padding: 0 0 15px; text-align: center;}",
  354. // ban message rules
  355. ".js-account_game_ban_info_msg {position: absolute; width: 600px;}",
  356. // sidebar rules
  357. ".l-sidebar {margin: 0; position: absolute; right: 0; top: 25px; width: auto;}",
  358. ".b-context-menu {background: url("+css.u.menu+") repeat-y; border-right: 1px solid black; margin: 0; width: 200px;}",
  359. ".b-context-menu_wrapper {padding: 10px 0 5px;}",
  360. ".b-context-menu-list {line-height: 16px;}",
  361. ".b-context-menu-list li {padding: 4px 3px 4px 12px;}",
  362. ".b-context-menu-list__bottomindent {margin-bottom: 4px;}",
  363. ".b-context-menu-list.b-context-wn8 {border-top: 1px dashed #212123; margin-top: 4px;}",
  364. ".b-context-menu-list.b-context-wn8 a {cursor: pointer;}",
  365. // sidebar messages wrapper rules
  366. ".l-side-msg {position: absolute; left: 224px; text-align: center; top: 51px; width: 205px;}",
  367. ".b-sidebar-widget__comparison {background-color: #000000; border: 1px solid #000000; margin: 0; position: absolute; left: 224px; top: 25px; width: 203px;}",
  368. ".b-sidebar-widget {margin: 0;}",
  369. ".b-sidebar-widget_inner {padding: 10px}",
  370. ".b-sidebar-widget_inner__comparison {display: table; margin: 5px auto; padding: 0;}",
  371. ".b-sidebar-widget_title {margin: 0 0 5px; text-align: center;}",
  372. ".b-sidebar-widget_text {margin: 0 0 5px;}",
  373. ".b-box-shadow.js-recruitstation-recommended-widget {margin: 0; width: 242px;}",
  374. ".l-sidebar .b-b4r {height: 52px; overflow: hidden; position: absolute; top: -26px; left: 224px;}",
  375. ".l-sidebar .b-b4r_link img {width: 203px;}",
  376. // userblock wrapper rules
  377. ".b-user-block {"+css.box+" margin: 0; width: 750px;}",
  378. ".b-head-block {background: url("+css.l[3]+") no-repeat 50% 100%; padding: 5px 0;}",
  379. ".b-user-block_info {margin: -30px 0px 0px; padding: 34px 25px 3px;}",
  380. ".b-personal-link {background-position: 0 12px; clear: left; padding: 10px 0 0 50px;}",
  381. ".b-personal-link_txt {width: 360px;}",
  382. ".b-user-block__sparks {background: url('"+css.l[0]+"/sparks.png') no-repeat 50% 0; width: 100%;}",
  383. ".b-personal-data {min-height: 180px; padding: 0 20px 15px;}",
  384. ".t-personal-data_ico {padding: 82px 5px 0;}",
  385. ".t-personal-data_ico__hitrate {background: url("+css.u.icon1+") no-repeat 50% 50px;}",
  386. ".t-personal-data_ico__tier {background: url("+css.u.icon2+") no-repeat 50% 50px;}",
  387. ".t-personal-data_value {font-size: 28px; line-height: 100%;}",
  388. ".t-personal-data_value.t-personal-data_value__pr {font-size: 36px;}",
  389. ".b-speedometer-body {padding: 20px 50px;}",
  390. ".b-speedometer {width: 33.3333%}",
  391. // ratings info rules
  392. ".t-ratings-info {table-layout: fixed;}",
  393. ".t-ratings-info th {font-size: 13px; font-weight: bold; line-height: 133%; padding: 20px 0 0;}",
  394. ".t-ratings-info td {font-family: 'WarHeliosCondCBold','Arial Narrow',arial,sans-serif; font-size: 36px; line-height: 133%}",
  395. ".t-ratings-info .rating-url_nm {background: url("+css.u.nmLogo+") no-repeat left center; padding: 0 0 0 20px;}",
  396. ".ratings-table {background: url("+css.l[3]+") no-repeat 50% 0; padding: 20px 25px 10px;}",
  397. ".t-table-ratings {width: 100%;}",
  398. ".t-table-ratings td {line-height: 130%; padding: 9px 12px 2px 0; vertical-align: bottom;}",
  399. ".t-table-ratings .td-center {line-height: 16px; padding: 9px 0 2px; text-align: center;}",
  400. ".t-table-ratings .td-rating-meter {background: url("+css.l[3]+") no-repeat 50% 100%;}",
  401. ".t-table-ratings .td-rating-meter td {padding: 0;}",
  402. ".t-table-ratings .rating-meter {background: url("+css.u.rat+") no-repeat; border: 1px solid #252527; border-radius: 3px; height: 3px; margin: 0 7px;}",
  403. ".t-table-ratings .rating-meter-dail_line {background: url("+css.u.rat+") no-repeat; box-shadow: 0 0 10px 1px rgba(221, 84, 12, 0.15), 0 0 3px 1px rgba(133, 18, 11, 0.25); height: 3px; width: 0;}",
  404. ".t-table-ratings .rating-meter-marker {background: url("+css.u.ratMark+") no-repeat; float: right; height: 13px; margin: -5px -2px 0 0; width: 5px;}",
  405. ".t-table-ratings .rating-meter_wn8 {background-position: 0 0;}",
  406. ".t-table-ratings .rating-meter_wn8 .rating-meter-dail_line {background-position: 0 -3px;}",
  407. ".t-table-ratings .rating-meter_wn7 {background-position: 0 -6px;}",
  408. ".t-table-ratings .rating-meter_wn7 .rating-meter-dail_line {background-position: 0 -9px;}",
  409. ".t-table-ratings .rating-meter_eff {background-position: 0 -12px;}",
  410. ".t-table-ratings .rating-meter_eff .rating-meter-dail_line {background-position: 0 -15px;}",
  411. ".wnelink {padding: 5px 25px 5px 0; text-align: right;}",
  412. ".wnelink_info {background-image: url("+css.l[4]+"), url("+css.l[2]+"); background-position: 4px 0px, right 0; padding: 0 9px 0 20px;}",
  413. ".wnelink_info:hover {background-position: 4px -17px, right -22px;}",
  414. // statistics wrapper rules
  415. ".b-statistics-wrpr {margin: 0 0 30px; overflow: auto;}",
  416. ".b-statistics-wrpr .t-dotted td {line-height: 23px; padding: 0;}",
  417. ".b-statistics-wrpr .t-dotted tr:hover td {color: #79797A;}",
  418. ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico {line-height: 13px;}",
  419. ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico img {margin: 2px 0 -1px;}",
  420. ".b-result {margin: 0 10px; width: 315px;}",
  421. ".b-result .t-dotted__fixed {table-layout: auto;}",
  422. ".b-result-classes {margin: 0 10px; width: 265px;}",
  423. ".b-result-classes span {color: #606061; display: inline-block; width: 48px;}",
  424. ".t-dotted td {background: url("+css.l[3]+") no-repeat 50% 100%;}",
  425. // cake diagram rules
  426. ".b-diagrams-sector {margin: 0 0 25px;}",
  427. ".b-diagrams-sector h3 {text-align: center;}",
  428. ".b-diagram-block {float: left; margin: 0 9px; width: 300px;}",
  429. ".b-diagram-wrpr {float: none; margin: 0 auto;}",
  430. ".t-dotted.t-dotted__diagram {margin-top: 0px; width: 100%;}",
  431. ".t-dotted_diagram-percent {display: inline-block; width: 40px;}",
  432. ".b-diagram-total {margin: 25px 0 0;}",
  433. ".b-diagram-tiers .js-results {display: inline-block; margin: 0 0 0 30px; text-align: right; width: 14px;}",
  434. ".reg-RUS .b-diagram-tiers .js-results {margin: 0 0 0 15px;}",
  435. ".b-diagram-tiers .t-dotted_diagram-percent {margin: 0 0 0 3px; width: 52px;}",
  436. ".b-diagram-ico_tier {background: url("+css.u.tiers+") no-repeat; padding-left: 30px;}",
  437. ".b-diagram-ico_tier-1 {background-position: 4px 1px;}",
  438. ".b-diagram-ico_tier-2 {background-position: 4px -14px;}",
  439. ".b-diagram-ico_tier-3 {background-position: 4px -29px;}",
  440. ".b-diagram-ico_tier-4 {background-position: 4px -45px;}",
  441. ".b-diagram-ico_tier-5 {background-position: 4px -59px;}",
  442. ".b-diagram-ico_tier-6 {background-position: 4px -74px;}",
  443. ".b-diagram-ico_tier-7 {background-position: 4px -89px;}",
  444. ".b-diagram-ico_tier-8 {background-position: 4px -104px;}",
  445. ".b-diagram-ico_tier-9 {background-position: 4px -120px;}",
  446. ".b-diagram-ico_tier-10 {background-position: 4px -134px;}",
  447. ".t-dotted__diagram tr td.t-dotted_diagram-last {width: 0;}",
  448. // achievement wrapper rules
  449. ".b-achievements-wrpr {margin: 16px 0 0;}",
  450. ".b-vertical-arrow {display: table; margin: 8px auto 0; padding: 2px 10px 0;}",
  451. ".js-short-achievements {margin: 15px 0 50px;}",
  452. ".js-full-achievements {margin: 0 37px 50px;}",
  453. ".reg-KR .js-full-achievements {margin: 0 34px 30px;}",
  454. ".b-achivements {display: table; margin: 0 auto; padding: 0 0 20px;}",
  455. ".b-achivements-head {margin-top: 15px;}",
  456. ".b-achivements_item {display: inline-table; float: inherit; margin: 5px 5px 0;}",
  457. ".js-full-achievements #js-achivement-medalTamadaYoshio {margin-left: 45px;}",
  458. ".js-full-achievements #js-achivement-tankExpert3 {margin-left: 85px;}",
  459. ".js-full-achievements #js-achivement-medalKay {margin-left: 125px;}",
  460. ".js-full-achievements #js-achivement-forTacticalOperations {margin-left: 165px;}",
  461. ".js-full-achievements #js-achivement-readyForBattleLT {margin-left: 245px;}",
  462. ".js-full-achievements #js-achivement-noMansLand {margin-left: 85px;}",
  463. ".js-full-achievements #js-achivement-ironMan {margin-left: 245px;}",
  464. // global rating rules
  465. ".b-composite-heading {margin: 21px 0 15px 400px; width: 553px;}",
  466. ".b-profile-ratings-date {margin-top: 1px}",
  467. ".b-leadership-info {display: table; margin: 0 auto;}",
  468. ".b-profile-link {display: table; margin: 14px auto 0}",
  469. ".b-msg-important__rating {display: table; margin: 5px auto 0;}",
  470. ".b-rating-dial__user {display: table; margin: 30px auto 22px;}",
  471. ".b-orange-arrow__leadership {display: table; margin: 0 auto;}",
  472. ".b-leadership-rating-text {text-align: center;}",
  473. ".l-leadership-info-alignment {text-align: center;}",
  474. // vehicle table rules
  475. ".b-vehicles-wrpr {margin: 20px 0;}",
  476. ".b-vehicles-header {display: table; margin: 0 auto 15px}",
  477. ".b-profile-vehicles-tankstat {margin: 0; position: absolute; right: 15px;}",
  478. ".b-profile-vehicles-tankstat_link {background-image: url("+css.u.nmLogo+"), url("+css.l[2]+"); background-position: left center, right 0px; padding: 0 9px 0 20px;}",
  479. ".b-profile-vehicles-tankstat_link:hover {background-position: left center, right -22px;}",
  480. ".t-profile__vehicle .t-profile_right {text-align: center;}",
  481. ".t-profile_dropdown-ico .tablesorter-header-inner {display: inherit;}",
  482. ".t-profile_tankstype-prem td {border-top: 2px dashed #212123;}",
  483. ".t-profile_tankstype-prem .b-tankstype-text {color: #FFC363;}",
  484. ".t-profile_tankstype-prem.t-profile_tankstype__empty .b-tankstype-text {color: rgba(255, 195, 99, 0.3);}",
  485. ".t-profile_tankstype-miss .b-tankstype-text {color: #D00900;}",
  486. ".b-tankstype-ico__miss {background: url("+css.u.miss+") no-repeat center center;}",
  487. ".t-profile .t-profile_tankstype td {height: 50px; padding: 0; vertical-align: middle;}",
  488. ".b-tankstype-ico {display: table-cell;}",
  489. ".b-tankstype-ico__lighttank {background-position: 0 -114px;}",
  490. ".b-tankstype-ico__mediumtank {background-position: 0 -173px;}",
  491. ".b-tankstype-ico__heavytank {background-position: 0 5px;}",
  492. ".b-tankstype-ico__at-spg {background-position: 0 -232px;}",
  493. ".b-tankstype-ico__spg {background-position: 0 -54px;}",
  494. ".b-tankstype-ico__prem {background-position: 0 -291px;}",
  495. ".b-tankstype-ico__ten {background: none; color: #BBB7AC; font-size: 17px; font-weight: 100; padding: 0 0 3px; text-align: center;}",
  496. ".b-tankstype-text {display: table-cell; height: inherit; vertical-align: middle;}",
  497. ".t-profile .t-profile_tankstype__item td {height: 40px; padding: 0; vertical-align: middle;}",
  498. ".t-profile .t-profile_tankstype__item:hover td {background: rgba(0, 0, 0, 0.04); border-bottom: 1px solid rgba(255, 255, 255, 0); color: #BABCBF;}",
  499. ".t-profile .t-profile_tankstype td.t-profile_center div.hidden {display: none;}",
  500. ".t-profile .t-profile_tankstype td.t-profile_center span:last-of-type {display: inline-block; margin-left: 10px; text-align: left; width: 40px;}",
  501. ".b-armory-wrapper {height: inherit; margin: 0; padding: 0; width: 160px;}",
  502. ".b-armory-wrapper .b-armory-level {display: table-cell; font-size: inherit; height: inherit; position: inherit; vertical-align: middle; left: 0; top: 0;}",
  503. ".b-armory-wrapper img.png {height: 64px; margin: -50px 0 0 24px;}",
  504. ".b-name-vehicle {color: #BBB7AC; display: table-cell; height: inherit; vertical-align: middle;}",
  505. ".b-name-vehicle.b-gold-name {color: #FFC363;}",
  506. ".b-name-vehicle.b-red-name {color: #D00900;}",
  507. ".t-profile_dropdown-link {display: inherit;}",
  508. ".js-error-data {text-align: center;}",
  509. ".b-msg-error {display: table; margin: 0 auto;}",
  510. ".b-vehicle-detail_txt {margin: 0 auto 4px; text-align: center; width: 768px;}",
  511. ".b-vehicle-detail_link {display: table; margin: 0 auto;}",
  512. ".b-vehicle-slider {margin: 23px 64px 17px}",
  513. ".b-vehicle-slider_inner {width: 741px;}",
  514. ".b-vehicle-slider_prev {left: -12px;}",
  515. ".b-vehicle-slider_next {right: -12px;}",
  516. ".b-vehicle-minitable {margin: 0 43px; width: 350px;}",
  517. ".b-vehicle-minitable__right {float: left;}",
  518. // profile navigator
  519. ".b-profile-nav {text-align: center;}",
  520. ".b-profile-nav-top {background: #050505; border-radius: 0 0 15px 15px; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1); display:table; margin: 0 auto; padding: 5px 5px 7px;}",
  521. ".wrapper-dropdown .b-profile-nav {float: left; padding: 7px 0 0;}",
  522. ".b-profile-nav a {background: url("+css.l[5]+") no-repeat; cursor: pointer; margin: 0 10px 0 0; padding: 0 10px;}",
  523. ".b-profile-nav a.top {background-position: 100% 0px;}",
  524. ".b-profile-nav a.top:hover {background-position: 100% -36px;}",
  525. ".b-profile-nav a.bot {background-position: 100% -18px;}",
  526. ".b-profile-nav a.bot:hover {background-position: 100% -54px;}",
  527. ".b-profile-nav span {border-bottom: 1px dashed;}",
  528. // multiple usage rules
  529. ".b-orange-arrow__heading, .b-profile-ratings_link {margin: 4px 0 0;}"
  530. ];
  531. style.textContent = stylePlayer.join("");
  532. // end style
  533.  
  534. // formula calculations and variables
  535. // premium tanks up to 0.9.10
  536. var premArr = [
  537. // russian
  538. "tetrarch_ll", "bt-sv", "ltp", "m3_stuart_ll", "t-127", "r105_bt_7a", "valentine_ll",
  539. "a-32", "matilda_ii_ll", "r108_t34_85m", "r117_t34_85_rudy", "t44_85", "t44_122", "r112_t54_45", "object_907",
  540. "churchill_ll", "kv-220_action", "kv-220", "r114_object_244", "object252", "r113_object_730", "kv-5", "r110_object_260",
  541. "su76i", "su_85i", "su100y", "su122_44", "r111_isu130",
  542. // german
  543. "h39_captured", "g108_pzkpfwii_ausfd", "pzii_j", "t-15", //g36_pzii_j for 9.10
  544. "g100_gtraktor_krupp", "s35_captured", "g107_pzkpfwIII_ausfk", "pziv_hydro", "t-25", "pziv_schmalturm", "pzv_pziv", "pzv_pziv_ausf_alfa", "g78_panther_m10", "g106_pzkpfwpanther_ausff", "g105_t-55_nva_ddr",
  545. "b-1bis_captured", "lowe", "vk7201",
  546. "g104_stug_iv", "dickermax", "e-25", "g112_kanonenjagdpanzer", "jagdtiger_sdkfz_185",
  547. // american
  548. "t1_e6", "t2_lt", "t7_combat_car", "m22_locust", "mtls_1g14",
  549. "a78_m4_improved", "m4a2e4", "ram-ii", "a104_m4a3e8a", "a86_t23e3", "a80_t26_e4_superpershing", "t95_e2", "m60", "t95_e6",
  550. "t14", "a45_m6a2e1", "t34_hvy",
  551. "a102_t28_concept",
  552. // british
  553. "gb76_mk_vic",
  554. "gb68_matilda_black_prince", "gb70_n_fv4202_105",
  555. "gb51_excelsior", "gb63_tog_ii", "gb52_a45",
  556. "gb71_at_15a", "gb78_sexton_i",
  557. // french
  558. "f69_amx13_57_100", "f69_amx13_57_100_grandfinal",
  559. "f68_amx_chasseur_de_char_46", "f65_fcm_50t",
  560. "fcm_36pak40",
  561. "_105_lefh18b2",
  562. // chinese
  563. "ch02_type62", "ch24_type64",
  564. "ch14_t34_3", "ch01_type59", "ch01_type59_gold", "ch26_59_patton",
  565. "ch23_112", "ch03_wz-111",
  566. // japanese
  567. "te_ke", "ke_ni_b",
  568. "chi_nu_kai", "j18_sta_2_3",
  569. "j19_tiger_i_jpn",
  570. // berlin event tanks
  571. "r71_is_2b", "r116_isu122c_berlin",
  572. "gb85_cromwell_berlin"
  573. ];
  574.  
  575. // variable for statistics
  576. var s = {
  577. b:{0:{c:0,p:0},1:{c:0,p:0},2:{c:0,p:0},3:{c:0,p:0},4:{c:0,p:0},5:{c:0,p:0}}, // badges
  578. s:{e:{r:[],b:0,w:0,bg:0},p:{r:[],b:0,w:0,bg:0},t:{r:[],b:0,w:0,bg:0}}, // custom tank tables
  579. t:{1:{b:0,c:0},2:{b:0,c:0},3:{b:0,c:0},4:{b:0,c:0},5:{b:0,c:0},6:{b:0,c:0},7:{b:0,c:0},8:{b:0,c:0},9:{b:0,c:0},10:{b:0,c:0}}, // tiers
  580. v:{a:0,bats:0,tier:0}, // vehicles
  581. h:{}, // hex colours
  582. w:{e:{frag:0,dmg:0,spot:0,def:0,win:0},r:{},w:{},n:{}}, // wn8 expected values
  583. f:{wn8:{},wn7:{},eff:{},wgr:{}} // formulas
  584. };
  585.  
  586. // total mastery badge and colouring tank table category rows
  587. var typeRow_class = d.getElementsByClassName('t-profile_tankstype js-table-dropdown-link');
  588. for (var _tr=0, _tr_len = typeRow_class.length; _tr<_tr_len; _tr++) {
  589. var typeRow = typeRow_class[_tr],
  590. typeBats = filter(typeRow.cells[1].innerHTML,1),
  591. typeWinrate = filter(typeRow.cells[2].innerHTML,1),
  592. typeWins = parseFloat((typeBats*(typeWinrate/100)).toFixed(0));
  593.  
  594. // modify table
  595. typeRow.cells[2].innerHTML = colStat(typeWinrate, "wrv", 0, "%")+"<span>"+filter(typeWins,2)+"</span>";
  596. }
  597.  
  598. // average tier, colouring premium tanks and winrates in vehicle tables
  599. var vehRow_class = d.getElementsByClassName('t-profile_tankstype t-profile_tankstype__item'),
  600. vehRowStats_class = d.getElementsByClassName('t-profile_slidedown tablesorter-childRow');
  601. for (var _vr=0, _vr_len = vehRow_class.length; _vr<_vr_len; _vr++) {
  602. var vehRow = vehRow_class[_vr],
  603. vehRowStats = vehRowStats_class[_vr],
  604. vehImg = vehRow.cells[0].getElementsByTagName('img')[0],
  605. vehImgBdg = vehRow.cells[3].getElementsByTagName('img')[0],
  606. vehSpan = vehRow.cells[0].getElementsByTagName('span'),
  607. vehImgName = vehImg.src.match(/\w+\-([\w\-]+).png/),
  608. vehId = vehRowStats.getAttribute('data-vehicle-cd'),
  609. vehBats = filter(vehRow.cells[1].innerHTML,1),
  610. vehWinrate = filter(vehRow.cells[2].innerHTML,1),
  611. vehTier = vehSpan[0].getAttribute('data-veh_level'),
  612. vehWins = parseFloat((vehBats*(vehWinrate/100)).toFixed(0)),
  613. vehBadge = (vehImgBdg) ? vehImgBdg.getAttribute('data-badge_code') : 0;
  614.  
  615. // modify table
  616. vehImg.src = "http://"+wg.host+"/static/wot/encyclopedia/tankopedia/vehicle/"+vehImgName[0];
  617. vehRow.cells[2].innerHTML = colStat(vehWinrate, "wrv", 0, "%")+"<span>"+filter(vehWins,2)+"</span>";
  618.  
  619. // vehicle badges
  620. s.b[vehBadge].c ++;
  621.  
  622. // vehicle battles per tier and amount
  623. s.t[vehTier].b += vehBats;
  624. s.t[vehTier].c ++;
  625. s.v.tier += vehTier*vehBats;
  626. s.v.bats += vehBats;
  627. s.v.a ++;
  628.  
  629. // check if vehicle exists in wnefficiency value array - report if not and exclude from wn8
  630. var vehStat;
  631. for (var _so=0, _so_len = statObj.length; _so<_so_len; _so++) {
  632. if (statObj[_so].IDNum == vehId) {
  633. vehStat = statObj[_so];
  634. // summarize expected stat from every vehicle for WN8
  635. s.w.e.frag += vehStat.expFrag *vehBats;
  636. s.w.e.dmg += vehStat.expDamage *vehBats;
  637. s.w.e.spot += vehStat.expSpot *vehBats;
  638. s.w.e.def += vehStat.expDef *vehBats;
  639. s.w.e.win += vehStat.expWinRate *vehBats;
  640. break;
  641. }
  642. else if (_so==_so_len-1 && statObj[_so].IDNum !== vehId) {
  643. s.s.e.b += vehBats;
  644. s.s.e.w += vehWins;
  645. vehSpan[1].classList.add("b-red-name");
  646. console.error("Vehicle named "+vehImgName[1]+" doesn't exist in statObj, please report!");
  647. s.s.e.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  648. if (vehBadge !== 0) {
  649. s.s.e.bg ++;
  650. }
  651. }
  652. }
  653.  
  654. // get info for premium table
  655. if (premArr.indexOf(vehImgName[1]) > -1) {
  656. s.s.p.b += vehBats;
  657. s.s.p.w += vehWins;
  658. vehSpan[1].classList.add("b-gold-name");
  659. s.s.p.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  660. if (vehBadge !== 0) {
  661. s.s.p.bg ++;
  662. }
  663. }
  664.  
  665. // get info for tier 10 table
  666. if (vehTier == 10) {
  667. s.s.t.b += vehBats;
  668. s.s.t.w += vehWins;
  669. s.s.t.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  670. if (vehBadge !== 0) {
  671. s.s.t.bg ++;
  672. }
  673. }
  674. }
  675.  
  676. // finding statistic tables
  677. var mb_table = d.getElementsByClassName('b-result-classes')[0].getElementsByClassName('t-dotted')[0],
  678. or_table = d.getElementsByClassName('b-result')[0].getElementsByClassName('t-dotted')[0],
  679. bp_table = d.getElementsByClassName('b-result')[1].getElementsByClassName('t-dotted')[0],
  680. sm_ratio = d.getElementsByClassName('b-speedometer-ratio');
  681.  
  682. // fetching info, calculate averages, colourize and store into var s
  683. // r = raw stats
  684. s.r = {
  685. "days": (new Date() - new Date(d.getElementsByClassName('js-date-format')[0].getAttribute('data-timestamp')*1000))/1000/60/60/24,
  686. "bats": filter(or_table.rows[0].cells[1].innerHTML,1),
  687. "wins": filter(or_table.rows[1].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  688. "loss": filter(or_table.rows[2].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  689. "surv": filter(or_table.rows[3].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  690. "exp": filter(or_table.rows[4].cells[1].innerHTML,1),
  691. "expA": filter(or_table.rows[5].cells[1].innerHTML,1),
  692. "expM": filter(or_table.rows[6].cells[1].innerHTML,1),
  693. "frag": filter(bp_table.rows[0].cells[1].innerHTML,1),
  694. "spot": filter(bp_table.rows[1].cells[1].innerHTML,1),
  695. "hits": parseFloat(bp_table.rows[2].cells[1].innerHTML.replace(/[,]/g,".")),
  696. "dmgD": filter(bp_table.rows[3].cells[1].innerHTML,1),
  697. "caps": filter(bp_table.rows[5].cells[1].innerHTML,1),
  698. "defs": filter(bp_table.rows[6].cells[1].innerHTML,1),
  699. "dths": filter(sm_ratio[0].innerHTML.match(/\/(.+)$/)[1],1),
  700. "dmgR": filter(sm_ratio[1].innerHTML.match(/\/(.+)$/)[1],1)
  701. };
  702. s.r.draw = s.r.bats-(s.r.wins+s.r.loss);
  703. s.r.winLR = s.r.wins/s.r.loss;
  704. // a = average stats
  705. s.a = {
  706. "bats": s.r.bats/s.r.days,
  707. "wins": (s.r.wins/s.r.bats)*100,
  708. "loss": (s.r.loss/s.r.bats)*100,
  709. "draw": (s.r.draw/s.r.bats)*100,
  710. "surv": (s.r.surv/s.r.bats)*100,
  711. "frag": s.r.frag/s.r.bats,
  712. "dths": s.r.dths/s.r.bats,
  713. "spot": s.r.spot/s.r.bats,
  714. "dmgD": s.r.dmgD/s.r.bats,
  715. "dmgR": s.r.dmgR/s.r.bats,
  716. "caps": s.r.caps/s.r.bats,
  717. "defs": s.r.defs/s.r.bats,
  718. "tier": s.v.tier/s.v.bats
  719. };
  720. // c = coloured stats
  721. s.c = {
  722. "winsR": colStat(s.a.wins, "wr", 2, "%"),
  723. "lossR": colStat(s.a.loss, "wr", 2, "%"),
  724. "survR": colStat(s.a.surv, "sr", 2, "%"),
  725. "hitsR": colStat(s.r.hits, "hr", 2, "%"),
  726. "drawR": colStat(s.a.draw, "", 2, "%"),
  727. "batsC": colStat(s.r.bats, "bat", 0),
  728. "dmgTier": colStat(s.a.dmgD/s.a.tier, "dmg", 0, "", s.a.dmgD),
  729. "api": "<span class='t-dotted_minor'>API:</span> <span style='color:#CD3333'>"+filter(s.v.bats,2)+"</span>"
  730. };
  731. // calculate badge percent
  732. s.b[5].c = s.v.a;
  733. s.b[5].p = parseFloat((s.v.a/s.v.a*100).toFixed(0));
  734. for (var _b in s.b) {
  735. if (s.b.hasOwnProperty(_b)) {
  736. s.b[_b].p = parseFloat((s.b[_b].c/s.b[5].c*100).toFixed(0));
  737. }
  738. }
  739. // prepare numbers for WN8 formula
  740. // r = ratios
  741. s.w.r = {
  742. "frag": s.w.e.frag/s.v.bats,
  743. "dmg": s.w.e.dmg/s.v.bats,
  744. "spot": s.w.e.spot/s.v.bats,
  745. "def": s.w.e.def/s.v.bats,
  746. "win": s.w.e.win/s.v.bats
  747. };
  748. // w = weighted
  749. s.w.w = {
  750. "frag": s.a.frag/s.w.r.frag,
  751. "dmg": s.a.dmgD/s.w.r.dmg,
  752. "spot": s.a.spot/s.w.r.spot,
  753. "def": s.a.defs/s.w.r.def,
  754. "win": s.a.wins/s.w.r.win
  755. };
  756. // n = normalized
  757. s.w.n.win = Math.max((s.w.w.win-0.71)/(1-0.71),0);
  758. s.w.n.dmg = Math.max((s.w.w.dmg-0.22)/(1-0.22),0);
  759. s.w.n.frag = Math.max(Math.min(s.w.n.dmg+0.2,(s.w.w.frag-0.12)/(1-0.12)),0);
  760. s.w.n.spot = Math.max(Math.min(s.w.n.dmg+0.1,(s.w.w.spot-0.38)/(1-0.38)),0);
  761. s.w.n.def = Math.max(Math.min(s.w.n.dmg+0.1,(s.w.w.def-0.10)/(1-0.10)),0);
  762.  
  763. // calculate ratings
  764. // wg personal rating
  765. s.f.wgr = (function() {
  766. var rat = filter(d.getElementsByClassName("t-personal-data_value__pr")[0].innerHTML,1);
  767. return { rat: rat, ratCol: colStat(rat,"wgr",0) };
  768. })();
  769. // WN8
  770. s.f.wn8 = (function() {
  771. var frag = 210*s.w.n.dmg*s.w.n.frag,
  772. dmg = 980*s.w.n.dmg,
  773. spot = 155*s.w.n.frag*s.w.n.spot,
  774. def = 75*s.w.n.def*s.w.n.frag,
  775. win = 145*Math.min(1.8,s.w.n.win),
  776. rat = frag+dmg+spot+def+win,
  777. pct = (rat<=colArr.sUni[7]) ? (rat/colArr.sUni[7])*100 : 100,
  778. scale = (rat<=colArr.sUni[7]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(-rat*0.00000000000000000004164+0.000000000000001176)-0.000000000009033)+0.000000027466)-0.00003804)+0.05819)-0.965)) : 100;
  779. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, rat: rat, pct: pct, scale: scale, ratCol: (isFinite(rat)) ? colStat(rat,"wn8",2) : loc.p18, scaleCol: (isFinite(rat)) ? colStat(scale,"wn8",2) : loc.p18};
  780. })();
  781. // WN7 - legacy support
  782. s.f.wn7 = (function() {
  783. var frag = s.a.frag*(1240-1040/(Math.pow(Math.min(s.a.tier,6),0.164))),
  784. dmg = s.a.dmgD*530/(184*Math.exp(0.24*s.a.tier)+130),
  785. spot = s.a.spot*125*Math.min(s.a.tier,3)/3,
  786. def = Math.min(2.2,s.a.defs)*100,
  787. win = (((185/(0.17+Math.exp((s.a.wins-35)*-0.134)))-500)*0.45),
  788. norm = -Math.abs((((5-Math.min(s.a.tier,5))*125)/(1+Math.exp(s.a.tier-Math.pow(s.r.bats/220,3/s.a.tier))*1.5))),
  789. rat = frag+dmg+spot+def+win+norm,
  790. pct = (rat<=colArr.sUni[8]) ? (rat/colArr.sUni[8])*100 : 100,
  791. scale = (rat<=colArr.sUni[8]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(rat*0.000000000000000001225-0.000000000000007167)+0.000000000005501)+0.00000002368)-0.00003668)+0.05965)-5.297)) : 100;
  792. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, norm: norm, rat: rat, pct: pct, scale: scale, ratCol: colStat(rat,"wn7",2), scaleCol: colStat(scale,"wn7",2) };
  793. })();
  794. // efficiency - improved
  795. s.f.eff = (function() {
  796. var frag = s.a.frag*250,
  797. dmg = s.a.dmgD*(10/(s.a.tier+2))*(0.23+2*s.a.tier/100),
  798. spot = s.a.spot*150,
  799. cap = (Math.log(s.a.caps+1)/Math.log(1.732))*150,
  800. def = s.a.defs*150,
  801. rat = frag+dmg+spot+cap+def,
  802. pct = (rat<=colArr.sUni[9]) ? (rat/colArr.sUni[9])*100 : 100,
  803. scale = (rat<=colArr.sUni[9]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(rat*0.000000000000000013172 - 0.000000000000092286)+0.00000000023692)-0.00000027377)+0.00012983)+0.05935)-31.684)) : 100;
  804. return { frag: frag, dmg: dmg, spot: spot, cap: cap, def: def, rat: rat, pct: pct, scale: scale, ratCol: colStat(rat,"eff",2), scaleCol: colStat(scale,"eff",2) };
  805. })();
  806. // end formula calculations and variables
  807.  
  808. // start modifying and enhancing the rest of the page
  809. // modify sidebar structure
  810. var sidebar_class = d.getElementsByClassName('l-sidebar')[0],
  811. recBlock_class = d.getElementsByClassName('js-recruitsation-block')[0],
  812. ban_class = d.getElementsByClassName('js-account_game_ban_info_msg')[0],
  813. content_class = d.getElementsByClassName('l-content')[0],
  814. userBlockSprk = d.getElementsByClassName('b-user-block__sparks')[0],
  815. sidemsg_class = elem("div", "l-side-msg", "");
  816. sidemsg_class.appendChild(recBlock_class);
  817. sidebar_class.appendChild(sidemsg_class);
  818. userBlockSprk.insertBefore(ban_class, userBlockSprk.firstChild);
  819. if (locSup_div) {
  820. sidemsg_class.appendChild(locSup_div);
  821. }
  822.  
  823. // removing elements
  824. var layoutfix_class = d.getElementsByClassName('b-hr-layoutfix');
  825. layoutfix_class[0].parentNode.removeChild(layoutfix_class[0]);
  826.  
  827. // profile wrapper
  828. var profile_div = elem("div", "b-profile-wrpr", ""),
  829. profileHead_div = elem("div", "b-profile-header", sc.link);
  830. profileName_class.lastElementChild.innerHTML += " - "+s.r.days.toFixed(0)+" "+loc.p03;
  831. profileName_class.parentNode.insertBefore(profile_div, profileName_class.nextSibling);
  832. profile_div.appendChild(profileHead_div);
  833. profile_div.appendChild(profileName_class);
  834. // applies relevant style for own profile
  835. var cookieName = c.match(/user_name=(\w+)/) || false;
  836. if (cookieName[1] == wg.name) {
  837. profile_div.style.minHeight = (srv.s == "es") ? "167px" : "151px";
  838. }
  839.  
  840. // profile header - check for missing battles and notify
  841. var profileError_div = elem("div", "b-profile-error", loc.p69);
  842. if (s.v.bats !== s.r.bats) {
  843. profileError_div.style.display="inline-block";
  844. }
  845. else {
  846. s.c.api = " ";
  847. }
  848. profileHead_div.insertBefore(profileError_div, profileHead_div.firstElementChild);
  849.  
  850. // button for saving stats to clipboard
  851. var ratingsClipboard = loc.p72+" "+wg.name+": \n"+loc.p73+" "+s.r.bats+" \nWR: "+s.a.wins.toFixed(2)+" \nWN8: "+s.f.wn8.rat.toFixed(2)+" \nWN7: "+s.f.wn7.rat.toFixed(2)+" \nEff: "+s.f.eff.rat.toFixed(2),
  852. ratingsClipboard_div = elem("div", "b-ratingsClip", "<div class='ratingsClip-holder js-noobmeter' style='display:none;'>"+ratingsClipboard+"</div><div class='ratingsClip-holder' style='display:none;'>"+loc.p64+"</div><a class='b-ratingsButton' onclick='copyClipboard()'>"+loc.p63+"</a>");
  853. profileHead_div.insertBefore(ratingsClipboard_div, profileHead_div.firstElementChild.nextSibling);
  854.  
  855. // buttton to force refresh WN8 tables and refresh
  856. var context_class = d.getElementsByClassName('b-context-menu_wrapper')[0],
  857. refreshBtn_div = elem("ul", "b-context-menu-list b-context-wn8", "<li><a>"+loc.p79+"</a></li>");
  858. refreshBtn_div.addEventListener('click', function() {localStorage.removeItem("wnExpValues"); location.reload();}, false);
  859. context_class.appendChild(refreshBtn_div);
  860.  
  861. // background behind profile wrapper
  862. var background_div = elem("div", "b-background", "<img src='"+css.l[6]+"'>");
  863. background_div.style.background = s.h.wn8;
  864. profile_div.parentNode.insertBefore(background_div, profile_div);
  865.  
  866. // page navigation
  867. var header_class = d.getElementsByClassName('b-header')[0];
  868. content_class.appendChild(elem("div", "b-profile-nav", "<a class='bot' onclick='window.scrollTo(0, 0)'><span>"+loc.p02+"</span></a>"));
  869. header_class.appendChild(elem("div", "b-profile-nav b-profile-nav-top", "<a class='top' onclick='window.scrollTo(0, 9999)'><span>"+loc.p01+"</span></a>"));
  870.  
  871. // player statistic links
  872. var profileStat_table = elem("table", "t-profile-table", ""),
  873. profileStat_table_cells = [
  874. [
  875. [loc.p04],
  876. [srv.wl, "<a target='_blank' href='http://wotlabs.net/"+srv.wl+"/player/"+wg.name+"'>WoTLabs</a>"],
  877. [srv.nm, "<a target='_blank' href='"+sc.nm.url+"'>Noobmeter</a>"],
  878. [srv.ct, "<a target='_blank' href='https://clantools.us/servers/"+srv.ct+"/players?id="+wg.id+"'>Clan Tools</a>"]
  879. ],
  880. [
  881. [""],
  882. [srv.ws, "<a target='_blank' href='http://wotstats.org/stats/"+srv.ws+"/"+wg.name+"/'>WoTstats</a>"],
  883. (wg.srv=="ru") ? [srv.kttc, "<a target='_blank' href='http://kttc.ru/statistics/user/"+wg.name+"/'>KTTC</a>"] : ((wg.srv=="eu") ? [srv.as, "<a target='_blank' href='http://stats.teamaway.net/player/"+wg.id+"/'>AWAY Stats</a>"] : [srv.cs, "<a target='_blank' href='http://wotcs.com/player.php?wid="+wg.id+"'>WoT-CS</a>"]),
  884. (wg.srv=="ru") ? [srv.wots, "<a target='_blank' href='http://wots.com.ua/user/stats/"+wg.name+"/'>WOTS</a>"] : [srv.wlife, "<a target='_blank' href='http://en.wot-life.com/"+srv.wlife+"/player/"+wg.name+"/'>WoT-Life</a>"]
  885. ],
  886. [
  887. [loc.p05],
  888. [srv.wl, "<a target='_blank' href='http://wotlabs.net/sig/"+srv.wl+"/"+wg.name+"/signature.png'>"+loc.p06+"</a>"],
  889. [srv.wl, "<a target='_blank' href='http://wotlabs.net/sig_dark/"+srv.wl+"/"+wg.name+"/signature.png'>"+loc.p07+"</a>"]
  890. ],
  891. [
  892. [loc.p08],
  893. [srv.wr, "<a target='_blank' href='http://wotreplays."+srv.wr+"/player/"+wg.name+"'>WoTReplays</a>"]
  894. ]
  895. ];
  896. linksHnd(profileStat_table, profileStat_table_cells, "table");
  897. profileName_class.appendChild(profileStat_table);
  898.  
  899. // player clan history
  900. var clanHist_div = elem("div", "b-clanHistory-wrpr", "<span class='clanname'>"+loc.p74+"</span>");
  901. profile_div.appendChild(clanHist_div);
  902.  
  903. // clan handler
  904. var clanBlock = d.getElementById('js-clan-block-container'),
  905. clanStat_table = elem("table", "", "");
  906. clanStat_table.id = "js-profile-clan-table";
  907. profileName_class.parentNode.insertBefore(clanBlock, profileName_class.nextSibling);
  908. // apply changes when clanBlock is modified
  909. var clanLook = new MutationObserver(function() {
  910. var cl_class = clanBlock.getElementsByTagName('a')[1];
  911. if (cl_class) {
  912. wg.clan.id = cl_class.getAttribute('href').match(/\/(\d+)/)[1];
  913. wg.clan.name = cl_class.getElementsByTagName('span')[0].innerHTML.match(/[\w.+\-]+/)[0];
  914. // clan statistic links
  915. var clanStat_table_cells = [
  916. [
  917. [loc.p66],
  918. [srv.wl, "<a target='_blank' href='http://wotlabs.net/"+srv.wl+"/clan/"+wg.clan.name+"'>WoTLabs</a>"],
  919. [srv.nm, "<a target='_blank' href='http://noobmeter.com/clan/"+srv.nm+"/"+wg.clan.name+"/"+wg.clan.id+"'>Noobmeter</a>"],
  920. [srv.ct, "<a target='_blank' href='https://clantools.us/servers/"+srv.ct+"/clans?id="+wg.clan.id+"'>Clan Tools</a>"]
  921. ],
  922. [
  923. [""],
  924. [srv.cs, "<a target='_blank' href='http://wotcs.com/clan.php?wid="+wg.clan.id+"'>WoT-CS</a>"],
  925. (wg.srv=="eu") ? [srv.as, "<a target='_blank' href='http://stats.teamaway.net/clan/"+wg.clan.id+"/'>AWAY Stats</a>"] : [srv.kttc, "<a target='_blank' href='http://"+((wg.srv=="ru") ? "" : srv.kttc+".")+"kttc.ru/clan/"+wg.clan.id+"/'>KTTC</a>"],
  926. [srv.wlife, "<a target='_blank' href='http://en.wot-life.com/"+srv.wlife+"/clan/"+wg.clan.name+"-"+wg.clan.id+"/'>WoT-Life</a>"]
  927. ],
  928. [
  929. [loc.p67],
  930. [srv.wr, "<a target='_blank' href='http://wotreplays."+srv.wr+"/clan/"+wg.clan.name+"'>WoTReplays</a>"]
  931. ]
  932. ];
  933. linksHnd(clanStat_table, clanStat_table_cells, "table");
  934. clanBlock.appendChild(clanStat_table);
  935. }
  936. clanLook.disconnect();
  937. });
  938. clanLook.observe(clanBlock, {childList: true});
  939. // clan history retrieval
  940. if (!!srv.cs) {
  941. reqHnd(sc.chApi, chHnd, chHnd_error);
  942. }
  943.  
  944. // move fame points block, if it exists
  945. var gp_class = d.getElementById('js-glory-points-block');
  946. if (gp_class) {
  947. profile_div.appendChild(gp_class);
  948. }
  949.  
  950. // move sidebar
  951. profile_div.appendChild(sidebar_class);
  952. // end profile wrapper
  953.  
  954. // personal data - modify table - add ratings
  955. var persDataTable = d.getElementsByClassName('t-personal-data')[0];
  956. persDataTable.rows[0].cells[0].textContent = loc.p09; // winrate
  957. persDataTable.rows[1].cells[0].innerHTML = s.c.winsR;
  958. persDataTable.rows[0].cells[1].textContent = loc.p10; // battles
  959. persDataTable.rows[1].cells[1].innerHTML = s.c.batsC;
  960. persDataTable.rows[0].cells[1].parentNode.insertBefore(elem("th", "t-personal-data_ico t-personal-data_ico__exp", loc.p11), persDataTable.rows[0].cells[1].nextSibling); // xp
  961. persDataTable.rows[1].cells[1].parentNode.insertBefore(elem("td", "t-personal-data_value", filter(s.r.expA,2)), persDataTable.rows[1].cells[1].nextSibling);
  962. persDataTable.rows[0].cells[4].textContent = loc.p70; // hitrate
  963. persDataTable.rows[1].cells[3].innerHTML = s.c.hitsR;
  964. persDataTable.rows[0].cells[4].className = "t-personal-data_ico t-personal-data_ico__hitrate";
  965. persDataTable.rows[0].cells[5].textContent = loc.p71; // damage
  966. persDataTable.rows[1].cells[4].innerHTML = s.c.dmgTier;
  967. persDataTable.rows[0].appendChild(elem("th", "t-personal-data_ico t-personal-data_ico__tier", loc.p12)); // avg tier
  968. persDataTable.rows[1].appendChild(elem("td", "t-personal-data_value", s.a.tier.toFixed(2)));
  969. persDataTable.appendChild(elem("tbody", "t-ratings-info", "<tr><th colspan='2'><a href='http://www.wnefficiency.net/wnexpected/' target='_blank'>"+loc.p15+" v"+wnExpVers[1]+"</a></th><th>"+loc.p30+"</th><th></th><th>"+loc.p16+"</th><th colspan='2'><a class='rating-url_nm' target='_blank' href="+sc.nm.url+">"+loc.p17+"</a></th></tr><tr><td colspan='2'>"+s.f.wn8.ratCol+"</td><td>"+s.f.wn7.ratCol+"</td><td></td><td>"+s.f.eff.ratCol+"</td><td colspan='2' class='js-noobmeter'>"+loc.p18+"</td></tr>"));
  970. persDataTable.getElementsByClassName('t-personal-data_value__pr')[0].innerHTML = s.f.wgr.ratCol;
  971.  
  972. // speedometer - win/loss ratio
  973. var smBody_class = d.getElementsByClassName('b-speedometer-body')[0],
  974. smWinWeight = (isFinite(s.r.winLR)) ? s.r.winLR.toFixed(2) : 1,
  975. smWinArrow = (isFinite(s.r.winLR)) ? Math.min(30*(s.r.winLR-1),31) : 0;
  976. smBody_class.appendChild(elem("div", "b-speedometer", "<div class='b-speedometer-arrow' data-deg='"+smWinArrow+"' style='transform: rotate("+smWinArrow+"deg); -webkit-transform: rotate("+smWinArrow+"deg); -ms-transform: rotate("+smWinArrow+"deg);'></div><div class='b-speedometer-round'></div><p class='b-speedometer-title'>"+loc.p13+"</p><p class='b-speedometer-weight'>"+smWinWeight+"</p><p class='b-speedometer-ratio'>"+filter(s.r.wins,2)+" / "+filter(s.r.loss,2)+"</p>"));
  977.  
  978. // performance ratings calculations table
  979. var rTable_div = elem("div", "ratings-table", "<h3>"+loc.p19+"</h3>"),
  980. rTable = elem("table", "t-table-ratings", ""),
  981. ratingsArr = [
  982. [loc.p20, loc.p21, loc.p22, loc.p23, loc.p24, loc.p25, loc.p26, loc.p27, loc.p28],
  983. ["wn8", s.f.wn8.pct, loc.p29, s.f.wn8.ratCol, s.f.wn8.scaleCol, s.f.wn8.frag.toFixed(2), s.f.wn8.dmg.toFixed(2), s.f.wn8.spot.toFixed(2), "–", s.f.wn8.def.toFixed(2), s.f.wn8.win.toFixed(2)],
  984. ["wn7", s.f.wn7.pct, loc.p30, s.f.wn7.ratCol, s.f.wn7.scaleCol, s.f.wn7.frag.toFixed(2), s.f.wn7.dmg.toFixed(2), s.f.wn7.spot.toFixed(2), "–", s.f.wn7.def.toFixed(2), s.f.wn7.win.toFixed(2)],
  985. ["eff", s.f.eff.pct, loc.p31, s.f.eff.ratCol, s.f.eff.scaleCol, s.f.eff.frag.toFixed(2), s.f.eff.dmg.toFixed(2), s.f.eff.spot.toFixed(2), s.f.eff.cap.toFixed(2), s.f.eff.def.toFixed(2), "–" ]
  986. ];
  987. for (var _r=0, _r_len = ratingsArr.length; _r<_r_len; ++_r) {
  988. var rRow = elem("tr", "", "");
  989. if (_r === 0) {
  990. for (var _rh=0, _rh_len = ratingsArr[_r].length; _rh<_rh_len; ++_rh) {
  991. rRow.appendChild(elem("th", "", ratingsArr[_r][_rh]));
  992. }
  993. rTable.appendChild(rRow);
  994. }
  995. else {
  996. for (var _rc=2, _rc_len = ratingsArr[_r].length; _rc<_rc_len; ++_rc) {
  997. rRow.appendChild(elem("td", "td-center", ratingsArr[_r][_rc]));
  998. }
  999. rTable.appendChild(rRow);
  1000. rTable.appendChild(elem("tr", "td-rating-meter", "<td colspan='9'><div class='rating-meter rating-meter_"+ratingsArr[_r][0]+"'><div class='rating-meter-dail_line' style='width:"+ratingsArr[_r][1]+"%;'><div class='rating-meter-marker'></div></div></div></td>"));
  1001. }
  1002. }
  1003. rTable_div.appendChild(rTable);
  1004. userBlockSprk.appendChild(rTable_div);
  1005. // link to WN thread
  1006. userBlockSprk.appendChild(elem("div", "wnelink", "<a class ='b-orange-arrow wnelink_info' target='_blank' href='http://wiki.wnefficiency.net/pages/WN8:_Summary'>"+loc.p32+"</a>"));
  1007. // end performance ratings calculations table
  1008.  
  1009. // statistics wrapper
  1010. var userBlock_div = d.getElementsByClassName('b-userblock-wrpr')[0],
  1011. statistics_div = d.getElementsByClassName('b-result-classes')[0].parentNode;
  1012. statistics_div.className = "b-statistics-wrpr";
  1013. userBlock_div.parentNode.insertBefore(statistics_div, userBlock_div.nextSibling);
  1014.  
  1015. // clean the old tables and populate them with new values (master badges, overall results and battle performance)
  1016. var statTables = [
  1017. [
  1018. ["<img src='"+css.l[7]+"'>", loc.p33, s.b[4].c+"<span>("+s.b[4].p+"%)</span>"],
  1019. ["<img src='"+css.l[8]+"'>", loc.p34, s.b[3].c+"<span>("+s.b[3].p+"%)</span>"],
  1020. ["<img src='"+css.l[9]+"'>", loc.p35, s.b[2].c+"<span>("+s.b[2].p+"%)</span>"],
  1021. ["<img src='"+css.l[10]+"'>", loc.p36, s.b[1].c+"<span>("+s.b[1].p+"%)</span>"],
  1022. ["<img src='"+css.u.bad1+"'>", loc.p37, s.b[0].c+"<span>("+s.b[0].p+"%)</span>"],
  1023. ["<img src='"+css.u.bad2+"'>", loc.p38, s.b[5].c+"<span>("+s.b[5].p+"%)</span>"]
  1024. ],
  1025. [
  1026. [loc.p39, filter(s.r.bats,2), s.c.api],
  1027. [loc.p40, filter(s.r.wins,2), "("+s.c.winsR+")"],
  1028. [loc.p41, filter(s.r.loss,2), "("+s.c.lossR+")"],
  1029. [loc.p42, filter(s.r.draw,2), "("+s.c.drawR+")"],
  1030. [loc.p43, filter(s.r.surv,2), "("+s.c.survR+")"],
  1031. [loc.p44, "", s.a.bats.toFixed(2)],
  1032. [loc.p45, "", filter(s.r.exp,2)],
  1033. [loc.p46, "", filter(s.r.expA,2)],
  1034. [loc.p47, "", filter(s.r.expM,2)]
  1035. ],
  1036. [
  1037. [loc.p48, filter(s.r.frag,2), s.a.frag.toFixed(2)],
  1038. [loc.p49, filter(s.r.dths,2), s.a.dths.toFixed(2)],
  1039. [loc.p50, filter(s.r.spot,2), s.a.spot.toFixed(2)],
  1040. [loc.p51, "", s.c.hitsR],
  1041. [loc.p52, filter(s.r.dmgD,2), s.c.dmgTier],
  1042. [loc.p53, filter(s.r.dmgR,2), filter(s.a.dmgR.toFixed(0),2)],
  1043. [loc.p54, filter(s.r.caps,2), s.a.caps.toFixed(2)],
  1044. [loc.p55, filter(s.r.defs,2), s.a.defs.toFixed(2)],
  1045. [loc.p56, "", s.a.tier.toFixed(2)]
  1046. ],
  1047. [
  1048. mb_table,
  1049. or_table,
  1050. bp_table
  1051. ]
  1052. ];
  1053. mb_table.textContent = "";
  1054. or_table.textContent = "";
  1055. bp_table.textContent = "";
  1056. for (var _s=0, _s_len = statTables.length; _s<(_s_len-1); ++_s) {
  1057. var statTable = d.createDocumentFragment();
  1058. for (var _sr=0, _sr_len = statTables[_s].length; _sr<_sr_len; ++_sr) {
  1059. statTable.appendChild(elem("tr", "", "<td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_class-ico t-dotted_minor__middle' : 't-dotted_minor')+"'>"+statTables[_s][_sr][0]+"</td><td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_minor t-dotted_minor__middle' : 't-dotted_value')+"'>"+statTables[_s][_sr][1]+"</td><td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_value t-dotted_minor__middle' : 't-dotted_value')+"'>"+statTables[_s][_sr][2]+"</td>"));
  1060. }
  1061. statTables[3][_s].appendChild(statTable);
  1062. }
  1063.  
  1064. // cake diagrams - adding tier diagram
  1065. var diagSector_class = d.getElementsByClassName('b-diagrams-sector')[0],
  1066. diagTier_div = elem("div", "b-diagram-block b-diagram-tiers js-diagram-block", "<h3>"+loc.p57+"</h3><div class='b-diagram-wrpr'><div class='b-diagram' id='holder-mechanism-tier'></div><div class='b-diagram-round js-diagram-round'><span class='b-diagram-round_title'></span><span class='b-diagram-round_value js-result'>"+s.v.a+"</span></div></div>"),
  1067. diagTier_table = elem("table", "t-dotted t-dotted__diagram js-diagram-mechanism-legend", ""),
  1068. diagTierCol = {1:"496877",2:"2b591f",3:"831818",4:"303766",5:"814f07",6:"1A775F",7:"B0D23A",8:"763D46",9:"936C19",10:"471952"};
  1069. diagSector_class.insertBefore(diagTier_div, diagSector_class.firstElementChild.nextSibling);
  1070. for (var _t in s.t) {
  1071. if (s.t.hasOwnProperty(_t)) {
  1072. if (s.t[_t].c !== 0) {
  1073. diagTier_table.appendChild(elem("tr", "", "<td class='t-dotted_diagram-first'><span class='t-dotted_diagram-bg'></span></td><td><span class='t-dotted_diagram-bg'><span class='t-dotted_diagram-info'><span class='t-diagram_battle'>"+filter(s.t[_t].b,2)+"</span><span class='t-dotted_diagram-percent'>(<span class=''>"+(s.t[_t].b/s.r.bats*100).toFixed(2)+"%</span>)</span><span class='t-diagram_tiers js-results'>"+s.t[_t].c+"</span><span class='t-dotted_diagram-percent'>(<span class='js-value'>"+(s.t[_t].c/s.v.a*100).toFixed(2)+"%</span>)</span></span><span class='b-diagram-ico b-diagram-ico_tier b-diagram-ico_tier-"+_t+"'>"+loc.p58+" "+_t+"</span></span></td><td class='t-dotted_diagram-last'><span class='t-dotted_diagram-bg'><span class='js-colors'>#"+diagTierCol[_t]+"</span></span></td>"));
  1074. }
  1075. }
  1076. }
  1077. diagTier_div.appendChild(diagTier_table);
  1078. diagSector_class.firstElementChild.appendChild(elem("div", "b-diagram-total", "<h3>"+loc.p59+" "+s.v.a+"</h3>"));
  1079. // fix for cake diagram in chrome
  1080. if (web.chrome) {
  1081. $('.js-diagram-block').each(function() {
  1082. var items = [], values = [], colors = [], results = [], legend, result, holder;
  1083. holder = $('.b-diagram', this).attr('id');
  1084. $('.js-diagram-mechanism-legend tr', this).each(function () {
  1085. items.push($(this));
  1086. values.push(parseInt($('.js-value', this).text(), 10));
  1087. colors.push($('.js-colors', this).text());
  1088. results.push($('.js-results', this).text());
  1089. legend = $('.js-diagram-mechanism-legend');
  1090. result = $('#' + holder).next().find('.js-result');
  1091. });
  1092. new Raphael(holder, 630, 630).pieChart(65, 65.5, 53.5, items, values, colors, results, legend, result);
  1093. });
  1094. }
  1095.  
  1096. // achievements wrapper
  1097. var medal_div = elem("div", "b-achievements-wrpr", ""),
  1098. medalHeader_div = elem("div", "b-head-block", ""),
  1099. medalHeader_class = d.getElementsByClassName('js-achievements-header')[0],
  1100. medalClassArr = ["b-profile-item-empty","js-achivements-showhide","js-short-achievements","js-full-achievements"],
  1101. medal_Children = document.createDocumentFragment();
  1102. medalHeader_div.appendChild(medalHeader_class);
  1103. medal_div.appendChild(medalHeader_div);
  1104. for (var _m=0, _m_len = medalClassArr.length; _m<_m_len; ++_m) {
  1105. var medalChild = d.getElementsByClassName(medalClassArr[_m])[0];
  1106. if (!!medalChild) {
  1107. medal_Children.appendChild(medalChild);
  1108. }
  1109. }
  1110. medal_div.appendChild(medal_Children);
  1111. diagSector_class.parentNode.insertBefore(medal_div, diagSector_class.nextSibling);
  1112. diagSector_class.parentNode.insertBefore(layoutfix_class[0], diagSector_class.nextSibling);
  1113.  
  1114. // vehicles wrapper
  1115. var vehTable_class = d.getElementsByClassName('t-profile t-profile__vehicle')[0],
  1116. vehicles_div = elem("div", "b-vehicles-wrpr", ""),
  1117. vehiclesHeader_div = elem("div", "b-vehicles-header", "<a class='b-orange-arrow b-profile-ratings_link' target='_blank' href='/encyclopedia/vehicles/'>"+loc.p60+"</a><span class='b-profile-vehicles-tankstat'><a class='b-orange-arrow b-profile-ratings_link b-profile-vehicles-tankstat_link' target='_blank' href='http://noobmeter.com/tankStats/"+srv.nm+"'>"+loc.p61+"</a></span>"),
  1118. vehicles_h3_class = vehTable_class.previousElementSibling.previousElementSibling;
  1119. vehicles_h3_class.className = "b-profile-ratings_title";
  1120. vehiclesHeader_div.insertBefore(vehicles_h3_class, vehiclesHeader_div.firstChild);
  1121. vehicles_div.appendChild(vehiclesHeader_div);
  1122. vehTable_class.parentNode.insertBefore(vehicles_div, vehTable_class);
  1123. vehicles_div.appendChild(vehTable_class);
  1124.  
  1125. // add a premium tanks table to the vehicle table
  1126. var premHBody = elem("tbody", "", ""),
  1127. premTBody = elem("tbody", "sortable", ""),
  1128. _p_len = s.s.p.r.length;
  1129. vehTable_class.appendChild(premHBody);
  1130. if (_p_len === 0) {
  1131. premHBody.appendChild(elem("tr", "t-profile_tankstype t-profile_tankstype-prem t-profile_tankstype__empty", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__prem'></span><span class='b-tankstype-text'>"+loc.p62+" </span></td><td class='t-profile_right'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_dropdown-ico'><!-- empty --></td>"));
  1132. }
  1133. else {
  1134. premHBody.className = "tablesorter-no-sort";
  1135. premHBody.appendChild(elem("tr", "t-profile_tankstype t-profile_tankstype-prem js-table-dropdown-link", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__prem'></span><span class='b-tankstype-text'>"+loc.p62+" <span class='b-armory-col'>"+_p_len+"</span></span></td><td class='t-profile_right'>"+filter(s.s.p.b,2)+"</td><td class='t-profile_center'>"+colStat((s.s.p.w/s.s.p.b)*100, "wrv", 0, "%")+"<span>"+filter(s.s.p.w,2)+"</span></td><td class='t-profile_center'>"+s.s.p.bg+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td>"));
  1136. premTBody.style.display="none";
  1137. for (var _p=0; _p<_p_len; ++_p) {
  1138. premTBody.appendChild(s.s.p.r[_p][0]);
  1139. premTBody.appendChild(s.s.p.r[_p][1]);
  1140. }
  1141. vehTable_class.appendChild(premTBody);
  1142. }
  1143.  
  1144. // add a tier 10 table to the vehicle table
  1145. var tenHBody = elem("tbody", "", ""),
  1146. tenTBody = elem("tbody", "sortable", ""),
  1147. _x_len = s.s.t.r.length;
  1148. vehTable_class.appendChild(tenHBody);
  1149. if (_x_len === 0) {
  1150. tenHBody.appendChild(elem("tr", "t-profile_tankstype t-profile_tankstype__empty", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__ten'>✖</span><span class='b-tankstype-text'>"+loc.p68+" </span></td><td class='t-profile_right'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_dropdown-ico'><!-- empty --></td>"));
  1151. }
  1152. else {
  1153. tenHBody.className = "tablesorter-no-sort";
  1154. tenHBody.appendChild(elem("tr", "t-profile_tankstype js-table-dropdown-link", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__ten'>✖</span><span class='b-tankstype-text'>"+loc.p68+" <span class='b-armory-col'>"+_x_len+"</span></span></td><td class='t-profile_right'>"+filter(s.s.t.b,2)+"</td><td class='t-profile_center'>"+colStat((s.s.t.w/s.s.t.b)*100, "wrv", 0, "%")+"<span>"+filter(s.s.t.w,2)+"</span></td><td class='t-profile_center'>"+s.s.t.bg+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td>"));
  1155. tenTBody.style.display="none";
  1156. for (var _x=0; _x<_x_len; ++_x) {
  1157. tenTBody.appendChild(s.s.t.r[_x][0]);
  1158. tenTBody.appendChild(s.s.t.r[_x][1]);
  1159. }
  1160. vehTable_class.appendChild(tenTBody);
  1161. }
  1162.  
  1163. // add a missing tanks table to the vehicle table
  1164. // only shown if a tank is missing from imported wn8 table
  1165. var missHBody = elem("tbody", "", ""),
  1166. missTBody = elem("tbody", "sortable", ""),
  1167. _e_len = s.s.e.r.length;
  1168. vehTable_class.appendChild(missHBody);
  1169. if (_e_len !== 0) {
  1170. missHBody.className = "tablesorter-no-sort";
  1171. missHBody.appendChild(elem("tr", "t-profile_tankstype t-profile_tankstype-miss js-table-dropdown-link", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__miss'></span><span class='b-tankstype-text'>"+loc.p78+" <span class='b-armory-col'>"+_e_len+"</span></span></td><td class='t-profile_right'>"+filter(s.s.e.b,2)+"</td><td class='t-profile_center'>"+colStat((s.s.e.w/s.s.e.b)*100, "wrv", 0, "%")+"<span>"+filter(s.s.e.w,2)+"</span></td><td class='t-profile_center'>"+s.s.e.bg+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td>"));
  1172. missTBody.style.display="none";
  1173. for (var _e=0; _e<_e_len; ++_e) {
  1174. missTBody.appendChild(s.s.e.r[_e][0]);
  1175. missTBody.appendChild(s.s.e.r[_e][1]);
  1176. }
  1177. vehTable_class.appendChild(missTBody);
  1178. }
  1179. // end vehicles wrapper
  1180.  
  1181. // debugging to browser console
  1182. console.info("Browser Info:\n"+navigator.appCodeName+" - "+navigator.appName+"\n"+navigator.userAgent, web);
  1183. console.info(ratingsClipboard);
  1184. console.info("Script Settings:", sc);
  1185. console.info("Statistics:", s);
  1186.  
  1187. // retrieve and process info from external source
  1188. // noobmeter retrieval
  1189. if (!!srv.nm) {
  1190. reqHnd(sc.nm.api, nmHnd, nmHnd_error);
  1191. }
  1192. }
  1193. else {
  1194. profileName_class.innerHTML += "<div style='width: 950px; top: -15px; text-align: center; position: absolute;'>"+loc.p65+"</div>";
  1195. }
  1196. // end tableBattles
  1197.  
  1198. // helper functions
  1199. // filter
  1200. function filter(input, type) {
  1201. var inputStr = input.toString();
  1202. switch(type) {
  1203. case (1): // input string into number
  1204. return parseFloat(inputStr.replace(/[^\d]/g,""));
  1205. case (2): // output number with locale symbol
  1206. return inputStr.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"+loc.sym);
  1207. case (3): // remove all symbols
  1208. return inputStr.replace(/[^\w]/g,"");
  1209. default:
  1210. console.error("Error filtering: ", input);
  1211. return input;
  1212. }
  1213. }
  1214.  
  1215. // colouring
  1216. function colStat(input, type, dec, sym, ext) {
  1217. var color = colArr.dft[0],
  1218. output = input.toFixed(dec);
  1219. if (sym) {
  1220. output += sym;
  1221. }
  1222. switch(type) {
  1223. case ("bat"):
  1224. case ("wgr"):
  1225. output = filter(input,2); break;
  1226. case ("dmg"):
  1227. output = filter(ext.toFixed(0),2); break;
  1228. default: break;
  1229. }
  1230. if (type !== "") {
  1231. if (s.h[type]) {
  1232. color = s.h[type];
  1233. }
  1234. else if (type == "wrv") {
  1235. color = colStatArr(input, "wr");
  1236. }
  1237. else {
  1238. color = colStatArr(input, type);
  1239. s.h[type] = color;
  1240. }
  1241. }
  1242. return "<span style='color:"+color+"'>"+output+"</span>";
  1243. }
  1244. function colStatArr(input, type) {
  1245. var color;
  1246. for (var _c in colArr) {
  1247. if (colArr.hasOwnProperty(_c)) {
  1248. if (input >= colArr[_c][colArr.id[type]]) {
  1249. color = colArr[_c][0]; break;
  1250. }
  1251. }
  1252. }
  1253. return color || colArr.beg[0];
  1254. }
  1255.  
  1256. // quick creation of element
  1257. function elem(tag, name, html, type) {
  1258. var element = d.createElement(tag);
  1259. if (name) {
  1260. element.className = name;
  1261. }
  1262. if (html) {
  1263. if (/</.test(html)) {
  1264. element.innerHTML = html;
  1265. }
  1266. else {
  1267. element.textContent = html;
  1268. }
  1269. }
  1270. if (type) {
  1271. element.type = type;
  1272. }
  1273. return element;
  1274. }
  1275.  
  1276. // links handler
  1277. function linksHnd(parent, links, type) {
  1278. var uRows = d.createDocumentFragment();
  1279. for (var _l=0, _l_len = links.length; _l<_l_len; ++_l) {
  1280. if (type == "table") {
  1281. var uRow = elem("tr", "", "");
  1282. for (var _lr=0, _lr_len = links[_l].length; _lr<_lr_len; ++_lr) {
  1283. uRow.appendChild((links[_l][_lr][0] && links[_l][_lr][1]) ? elem("td", "", links[_l][_lr][1]) : elem("td", "", links[_l][_lr][0]));
  1284. }
  1285. uRows.appendChild(uRow);
  1286. }
  1287. else if (type == "list") {
  1288. uRows.appendChild((links[_l][0] && links[_l][1]) ? elem("li", "", links[_l][1]) : elem("li", "statname", links[_l][0]));
  1289. }
  1290. }
  1291. parent.appendChild(uRows);
  1292. }
  1293. // end helper functions
  1294.  
  1295. // wnefficiency handler
  1296. function wnHnd(resp) {
  1297. localStorage.setItem("wnExpValues", resp);
  1298. localStorage.setItem("wnExpDate", Date.now());
  1299. localStorage.setItem("wnExpVers", JSON.stringify([sc.vers, JSON.parse(resp).header.version]));
  1300. location.reload();
  1301. }
  1302. function wnHnd_error(error) {
  1303. console.error("Error accessing WNEfficiency.net", error);
  1304. }
  1305. // end wnefficiency handler
  1306.  
  1307. // noobmeter handler
  1308. function nmHnd(resp) {
  1309. if (!isNaN(parseFloat(resp))) {
  1310. nmHnd_insert(parseFloat(resp));
  1311. }
  1312. else {
  1313. nmHnd_error(resp);
  1314. }
  1315. }
  1316. function nmHnd_error(error) {
  1317. nmHnd_insert(loc.p75);
  1318. console.error("Error accessing NoobMeter API", error);
  1319. }
  1320. function nmHnd_insert(nm) {
  1321. var nmDiv = d.getElementsByClassName('js-noobmeter');
  1322. nmDiv[0].textContent += (!isNaN(nm)) ? " NM: "+nm.toFixed(2) : "";
  1323. nmDiv[1].innerHTML = (!isNaN(nm)) ? colStat(nm,"nm",2) : nm;
  1324. }
  1325. // end noobmeter handler
  1326.  
  1327. // clan history handler
  1328. function chHnd(resp) {
  1329. chHnd_insert(JSON.parse(resp).changes);
  1330. }
  1331. function chHnd_error(error) {
  1332. clanHist_div.appendChild(elem("span", "", loc.p77));
  1333. console.error("Error accessing WoT-CS API", error);
  1334. }
  1335. function chHnd_insert(ch) {
  1336. var _h_len = ch.length, clansCount = 0, prevClan, clanHist_span, clanHist_spans = d.createDocumentFragment();
  1337. if (_h_len > 0) {
  1338. for (var _h=_h_len-1; _h>=0; --_h) {
  1339. clansCount ++;
  1340. if (ch[_h].clan_tag && prevClan !== ch[_h].clan_tag && (clansCount == 1 || ch[_h].joined)) {
  1341. clanHist_span = elem("span", (ch[_h].clan_tag == wg.clan.name) ? "clantag curr" : "clantag", "<a href='http://"+srv.ch+".wargaming.net/clans/"+ch[_h].clan_id+"/' target='_blank'>["+ch[_h].clan_tag+"]</a>");
  1342. clanHist_spans.appendChild(clanHist_span);
  1343. }
  1344. prevClan = ch[_h].clan_tag;
  1345. }
  1346. clanHist_div.appendChild(clanHist_spans);
  1347. }
  1348. else {
  1349. clanHist_div.appendChild(elem("span", "clantag", loc.p76));
  1350. }
  1351. }
  1352. // end clan history handler
  1353.  
  1354. // retrieval function
  1355. function reqHnd(url, handler, error) {
  1356. GM_xmlhttpRequest({
  1357. method: "GET",
  1358. url: url,
  1359. headers: {
  1360. "Accept": "text/xml"
  1361. },
  1362. onload: function(resp) {
  1363. if (resp.readyState == 4 && resp.status == 200 && resp.statusText == "OK") {
  1364. handler(resp.responseText);
  1365. }
  1366. else {
  1367. error(resp.responseText);
  1368. }
  1369. },
  1370. onerror: function(resp) {
  1371. error(resp.responseText);
  1372. }
  1373. });
  1374. }
  1375.  
  1376. // global functions inserted into head
  1377. // clipboard helper
  1378. function copyClipboard() {
  1379. var cpText = document.getElementsByClassName('ratingsClip-holder')[0].innerHTML,
  1380. cpLoc = document.getElementsByClassName('ratingsClip-holder')[1].innerHTML;
  1381. window.prompt(cpLoc, cpText);
  1382. }
  1383. // end global functions
  1384. }(window));