Compare commits
3 Commits
8d8ccd8e9d
...
v1.11.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d369c4c1e | |||
| ede3ce1f0b | |||
| 5b075f057e |
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,5 +1,17 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.11.3 (2026-11-21)
|
||||||
|
|
||||||
|
- ajout du calculateur de trajet vers un nouvel onglet
|
||||||
|
|
||||||
|
## 1.11.2 (2026-11-28)
|
||||||
|
|
||||||
|
- correction du bug sur les multiples attaques avec comte
|
||||||
|
- correction du bug sur le bouton pour sélectionner toutes les troupes
|
||||||
|
- correction du bug sur l'envoi de ressources vers un village cible
|
||||||
|
- ajout des ids dans la liste des joueurs d'une alliance
|
||||||
|
- ajout de l'id sur le profil d'un joueur
|
||||||
|
|
||||||
## 1.11.1 (2026-11-24)
|
## 1.11.1 (2026-11-24)
|
||||||
|
|
||||||
- ajout de l'id des joueurs dans le classement général et la liste des membres de l'alliance
|
- ajout de l'id des joueurs dans le classement général et la liste des membres de l'alliance
|
||||||
|
|||||||
1
images/blank.svg
Normal file
1
images/blank.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#000000" d="M416.5 88L416.5 160L352.5 160C273 160 208.5 224.5 208.5 304C208.5 397.4 291.3 438.8 309.1 446.6C311.3 447.6 313.7 448 316.2 448L318.7 448C328.5 448 336.5 440 336.5 430.2C336.5 421.9 330.6 414.7 323.7 409.9C314.8 403.7 304.5 391.7 304.5 369.4C304.5 324.4 341 287.9 386 287.9L416.5 287.9L416.5 359.9C416.5 369.6 422.3 378.4 431.3 382.1C440.3 385.8 450.6 383.8 457.5 376.9L593.5 240.9C602.9 231.5 602.9 216.3 593.5 207L457.5 71C450.6 64.1 440.3 62.1 431.3 65.8C422.3 69.5 416.5 78.3 416.5 88zM144.5 160C100.3 160 64.5 195.8 64.5 240L64.5 496C64.5 540.2 100.3 576 144.5 576L400.5 576C444.7 576 480.5 540.2 480.5 496L480.5 464C480.5 446.3 466.2 432 448.5 432C430.8 432 416.5 446.3 416.5 464L416.5 496C416.5 504.8 409.3 512 400.5 512L144.5 512C135.7 512 128.5 504.8 128.5 496L128.5 240C128.5 231.2 135.7 224 144.5 224L160.5 224C178.2 224 192.5 209.7 192.5 192C192.5 174.3 178.2 160 160.5 160L144.5 160z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "KAplus",
|
"name": "KAplus",
|
||||||
"version": "1.11.1",
|
"version": "1.11.3",
|
||||||
|
|
||||||
"developer": {
|
"developer": {
|
||||||
"name": "Samuel Campos",
|
"name": "Samuel Campos",
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
"firefox"
|
"firefox"
|
||||||
],
|
],
|
||||||
"release_notes": {
|
"release_notes": {
|
||||||
"fr": "- ajout de l'id des joueurs dans le classement général et la liste des membres de l'alliance",
|
"fr": "- ajout du calculateur de trajet vers un nouvel onglet",
|
||||||
"en-US": "- add players id in ranking and ally members pages"
|
"en-US": "- add travel calculator in new tab"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
752
src/kaplus.js
752
src/kaplus.js
@@ -102,6 +102,23 @@ function shortcutElementReplace(elt, img, text) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function customizeNavbar(layCastleElement) {
|
||||||
|
/* Improve navbar icons */
|
||||||
|
let shortcutElements = layCastleElement.getElementsByClassName("shortcut_element");
|
||||||
|
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", "");
|
||||||
|
|
||||||
|
/* Center navbar */
|
||||||
|
let shortcutContainers = layCastleElement.getElementsByClassName("shortcut_container");
|
||||||
|
shortcutContainers[0].classList.add("shortcut_container_left");
|
||||||
|
shortcutContainers[2].classList.add("shortcut_container_right");
|
||||||
|
}
|
||||||
|
|
||||||
function countUpMs() {
|
function countUpMs() {
|
||||||
let arrivalDate = new Date(new Date().getTime() + movingDuration * 1000);
|
let arrivalDate = new Date(new Date().getTime() + movingDuration * 1000);
|
||||||
let prefix = "";
|
let prefix = "";
|
||||||
@@ -121,339 +138,474 @@ function countUpMs() {
|
|||||||
+ Math.floor(arrivalDate.getMilliseconds() / 100);
|
+ Math.floor(arrivalDate.getMilliseconds() / 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleDomContentLoaded() {
|
function removeAdsBanner() {
|
||||||
/* Remove iframe banner */
|
/* Remove iframe banner */
|
||||||
document.getElementById("banner_skyscraper").remove();
|
document.getElementById("banner_skyscraper").remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showPlayersId() {
|
||||||
|
/* Add a column with player id */
|
||||||
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
||||||
|
let borderListTable = mainContentPane.getElementsByClassName("borderlist")[0];
|
||||||
|
let playerRows = borderListTable.getElementsByTagName("tr");
|
||||||
|
|
||||||
|
let headerCells = playerRows[0].getElementsByTagName("th");
|
||||||
|
let nameCellIndex = -1;
|
||||||
|
for (let i = 0; i < headerCells.length; i ++) {
|
||||||
|
if (headerCells[i].textContent === "Nom") {
|
||||||
|
nameCellIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nameCellIndex === -1) {
|
||||||
|
/* Name column not found, so return */
|
||||||
|
console.log("Column 'Nom' not found, cannot show player ids :(");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let idHeaderCell = createCustomElement("th", {"class": headerCells[0].getAttribute("class")}, "Id");
|
||||||
|
for (let i = 1; i < playerRows.length; i ++) {
|
||||||
|
let playerCells = playerRows[i].getElementsByTagName("td");
|
||||||
|
let playerProfileLink = playerCells[nameCellIndex].getElementsByTagName("a")[0].getAttribute("href");
|
||||||
|
let idValue = playerProfileLink.replace(/^.*id=(\d+)$/, "$1");
|
||||||
|
let idCell = createCustomElement("td", {"class": playerCells[0].getAttribute("class")}, idValue);
|
||||||
|
playerRows[i].insertBefore(idCell, playerCells[nameCellIndex]);
|
||||||
|
}
|
||||||
|
playerRows[0].insertBefore(idHeaderCell, headerCells[nameCellIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showPlayerUnitPointsAndId() {
|
||||||
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
||||||
|
let borderLists = mainContentPane.getElementsByClassName("borderlist");
|
||||||
|
|
||||||
|
let playerPropertiesTable = borderLists[0];
|
||||||
|
let playerPropertiesTbody = playerPropertiesTable.getElementsByTagName("tbody")[0];
|
||||||
|
let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
||||||
|
let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
||||||
|
let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
||||||
|
|
||||||
|
let villagesTable = borderLists[1];
|
||||||
|
let villagesRows = villagesTable.getElementsByTagName("tr");
|
||||||
|
let villagesPoints = 0;
|
||||||
|
for (let i = 1; i < villagesRows.length; i += 1) {
|
||||||
|
villagesPoints += num(villagesRows[i].getElementsByTagName("td")[2].textContent);
|
||||||
|
}
|
||||||
|
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() + " %";
|
||||||
|
}
|
||||||
|
|
||||||
|
let moduleMenu = mainContentPane.getElementsByTagName("table")[0];
|
||||||
|
let moduleHyperlink = moduleMenu.getElementsByTagName("a")[0];
|
||||||
|
let playerId = moduleHyperlink.getAttribute("href").replace(/^.*[?&]id=(\d+).*$/, "$1");
|
||||||
|
|
||||||
|
playerPropertiesTbody.appendChild(createKeyValueRow("Points troupes:", str(armyPoints)));
|
||||||
|
playerPropertiesTbody.appendChild(createKeyValueRow("% points troupes:", armyPercent));
|
||||||
|
playerPropertiesTbody.insertBefore(createKeyValueRow("Id:", playerId), playerPropertiesRows[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showVillageUnitPoints() {
|
||||||
|
let settlementElt = document.getElementById("settlement");
|
||||||
|
if (settlementElt === null) {
|
||||||
|
console.log("Settlement element not found => cannot show village points :(");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let settlements = settlementElt.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showBarrackSelectAllUnits() {
|
||||||
|
let sendCommandForm = document.getElementById("sendCommandForm");
|
||||||
|
let barracksCommands = sendCommandForm.getElementsByClassName("barracksCommand");
|
||||||
|
let borderListTables = sendCommandForm.getElementsByClassName("borderlist");
|
||||||
|
|
||||||
|
let unitCountBoxes = [];
|
||||||
|
if (barracksCommands.length === 1) {
|
||||||
|
unitCountBoxes = barracksCommands[0].getElementsByClassName("box");
|
||||||
|
} else if (borderListTables.length === 1) {
|
||||||
|
unitCountBoxes = borderListTables[0].getElementsByTagName("td");
|
||||||
|
}
|
||||||
|
for (let i = 0; i < unitCountBoxes.length; i ++) {
|
||||||
|
let unitCountInputs = unitCountBoxes[i].getElementsByTagName("input");
|
||||||
|
if (unitCountInputs.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let unitCountInput = unitCountInputs[0];
|
||||||
|
if (unitCountInput.getAttribute("type") === null) {
|
||||||
|
unitCountInput.setAttribute("type", "number");
|
||||||
|
unitCountInput.style.width = "65px";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let sendXInput = document.getElementById("send_x");
|
||||||
|
sendXInput.setAttribute("type", "number");
|
||||||
|
if (sendXInput.value === "0") {
|
||||||
|
sendXInput.value = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
let sendYInput = document.getElementById("send_y");
|
||||||
|
sendYInput.setAttribute("type", "number");
|
||||||
|
if (sendYInput.value === "0") {
|
||||||
|
sendYInput.value = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
let selectAllLabel = createCustomElement("label");
|
||||||
|
let selectAllInput = createCustomElement("input", {"type": "checkbox"});
|
||||||
|
selectAllInput.addEventListener("change", function () {
|
||||||
|
for (let i = 0; i < unitCountBoxes.length; i ++) {
|
||||||
|
let unitCountBox = unitCountBoxes[i];
|
||||||
|
let unitCountClicks = unitCountBox.getElementsByClassName("click");
|
||||||
|
if (unitCountClicks.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let unitCountClick = unitCountClicks[0];
|
||||||
|
if (unitCountClick.classList.contains("all")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let unitCountInput = unitCountBox.getElementsByTagName("input")[0];
|
||||||
|
if (this.checked && unitCountClick.textContent !== "(0)") {
|
||||||
|
unitCountInput.value = unitCountClick.textContent.replace(/^\(([^.]*)(\.([^.]*))?\)$/, "$1$3");
|
||||||
|
} else {
|
||||||
|
unitCountInput.value = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
selectAllLabel.appendChild(selectAllInput);
|
||||||
|
let selectAllSpan = createCustomElement("span", {"class": "click all"}, "(Tout sélectionner)");
|
||||||
|
selectAllLabel.appendChild(selectAllSpan);
|
||||||
|
|
||||||
|
/* Modern style */
|
||||||
|
if (barracksCommands.length === 1) {
|
||||||
|
let boxCell = createCustomElement("div", {"class": "box"});
|
||||||
|
|
||||||
|
let backgroundCell = createCustomElement("div", {"class": "background"});
|
||||||
|
let backgroundImg = createCustomElement(
|
||||||
|
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/modern/card_sendunit.png"}
|
||||||
|
);
|
||||||
|
backgroundCell.appendChild(backgroundImg);
|
||||||
|
boxCell.appendChild(backgroundCell);
|
||||||
|
|
||||||
|
let imageCell = createCustomElement("div", {"class": "image"});
|
||||||
|
let imageImg = createCustomElement(
|
||||||
|
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/shortcut/barracks.png"}, null, {"width": "28px"}
|
||||||
|
);
|
||||||
|
imageCell.appendChild(imageImg);
|
||||||
|
boxCell.appendChild(imageCell);
|
||||||
|
|
||||||
|
let nameCell = createCustomElement("div", {"class": "name"});
|
||||||
|
let nameA = createCustomElement("a", {"href": "help.php?m=units", "target": "_help"});
|
||||||
|
let nameB = createCustomElement("b", null, "Tout");
|
||||||
|
nameA.appendChild(nameB);
|
||||||
|
nameCell.appendChild(nameA);
|
||||||
|
boxCell.appendChild(nameCell);
|
||||||
|
|
||||||
|
let selectAllCell = createCustomElement("div", {"class": "quantity"});
|
||||||
|
selectAllCell.appendChild(selectAllLabel);
|
||||||
|
boxCell.appendChild(selectAllCell);
|
||||||
|
|
||||||
|
let brTag = barracksCommands[0].getElementsByTagName("br")[1];
|
||||||
|
barracksCommands[0].insertBefore(boxCell, brTag);
|
||||||
|
|
||||||
|
/* Classic style */
|
||||||
|
} else if (borderListTables.length === 1) {
|
||||||
|
let borderListRows = borderListTables[0].getElementsByTagName("tr");
|
||||||
|
let selectAllCell = borderListRows[4].getElementsByTagName("td")[3];
|
||||||
|
|
||||||
|
let imageA = createCustomElement("a", {"href": "help.php?m=units", "target": "_help"});
|
||||||
|
let imageImg = createCustomElement(
|
||||||
|
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/shortcut/barracks.png", "title": "Tout"}
|
||||||
|
);
|
||||||
|
imageA.appendChild(imageImg);
|
||||||
|
selectAllCell.appendChild(imageA);
|
||||||
|
|
||||||
|
selectAllCell.appendChild(selectAllLabel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showCountupTimeDecimals() {
|
||||||
|
let oldCell = document.getElementById("countup-time");
|
||||||
|
let hms = oldCell.parentElement.previousElementSibling.getElementsByTagName("td")[1].textContent.split(":");
|
||||||
|
movingDuration = parseInt(hms[0]) * 3600 + parseInt(hms[1]) * 60 + parseInt(hms[2]) ;
|
||||||
|
let newRow = createCustomElement("tr");
|
||||||
|
let newLeftCell = createCustomElement("td", null, "Arrivée:");
|
||||||
|
newRow.appendChild(newLeftCell);
|
||||||
|
let newRightCell = createCustomElement("td", {"id": "countup-time-ms"});
|
||||||
|
newRow.appendChild(newRightCell);
|
||||||
|
oldCell.parentElement.parentElement.insertBefore(newRow, oldCell.parentElement);
|
||||||
|
oldCell.parentElement.style.display = "none";
|
||||||
|
setInterval(countUpMs, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showOccurrencesInput() {
|
||||||
|
let table = createCustomElement("table", {"class": "borderlist"});
|
||||||
|
let tbody = createCustomElement("tbody");
|
||||||
|
let tr = createCustomElement("tr");
|
||||||
|
let th = createCustomElement("th", null, "Nombre d'occurrences:");
|
||||||
|
tr.appendChild(th)
|
||||||
|
let td = createCustomElement("td");
|
||||||
|
let input = createCustomElement("input", {"type": "number", "name": "occurrences", "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("occurrences").toString());
|
||||||
|
formData.delete("occurrences");
|
||||||
|
let sent = 0;
|
||||||
|
for (let i = 0; i < attackCount; i ++) {
|
||||||
|
let xhr = new XMLHttpRequest();
|
||||||
|
xhr.addEventListener("readystatechange", function () {
|
||||||
|
if (this.readyState === this.DONE) {
|
||||||
|
sent ++;
|
||||||
|
}
|
||||||
|
if (sent === attackCount) {
|
||||||
|
window.location.replace(xhr.responseURL);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
xhr.open(this.method, this.action, true);
|
||||||
|
xhr.send(formData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixSelectVillageBug() {
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showThousandInputs() {
|
||||||
|
let sendForm = document.getElementsByTagName("form")[0]
|
||||||
|
sendForm.addEventListener("submit", function () {
|
||||||
|
let inputs = this.getElementsByTagName("input");
|
||||||
|
for (let i = 0; i < inputs.length; i ++) {
|
||||||
|
if (inputs[i].getAttribute("name").endsWith("_k")) {
|
||||||
|
inputs[i].setAttribute("name", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let sendFormTables = sendForm.getElementsByTagName("table");
|
||||||
|
let newTable = sendFormTables[0].cloneNode(true);
|
||||||
|
newTable.getElementsByTagName("th")[0].textContent = "Ressources par milliers";
|
||||||
|
let resCells = newTable.getElementsByTagName("td");
|
||||||
|
for (let i = 0; i < resCells.length; i ++) {
|
||||||
|
let resInput = resCells[i].getElementsByTagName("input")[0];
|
||||||
|
let resName = resInput.getAttribute("name");
|
||||||
|
let resNameK = resInput.getAttribute("name") + "_k";
|
||||||
|
resInput.setAttribute("name", resNameK);
|
||||||
|
resInput.addEventListener("change", function () {
|
||||||
|
document.getElementsByName(resName)[0].value = 1000 * parseInt(this.value);
|
||||||
|
});
|
||||||
|
let spanInput = resCells[i].getElementsByTagName("span")[0];
|
||||||
|
let resMax = spanInput.textContent.replace(/\(/, "").replace("\)", "").replace(/\./, "");
|
||||||
|
let rMax = Math.floor(parseInt(resMax) / 1000);
|
||||||
|
spanInput.setAttribute(
|
||||||
|
"onclick",
|
||||||
|
"insertNum('kingsage', '" + resNameK + "', '" + rMax.toString() + "'); " +
|
||||||
|
"insertNum('kingsage', '" + resName + "', '" + (1000 * rMax).toString() + "');"
|
||||||
|
)
|
||||||
|
spanInput.textContent = "(" + rMax.toString() + "K)";
|
||||||
|
}
|
||||||
|
sendForm.insertBefore(newTable, sendFormTables[0]);
|
||||||
|
sendForm.insertBefore(createCustomElement("br"), sendFormTables[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fixSendResourcesInputsTypes() {
|
||||||
|
let contentPane = document.getElementsByClassName("contentpane")[1]
|
||||||
|
let sendCommandForm = contentPane.getElementsByTagName("form")[0];
|
||||||
|
let sendInputs = sendCommandForm.getElementsByTagName("input");
|
||||||
|
for (let i = 0; i < sendInputs.length; i ++) {
|
||||||
|
if (sendInputs[i].name.startsWith("send_")) {
|
||||||
|
sendInputs[i].setAttribute("type", "number");
|
||||||
|
if (sendInputs[i].value === "0") {
|
||||||
|
sendInputs[i].value = "";
|
||||||
|
}
|
||||||
|
sendInputs[i].style.width = "65px";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function showSecondsAndCalculator() {
|
||||||
|
let serverTime = parseInt(document.getElementById("servertime").getAttribute("time"));
|
||||||
|
let contentPane = document.getElementsByClassName("contentpane")[1]
|
||||||
|
let table = contentPane.getElementsByClassName("borderlist")[0];
|
||||||
|
let rows = table.getElementsByTagName("tr");
|
||||||
|
|
||||||
|
let headCell = createCustomElement("th", null, "Calcul");
|
||||||
|
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 seconds = parseInt(arrivalTimeCell.getElementsByTagName("span")[0].getAttribute("time"));
|
||||||
|
let arrival = new Date((serverTime + seconds) * 1000);
|
||||||
|
let hour = arrival.toLocaleTimeString("fr-FR");
|
||||||
|
arrivalDateCell.textContent = arrivalDateCell.textContent.replace(/(.*)\d\d:\d\d(.*)/, "$1" + hour + "$2");
|
||||||
|
|
||||||
|
let startPoint = searchPoint(cells[2].textContent);
|
||||||
|
let targetPoint = searchPoint(cells[1].textContent);
|
||||||
|
let calculatorCell = createCustomElement("td");
|
||||||
|
let calculatorForm = createCustomElement(
|
||||||
|
"form",
|
||||||
|
{
|
||||||
|
"method": "post",
|
||||||
|
"action": "/?s=tools&m=runtime_calculator&inta=calculate",
|
||||||
|
"title": "Calculateur de trajet",
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"display": "inline-block",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
calculatorForm.appendChild(createCustomInput("hidden", "start_x", startPoint.x));
|
||||||
|
calculatorForm.appendChild(createCustomInput("hidden", "start_y", startPoint.y));
|
||||||
|
calculatorForm.appendChild(createCustomInput("hidden", "target_x", targetPoint.x));
|
||||||
|
calculatorForm.appendChild(createCustomInput("hidden", "target_y", targetPoint.y));
|
||||||
|
let calculatorImg = createCustomInput(
|
||||||
|
"image",
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
{"src": chrome.runtime.getURL("images/calculator.svg")},
|
||||||
|
{"width": "20px", "height": "20px", "border": "none"}
|
||||||
|
);
|
||||||
|
calculatorForm.appendChild(calculatorImg);
|
||||||
|
calculatorCell.appendChild(calculatorForm);
|
||||||
|
|
||||||
|
let calculatorFormBlank = calculatorForm.cloneNode(true);
|
||||||
|
calculatorFormBlank.setAttribute("target", "_blank");
|
||||||
|
calculatorFormBlank.setAttribute("title", "Calculateur de trajet dans nouvel onglet");
|
||||||
|
let calculatorBlankImg = calculatorFormBlank.getElementsByTagName("input")[4]
|
||||||
|
calculatorBlankImg.setAttribute("src", chrome.runtime.getURL("images/blank.svg"));
|
||||||
|
calculatorCell.appendChild(calculatorFormBlank);
|
||||||
|
|
||||||
|
rows[i].appendChild(calculatorCell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
|
/* Exit immediately if not on game page */
|
||||||
|
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
||||||
|
if (layCastleTopElements.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Exit immediately if extension has already been loaded */
|
/* Exit immediately if extension has already been loaded */
|
||||||
let kaplus = document.getElementById("kaplus-marker");
|
let kaplus = document.getElementById("kaplus-marker");
|
||||||
if (kaplus) {
|
if (kaplus) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit immediately if not on game page */
|
/* Set marker to prevent loading extension several times */
|
||||||
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
|
||||||
if (layCastleTopElements.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
window.addEventListener("DOMContentLoaded", handleDomContentLoaded);
|
|
||||||
|
|
||||||
/* Add extension marker */
|
|
||||||
document.body.appendChild(createCustomElement("div", {"id": "kaplus-marker"}, null, {"display": "none"}));
|
document.body.appendChild(createCustomElement("div", {"id": "kaplus-marker"}, null, {"display": "none"}));
|
||||||
|
|
||||||
/* Improve navbar icons */
|
/* Remove ads banner on dom content loaded */
|
||||||
let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element");
|
window.addEventListener("DOMContentLoaded", removeAdsBanner);
|
||||||
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", "");
|
|
||||||
|
|
||||||
/* Center navbar */
|
/* Customize navbar */
|
||||||
let shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container");
|
customizeNavbar(layCastleTopElements[0]); // test: OK
|
||||||
shortcutContainers[0].classList.add("shortcut_container_left");
|
|
||||||
shortcutContainers[2].classList.add("shortcut_container_right");
|
|
||||||
|
|
||||||
/* Parse url params and switch case */
|
/* Parse url params and switch case */
|
||||||
let urlParams = new URLSearchParams(window.location.search);
|
let urlParams = new URLSearchParams(window.location.search);
|
||||||
let section = urlParams.get("s");
|
let section = urlParams.get("s");
|
||||||
let module = urlParams.get("m");
|
let module = urlParams.get("m");
|
||||||
let sub = urlParams.get("sub");
|
let sub = urlParams.get("sub");
|
||||||
let sendCommandForm = document.getElementById("sendCommandForm");
|
|
||||||
|
|
||||||
/* Add player id on ranking */
|
/* Choose action according to section, module and sub */
|
||||||
if (section === "ranking" || (section === "ally" && module === "members")) {
|
switch (section) {
|
||||||
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
case "ranking":
|
||||||
let borderListTable = mainContentPane.getElementsByClassName("borderlist")[0];
|
switch (module) {
|
||||||
let playerRows = borderListTable.getElementsByTagName("tr");
|
case "player": case null:
|
||||||
|
showPlayersId(); // test: OK
|
||||||
let headerCells = playerRows[0].getElementsByTagName("th");
|
break;
|
||||||
let idHeaderCell = createCustomElement("th", {"class": headerCells[0].getAttribute("class")}, "Id");
|
|
||||||
playerRows[0].insertBefore(idHeaderCell, headerCells[1]);
|
|
||||||
|
|
||||||
for (let i = 1; i < playerRows.length; i ++) {
|
|
||||||
let playerCells = playerRows[i].getElementsByTagName("td");
|
|
||||||
let playerProfileLink = playerCells[1].getElementsByTagName("a")[0].getAttribute("href");
|
|
||||||
let idValue = playerProfileLink.replace(/^.*id=(\d+)$/, "$1");
|
|
||||||
let idCell = createCustomElement("td", {"class": playerCells[0].getAttribute("class")}, idValue);
|
|
||||||
playerRows[i].insertBefore(idCell, playerCells[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Display unit-points on user profile */
|
|
||||||
if (section === "info_player" && (module === "profile" || module === null)) {
|
|
||||||
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
|
||||||
let borderLists = mainContentPane.getElementsByClassName("borderlist");
|
|
||||||
|
|
||||||
let playerPropertiesTable = borderLists[0];
|
|
||||||
let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
|
||||||
let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
|
||||||
let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
|
||||||
|
|
||||||
let villagesTable = borderLists[1];
|
|
||||||
let villagesRows = villagesTable.getElementsByTagName("tr");
|
|
||||||
let villagesPoints = 0;
|
|
||||||
for (let i = 1; i < villagesRows.length; i += 1) {
|
|
||||||
villagesPoints += num(villagesRows[i].getElementsByTagName("td")[2].textContent);
|
|
||||||
}
|
|
||||||
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(createKeyValueRow("Points troupes:", str(armyPoints)));
|
|
||||||
playerPropertiesTable.appendChild(createKeyValueRow("% 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;
|
|
||||||
}
|
}
|
||||||
}
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Units order page */
|
case "ally":
|
||||||
if (section === "build_barracks" && (module === null || module === "command") && sendCommandForm !== null) {
|
switch (module) {
|
||||||
let barracksCommands = sendCommandForm.getElementsByClassName("barracksCommand");
|
case "members":
|
||||||
let borderListTables = sendCommandForm.getElementsByClassName("borderlist");
|
showPlayersId(); // test: OK
|
||||||
|
break;
|
||||||
let quantityLabel = createCustomElement("label");
|
case "attacks":
|
||||||
let quantityInput = createCustomElement("input", {"type": "checkbox"});
|
showSecondsAndCalculator(); // test: OK
|
||||||
quantityInput.addEventListener("change", function () {
|
break;
|
||||||
let clickSpans = [];
|
|
||||||
if (barracksCommands.length === 1) {
|
|
||||||
clickSpans = barracksCommands[0].getElementsByClassName("click");
|
|
||||||
} else if (borderListTables.length === 1) {
|
|
||||||
clickSpans = borderListTables[0].getElementsByClassName("click");
|
|
||||||
}
|
}
|
||||||
for (let i = 0; i < 12; i++) {
|
break;
|
||||||
if (clickSpans[i].classList.contains("all")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
clickSpans[i].click();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
quantityLabel.appendChild(quantityInput);
|
|
||||||
let quantitySpan = createCustomElement("span", {"class": "click all"}, "(Tout sélectionner)");
|
|
||||||
quantityLabel.appendChild(quantitySpan);
|
|
||||||
|
|
||||||
if (barracksCommands.length === 1) {
|
case "overview":
|
||||||
let boxCell = createCustomElement("div", {"class": "box"});
|
showVillageUnitPoints(); // test: FAILED because settlement element has been removed
|
||||||
|
break;
|
||||||
|
|
||||||
let backgroundCell = createCustomElement("div", {"class": "background"});
|
case "build_barracks":
|
||||||
let backgroundImg = createCustomElement(
|
switch (module) {
|
||||||
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/modern/card_sendunit.png"}
|
case "command": case null:
|
||||||
);
|
switch (sub) {
|
||||||
backgroundCell.appendChild(backgroundImg);
|
case null:
|
||||||
boxCell.appendChild(backgroundCell);
|
showBarrackSelectAllUnits(); // test: OK
|
||||||
|
break;
|
||||||
let imageCell = createCustomElement("div", {"class": "image"});
|
case "send":
|
||||||
let imageImg = createCustomElement(
|
showCountupTimeDecimals(); // test: OK
|
||||||
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/shortcut/barracks.png"}, null, {"width": "28px"}
|
showOccurrencesInput(); // test: OK
|
||||||
);
|
break;
|
||||||
imageCell.appendChild(imageImg);
|
|
||||||
boxCell.appendChild(imageCell);
|
|
||||||
|
|
||||||
let nameCell = createCustomElement("div", {"class": "name"});
|
|
||||||
let nameA = createCustomElement("a", {"href": "help.php?m=units", "target": "_help"});
|
|
||||||
let nameB = createCustomElement("b", null, "Tout");
|
|
||||||
nameA.appendChild(nameB);
|
|
||||||
nameCell.appendChild(nameA);
|
|
||||||
boxCell.appendChild(nameCell);
|
|
||||||
|
|
||||||
let quantityCell = createCustomElement("div", {"class": "quantity"});
|
|
||||||
quantityCell.appendChild(quantityLabel);
|
|
||||||
boxCell.appendChild(quantityCell);
|
|
||||||
|
|
||||||
let brTag = barracksCommands[0].getElementsByTagName("br")[1];
|
|
||||||
barracksCommands[0].insertBefore(boxCell, brTag);
|
|
||||||
|
|
||||||
} else if (borderListTables.length === 1) {
|
|
||||||
let borderListRows = borderListTables[0].getElementsByTagName("tr");
|
|
||||||
let selectAllCell = borderListRows[1].getElementsByTagName("td")[3];
|
|
||||||
|
|
||||||
let imageA = createCustomElement("a", {"href": "help.php?m=units", "target": "_help"});
|
|
||||||
let imageImg = createCustomElement(
|
|
||||||
"img", {"src": "//s58-fr.kingsage.gameforge.com/img/shortcut/barracks.png", "title": "Tout"}
|
|
||||||
);
|
|
||||||
imageA.appendChild(imageImg);
|
|
||||||
selectAllCell.appendChild(imageA);
|
|
||||||
|
|
||||||
selectAllCell.appendChild(quantityLabel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Units sending page */
|
|
||||||
if (section === "build_barracks" && module === "command" && sub === "send" && sendCommandForm === null) {
|
|
||||||
/* Improve countup time cell */
|
|
||||||
let oldCell = document.getElementById("countup-time");
|
|
||||||
let hms = oldCell.parentElement.previousElementSibling.getElementsByTagName("td")[1].textContent.split(":");
|
|
||||||
movingDuration = parseInt(hms[0]) * 3600 + parseInt(hms[1]) * 60 + parseInt(hms[2]) ;
|
|
||||||
let newRow = createCustomElement("tr");
|
|
||||||
let newLeftCell = createCustomElement("td", null, "Arrivée:");
|
|
||||||
newRow.appendChild(newLeftCell);
|
|
||||||
let newRightCell = createCustomElement("td", {"id": "countup-time-ms"});
|
|
||||||
newRow.appendChild(newRightCell);
|
|
||||||
oldCell.parentElement.parentElement.insertBefore(newRow, oldCell.parentElement);
|
|
||||||
oldCell.parentElement.style.display = "none";
|
|
||||||
setInterval(countUpMs, 100);
|
|
||||||
|
|
||||||
/* Allow multiple occurrences of send */
|
|
||||||
let table = createCustomElement("table", {"class": "borderlist"});
|
|
||||||
let tbody = createCustomElement("tbody");
|
|
||||||
let tr = createCustomElement("tr");
|
|
||||||
let th = createCustomElement("th", null, "Nombre d'occurrences:");
|
|
||||||
tr.appendChild(th)
|
|
||||||
let td = createCustomElement("td");
|
|
||||||
let input = createCustomElement("input", {"type": "number", "name": "occurrences", "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) {
|
|
||||||
let formData = new FormData(this);
|
|
||||||
let attackCount = parseInt(formData.get("occurrences").toString());
|
|
||||||
formData.delete("occurrences");
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
xhr.open(this.method, this.action, true);
|
|
||||||
xhr.send(formData);
|
|
||||||
}
|
}
|
||||||
});
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* Market sending page */
|
case "build_market":
|
||||||
if (section === "build_market" && (module === "send" || module === null)) {
|
switch (module) {
|
||||||
/* Fix select bug in target village select */
|
case "send": case null:
|
||||||
let select = document.getElementsByName("village_name")[0];
|
fixSelectVillageBug(); // test: OK
|
||||||
select.removeAttribute("onchange");
|
showThousandInputs(); // test: OK
|
||||||
select.addEventListener("change", function () {
|
fixSendResourcesInputsTypes(); // test: OK
|
||||||
let sendX = document.getElementById("send_x");
|
break;
|
||||||
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];
|
|
||||||
}
|
}
|
||||||
});
|
break;
|
||||||
|
|
||||||
/* Add form to send resources by thousands */
|
case "info_player":
|
||||||
let sendForm = document.getElementsByTagName("form")[0]
|
switch (module) {
|
||||||
sendForm.addEventListener("submit", function () {
|
case "profile": case null:
|
||||||
let inputs = this.getElementsByTagName("input");
|
showPlayerUnitPointsAndId(); // test: OK
|
||||||
for (let i = 0; i < inputs.length; i ++) {
|
break;
|
||||||
if (inputs[i].getAttribute("name").endsWith("_k")) {
|
|
||||||
inputs[i].setAttribute("name", "");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
break;
|
||||||
let sendFormTables = sendForm.getElementsByTagName("table");
|
|
||||||
let newTable = sendFormTables[0].cloneNode(true);
|
|
||||||
newTable.getElementsByTagName("th")[0].textContent = "Ressources par milliers";
|
|
||||||
let resCells = newTable.getElementsByTagName("td");
|
|
||||||
for (let i = 0; i < resCells.length; i ++) {
|
|
||||||
let resInput = resCells[i].getElementsByTagName("input")[0];
|
|
||||||
let resName = resInput.getAttribute("name");
|
|
||||||
let resNameK = resInput.getAttribute("name") + "_k";
|
|
||||||
resInput.setAttribute("name", resNameK);
|
|
||||||
resInput.addEventListener("change", function () {
|
|
||||||
document.getElementsByName(resName)[0].value = 1000 * parseInt(this.value);
|
|
||||||
});
|
|
||||||
let spanInput = resCells[i].getElementsByTagName("span")[0];
|
|
||||||
let resMax = spanInput.textContent.replace(/\(/, "").replace("\)", "").replace(/\./, "");
|
|
||||||
let rMax = Math.floor(parseInt(resMax) / 1000);
|
|
||||||
spanInput.setAttribute(
|
|
||||||
"onclick",
|
|
||||||
"insertNum('kingsage', '" + resNameK + "', '" + rMax.toString() + "'); " +
|
|
||||||
"insertNum('kingsage', '" + resName + "', '" + (1000 * rMax).toString() + "');"
|
|
||||||
)
|
|
||||||
spanInput.textContent = "(" + rMax.toString() + "K)";
|
|
||||||
}
|
|
||||||
sendForm.insertBefore(newTable, sendFormTables[0]);
|
|
||||||
sendForm.insertBefore(createCustomElement("br"), sendFormTables[1]);
|
|
||||||
|
|
||||||
/* Set inputs type=number */
|
case "info_member":
|
||||||
let sendInputs = sendForm.getElementsByTagName("input");
|
showPlayersId(); // test: OK
|
||||||
for (let i = 0; i < sendInputs.length; i ++) {
|
break;
|
||||||
if (sendInputs[i].name.startsWith("send_")) {
|
|
||||||
sendInputs[i].setAttribute("type", "number");
|
|
||||||
sendInputs[i].value = "";
|
|
||||||
sendInputs[i].style.width = "65px";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Improve attacks display */
|
|
||||||
if (section === "ally" && module === "attacks") {
|
|
||||||
let serverTime = parseInt(document.getElementById("servertime").getAttribute("time"));
|
|
||||||
let contentPane = document.getElementsByClassName("contentpane")[1]
|
|
||||||
let table = contentPane.getElementsByClassName("borderlist")[0];
|
|
||||||
let rows = table.getElementsByTagName("tr");
|
|
||||||
|
|
||||||
let headCell = createCustomElement("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 seconds = parseInt(arrivalTimeCell.getElementsByTagName("span")[0].getAttribute("time"));
|
|
||||||
let arrival = new Date((serverTime + seconds) * 1000);
|
|
||||||
let hour = arrival.toLocaleTimeString("fr-FR");
|
|
||||||
arrivalDateCell.textContent = arrivalDateCell.textContent.replace(/(.*)\d\d:\d\d(.*)/, "$1" + hour + "$2");
|
|
||||||
|
|
||||||
let startPoint = searchPoint(cells[2].textContent);
|
|
||||||
let targetPoint = searchPoint(cells[1].textContent);
|
|
||||||
let calculatorCell = createCustomElement("td");
|
|
||||||
let calculatorForm = createCustomElement(
|
|
||||||
"form", {"method": "post", "action": "/?s=tools&m=runtime_calculator&inta=calculate"}
|
|
||||||
);
|
|
||||||
calculatorForm.appendChild(createCustomInput("hidden", "start_x", startPoint.x));
|
|
||||||
calculatorForm.appendChild(createCustomInput("hidden", "start_y", startPoint.y));
|
|
||||||
calculatorForm.appendChild(createCustomInput("hidden", "target_x", targetPoint.x));
|
|
||||||
calculatorForm.appendChild(createCustomInput("hidden", "target_y", targetPoint.y));
|
|
||||||
let calculatorImg = createCustomInput(
|
|
||||||
"image",
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
{"src": chrome.runtime.getURL("images/calculator.svg")},
|
|
||||||
{"width": "20px", "height": "20px", "border": "none"}
|
|
||||||
);
|
|
||||||
calculatorForm.appendChild(calculatorImg);
|
|
||||||
calculatorCell.appendChild(calculatorForm);
|
|
||||||
rows[i].appendChild(calculatorCell);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user