// ==UserScript== // @name WoTStatScript - ForumsExtendedStat // @version 0.9.13.0.4 // @description Adds stats and links for posts on official World of Tanks forums // @author Orrie // @contributor seriych // @namespace http://forum.worldoftanks.eu/index.php?/topic/263423- // @icon http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/icon.png // @include /^http:\/\/forum\.worldoftanks\.(eu|com|ru|asia|kr)\/\S+(\/topic\/|\?showtopic=)/ // @include /^http:\/\/forum\.worldoftanks\.(eu|com|ru|asia|kr)\/index\.php\?app=members&module=messaging§ion=view&do=showConversation&topicID=\d+/ // @include /^http:\/\/forum\.worldoftanks\.(eu|com|ru|asia|kr)\/index\.php\?\/forum/\S+/ // @grant GM_xmlhttpRequest // @connect www.wnefficiency.net // @connect api.worldoftanks.eu // @connect api.worldoftanks.ru // @connect api.worldoftanks.com // @connect api.worldoftanks.asia // @connect api.worldoftanks.kr // @license MIT License // @downloadURL none // ==/UserScript== (function() { // global vars var d = document; // get server info and webpage var wg = {host:d.location.host, href:d.location.href, clan:{}}; wg.srv = wg.host.match(/\.(eu|ru|com|asia|kr)/)[1].replace(/com/,"na"); wg.topic = /(\/topic\/|\?showtopic=|messaging\&)/.test(wg.href); wg.forum = /\/forum\//.test(wg.href); wg.login = !!d.getElementsByClassName('js-cm-login-link')[0]; // server, API and cluster settings var sc = { vers: "0.9.13.0.4", host: "http://greasyfork.org/scripts/660-wotstatscript-forumsextendedstat", top: { eu: "http://forum.worldoftanks.eu/index.php?showtopic=263423", na: "http://forum.worldoftanks.com/index.php?showtopic=404652" }, api: { ru: "98ca7c4fb108175b67d6505b9c3f3ebd", eu: "a7595640a90bf2d19065f3f2683b171c", com: "bf5dba0efd444d75147b6222dd903fd2", asia: "95f8713eccd322e52dbf521dbd28b19c", kr: "ffea0f1c3c5f770db09357d94fe6abfb" }, sym: ",", wn: "http://www.wnefficiency.net/exp/expected_tank_values_latest.json", date: Date.now(), dateFormat: {ru: "ru-RU", eu: "en-GB", na: "en-US", asia: "en-AU", kr: "ko-KR"} }; // script threadlink sc.link = "
"; // determine browser types var web = { gecko: typeof InstallTrigger !== 'undefined', opera: !!window.opera || /opera|opr/i.test(navigator.userAgent), chrome: !!window.chrome && !!window.chrome.webstore, safari: /constructor/i.test(window.HTMLElement) }; // external site support - wotlabs, noobmeter, wot-news, wotstats, wotcs, wot-life, wotstats.com.au and wotreplays var srv = { s: "en", wl: false, nm: false, vb: false, ws: false, wr: false, ct: false, wlf: false }; switch(wg.srv) { case ("eu"): // eu server srv.wl = srv.nm = srv.vb = srv.ws = srv.wr = srv.ct = srv.wlf = wg.srv; break; case ("ru"): // ru server srv.wl = srv.nm = srv.vb = srv.ws = srv.wr = srv.ct = srv.wlf = wg.srv; srv.s = "ru"; sc.sym = " "; break; case ("com"): // na server srv.wl = srv.nm = srv.vb = srv.ws = srv.ct = "na"; srv.wr = "com"; break; case ("asia"): // asia server srv.wl = srv.nm = srv.vb = srv.ws = "sea"; srv.ct = wg.srv; srv.wr = "com"; break; case ("kr"): // korean server srv.wl = srv.nm = srv.vb = srv.ws = srv.ct = srv.ch = wg.srv; srv.wr = "com"; break; default: break; } // data uri var uri = { icon_arrow:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPwAAAAJCAMAAAAhKrH/AAAAV1BMVEUAAAD///+TKCf9AQmTLiX9AQmTMir9AQmTLif9AQmTMSz9AQmTMir9AQmTMyn9AQmTMirvGgKTMirsIAGTMirwGQOTMiqTMirsIAGaNDGgNzfqJwDrJABtE0DNAAAAGnRSTlMAABERIiIzM0REVVVmZnd3iIqZmrvDzN3g7thzQuwAAACHSURBVHja5dVLDsIwDEXRCySlP0IMoXXs7H+dDBASA1bQ3B0cPclm2Fe2wrfTQeO3qwqqAKWek80HxfO/l1/EBRgtU2tf+KkJ7TO9hdVSV3jU42f6ZClY6Qt/d4n+BGol29jTwQN1pE2QbA610BVefImuwL7xsNAXXhVpEYY8kNfO/rwsyA3ekEsOT2YDLE8AAAAASUVORK5CYII=", q_mark: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAYAAACgu+4kAAAAh0lEQVQoz2OwsbGxtre3jwTiBBJxJEgvA4jBQCYA6wWZhkVOFIjLgPgOEH8A4llArIDFgARcBsgCsRkQywGxLhC3AXEtKQYgA5DN6UCcRo4BEkCcDcSVQMxLqgHcQJwPxNVAzIMjEPEaIAXEJUCcgScWiAoDBnINEAbieiCuobkBlKVESvMCADnAReqxtj3zAAAAAElFTkSuQmCC" }; // fetch wnefficiency values - check if array exists in localStorage, otherwise fetch and reload page var statArr = [], wnExpValues = locStorage("wnExpValues", "", "get", "parse"), wnExpDate = locStorage("wnExpDate", "", "get", "parse")+12096e5 >= sc.date, // true if timestamp is less than 2 weeks old, refresh list if false. wnExpVers = locStorage("wnExpVers", "", "get", "parse") || ""; if (wnExpVers[0]==sc.vers && wnExpValues && wnExpDate) { statArr = wnExpValues.data; } else { reqHnd(sc.wn, wnHnd); } // style contents var style = elem("style", "wotstatscript", "", "text/css"), styleText = [ // script header rules "#common_menu .cm-menu__user > *:not(.cm-notifications):not(.js-cm-user-menu-dropdown):not(.js-cm-dropdown-for-mobile-only) {display: inline-block}", "#common_menu .cm-parent-link:hover {cursor: inherit; color: #707273 !important;}", "#common_menu .b-scriptlink a {color: #E5B12E;}", "#common_menu .b-scriptlink a:hover {color: #FFBE4C; text-shadow: 0px 0px 7px rgba(255, 126, 0, 0.7);}", "#common_menu .cm-get-gold-link {margin: 0 12px;}", // settings menu rules "#common_menu .menu-settings {text-align: left;}", "#common_menu .menu-settings .cm-parent-link:hover {cursor: pointer;}", "#common_menu .menu-settings label {display: table; line-height: normal; cursor: pointer;}", "#common_menu .menu-settings .l-box {display: none;}", "#common_menu .menu-settings .b-checkbox {height: 16px; width: 16px; float: left; margin-right: 5px;}", "#common_menu .menu-settings .b-checkbox span {height: 16px; width: 16px;}", "#common_menu .menu-settings .b-combobox-label__checked {color: #DCDCDC;}", "#common_menu .menu-settings .settingItem .b-combobox-label:hover {color: #DCDCDC;}", "#common_menu .menu-settings .settingItem .b-combobox-label:hover .b-checkbox {background-position: 0px -34px; box-shadow: 0px 0px 10px 1px rgba(191, 166, 35, 0.15), 0px 0px 3px 1px rgba(191, 166, 35, 0.25);}", "#common_menu .menu-settings .settingItem .b-combobox-label:hover .b-checkbox.b-checkbox__checked {background-position: 0px -68px;}", "#common_menu .menu-settings textarea.l-textarea {background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 2px; color: #FFFFFF; line-height: normal; padding: 5px; min-height: 50px; margin: 5px 0 5px 0; min-width: 175px;}", "#common_menu .menu-settings textarea::-webkit-input-placeholder {color: #FFFFFF;}", "#common_menu .menu-settings textarea::-moz-placeholder {color: #FFFFFF;}", "#common_menu .menu-settings .b-settingLink {line-height: 26px;}", "#common_menu .menu-settings .b-settingLink a {cursor: pointer; color: #B1B2B3; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);}", "#common_menu .menu-settings .b-settingLink a:hover {color: #FFFFFF; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);}", // forum rules ".topic_list {table-layout: auto}", ".col_f_stats {width: 200px;}", ".col_f_preview {width: 10px !important;}", ".col_f_views {width: auto;}", ".col_f_post {width: auto;}", ".col_f_stats .i-xvm-lang {margin: 6px 0 0 0;}", ".t-row-stats {float: right; table-layout: fixed; width: 175px;}", ".realm_ru .t-row-stats {width: 200px;}", "table.ipb_table .t-row-stats td {border-bottom: 0; font-size: 11px; padding: 0;}", "#announcements .t-row-stats td {border-bottom: 0;}", ".s-no-stats {color: #A03737; display: table; font-size: 14px; margin: 0 auto;}", // thread rules ".author_info {min-height: 310px; padding: 0 10px 10px 14px;}", ".user_details > br {display: none;}", ".author_info .member_title.member_banned {color: #CD3333;}", ".basic_info {margin: 0 0 4px;}", ".post_count.margin-bottom {margin: 0 0 5px;}", ".battles_count {display: none;}", ".i-xvm-lang {vertical-align: text-top;}", ".t-table-stats {margin: 5px 0; width: auto;}", ".t-table-stats td {padding: 0 5px 0 0; line-height: 16px;}", ".t-table-stats td:last-of-type {font-weight: bold;}", ".b-table-links {height: 25px; margin: 5px 0px 0px;}", ".t-table-links {background: #EDEDED; border: 1px solid #d5d5d5; border-radius: 3px; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1), 0 0 3px 3px rgba(255, 255, 255, 0.2); display: inline-block; overflow: hidden; padding: 3px 3px 0; position: absolute; text-overflow: ellipsis; white-space: nowrap; height: "+((web.chrome) ? "20px" : "25px")+"; width: 90px; z-index: 1;}", ".t-table-links:hover {border-color: #7D7D7D; height: auto; width: auto;}", ".t-table-links tbody {display: table; width: 180px;}", ".t-table-links td {padding: 0 0 2px; font-weight: bold;}", ".t-table-links td a { background: url("+uri.icon_arrow+") no-repeat scroll 0 2px rgba(0, 0, 0, 0); padding: 0 0 0 10px; vertical-align: middle;}", ".t-table-links td a:hover {background: url("+uri.icon_arrow+") no-repeat scroll -244px 2px rgba(0, 0, 0, 0);}", ".t-table-links tr:last-of-type td {}", // korean realm widths ".realm_kr .t-table-links {width: 108px;}", ".realm_kr .t-table-links:hover {width: 215px;}", ".realm_kr .t-table-links tbody {width: 215px;}" ]; style.textContent = styleText.join(""); d.head.appendChild(style); // end style // colour scale array var colArr = { // col wr bat wn8 wn7 eff nm pr sUni: [ "#5A3175", 65, 30000, 2900, 2050, 2050, 2000 ], // 99.99% super unicum uni: [ "#83579D", 60, 25000, 2450, 1850, 1800, 1950, 9930 ], // 99.90% unicum gr8: [ "#3972C6", 56, 21000, 2000, 1550, 1500, 1750, 8525 ], // 99.00% great vGud: [ "#4099BF", 54, 17000, 1600, 1350 ], // 95.00% very good good: [ "#4D7326", 52, 13000, 1200, 1100, 1200, 1450, 6340 ], // 82.00% good aAvg: [ "#849B24", 50, 10000, 900 ], // 63.00% above average avg: [ "#CCB800", 48, 7000, 650, 900, 900, 1250, 4185 ], // 40.00% average bAvg: [ "#CC7A00", 47, 3000, 450, 700, 600, 1150, 2020 ], // 20.00% below average bas: [ "#CD3333", 46, 1000, 300, 500 ], // 6.00% basic beg: [ "#930D0D", 0, 0, 0, 0, 0, 0, 0 ], // 0.00% beginner dft: [ "#6B6B6B" ], // default id: { "col": 0, "wr": 1, "bat": 2, "wn8": 3, "wn7": 4, "eff": 5, "nm": 6, "pr": 7 } // type identifier }; // localization var loc = [ { en: "Client", ru: "Клиент"}, { en: "Winrate:", ru: "Винрейт:"}, { en: "Battles:", ru: "Боев:"}, { en: "Rating:", ru: "Рейтинг:"}, { en: "WN8:", ru: "WN8:"}, { en: "Please Login for Stats", ru: "Please Login for Stats"}, { en: "No Stats Found", ru: "No Stats Found"}, { en: "Script Menu", ru: "Script Menu"}, { en: "Refresh WN8 Table", ru: "Refresh WN8 Table"} //{ en: "f00_en", ru: "f00_ru"}, ]; // process localization for (var _l=0, l_len = loc.length; _l