WoWsInfo

Расширенная статистика и функционал.

当前为 2015-04-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WoWsInfo
  3. // @author Vov_chiK
  4. // @description Расширенная статистика и функционал.
  5. // @copyright 2015+, Vov_chiK
  6. // @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
  7. // @namespace http://forum.walkure.pro/
  8. // @version 0.3.0.1
  9. // @creator Vov_chiK
  10. // @include http://worldofwarships.ru/cbt/accounts/*
  11. // @match http://worldofwarships.ru/cbt/accounts/*
  12. // @grant GM_xmlhttpRequest
  13. // ==/UserScript==
  14. // @Vov_chiK
  15.  
  16. (function(window){
  17. /* ===== Main function ===== */
  18. function WoWsInfo(){
  19. var VersionWoWsInfo = '0.3.0.1';
  20. var WoWsInfoLink = '#';
  21. var WoWsInfoLinkName = '[0.3.0] [WoWsInfo] Расширенная статистика на оф. сайте.';
  22. var lang = 'ru';
  23. if(window.location.host.indexOf(".wargaming.net") > -1){
  24. lang = getCookie('wgccfe_language');
  25. }else if(window.location.host.indexOf("worldoftanks") > -1){
  26. lang = getCookie('hllang');
  27. }
  28.  
  29. var localization = getLocalization(lang);
  30. var realm = localization['realm'];
  31. /* ===== Message UserScript ===== */
  32. {
  33. }
  34. var navigatorInfo = getBrowser();
  35. window.onerror = function(message, source, lineno, column, errorObj){
  36. if(source == ''){source = window.location.href;}
  37. else if(source.indexOf("conversion_async.js") != -1){return false;}
  38. else if(source.indexOf("map_widgets.js") != -1){return false;}
  39. else if(source.indexOf("tooltips.js") != -1){return false;}
  40. else if(source.indexOf("strongholds.build.js") != -1){return false;}
  41. else if(source.indexOf("clans_leaderboard.js") != -1){return false;}
  42. else if(source.indexOf("clan_treasury.js") != -1){return false;}
  43. if(message == 'Script error.' && errorObj == null){console.log('message == \'Script error.\' && errorObj == null'); return false;}
  44. lineno += 17;
  45. var agent = '';
  46. var agentArr = navigator.userAgent.split(')');
  47. for(var i = 0; i < agentArr.length; i++){
  48. if(agent != ''){agent += ')\n';}
  49. agent += agentArr[i];
  50. }
  51. var error = localization['ErrorScript']+"\n\n" +
  52. "Browser name: "+navigatorInfo['browserName']+"\n"+
  53. "Full version: "+navigatorInfo['fullVersion']+"\n"+
  54. "Major version: "+navigatorInfo['majorVersion']+"\n"+
  55. "AppName: "+navigatorInfo['appName']+"\n"+
  56. "UserAgent: "+agent+"\n\n"+
  57. "Error: "+message+"\n"+
  58. "URL: " +source+"\n"+
  59. "Line: "+lineno+"\n"+
  60. "Column: "+column+"\n"+
  61. "StackTrace: "+errorObj+"\n\n"+
  62. localization['ErrorSendDeveloper'];
  63. console.log(error);
  64. alert(error);
  65. error = error.split('\n').join('<br />');
  66. // onShowMessage(
  67. // localization['Box'],
  68. // 'different_error',
  69. // error,
  70. // onCloseMessage,
  71. // localization['Ok'],
  72. // false
  73. // );
  74. return true;
  75. }
  76. function getBrowser(){
  77. var nVer = navigator.appVersion;
  78. var nAgt = navigator.userAgent;
  79. var browserName = navigator.appName;
  80. var fullVersion = ''+parseFloat(navigator.appVersion);
  81. var majorVersion = parseInt(navigator.appVersion, 10);
  82. var nameOffset, verOffset, ix;
  83.  
  84. // In Opera 15+, the true version is after "OPR/"
  85. if((verOffset = nAgt.indexOf("OPR/")) != -1){
  86. browserName = "Opera";
  87. fullVersion = nAgt.substring(verOffset + 4);
  88. }
  89. // In older Opera, the true version is after "Opera" or after "Version"
  90. else if((verOffset = nAgt.indexOf("Opera")) != -1){
  91. browserName = "Opera";
  92. fullVersion = nAgt.substring(verOffset + 6);
  93. if((verOffset = nAgt.indexOf("Version")) != -1)
  94. fullVersion = nAgt.substring(verOffset + 8);
  95. }
  96. // In MSIE, the true version is after "MSIE" in userAgent
  97. else if((verOffset = nAgt.indexOf("MSIE")) != -1){
  98. browserName = "Microsoft Internet Explorer";
  99. fullVersion = nAgt.substring(verOffset + 5);
  100. }
  101. // In Chrome, the true version is after "Chrome"
  102. else if((verOffset = nAgt.indexOf("Chrome")) != -1) {
  103. browserName = "Chrome";
  104. fullVersion = nAgt.substring(verOffset + 7);
  105. }
  106. // In Safari, the true version is after "Safari" or after "Version"
  107. else if((verOffset = nAgt.indexOf("Safari")) != -1){
  108. browserName = "Safari";
  109. fullVersion = nAgt.substring(verOffset + 7);
  110. if((verOffset = nAgt.indexOf("Version")) != -1)
  111. fullVersion = nAgt.substring(verOffset + 8);
  112. }
  113. // In Firefox, the true version is after "Firefox"
  114. else if((verOffset = nAgt.indexOf("Firefox")) != -1){
  115. browserName = "Firefox";
  116. fullVersion = nAgt.substring(verOffset + 8);
  117. }
  118. // In most other browsers, "name/version" is at the end of userAgent
  119. else if((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))){
  120. browserName = nAgt.substring(nameOffset, verOffset);
  121. fullVersion = nAgt.substring(verOffset + 1);
  122. if(browserName.toLowerCase() == browserName.toUpperCase()){
  123. browserName = navigator.appName;
  124. }
  125. }
  126. // trim the fullVersion string at semicolon/space if present
  127. if((ix = fullVersion.indexOf(";")) != -1)
  128. fullVersion = fullVersion.substring(0, ix);
  129. if((ix = fullVersion.indexOf(" ")) != -1)
  130. fullVersion = fullVersion.substring(0, ix);
  131.  
  132. majorVersion = parseInt(''+fullVersion, 10);
  133. if(isNaN(majorVersion)){
  134. fullVersion = ''+parseFloat(navigator.appVersion);
  135. majorVersion = parseInt(navigator.appVersion, 10);
  136. }
  137. console.log(''
  138. +'Browser name = '+browserName+'\n'
  139. +'Full version = '+fullVersion+'\n'
  140. +'Major version = '+majorVersion+'\n'
  141. +'navigator.appName = '+navigator.appName+'\n'
  142. +'navigator.userAgent = '+navigator.userAgent+'\n'
  143. );
  144. var navigatorInfo = [];
  145. navigatorInfo['browserName'] = browserName;
  146. navigatorInfo['fullVersion'] = fullVersion;
  147. navigatorInfo['majorVersion'] = majorVersion;
  148. navigatorInfo['appName'] = navigator.appName;
  149. navigatorInfo['userAgent'] = navigator.userAgent;
  150. return navigatorInfo;
  151. }
  152. /* ===== Style UserScript ===== */
  153. {
  154. var StyleWoTClanInfo = '' +
  155. 'div.div-link-block{font-size:13px; color: #fff; text-align: right; padding-top: 10px; padding-bottom: 10px;}' +
  156. 'span.link-block:hover{border-bottom: 1px dotted #fff; cursor: pointer;}' +
  157. 'span.link-block div.icon-link-block{background: url("http://'+realm+'.wargaming.net/clans/static/0.1.0.1/images/table-sorter/table-sorter_arrow_sprite.png") no-repeat 0 0; width: 10px; height: 10px; margin: -15px 100%;}' +
  158. 'span.hide-block div.icon-link-block{background-position: 100% -26px;}' +
  159. 'span.show-block div.icon-link-block{background-position: 100% -16px;}' +
  160. 'div#userscript-block{border-radius: 2px; background-color: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.1); padding: 10px; margin: 10px 0; line-height: 20px;}' +
  161. 'div.hide-block{display: none;}' +
  162. 'div.wowsinfo-stat{text-align: center; margin-top: 10px; color: white; font-size: 16px;}' +
  163. 'span.name-stat{color: #ffcc33;}' +
  164. '';
  165. var StyleWoTClanInfoAdd = document.createElement("style");
  166. StyleWoTClanInfoAdd.textContent = StyleWoTClanInfo.toString();
  167. document.head.appendChild(StyleWoTClanInfoAdd);
  168. }
  169. var MembersArray = [];
  170. var typeStat = ["pvp", "pve"];
  171. var color = new Array();
  172. color['very_bad'] = '#FE0E00'; // очень плохо
  173. color['bad'] = '#FE7903'; // плохо
  174. color['normal'] = '#F8F400'; // средне
  175. color['good'] = '#60FF00'; // хорошо
  176. color['very_good'] = '#02C9B3'; // очень хорошо
  177. color['unique'] = '#D042F3'; // уникально
  178. /* ===== Check load page ===== */
  179. if(window.location.href.indexOf("accounts") > -1 && window.location.href.split('/').length == 7 && window.location.href.split('/')[5].match(/[0-9]+/) != null){
  180. var account_id = window.location.href.split('/')[5].match(/[0-9]+/);
  181. MemberProfilePage();
  182. }
  183. jQ('.link-block').click(function(){onViewBlock(this);});
  184. /* ===== Pages function ===== */
  185. function MemberProfilePage(){
  186. getMemberStatistic();
  187. var content = document.getElementsByClassName('content')[0];
  188. var row = content.getElementsByClassName('row')[0];
  189. row.outerHTML += '' +
  190. '<div id="userscript-block-list">' +
  191. getUserScriptDeveloperBlock() +
  192. '' +
  193. '</div>' +
  194. '';
  195. for(var t = 0; t < typeStat.length; t++){
  196. var type = typeStat[t];
  197. var account_statistics__general = document.getElementsByClassName('account_statistics__general')[t];
  198. if(account_statistics__general !== undefined){
  199. var stat_main_middle = account_statistics__general.getElementsByClassName('stat-main-middle')[0];
  200. stat_main_middle.getElementsByClassName('value')[0].style.color = colorBattlesAvgXP(MembersArray[0][type]['avg_xp']);
  201. var stat = account_statistics__general.getElementsByClassName('stat');
  202. stat[0].getElementsByClassName('value')[0].style.color = colorBattles(MembersArray[0][type]['battles']);
  203. stat[1].getElementsByClassName('value')[0].style.color = colorWinsPercents(MembersArray[0][type]['wins_percents']);
  204. stat[2].getElementsByClassName('value')[0].style.color = colorAvgDamage(MembersArray[0][type]['avg_damage'], MembersArray[0][type]['avg_level_battles']);
  205. stat[3].getElementsByClassName('value')[0].style.color = colorKillDead(MembersArray[0][type]['kill_dead']);
  206. account_statistics__general.outerHTML += '' +
  207. '<div id="wowsinfo-'+type+'" class="wowsinfo-stat">' +
  208. '<span class="name-stat">'+localization['wr']+':</span> ' +
  209. '<font color="'+colorWalkureRating(MembersArray[0][type]['wr'])+'">'+(MembersArray[0][type]['wr']).toFixed(2)+'</font>' +
  210. '</div>' +
  211. '';
  212. }
  213. }
  214. }
  215. /* ===== MemberProfilePage function ===== */
  216. function getMemberStatistic(){
  217. var index = MembersArray.length;
  218. MembersArray[index] = [];
  219. for(var t = 0; t < typeStat.length; t++){
  220. var type = typeStat[t];
  221. MembersArray[index][type] = [];
  222. var account_statistic = document.getElementById('account_statistic-'+type);
  223. var account_statistics = account_statistic.getElementsByClassName('account_statistics__rates-small-border');
  224. if(account_statistics.length == 3){
  225. MembersArray[index][type]['battles'] = htmlParseMemberStatistic(account_statistics[0].rows[1].cells[1]);
  226. MembersArray[index][type]['wins'] = htmlParseMemberStatistic(account_statistics[0].rows[2].cells[1]);
  227. MembersArray[index][type]['losses'] = htmlParseMemberStatistic(account_statistics[0].rows[3].cells[1]);
  228. MembersArray[index][type]['draws'] = htmlParseMemberStatistic(account_statistics[0].rows[4].cells[1]);
  229. MembersArray[index][type]['survived_battles'] = htmlParseMemberStatistic(account_statistics[0].rows[5].cells[1]);
  230. MembersArray[index][type]['hits_percents'] = htmlParseMemberStatistic(account_statistics[0].rows[6].cells[1]);
  231. MembersArray[index][type]['damage'] = htmlParseMemberStatistic(account_statistics[0].rows[7].cells[1]);
  232. MembersArray[index][type]['frags_ships'] = htmlParseMemberStatistic(account_statistics[0].rows[8].cells[1]);
  233. MembersArray[index][type]['frags_planes'] = htmlParseMemberStatistic(account_statistics[0].rows[9].cells[1]);
  234. MembersArray[index][type]['capture_base'] = htmlParseMemberStatistic(account_statistics[0].rows[10].cells[1]);
  235. MembersArray[index][type]['defend_base'] = htmlParseMemberStatistic(account_statistics[0].rows[11].cells[1]);
  236. MembersArray[index][type]['avg_xp'] = htmlParseMemberStatistic(account_statistics[1].rows[1].cells[1]);
  237. MembersArray[index][type]['avg_damage'] = htmlParseMemberStatistic(account_statistics[1].rows[2].cells[1]);
  238. MembersArray[index][type]['avg_frags_ships'] = htmlParseMemberStatistic(account_statistics[1].rows[3].cells[1]);
  239. MembersArray[index][type]['avg_frags_planes'] = htmlParseMemberStatistic(account_statistics[1].rows[4].cells[1]);
  240. MembersArray[index][type]['avg_capture_base'] = htmlParseMemberStatistic(account_statistics[1].rows[5].cells[1]);
  241. MembersArray[index][type]['avg_defend_base'] = htmlParseMemberStatistic(account_statistics[1].rows[6].cells[1]);
  242. MembersArray[index][type]['max_xp'] = htmlParseMemberStatistic(account_statistics[2].rows[1].cells[1]);
  243. MembersArray[index][type]['max_damage'] = htmlParseMemberStatistic(account_statistics[2].rows[2].cells[1]);
  244. MembersArray[index][type]['max_frags_ships'] = htmlParseMemberStatistic(account_statistics[2].rows[3].cells[1]);
  245. MembersArray[index][type]['max_frags_planes'] = htmlParseMemberStatistic(account_statistics[2].rows[4].cells[1]);
  246. var ships__avg_params = account_statistic.getElementsByClassName('ships__avg-params')[0]
  247. MembersArray[index][type]['avg_level_battles'] = htmlParseMemberStatistic(ships__avg_params.getElementsByClassName('_value')[0]);
  248. }else{
  249. MembersArray[index][type]['battles'] = 0;
  250. MembersArray[index][type]['wins'] = 0;
  251. MembersArray[index][type]['losses'] = 0;
  252. MembersArray[index][type]['draws'] = 0;
  253. MembersArray[index][type]['survived_battles'] = 0;
  254. MembersArray[index][type]['hits_percents'] = 0;
  255. MembersArray[index][type]['damage'] = 0;
  256. MembersArray[index][type]['frags_ships'] = 0;
  257. MembersArray[index][type]['frags_planes'] = 0;
  258. MembersArray[index][type]['capture_base'] = 0;
  259. MembersArray[index][type]['defend_base'] = 0;
  260. MembersArray[index][type]['avg_xp'] = 0;
  261. MembersArray[index][type]['avg_damage'] = 0;
  262. MembersArray[index][type]['avg_frags_ships'] = 0;
  263. MembersArray[index][type]['avg_frags_planes'] = 0;
  264. MembersArray[index][type]['avg_capture_base'] = 0;
  265. MembersArray[index][type]['avg_defend_base'] = 0;
  266. MembersArray[index][type]['max_xp'] = 0;
  267. MembersArray[index][type]['max_damage'] = 0;
  268. MembersArray[index][type]['max_frags_ships'] = 0;
  269. MembersArray[index][type]['max_frags_planes'] = 0;
  270. MembersArray[index][type]['avg_level_battles'] = 0;
  271. }
  272. /* ===== Calc Statistic ===== */
  273. {
  274. MembersArray[index][type]['wins_percents'] = (MembersArray[index][type]['wins']/MembersArray[index][type]['battles'])*100;
  275. MembersArray[index][type]['kill_dead'] = MembersArray[index][type]['frags_ships']/(MembersArray[index][type]['battles']-MembersArray[index][type]['survived_battles']);
  276. var avg_damage = MembersArray[index][type]['avg_damage'];
  277. var avg_frags_ships = MembersArray[index][type]['avg_frags_ships'];
  278. var avg_frags_planes = MembersArray[index][type]['avg_frags_planes'];
  279. var avg_capture_base = MembersArray[index][type]['avg_capture_base'];
  280. var avg_defend_base = MembersArray[index][type]['avg_defend_base'];
  281. var avg_level_battles = MembersArray[index][type]['avg_level_battles'];
  282. var wr = avg_damage/(avg_level_battles*10) + avg_frags_ships*200 + (avg_frags_planes/6)*120 + avg_capture_base*35 + avg_defend_base*35;
  283. if(isNaN(wr)){wr = 0;}
  284. MembersArray[index][type]['wr'] = wr;
  285. }
  286. }
  287. //console.log(MembersArray[index]);
  288. }
  289. function htmlParseMemberStatistic(element){
  290. var value = element.innerText.trim().replace(new RegExp(' ', 'g'), '');
  291. value = value.replace('%', '');
  292. value = value.replace(',', '.');
  293. if(value.indexOf('(') > -1 && value.indexOf(')') > -1){
  294. value = (value.split(' '))[0];
  295. }
  296. return value;
  297. }
  298. /* ===== Color function ===== */
  299. function findColor(value, colorsBorders) {
  300. if (isNaN(value) || value <= colorsBorders[0]) {
  301. return color['very_bad'];
  302. } else if (value <= colorsBorders[1]) {
  303. return color['bad'];
  304. } else if (value <= colorsBorders[2]) {
  305. return color['normal'];
  306. } else if (value <= colorsBorders[3]) {
  307. return color['good'];
  308. } else if (value <= colorsBorders[4]) {
  309. return color['very_good'];
  310. } else if (value <= colorsBorders[5]) {
  311. return color['unique'];
  312. } else {
  313. return color['very_bad'];
  314. }
  315. }
  316. function colorBattles(b){
  317. return findColor(b / 1000, [0.5, 1.5, 4, 7.5, 10, 999]);
  318. }
  319. function colorWinsPercents(wp){
  320. return findColor(wp, [46, 48, 51, 56, 64, 100]);
  321. }
  322. function colorBattlesAvgXP(baxp) {
  323. return findColor(baxp, [1000, 1150, 1375, 1600, 1825, 9999]);
  324. }
  325. function colorWalkureRating(wr) {
  326. return findColor(wr, [609, 849, 1144, 1474, 1774, 9999]);
  327. }
  328. function colorAvgDamage(ad, alb) {
  329. return findColor(ad/(alb*10), [300, 500, 700, 850, 1000, 9999]);
  330. }
  331. function colorKillDead(kd) {
  332. return findColor(kd, [1.3, 1.7, 2.1, 2.5, 2.7, 99]);
  333. }
  334. /* ===== UserScript function ===== */
  335. function getUserScriptDeveloperBlock(){
  336. var html = '' +
  337. '<div class="div-link-block">' +
  338. '<span id="userscriptwotclainfo" class="link-block hide-block">' +
  339. 'UserScript WoTClanInfo ' + VersionWoWsInfo +
  340. '<div class="icon-link-block"></div>'+
  341. '</span>' +
  342. '</div>' +
  343. '<div id="userscript-block" class="userscriptwotclainfo hide-block" style="text-align: center;">' +
  344. '<span class="userscript-developer" align="center">' +
  345. localization['userscript-developer'] +
  346. ' <a target="_blank" style="color: #658C4C; font-weight: bold; border-bottom: 1px dotted #658C4C;" href="http://worldofwarships.ru/cbt/accounts/635939-Vov_chiK/">Vov_chiK</a> ' +
  347. localization['userscript-alliance'] +
  348. ' <a target="_blank" style="color: #2CA8C7; font-weight: bold; border-bottom: 1px dotted #2CA8C7;" href="http://'+realm+'.wargaming.net/clans/search/#wgsearch&offset=0&limit=10&search=Walkure">Walkure</a> '+
  349. '.<br /><br />' +
  350. localization['userscript-topic']+' '+
  351. '<a target="_blank" href="'+WoWsInfoLink+'">' +
  352. WoWsInfoLinkName +
  353. '</a>' +
  354. '<br /><br />' +
  355. '<font style="font-size: 16px; color: #658C4C;">'+localization['userscript-developer-support']+'</font><br />'+
  356. '<font style="color: #2CA8C7;">Web-Money WMR</font> R295712009837 <br />'+
  357. '<font style="color: #2CA8C7;">Web-Money WMZ</font> Z226959724402 <br />'+
  358. '<font style="color: #2CA8C7;">Yandex Money</font> 41001290117791 <br />'+
  359. '<font style="color: #2CA8C7;">RBK Money</font> RU353257918 <br />'+
  360. '</span>' +
  361. '</div>' +
  362. '';
  363. return html;
  364. }
  365. function onViewBlock(element){
  366. if(null != element.getAttribute('id')){
  367. var viewId = element.getAttribute('id');
  368. var viewClassLink = element.getAttribute('class');
  369. var viewBlock = document.getElementsByClassName(viewId)[0];
  370. if(viewClassLink == 'link-block hide-block'){
  371. element.setAttribute('class', 'link-block show-block');
  372. viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('hide-block', 'show-block'));
  373. setLocalStorage(viewId, 'show', false);
  374. }else{
  375. element.setAttribute('class', 'link-block hide-block');
  376. viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('show-block', 'hide-block'));
  377. setLocalStorage(viewId, 'hide', false);
  378. }
  379. }
  380. }
  381. function checkLocalStorage(){
  382. try{
  383. return 'localStorage' in window && window['localStorage'] !== null;
  384. }catch (e){
  385. return false;
  386. }
  387. }
  388. function setLocalStorage(key, value, allPageHost){
  389. if(checkLocalStorage()){
  390. if(allPageHost){key = key+ClanId;}
  391. window.localStorage.setItem(key, value);
  392. }else{
  393. setCookie(key, value, allPageHost);
  394. }
  395. }
  396. function getLocalStorage(key, allPageHost){
  397. var value = null;
  398. if(checkLocalStorage()){
  399. if(allPageHost){key = key+ClanId;}
  400. value = window.localStorage.getItem(key);
  401. }else{
  402. value = getCookie(key);
  403. }
  404. return value;
  405. }
  406. function setCookie(c_name, value, allPageHost){
  407. var exdate = new Date();
  408. exdate.setDate(exdate.getDate() + 365);
  409. if(allPageHost){
  410. var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString()+"; domain=" +window.location.hostname+"; path=/");
  411. document.cookie = c_name + "=" + c_value;
  412. }else{
  413. var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString());
  414. document.cookie = c_name + "=" + c_value;
  415. }
  416. }
  417. function getCookie(c_name){
  418. var c_value = document.cookie;
  419. var c_start = c_value.indexOf(" " + c_name + "=");
  420. if(c_start == -1){
  421. c_start = c_value.indexOf(c_name + "=");
  422. }
  423. if(c_start == -1){
  424. c_value = null;
  425. }else{
  426. c_start = c_value.indexOf("=", c_start) + 1;
  427. var c_end = c_value.indexOf(";", c_start);
  428. if(c_end == -1){
  429. c_end = c_value.length;
  430. }
  431. c_value = unescape(c_value.substring(c_start,c_end));
  432. }
  433. return c_value;
  434. }
  435. function onShowMessage(title, icon, content, funcOk, OkText, viewCancel){
  436. }
  437. function onCloseMessage(){
  438. }
  439. function getLocalization(lang){
  440. var localization = [];
  441. {/* Русский */
  442. localization['ru'] = [];
  443. localization['ru']['realm'] = 'ru';
  444. localization['ru']['Box'] = 'Оповещение';
  445. localization['ru']['Ok'] = 'Ok';
  446. localization['ru']['Cancel'] = 'Отмена';
  447. localization['ru']['ErrorScript'] = 'Во время работы UserScript WoWsInfo '+VersionWoWsInfo+', возникла ошибка:';
  448. localization['ru']['ErrorSendDeveloper'] = 'Сообщите об ошибке разработчику скрипта.';
  449. localization['ru']['userscript-developer'] = 'Разработчик UserScript WoWsInfo:';
  450. localization['ru']['userscript-alliance'] = 'член альянса';
  451. localization['ru']['userscript-topic'] = 'Тема на форуме:';
  452. localization['ru']['userscript-developer-support'] = 'Поддержать автора скрипта:';
  453. localization['ru']['wr'] = 'Walkure Rating';
  454. }
  455. return localization[lang];
  456. }
  457. }
  458. /* ===== Load UserScript ===== */
  459. function addJQuery(callback){
  460. var script = document.createElement("script");
  461. script.async = true;
  462. script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js");
  463. script.addEventListener(
  464. 'load',
  465. function(){
  466. var script = document.createElement("script");
  467. script.async = true;
  468. script.textContent = "window.jQ = jQuery.noConflict(true);"+
  469. "("+callback.toString()+")();";
  470. document.head.appendChild(script);
  471. },
  472. false
  473. );
  474. document.head.appendChild(script);
  475. }
  476.  
  477. if(window.location.host.indexOf("worldofwarships") > -1){
  478. addJQuery(WoWsInfo);
  479. }
  480. })(window);