");
layoutHolder.appendChild(loadGif);
// script link and settings
var clanSet_div = sf.elem("div", "menu-settings menu-top_item", "WoTLabs"],
[sc.srv.nm, "Noobmeter"],
[sc.srv.vb, "vBAddict"],
[sc.srv.ct, "Clan Tools"],
[sc.srv.cs, "WoT-CS"],
[sc.srv.kttc, "KTTC"],
[sc.srv.wlf, "WoT-Life"],
[sc.srv.as, "AWAY Stats"],
[sc.srv.we, "WoT Event Stats"],
[sc.srv.wr, "WoTReplays"]
];
sf.links(clanMenu_list, clanMenu_list_items);
clanMenu_div.firstElementChild.addEventListener('click', function() {this.classList.toggle('cm-parent-link__opened'); this.nextSibling.classList.toggle('cm-sublist__opened');}, false);
clanMenu_div.appendChild(clanMenu_list);
menu_class.appendChild(clanMenu_div);
// add clan total stats if they exist
if (wg.p && s.clan) {
var clanProfileValue = d.getElementsByClassName('rating-profile_item');
if (s.clan.win) {
clanProfileValue[1].innerHTML = ""+sf.color(s.clan.win,"wr",2,"%")+""+loc[8]+"";
}
if (s.clan.wn8) {
clanProfileValue[3].innerHTML = ""+sf.color(s.clan.wn8,"wn8",0)+""+loc[9]+"";
}
}
// check if on memberlist page
if (wg.m) {
// formula calculations and variables
var memObj = {
cls: d.getElementsByClassName('tbl-rating_body')[0],
ids: [],
bans: {ids:[],f:false}
};
// add manual stat fetching button
var filter_class = d.getElementsByClassName('filter')[0],
refreshBtn_div = sf.elem("div", "b-button-stats", ""+loc[12]+"");
refreshBtn_div.addEventListener('click', function() {sf.tableFetch();}, false);
filter_class.appendChild(refreshBtn_div);
// prepare stat fetcher, store stats in localStorage and reload page
var ratLook = new MutationObserver(function() {
sf.tableFetch();
ratLook.disconnect();
});
// fetch stats automatically if enabled or check whitelist for whitelisted clan
if (statFetch && (enableOnPageload || (enableWhitelist && whiteListArray.indexOf(wg.clan.id) > -1))) {
ratLook.observe(memObj.cls, {childList: true});
}
else {
// no stats fetching, check if stats already exist and add if they do
var clanPlayersValue = d.getElementsByClassName('rating-players')[0].rows[0],
pageHeader = d.getElementsByClassName('page-header')[0],
ratHeadStatus = false;
// add clan total stats if they exist
clanPlayersValue.cells[1].getElementsByClassName('rating-players_key')[0].textContent = loc[8];
if (s.clan) {
if (s.clan.win) {
var clanWinCell = clanPlayersValue.insertCell(2);
clanWinCell.className = "rating-players_item rating-players_item__data";
clanWinCell.innerHTML = ""+sf.color(s.clan.win,"wr",2,"%")+""+loc[10]+"";
}
if (s.clan.wn8) {
var clanWn8Cell = clanPlayersValue.insertCell(4);
clanWn8Cell.className = "rating-players_item rating-players_item__data";
clanWn8Cell.innerHTML = ""+sf.color(s.clan.wn8,"wn8",0)+""+loc[11]+"";
}
}
// add container for member counters
var memInfo_div = sf.elem("div", "page-header_meminfo", "");
pageHeader.appendChild(memInfo_div);
// wait for table to be filled before adding wn8
var ratInsert = new MutationObserver(function(muto) {
if (muto[0].previousSibling === null) {
var newMem = 0, banMem = d.getElementsByClassName('tbl-rating_tr__state-banned').length;
// add a counter for amount of banned people in clan
if (banMem > 0) {
var banMem_span = d.getElementsByClassName('page-header_ban')[0];
if (!banMem_span) {
banMem_span = sf.elem("span", "page-header_ban", loc[17]+" "+banMem);
memInfo_div.appendChild(banMem_span);
}
else {
banMem_span.textContent = loc[17]+" "+banMem;
}
}
// table header for wn8
if (ratHeadStatus === false && Object.keys(s.clan).length !== 0) {
var headName = d.getElementsByClassName('tbl-rating_th__name')[0],
wnHead = sf.elem("td", "tbl-rating_th tbl-rating_th__wn", "WN8"),
colGroup = d.getElementsByTagName('colgroup')[0],
newCol = sf.elem("col");
newCol.width = "1px";
headName.parentNode.insertBefore(wnHead, headName.nextSibling);
colGroup.insertBefore(newCol, colGroup.children[5]);
ratHeadStatus = true;
}
// add wn8 for each member and colorize stats
var userCheck = Object.keys(s.user).length !== 0;
for (var _rt=0, _rt_len = memObj.cls.rows.length; _rt<_rt_len; _rt++) {
var row = memObj.cls.rows[_rt];
if (!row.classList.contains("tbl-rating_tr__card")) {
var id = row.getAttribute('data-account_id'),
memName = row.getElementsByClassName('tbl-rating_td__name')[0],
memWGR = row.getElementsByClassName('tbl-rating_td__value')[0],
memWins = row.getElementsByClassName('tbl-rating_td__value')[2];
if (userCheck) {
var wnRow = sf.elem("td", "tbl-rating_td tbl-rating_td__value js-format-number", "");
memName.parentNode.insertBefore(wnRow, memName.nextSibling);
if (s.user[id]) {
wnRow.innerHTML = sf.color(s.user[id].wn8,"wn8",0);
}
else {
wnRow.innerHTML = loc[15];
newMem ++;
}
}
if (memWGR.innerHTML !== "0" && memWGR.innerHTML !== "—") {
memWGR.innerHTML = sf.color(sf.format(memWGR.innerHTML,1),"wgr",0);
}
if (memWins.innerHTML !== "0.00%" && memWins.innerHTML !== "—") {
memWins.innerHTML = sf.color(sf.format(memWins.innerHTML.replace(/[,]/g,"."),3),"wr",2,"%");
}
}
}
// add a counter for new people in the clan, compared to store stats
if (newMem > 0) {
var newMem_span = d.getElementsByClassName('page-header_mem')[0];
if (!newMem_span) {
newMem_span = sf.elem("span", "page-header_mem", loc[16]+" "+newMem);
memInfo_div.appendChild(newMem_span);
}
else {
newMem_span.textContent = loc[16]+" "+newMem;
}
}
// check for length on bans
if (memObj.bans.f) {
sf.apiBanHnd();
}
else {
memObj.bans.cls = d.getElementsByClassName('js-banned');
for (var _bm=0, _bm_len = memObj.bans.cls.length; _bm<_bm_len; _bm++) {
var bannedId = memObj.bans.cls[_bm].dataset.account_id;
memObj.bans.ids.push(bannedId);
}
if (memObj.bans.ids.length > 0) {
sc.api.b = sc.api.i+memObj.bans.ids.join(',')+"&fields=ban_time";
sf.request(sc.api.b , sf.apiBanHnd);
}
}
}
});
ratInsert.observe(memObj.cls, {childList: true});
}
}
else if (wg.g && (wg.srv == "eu" || wg.srv == "na")) {
// global variables
var date = new Date();
// script variables
var cw_sc = {
cw: {
status: enableEventOnly,
event: false,
fame: 400,
tier: "--",
battles: "--",
elo: "--",
gold: 0
},
clan: {
id: wg.clan.id,
tag: "--",
emblem: "--"
},
time: {
h: date.getHours(),
m: date.getMinutes(),
o: ((date.getTimezoneOffset() > 0) ? -Math.abs(date.getTimezoneOffset()) : Math.abs(date.getTimezoneOffset()))/60
},
table: {
eu: [17, 18, 19, 20, 21, 22, 23],
na: [1, 2, 3, 4, 5, 6, 7, 8],
c: ""
},
debug: true
};
cw_sc.api = {
clan: "https://"+wg.srv+".wargaming.net/globalmap/game_api/clan/"+cw_sc.clan.id+"/battles",
divs: "https://"+wg.srv+".wargaming.net/globalmap/game_api/wot/clan_tactical_data",
map: "https://"+wg.srv+".wargaming.net/globalmap/game_api/map_fill_info?aliases=",
tourney: "https://"+wg.srv+".wargaming.net/globalmap/game_api/tournament_info?alias=",
prov: "https://"+wg.srv+".wargaming.net/globalmap/game_api/province_info?alias=",
event: "https://api.worldoftanks."+((wg.srv == "na") ? "com" : wg.srv)+"/wot/globalmap/events/?application_id="+sc.api[wg.srv]+"&limit=1",
provs: "https://api.worldoftanks."+((wg.srv == "na") ? "com" : wg.srv)+"/wot/globalmap/clanprovinces/?application_id="+sc.api[wg.srv]+"&clan_id="+cw_sc.clan.id
};
cw_sc.time.r = ((cw_sc.time.m >= 15 && cw_sc.time.m <= 45) ? [cw_sc.time.h,"30"] : ((cw_sc.time.m <= 15) ? [cw_sc.time.h,"00"] : [(cw_sc.time.h+1),"00"]));
cw_sc.time.t = cw_sc.time.r[0]+"_"+cw_sc.time.r[1];
// images, streams and functions
var cw_sf = {
handlerEvent: function(data) { // event checker
if (cw_sc.debug) {console.info("eventData", data);}
// check if active event exists
var event = data.data[0];
if (event.status == "ACTIVE" || !cw_sc.cw.status) {
if (event.status == "ACTIVE") {
cw_sc.cw.event = true;
}
cw_sf.request("mainData", cw_sc.api.clan, cw_sf.handlerMain);
}
else {
// empty table
table.lastElementChild.innerHTML = "";
table.lastElementChild.appendChild(sf.elem("tr", "t-cwText", ""+loc[39]+" | "));
clearInterval(updateInterval);
}
// insert update timestamp
d.getElementById('js-batttleUpdate').textContent = new Date().toLocaleTimeString("en-GB");
},
handlerMain: function(data) { // data handler
if (cw_sc.debug) {console.info("mainData", data);}
var battleProvinces = [], battle,
battleFragment = d.createDocumentFragment();
// store data
cw_sc.clan.tag = data.clan.tag;
cw_sc.clan.emblem = data.clan.emblem_url;
cw_sc.cw.battles = data.clan.appointed_battles_count;
cw_sc.cw.elo = {
6: data.clan.elo_rating_6,
8: data.clan.elo_rating_8,
10: data.clan.elo_rating_10
};
// go through battles and planned battles
for (var _b=0, _b_len = data.battles.length; _b<_b_len; _b++) {
battle = data.battles[_b];
if (battleProvinces.indexOf(battle.province_id) == -1) {
battleProvinces.push(battle.province_id);
battleFragment.appendChild(sf.elem("tr", "battle "+battle.province_id, ""+battle.province_name+" | "+battle.arena_name+" | | | | | ["+battle.enemy.tag+"]  | -- | -- | -- | "+cw_sc.table.c));
}
}
for (var _bp=0, _bp_len = data.planned_battles.length; _bp<_bp_len; _bp++) {
battle = data.planned_battles[_bp];
if (battleProvinces.indexOf(battle.province_id) == -1) {
battleProvinces.push(battle.province_id);
battleFragment.appendChild(sf.elem("tr", "battle "+battle.province_id, ""+battle.province_name+" | "+battle.arena_name+" | | "+((cw_sc.cw.event) ? "" : battle.province_revenue)+" | | | "+loc[40]+" | -- | -- | -- | "+cw_sc.table.c));
}
}
if (cw_sc.cw.battles > 0 && table.rows[1] && table.rows[1].classList.contains("t-cwText")) {
table.lastElementChild.innerHTML = ""; // empty table
}
table.lastElementChild.appendChild(battleFragment);
// insert battle count
d.getElementById('js-battles').textContent = cw_sc.cw.battles;
// send request for detailed battle information
cw_sf.request("batsData", cw_sc.api.map+battleProvinces.join("&aliases="), cw_sf.handlerBats);
},
handlerBats: function(data) { // battles handler
if (cw_sc.debug) {console.info("batsData", data);}
for (var _bd=0, _bd_len = data.data.length; _bd<_bd_len; _bd++) {
var battle = data.data[_bd],
battleRow = d.getElementsByClassName(battle.alias)[0],
ownerClan = battle.owner_clan_id == cw_sc.clan.id,
enemyID = battleRow.children[6].id,
battleType = ((battle.owner_clan_id == cw_sc.clan.id) ? loc[43] : ((battle.owner_clan_id == enemyID) ? loc[44] : loc[45])),
primeTime = [cw_sf.time(parseFloat(battle.primetime.match(/\d+/g)[0])), battle.primetime.match(/\d+/g)[1], parseFloat(battle.primetime.match(/\d+/g)[0])];
// modify cells cells
battleRow.children[2].textContent = primeTime[0]+":"+primeTime[1];
battleRow.children[2].dataset.sort = primeTime[2];
battleRow.children[3].textContent = (cw_sc.cw.event) ? battle.display_fame_points : battle.revenue;
battleRow.children[5].textContent = battle.owner_clan_rating;
if (ownerClan && battleRow.children[6].innerHTML == loc[40] && new Date().getHours() >= primeTime[0]) {
battleRow.children[6].textContent = loc[41];
}
battleRow.children[7].textContent = battleType;
// get correct battle count and schedule
cw_sf.request("tourneyData", cw_sc.api.tourney+battle.alias+"&round=1", cw_sf.handlerTourney);
}
// send request for clan provinces
cw_sf.request("provData", cw_sc.api.provs+"&round=1", cw_sf.handlerProv);
// refresh table
sortTable.refresh();
},
handlerTourney: function(data) { // tournament handler
if (cw_sc.debug) {console.info("tourneyData", data);}
var battleRow = d.getElementsByClassName(data.province_id)[0],
primeTime = [cw_sf.time(parseFloat(data.start_time.match(/\d+/g)[0])), data.start_time.match(/\d+/g)[1], parseFloat(data.start_time.match(/\d+/g)[0])],
ownerClan = (data.owner) ? (data.owner.id == cw_sc.clan.id) || false : false,
provFame = cw_sc.cw.fame*((data.owner) ? (Math.floor(data.owner.occupy/24)+1) : 1),
attackers = [data.pretenders, 0];
// check attackers
if (data.is_superfinal) {
attackers = 1;
}
else if (attackers[0]) {
attackers = attackers[0].length;
}
else {
for (var _bc=0, _bc_len = data.battles.length; _bc<_bc_len; _bc++) {
attackers[1] += ((data.battles[_bc].is_fake) ? 1 : 2);
}
attackers = attackers[1];
}
// find how many battles
var battles = (attackers !== 0) ? Math.ceil(Math.log2(attackers))+1 : 0;
// modify cells
battleRow.children[1].textContent = data.arena_name;
battleRow.children[2].textContent = primeTime[0]+":"+primeTime[1];
battleRow.children[2].dataset.sort = primeTime[2]+"."+battles;
battleRow.children[3].textContent = (cw_sc.cw.event) ? provFame : data.province_revenue;
battleRow.children[4].innerHTML = (data.owner) ? "["+data.owner.tag+"]
" : loc[47];
if (ownerClan) {
cw_sc.cw.gold += data.province_revenue;
d.getElementById('js-gold').textContent = sf.format(cw_sc.cw.gold,2); // insert gold count
if (cw_sc.cw.tier !== "--") {
battleRow.children[5].textContent = data.owner["elo_rating_"+cw_sc.cw.tier];
}
}
// only continue if there are any attackers
if (attackers) {
var cellEmpty = (wg.srv == "eu") ? {20:15, 19:13, 18:11, 17:9} : {5:17, 4:15, 3:13, 2:11, 1:9},
cellOwner = battles+cellEmpty[primeTime[2]];
battleRow.children[8].textContent = attackers;
battleRow.children[9].textContent = battles;
for (var _e=10; _e<21; _e++) {
var cell = battleRow.children[_e];
if (cell.classList.item(0) == "t-0_00") {
cell.classList.add("t-24_00");
}
if (_e > cellEmpty[primeTime[2]] && _e <= cellOwner) {
cell.className += ((ownerClan && _e !== cellOwner) ? " t-noFight" : " t-fight")+((ownerClan) ? " js-last" : "")+((!data.owner && _e == cellOwner) ? " t-noOwner" : "");
cell.innerHTML = (_e == cellOwner) ? "♖" : "⚔";
}
}
// check if planned battle
if (battleRow.children[7].innerHTML == loc[42]) {
battleRow.children[6].textContent = loc[41];
battleRow.children[7].textContent = loc[43];
}
// check if no opponent - free round
var lastBattle = data.battles[data.battles.length-1];
if (battleRow.children[6].innerHTML == loc[40] && lastBattle && lastBattle.is_fake && lastBattle.first_competitor.id == cw_sc.clan.id) {
battleRow.children[6].textContent = loc[46];
battleRow.children[6].classList.add("t-bold");
}
}
else {
battleRow.children[8].textContent = "ERROR";
battleRow.children[8].classList.add("t-error");
}
// refresh table
sortTable.refresh();
},
handlerProv: function(data) { // provinces handler
if (cw_sc.debug) {console.info("provData", data);}
var provs = data.data[cw_sc.clan.id],
provFragment = d.createDocumentFragment();
if (table.rows[1] && table.rows[1].classList.contains("t-cwText")) {
table.lastElementChild.innerHTML = ""; // empty table
}
if (provs) {
for (var _p=0, _p_len = provs.length; _p<_p_len; _p++) {
var prov = provs[_p],
battleRow = d.getElementsByClassName(prov.province_id)[0],
primeTime = [cw_sf.time(parseFloat(prov.prime_time.match(/\d+/g)[0])), prov.prime_time.match(/\d+/g)[1], parseFloat(prov.prime_time.match(/\d+/g)[0])+3],
provFame = 400*(Math.floor(prov.turns_owned/24)+1);
if (!battleRow) {
provFragment.appendChild(sf.elem("tr", "province "+prov.province_id, ""+prov.province_name+" | "+prov.arena_name+" | "+primeTime[0]+":"+primeTime[1]+" | "+((cw_sc.cw.event) ? provFame : prov.daily_revenue)+" | ["+cw_sc.clan.tag+"]  | "+cw_sc.cw.elo[prov.max_vehicle_level]+" | "+loc[48]+" | "+loc[43]+" | -- | -- | "+cw_sc.table.c));
cw_sc.cw.gold += prov.daily_revenue;
cw_sc.cw.tier = prov.max_vehicle_level;
}
}
// insert gold count
d.getElementById('js-gold').textContent = sf.format(cw_sc.cw.gold,2);
// send request for divisions
cw_sf.request("divsData", cw_sc.api.divs, cw_sf.handlerDivs);
}
else if (cw_sc.cw.battles === 0) {
provFragment.appendChild(sf.elem("tr", "t-cwText", ""+loc[49]+" | "));
}
table.lastElementChild.appendChild(provFragment);
// refresh table
sortTable.refresh();
},
handlerDivs: function(data) { // divisions handler
if (cw_sc.debug) {console.info("divsData", data);}
if (data.data[0].division.clan_id == cw_sc.clan.id) {
for (var _p=0, _p_len = data.data.length; _p<_p_len; _p++) {
var div = data.data[_p],
battleRow = d.getElementsByClassName(div.alias)[0];
if (!div.division && battleRow.classList.contains('province')) {
var defBattle = battleRow.getElementsByClassName("js-last")[0];
battleRow.children[6].textContent = loc[50];
battleRow.children[6].classList.add("t-bold");
if (defBattle) {
defBattle.classList.remove("t-fight");
defBattle.classList.add("t-noFight");
}
}
else {
// sometimes future defenses wont show up in planned battles
if (div.attackers.length > 0 && battleRow.classList.contains('province')) {
table.lastElementChild.appendChild(sf.elem("tr", "planned "+div.alias, ""+div.name+" | | | "+battleRow.children[3].innerHTML+" | | | | "+loc[42]+" | "));
battleRow.parentNode.removeChild(battleRow);
cw_sf.request("tourneyData", cw_sc.api.tourney+div.alias+"&round=1", cw_sf.handlerTourney);
// refresh table
sortTable.refresh();
}
}
}
}
else {
d.getElementById('js-error').textContent = " • "+loc[51];
}
},
handlerError: function(name, data) { // error handler
if (cw_sc.debug) {console.info("errorData", name, data);}
switch(name) {
case ("mainData"):
table.lastElementChild.appendChild(sf.elem("tr", "t-cwText", ""+loc[52]+" | "));
break;
case ("divsData"):
d.getElementById('js-error').textContent = " • "+loc[51];
break;
default: break;
}
},
time: function (hour, min, type) { // time converter
var time = hour+cw_sc.time.o;
if (time >= 24) {
time -= 24;
}
else if (time < 0) {
time += 24;
}
if (type == "s") {
time = "t-"+time+"_"+min+((time === 0 && min == "00") ? " t-24_00" : "");
}
return time;
},
timer: function () { // timestamp handler
var dateNow = new Date(),
time = {
h: cw_sf.time(cw_sc.table[wg.srv][0]-1)-dateNow.getHours(),
m: 60-dateNow.getMinutes()-1,
s: 60-dateNow.getSeconds()-1
};
var timeSpan = d.getElementById('js-timePrime');
if (!cw_sc.cw.event && cw_sc.cw.status) {
timeSpan.textContent = loc[53];
timeSpan.classList.add("t-bold");
clearInterval(timeInterval);
}
else if (time.h >= 0 && (time.s > 0 || time.m > 0)) {
timeSpan.textContent = ((time.h > 0) ? time.h+" "+loc[55]+", " : "")+((time.m > 0) ? time.m+" "+loc[56]+", " : "")+time.s+" "+loc[57];
}
else if (time.h < 0) {
if (cw_sc.cw.battles == "--") {
if (cw_sc.cw.battles === 0) {
timeSpan.textContent = loc[54];
timeSpan.classList.add("t-bold");
clearInterval(timeInterval);
}
}
else {
timeSpan.classList.add("h-shadow");
timeSpan.innerHTML = "IT'S FUCKING GO TIME!!!";
clearInterval(timeInterval);
}
}
},
updater: function () { // updater handler
var newTime = ((cw_sc.time.m >= 15 && cw_sc.time.m <= 45) ? [cw_sc.time.h,"30"] : ((cw_sc.time.m <= 15) ? [cw_sc.time.h,"00"] : [(cw_sc.time.h+1),"00"]));
if (cw_sc.time.r[0] !== newTime[0] || cw_sc.time.r[1] !== newTime[1]) {
cw_sf.request("mainData", cw_sc.api.clan, cw_sf.handlerMain);
}
},
request: function (name, api, handler) { // request handler
// GreaseMonkey xmlhttpRequest
GM_xmlhttpRequest({
method: "GET",
url: api,
headers: {
Accept: "application/json"
},
onload: function(resp) {
if (resp.status == 200) {
handler(JSON.parse(resp.responseText));
}
else {
cw_sf.handlerError(name, resp);
}
},
onerror: function(resp) {
console.error("Error accessing Wargaming API", name, api, resp);
}
});
}
};
// inserting style into head
var cw_style = sf.elem("style", "wotstatscript", "", "text/css"),
styleText = [
"h3 {text-align: center;}",
".b-battlesHide {display: inline;}",
".b-battlesHide img {margin-right: 3px; vertical-align: sub;}",
".b-battles {font-size: 12px; margin: 15px 0 30px; width: 100%;}",
".b-battles .h-battles {font-size: 15px; position: relative;}",
".b-battles .h-battles .h-battles-info {border-bottom: 1px solid #000; box-shadow: inset 0 -1px rgba(255,255,255,.05); text-align: center; padding: 10px 0;}",
".b-battles .h-battles .h-battles-info img {max-height: 16px; vertical-align: bottom;}",
".b-battles .h-battles .h-battles-info .h-shadow {font-weight: bold; text-shadow: 0px 0px 1px rgba(27,27,28, 1), 0px 0px 2px rgba(27,27,28, 1);}",
".b-battles .h-battles .h-battles-infotable {margin: 21px 10px; min-width: 150px; position: absolute; top: 0px;}",
".b-battles .b-battles-holder {background-color: rgba(0, 0, 0, 0.75);}",
".b-battles .b-battles-holder .t-battles {border-spacing: 0; box-shadow: inset -1px 0 rgba(255,255,255,.05); text-align: center; width: 100%;}",
".b-battles .b-battles-holder .t-battles thead tr {}",
".b-battles .b-battles-holder .t-battles tbody tr:nth-child(even) td {background-color: rgba(80, 60, 60, 0.1);}",
".b-battles .b-battles-holder .t-battles tbody tr:nth-child(odd) td {background-color: rgba(123, 123, 123, 0.1);}",
".b-battles .b-battles-holder .t-battles tbody tr:hover {background-color: rgba(0, 0, 0, 0.25);}",
".b-battles .b-battles-holder .t-battles thead tr th.t-"+cw_sc.time.t+", .b-battles .b-battles-holder .t-battles tbody tr td.t-"+cw_sc.time.t+" {background-color: rgba(254,252,223, 0.15); border-left: 1px solid #808080; border-right: 1px solid #808080;}",
".b-battles .b-battles-holder .t-battles thead tr th.t-"+cw_sc.time.t+" + th, .b-battles .b-battles-holder .t-battles tbody tr td.t-"+cw_sc.time.t+" + td {background-color: rgba(224,223,218, 0.1); border-right: 1px solid #808080;}",
".b-battles .b-battles-holder .t-battles tr .t-border {border-right: 2px solid rgba(194, 173, 173, 0.1);}",
".b-battles .b-battles-holder .t-battles tr th {line-height: 25px; border-top: 1px solid rgba(255,255,255,.1); border-bottom: 1px solid #000; box-shadow: inset 1px -1px rgba(255,255,255,.05);}",
".b-battles .b-battles-holder .t-battles tr td {line-height: 25px; border-top: 1px solid rgba(255,255,255,.1); border-bottom: 1px solid #000; box-shadow: inset 1px -1px rgba(255,255,255,.05);}",
".b-battles .b-battles-holder .t-battles tr td:first-of-type {max-width: 100px; overflow: hidden; padding: 0 5px; text-overflow: ellipsis; white-space: nowrap;}",
".b-battles .b-battles-holder .t-battles tr td.t-title {font-weight: bold;}",
".b-battles .b-battles-holder .t-battles tr td.t-good {color: #4D7326;}",
".b-battles .b-battles-holder .t-battles tr td.t-bad {color: #930D0D;}",
".b-battles .b-battles-holder .t-battles tr td.t-plan {color: #FFE400;}",
".b-battles .b-battles-holder .t-battles tr td.t-fight {color: #4D7326; font-size: 15px; font-weight: bold;}",
".b-battles .b-battles-holder .t-battles tr td.t-noFight {color: #808080; font-size: 14px;}",
".b-battles .b-battles-holder .t-battles tr td.t-fight.t-noOwner {color: #808080;}",
".b-battles .b-battles-holder .t-battles tr td.t-error {color: #CD2911;}",
".b-battles .b-battles-holder .t-battles tr.t-cwText td {font-size: 26px; line-height: 54px;}",
".b-battles .b-battles-holder .t-battles img {height: 16px; margin-bottom: 5px; vertical-align: bottom;}",
".b-battles .f-battles {border-top: 1px solid #000; box-shadow: inset 0 1px rgba(255,255,255,.05); font-size: 15px; padding: 10px 0; text-align: center;}",
".b-battles .f-battles img {max-height: 16px; vertical-align: bottom;}",
".b-battles .t-bold {font-weight: bold;}",
".b-display-none {display: none;}",
".b-display-block {display: block}"
];
cw_style.textContent = styleText.join("");
d.head.appendChild(cw_style);
// prepare static html and table reference for further use
var widgets = d.getElementsByClassName("widgets")[0],
battlesPanel = sf.elem("div", "b-battles", ""+loc[22]+"
"+loc[23]+" --
| "+loc[26]+" | "+loc[27]+" | "+loc[28]+" | "+((cw_sc.cw.event) ? loc[29] : loc[30])+" | "+loc[31]+" | "+loc[32]+" | "+loc[33]+" | "+loc[34]+" | "+loc[35]+" | "+loc[36]+" |
|---|
"+loc[37]+" -- [UTC"+((cw_sc.time.o >= 0) ? "+" : "")+cw_sc.time.o+"]
"),
table = battlesPanel.children[1].firstElementChild;
widgets.insertBefore(battlesPanel, widgets.children[2]);
// time fix
var timeCells = cw_sc.table[wg.srv], timeString = "",
timeFragment = d.createDocumentFragment();
for (var _tc=0, _tc_len = timeCells.length; _tc<_tc_len; _tc++) {
var t = timeCells[_tc],
times = [cw_sf.time(t,"00","s"), cw_sf.time(t)+":00", cw_sf.time(t,"30","s"), cw_sf.time(t)+":30"];
timeFragment.appendChild(sf.elem("th", times[0], times[1]));
timeFragment.appendChild(sf.elem("th", times[2], times[3]));
cw_sc.table.c += " | | ";
}
table.firstElementChild.firstElementChild.appendChild(timeFragment);
// add intervals for time and round updater
var timeInterval = setInterval(cw_sf.timer,1000), // 1 second
updateInterval = setInterval(cw_sf.updater,120000); // 2 minutes
// activate tablesort function
var sortTable = false;
if (Tablesort) {
// Numeric sort
Tablesort.extend('number', function(item) {
return item.match(/^-?(\d)*-?([,\.]){0,1}-?(\d)+([E,e][\-+][\d]+)?%?$/); // Number
}, function(a, b) {
a = parseFloat(a);
b = parseFloat(b);
a = isNaN(a) ? 0 : a;
b = isNaN(b) ? 0 : b;
return a - b;
});
sortTable = new Tablesort(table);
}
else {
window.alert("Error activating tablesort, please refresh - if this shit continues, poke Orrie");
}
// insert update status
table.lastElementChild.appendChild(sf.elem("tr", "t-cwText", ""+loc[38]+" | "));
// send request to wargaming api to see if an event is running
cw_sf.request("eventData", cw_sc.api.event, cw_sf.handlerEvent);
}
}(window));