|
|
|
@@ -31,6 +31,14 @@ function createRow(key, value) {
|
|
|
|
return row;
|
|
|
|
return row;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function createInput(type, name, value) {
|
|
|
|
|
|
|
|
let elt = document.createElement("input");
|
|
|
|
|
|
|
|
elt.setAttribute("type", type);
|
|
|
|
|
|
|
|
elt.setAttribute("name", name);
|
|
|
|
|
|
|
|
elt.setAttribute("value", value);
|
|
|
|
|
|
|
|
return elt;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function shortcutElementReplace(elt, img, text) {
|
|
|
|
function shortcutElementReplace(elt, img, text) {
|
|
|
|
// If more than one hyperlink element found,
|
|
|
|
// If more than one hyperlink element found,
|
|
|
|
// then keep the last one but with href of the first one.
|
|
|
|
// then keep the last one but with href of the first one.
|
|
|
|
@@ -65,109 +73,184 @@ function shortcutElementReplace(elt, img, text) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Improve main menu display */
|
|
|
|
function main() {
|
|
|
|
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
|
|
|
/* Exit immediately if not on game page */
|
|
|
|
if (layCastleTopElements.length === 1) {
|
|
|
|
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
|
|
|
document.getElementById("banner_skyscraper").remove();
|
|
|
|
if (layCastleTopElements.length === 0) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element");
|
|
|
|
/* Remove iframe banner */
|
|
|
|
shortcutElementReplace(shortcutElements[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, ""));
|
|
|
|
document.getElementById("banner_skyscraper").remove();
|
|
|
|
shortcutElementReplace(shortcutElements[1], "ally", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[2], "profile", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[3], "premium", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[4], "messages", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[5], "tools", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[6], "favorites", "");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container");
|
|
|
|
/* Improve navbar icons */
|
|
|
|
shortcutContainers[0].classList.add("shortcut_container_left");
|
|
|
|
let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element");
|
|
|
|
shortcutContainers[2].classList.add("shortcut_container_right");
|
|
|
|
shortcutElementReplace(shortcutElements[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, ""));
|
|
|
|
}
|
|
|
|
shortcutElementReplace(shortcutElements[1], "ally", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[2], "profile", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[3], "premium", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[4], "messages", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[5], "tools", "");
|
|
|
|
|
|
|
|
shortcutElementReplace(shortcutElements[6], "favorites", "");
|
|
|
|
|
|
|
|
|
|
|
|
/* Display unit-points on user profile */
|
|
|
|
/* Center navbar */
|
|
|
|
if (document.body.id === "info_player") {
|
|
|
|
let shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container");
|
|
|
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
|
|
|
shortcutContainers[0].classList.add("shortcut_container_left");
|
|
|
|
let borderLists = mainContentPane.getElementsByClassName("borderlist");
|
|
|
|
shortcutContainers[2].classList.add("shortcut_container_right");
|
|
|
|
|
|
|
|
|
|
|
|
let playerPropertiesTable = borderLists[0];
|
|
|
|
/* Parse url params and switch case */
|
|
|
|
let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
|
|
|
let urlParams = new URLSearchParams(window.location.search);
|
|
|
|
let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
|
|
|
let section = urlParams.get("s");
|
|
|
|
let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
|
|
|
let module = urlParams.get("m");
|
|
|
|
|
|
|
|
let sub = urlParams.get("sub");
|
|
|
|
|
|
|
|
|
|
|
|
let villagesTable = borderLists[1];
|
|
|
|
/* Display unit-points on user profile */
|
|
|
|
let villagesRows = villagesTable.getElementsByTagName("tr");
|
|
|
|
if (section === "info_player" && (module === "profile" || module === null)) {
|
|
|
|
let villagesPoints = 0;
|
|
|
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
|
|
|
for (let i=1; i<villagesRows.length; i+=1) {
|
|
|
|
let borderLists = mainContentPane.getElementsByClassName("borderlist");
|
|
|
|
villagesPoints += num(villagesRows[i].getElementsByTagName("td")[2].textContent);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let villagesBonus = 2250 * Math.max(0, villagesCount - 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let armyPoints = totalPoints - villagesPoints - villagesBonus;
|
|
|
|
let playerPropertiesTable = borderLists[0];
|
|
|
|
let armyPercent = "-";
|
|
|
|
let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
|
|
|
if (villagesCount > 0) {
|
|
|
|
let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
|
|
|
armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %";
|
|
|
|
let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints)));
|
|
|
|
let villagesTable = borderLists[1];
|
|
|
|
playerPropertiesTable.appendChild(createRow("% points troupes:", armyPercent));
|
|
|
|
let villagesRows = villagesTable.getElementsByTagName("tr");
|
|
|
|
}
|
|
|
|
let villagesPoints = 0;
|
|
|
|
|
|
|
|
for (let i = 1; i < villagesRows.length; i += 1) {
|
|
|
|
/* Display unit-points on village overview */
|
|
|
|
villagesPoints += num(villagesRows[i].getElementsByTagName("td")[2].textContent);
|
|
|
|
if (document.body.id === "overview") {
|
|
|
|
|
|
|
|
let settlements = document.getElementById("settlement").textContent.split("|");
|
|
|
|
|
|
|
|
let noBorderRows = document.getElementsByClassName("noborder");
|
|
|
|
|
|
|
|
let villagePointsRow = noBorderRows[0];
|
|
|
|
|
|
|
|
for (let i=0; i<noBorderRows.length; i++) {
|
|
|
|
|
|
|
|
if (noBorderRows[i].textContent.startsWith("Points:")) {
|
|
|
|
|
|
|
|
villagePointsRow = noBorderRows[i];
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let unitPointsRow = villagePointsRow.cloneNode(true);
|
|
|
|
|
|
|
|
villagePointsRow.getElementsByTagName("td")[1].textContent = "Points village: " + settlements[3];
|
|
|
|
|
|
|
|
unitPointsRow.getElementsByTagName("td")[1].textContent = "Points troupes: " + settlements[4];
|
|
|
|
|
|
|
|
villagePointsRow.after(unitPointsRow);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Allow multiple attacks */
|
|
|
|
|
|
|
|
if (document.body.id === "build_barracks_command") {
|
|
|
|
|
|
|
|
let table = document.createElement("table");
|
|
|
|
|
|
|
|
table.classList.add("borderlist");
|
|
|
|
|
|
|
|
let tbody = document.createElement("tbody");
|
|
|
|
|
|
|
|
let tr = document.createElement("tr");
|
|
|
|
|
|
|
|
let th = document.createElement("th");
|
|
|
|
|
|
|
|
th.textContent = "Nombre d'attaques:";
|
|
|
|
|
|
|
|
tr.appendChild(th)
|
|
|
|
|
|
|
|
let td = document.createElement("td");
|
|
|
|
|
|
|
|
let input = document.createElement("input");
|
|
|
|
|
|
|
|
input.setAttribute("type", "number");
|
|
|
|
|
|
|
|
input.setAttribute("name", "attack_count");
|
|
|
|
|
|
|
|
input.setAttribute("value", "1");
|
|
|
|
|
|
|
|
td.appendChild(input);
|
|
|
|
|
|
|
|
tr.appendChild(td);
|
|
|
|
|
|
|
|
tbody.appendChild(tr);
|
|
|
|
|
|
|
|
table.appendChild(tbody);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let form = document.getElementsByTagName("form")[0];
|
|
|
|
|
|
|
|
let firstInput = form.getElementsByTagName("input")[0];
|
|
|
|
|
|
|
|
form.insertBefore(table, firstInput);
|
|
|
|
|
|
|
|
form.addEventListener("submit", function(event) {
|
|
|
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
let formData = new FormData(this);
|
|
|
|
|
|
|
|
let attackCount = parseInt(formData.get("attack_count").toString());
|
|
|
|
|
|
|
|
formData.delete("attack_count");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let sent = 0;
|
|
|
|
|
|
|
|
for (let i = 0; i < attackCount; i ++) {
|
|
|
|
|
|
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
|
|
|
|
xhr.onload = function() {
|
|
|
|
|
|
|
|
sent ++;
|
|
|
|
|
|
|
|
if (sent === attackCount) {
|
|
|
|
|
|
|
|
window.location.replace(xhr.responseURL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
xhr.open(this.method, this.action, true);
|
|
|
|
|
|
|
|
xhr.send(formData);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
let villagesBonus = 2250 * Math.max(0, villagesCount - 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let armyPoints = totalPoints - villagesPoints - villagesBonus;
|
|
|
|
|
|
|
|
let armyPercent = "-";
|
|
|
|
|
|
|
|
if (villagesCount > 0) {
|
|
|
|
|
|
|
|
armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints)));
|
|
|
|
|
|
|
|
playerPropertiesTable.appendChild(createRow("% points troupes:", armyPercent));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Display unit-points on village overview */
|
|
|
|
|
|
|
|
if (section === "overview") {
|
|
|
|
|
|
|
|
let settlements = document.getElementById("settlement").textContent.split("|");
|
|
|
|
|
|
|
|
let noBorderRows = document.getElementsByClassName("noborder");
|
|
|
|
|
|
|
|
let villagePointsRow = noBorderRows[0];
|
|
|
|
|
|
|
|
for (let i = 0; i < noBorderRows.length; i++) {
|
|
|
|
|
|
|
|
if (noBorderRows[i].textContent.startsWith("Points:")) {
|
|
|
|
|
|
|
|
villagePointsRow = noBorderRows[i];
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let unitPointsRow = villagePointsRow.cloneNode(true);
|
|
|
|
|
|
|
|
villagePointsRow.getElementsByTagName("td")[1].textContent = "Points village: " + settlements[3];
|
|
|
|
|
|
|
|
unitPointsRow.getElementsByTagName("td")[1].textContent = "Points troupes: " + settlements[4];
|
|
|
|
|
|
|
|
villagePointsRow.after(unitPointsRow);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Allow multiple attacks */
|
|
|
|
|
|
|
|
if (section === "build_barracks" && module === "command" && sub === "send") {
|
|
|
|
|
|
|
|
let table = document.createElement("table");
|
|
|
|
|
|
|
|
table.classList.add("borderlist");
|
|
|
|
|
|
|
|
let tbody = document.createElement("tbody");
|
|
|
|
|
|
|
|
let tr = document.createElement("tr");
|
|
|
|
|
|
|
|
let th = document.createElement("th");
|
|
|
|
|
|
|
|
th.textContent = "Nombre d'attaques:";
|
|
|
|
|
|
|
|
tr.appendChild(th)
|
|
|
|
|
|
|
|
let td = document.createElement("td");
|
|
|
|
|
|
|
|
let input = document.createElement("input");
|
|
|
|
|
|
|
|
input.setAttribute("type", "number");
|
|
|
|
|
|
|
|
input.setAttribute("name", "attack_count");
|
|
|
|
|
|
|
|
input.setAttribute("value", "1");
|
|
|
|
|
|
|
|
td.appendChild(input);
|
|
|
|
|
|
|
|
tr.appendChild(td);
|
|
|
|
|
|
|
|
tbody.appendChild(tr);
|
|
|
|
|
|
|
|
table.appendChild(tbody);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let form = document.getElementsByTagName("form")[0];
|
|
|
|
|
|
|
|
let firstInput = form.getElementsByTagName("input")[0];
|
|
|
|
|
|
|
|
form.insertBefore(table, firstInput);
|
|
|
|
|
|
|
|
form.addEventListener("submit", function (event) {
|
|
|
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
let formData = new FormData(this);
|
|
|
|
|
|
|
|
let attackCount = parseInt(formData.get("attack_count").toString());
|
|
|
|
|
|
|
|
formData.delete("attack_count");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let sent = 0;
|
|
|
|
|
|
|
|
for (let i = 0; i < attackCount; i++) {
|
|
|
|
|
|
|
|
let xhr = new XMLHttpRequest();
|
|
|
|
|
|
|
|
xhr.onload = function () {
|
|
|
|
|
|
|
|
sent++;
|
|
|
|
|
|
|
|
if (sent === attackCount) {
|
|
|
|
|
|
|
|
window.location.replace(xhr.responseURL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
xhr.open(this.method, this.action, true);
|
|
|
|
|
|
|
|
xhr.send(formData);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Fix select bug in market */
|
|
|
|
|
|
|
|
if (section === "build_market" && (module === "send" || module === null)) {
|
|
|
|
|
|
|
|
let select = document.getElementsByName("village_name")[0];
|
|
|
|
|
|
|
|
select.removeAttribute("onchange");
|
|
|
|
|
|
|
|
select.addEventListener("change", function () {
|
|
|
|
|
|
|
|
let sendX = document.getElementById("send_x");
|
|
|
|
|
|
|
|
let sendY = document.getElementById("send_y");
|
|
|
|
|
|
|
|
if (this.selectedIndex === 0) {
|
|
|
|
|
|
|
|
sendX.value = "";
|
|
|
|
|
|
|
|
sendY.value = "";
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
let xy = this.value.split("|");
|
|
|
|
|
|
|
|
sendX.value = xy[0];
|
|
|
|
|
|
|
|
sendY.value = xy[1];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Improve attacks display */
|
|
|
|
|
|
|
|
if (section === "ally" && module === "attacks") {
|
|
|
|
|
|
|
|
let contentPane = document.getElementsByClassName("contentpane")[1]
|
|
|
|
|
|
|
|
let table = contentPane.getElementsByClassName("borderlist")[0];
|
|
|
|
|
|
|
|
let rows = table.getElementsByTagName("tr");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let headCell = document.createElement("th");
|
|
|
|
|
|
|
|
rows[0].appendChild(headCell);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (let i = 1; i < rows.length; i ++) {
|
|
|
|
|
|
|
|
let cells = rows[i].getElementsByTagName("td");
|
|
|
|
|
|
|
|
let arrivalDateCell = cells[3]
|
|
|
|
|
|
|
|
let arrivalTimeCell = cells[4];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let interval = arrivalTimeCell.textContent.split(":");
|
|
|
|
|
|
|
|
let seconds = parseInt(interval[0]) * 3600 + parseInt(interval[1]) * 60 + parseInt(interval[2]);
|
|
|
|
|
|
|
|
let arrival = new Date(Date.now() + seconds * 1000);
|
|
|
|
|
|
|
|
let hour = arrival.toLocaleTimeString("fr-FR");
|
|
|
|
|
|
|
|
arrivalDateCell.textContent = arrivalDateCell.textContent.replace(/(.*)\d\d:\d\d(.*)/, "$1" + hour + "$2");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let startPoint = cells[2].getElementsByTagName("a")[3].textContent.split("|");
|
|
|
|
|
|
|
|
let targetPoint = cells[1].getElementsByTagName("a")[2].textContent.split("|");
|
|
|
|
|
|
|
|
let calculatorCell = document.createElement("td");
|
|
|
|
|
|
|
|
let calculatorForm = document.createElement("form");
|
|
|
|
|
|
|
|
calculatorForm.setAttribute("method", "post");
|
|
|
|
|
|
|
|
calculatorForm.setAttribute("action", "/?s=tools&m=runtime_calculator&inta=calculate");
|
|
|
|
|
|
|
|
calculatorForm.appendChild(createInput("hidden", "start_x", startPoint[0]));
|
|
|
|
|
|
|
|
calculatorForm.appendChild(createInput("hidden", "start_y", startPoint[1]));
|
|
|
|
|
|
|
|
calculatorForm.appendChild(createInput("hidden", "target_x", targetPoint[0]));
|
|
|
|
|
|
|
|
calculatorForm.appendChild(createInput("hidden", "target_y", targetPoint[1]));
|
|
|
|
|
|
|
|
let calculatorImg = document.createElement("input");
|
|
|
|
|
|
|
|
calculatorImg.setAttribute("type", "image");
|
|
|
|
|
|
|
|
calculatorImg.setAttribute("src", chrome.runtime.getURL("images/calculator.svg"));
|
|
|
|
|
|
|
|
calculatorImg.style.width = "20px";
|
|
|
|
|
|
|
|
calculatorImg.style.height = "20px";
|
|
|
|
|
|
|
|
calculatorImg.style.border = "none";
|
|
|
|
|
|
|
|
calculatorForm.appendChild(calculatorImg);
|
|
|
|
|
|
|
|
calculatorCell.appendChild(calculatorForm);
|
|
|
|
|
|
|
|
rows[i].appendChild(calculatorCell);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
main();
|
|
|
|
|