5 Commits

Author SHA1 Message Date
abc7742b75 Remove data_collection_permissions because not supported for android
All checks were successful
Continuous Deployment / lint (push) Successful in 30s
Continuous Deployment / deploy (push) Successful in 5m20s
2025-11-11 14:58:51 +01:00
05369a6661 Update version before tagging
All checks were successful
Continuous Deployment / lint (push) Successful in 1m27s
Continuous Deployment / deploy (push) Successful in 4m33s
2025-11-11 14:29:00 +01:00
948de12bc5 Add web ext key and secret in workflow 2025-11-11 14:26:41 +01:00
f7cb4da37c Setup continuous deployment
Some checks failed
Continuous Deployment / lint (push) Successful in 1m26s
Continuous Deployment / deploy (push) Failing after 15s
2025-11-11 13:48:48 +01:00
89c5c127c5 create makefile 2025-10-22 11:29:03 +02:00
7 changed files with 138 additions and 67 deletions

26
.gitea/workflows/cd.yaml Normal file
View File

@@ -0,0 +1,26 @@
name: Continuous Deployment
on:
push:
tags:
- v*
jobs:
lint:
runs-on: linux
steps:
- name: Checkout repo
uses: actions/checkout@v5
- name: Run linter
run: make lint
deploy:
runs-on: linux
steps:
- name: Checkout repo
uses: actions/checkout@v5
- name: Deploy project
env:
WEB_EXT_API_KEY: ${{ vars.WEB_EXT_API_KEY }}
WEB_EXT_API_SECRET: ${{ secrets.WEB_EXT_API_SECRET }}
run: make deploy

1
.gitignore vendored
View File

@@ -1 +1,2 @@
web-ext-artifacts/
.idea/

View File

@@ -1,5 +1,27 @@
# Changelog
## 1.4.8 (2025-11-11)
- suppression de data_collection_permissions car non supporté pour Android
## 1.4.7 (2025-11-11)
- correction du déploiement automatisé
- ajout de data_collection_permissions dans manifest.json
## 1.4.6 (2025-11-11)
- déploiement automatisé sur firefox
- correction du bug d'affichage du menu Messages et Rapports
## 1.4.5 (2025-10-14)
- tests de déploiement automatisé
## 1.4.4 (2025-10-11)
- tests de déploiement automatisé
## 1.4.3 (2025-09-15)
- correction de l'affichage du menu en cas de nouveau rapport

11
Makefile Normal file
View File

@@ -0,0 +1,11 @@
build:
web-ext build --overwrite-dest
lint:
web-ext lint
deploy:
web-ext sign --channel listed --amo-metadata metadata.json
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "KAplus",
"version": "1.4.3",
"version": "1.4.8",
"author": "Samuel Campos - netoik.io",
"description": "Extension développée pour améliorer l'expérience de jeu KingsAge (fonctionne avec ou sans premium)",

9
metadata.json Normal file
View File

@@ -0,0 +1,9 @@
{
"compatibility": [
"android",
"firefox"
],
"release_notes": {
"fr": "- suppression de data_collection_permissions car non supporté pour Android"
}
}

View File

@@ -3,15 +3,15 @@ function num(s) {
}
function str(n) {
if (n == 0) {
if (n === 0) {
return "0";
}
s = "";
let s = "";
while (n > 0) {
if (s != "") {
if (s !== "") {
s = "." + s;
}
r = n % 1000;
let r = n % 1000;
s = r.toString().padStart(3, "0") + s;
n = ~~(n/1000);
}
@@ -19,27 +19,29 @@ function str(n) {
}
function createRow(key, value) {
keyCell = document.createElement("td");
let keyCell = document.createElement("td");
keyCell.textContent = key;
valueCell = document.createElement("td");
let valueCell = document.createElement("td");
valueCell.textContent = value;
row = document.createElement("tr");
let row = document.createElement("tr");
row.appendChild(keyCell);
row.appendChild(valueCell);
return row;
}
function shortcutElementReplace(elt, img, text) {
imgElements = elt.getElementsByTagName("img");
for (i=0; i<imgElements.length; i++) {
if (i == 0) {
let imgElements = elt.getElementsByTagName("img");
for (let i=0; i<imgElements.length; i++) {
if (i === 0) {
elt.getElementsByTagName("a")[0].classList.add("has_notif");
}
imgElements[i].remove();
i --;
}
aElements = elt.getElementsByTagName("a");
let aElements = elt.getElementsByTagName("a");
for (i=0; i<aElements.length; i++) {
if (i > 0) {
aElements[i].remove();
@@ -47,10 +49,10 @@ function shortcutElementReplace(elt, img, text) {
}
}
spanImageElement = document.createElement("span");
let spanImageElement = document.createElement("span");
spanImageElement.classList.add("shortcut_element_image");
imgElement = document.createElement("img");
let imgElement = document.createElement("img");
imgElement.setAttribute("src", chrome.runtime.getURL("images/"+img+".svg"));
spanImageElement.appendChild(imgElement);
@@ -58,7 +60,7 @@ function shortcutElementReplace(elt, img, text) {
aElements[0].appendChild(spanImageElement);
if (text) {
spanDescElement = document.createElement("span");
let spanDescElement = document.createElement("span");
spanDescElement.classList.add("shortcut_element_desc");
spanDescElement.textContent = text;
aElements[0].appendChild(spanDescElement);
@@ -66,11 +68,11 @@ function shortcutElementReplace(elt, img, text) {
}
/* Improve main menu display */
layCastleTopElements = document.getElementsByClassName("lay_castle_top");
if (layCastleTopElements.length == 1) {
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
if (layCastleTopElements.length === 1) {
document.getElementById("banner_skyscraper").remove();
shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element");
let shortcutElements = layCastleTopElements[0].getElementsByClassName("shortcut_element");
shortcutElementReplace(shortcutElements[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, ""));
shortcutElementReplace(shortcutElements[1], "ally", "");
shortcutElementReplace(shortcutElements[2], "profile", "");
@@ -79,34 +81,33 @@ if (layCastleTopElements.length == 1) {
shortcutElementReplace(shortcutElements[5], "tools", "");
shortcutElementReplace(shortcutElements[6], "favorites", "");
shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container");
let shortcutContainers = layCastleTopElements[0].getElementsByClassName("shortcut_container");
shortcutContainers[0].classList.add("shortcut_container_left");
shortcutContainers[2].classList.add("shortcut_container_right");
}
/* Display unit-points on user profile */
if (document.body.id === "info_player") {
mainContentPane = document.getElementsByClassName("contentpane")[1];
borderLists = mainContentPane.getElementsByClassName("borderlist");
let mainContentPane = document.getElementsByClassName("contentpane")[1];
let borderLists = mainContentPane.getElementsByClassName("borderlist");
playerPropertiesTable = borderLists[0];
playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
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);
villagesTable = borderLists[1];
villagesRows = villagesTable.getElementsByTagName("tr");
villagesPoints = 0;
for (i=1; i<villagesRows.length; i+=1) {
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);
}
villagesBonus = 2250 * Math.max(0, villagesCount - 1);
let villagesBonus = 2250 * Math.max(0, villagesCount - 1);
armyPoints = totalPoints - villagesPoints - villagesBonus;
let armyPoints = totalPoints - villagesPoints - villagesBonus;
let armyPercent = "-";
if (villagesCount > 0) {
armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %";
} else {
armyPercent = "-";
}
playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints)));
@@ -115,15 +116,16 @@ if (document.body.id === "info_player") {
/* Display unit-points on village overview */
if (document.body.id === "overview") {
settlements = document.getElementById("settlement").textContent.split("|");
noborderRows = document.getElementsByClassName("noborder");
for (i=0; i<noborderRows.length; i++) {
if (noborderRows[i].textContent.startsWith("Points:")) {
villagePointsRow = noborderRows[i];
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;
}
}
unitPointsRow = villagePointsRow.cloneNode(true);
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);