Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4f1d5442be | |||
| 45d5200e61 | |||
| 10de4507af | |||
| a37d54cd2e | |||
| abc7742b75 | |||
| 05369a6661 | |||
| 948de12bc5 | |||
| f7cb4da37c | |||
| 89c5c127c5 | |||
| 2b1eb25a28 | |||
| 2ca48bda23 | |||
| 57d83653d5 |
41
.gitea/workflows/cd.yaml
Normal file
41
.gitea/workflows/cd.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
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-chrome:
|
||||||
|
needs: lint
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: Deploy project to Chrome Webstore
|
||||||
|
env:
|
||||||
|
CLIENT_ID: ${{ vars.CHROME_CLIENT_ID }}
|
||||||
|
CLIENT_SECRET: ${{ secrets.CHROME_CLIENT_SECRET }}
|
||||||
|
EXTENSION_ID: ${{ vars.CHROME_EXTENSION_ID }}
|
||||||
|
REFRESH_TOKEN: ${{ secrets.CHROME_REFRESH_TOKEN }}
|
||||||
|
run: make deploy_chrome
|
||||||
|
|
||||||
|
deploy-firefox:
|
||||||
|
needs: lint
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: Deploy project to Firefox Addons
|
||||||
|
env:
|
||||||
|
WEB_EXT_API_KEY: ${{ vars.FIREFOX_API_KEY }}
|
||||||
|
WEB_EXT_API_SECRET: ${{ secrets.FIREFOX_API_SECRET }}
|
||||||
|
run: make deploy_firefox
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
web-ext-artifacts/
|
web-ext-artifacts/
|
||||||
|
.idea/
|
||||||
|
|||||||
47
CHANGELOG.md
47
CHANGELOG.md
@@ -1,5 +1,52 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.4.13 (2025-11-13)
|
||||||
|
|
||||||
|
- déploiement automatique sur chrome
|
||||||
|
|
||||||
|
## 1.4.12 (2025-11-11)
|
||||||
|
|
||||||
|
- correction bug menu
|
||||||
|
|
||||||
|
## 1.4.11 (2025-11-11)
|
||||||
|
|
||||||
|
- ajout des data collection permissions
|
||||||
|
|
||||||
|
## 1.4.10 (2025-11-11)
|
||||||
|
|
||||||
|
- correction du fichier metadata.json
|
||||||
|
|
||||||
|
## 1.4.9 (2025-11-11)
|
||||||
|
|
||||||
|
- test déploiement manuel
|
||||||
|
|
||||||
|
## 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
|
||||||
|
- utilisation de css pure plutôt que d'une image pour les notifs de messages
|
||||||
|
|
||||||
## 1.4.2 (2025-09-14)
|
## 1.4.2 (2025-09-14)
|
||||||
|
|
||||||
- annulation de la suppression des tours drapeaux (car impossible de réduire l'écran correctement)
|
- annulation de la suppression des tours drapeaux (car impossible de réduire l'écran correctement)
|
||||||
|
|||||||
14
Makefile
Normal file
14
Makefile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
build:
|
||||||
|
web-ext build --overwrite-dest
|
||||||
|
|
||||||
|
lint:
|
||||||
|
web-ext lint
|
||||||
|
|
||||||
|
deploy_chrome:
|
||||||
|
chrome-webstore-upload
|
||||||
|
|
||||||
|
deploy_firefox:
|
||||||
|
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}'
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free v7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#ff0000" d="M64 320C64 178.6 178.6 64 320 64C461.4 64 576 178.6 576 320C576 461.4 461.4 576 320 576C178.6 576 64 461.4 64 320z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 362 B |
@@ -1,14 +1,20 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "KAplus",
|
"name": "KAplus",
|
||||||
"version": "1.4.2",
|
"version": "1.4.13",
|
||||||
|
|
||||||
"author": "Samuel Campos - netoik.io",
|
"author": "Samuel Campos - netoik.io",
|
||||||
"description": "Extension développée pour améliorer l'expérience de jeu KingsAge (fonctionne avec ou sans premium)",
|
"description": "Extension développée pour améliorer l'expérience de jeu KingsAge (fonctionne avec ou sans premium)",
|
||||||
|
|
||||||
"browser_specific_settings": {
|
"browser_specific_settings": {
|
||||||
"gecko": {
|
"gecko": {
|
||||||
"id": "{e750d6a9-86ff-4129-aed6-542de03deb79}"
|
"id": "{e750d6a9-86ff-4129-aed6-542de03deb79}",
|
||||||
|
"data_collection_permissions": {
|
||||||
|
"required": [
|
||||||
|
"websiteContent",
|
||||||
|
"websiteActivity"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
12
metadata.json
Normal file
12
metadata.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"version": {
|
||||||
|
"compatibility": [
|
||||||
|
"android",
|
||||||
|
"firefox"
|
||||||
|
],
|
||||||
|
"release_notes": {
|
||||||
|
"fr": "- déploiement automatique sur chrome",
|
||||||
|
"en-US": "- continuous deployment on chrome"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,13 +52,14 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
a.has_notif::after {
|
a.has_notif::after {
|
||||||
background-image: url("moz-extension://__MSG_@@extension_id__/images/notif.svg"), url("chrome-extension://__MSG_@@extension_id__/images/notif.svg");
|
|
||||||
background-size: 13px 13px;
|
background-size: 13px 13px;
|
||||||
|
background-color: #FF0000;
|
||||||
|
border-radius: 50%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -13px;
|
top: -13px;
|
||||||
right: -3px;
|
right: 3px;
|
||||||
width: 13px;
|
width: 12px;
|
||||||
height: 13px;
|
height: 12px;
|
||||||
content: "";
|
content: "";
|
||||||
}
|
}
|
||||||
.shortcut_element_image {
|
.shortcut_element_image {
|
||||||
|
|||||||
@@ -3,15 +3,15 @@ function num(s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function str(n) {
|
function str(n) {
|
||||||
if (n == 0) {
|
if (n === 0) {
|
||||||
return "0";
|
return "0";
|
||||||
}
|
}
|
||||||
s = "";
|
let s = "";
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
if (s != "") {
|
if (s !== "") {
|
||||||
s = "." + s;
|
s = "." + s;
|
||||||
}
|
}
|
||||||
r = n % 1000;
|
let r = n % 1000;
|
||||||
s = r.toString().padStart(3, "0") + s;
|
s = r.toString().padStart(3, "0") + s;
|
||||||
n = ~~(n/1000);
|
n = ~~(n/1000);
|
||||||
}
|
}
|
||||||
@@ -19,51 +19,54 @@ function str(n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createRow(key, value) {
|
function createRow(key, value) {
|
||||||
keyCell = document.createElement("td");
|
let keyCell = document.createElement("td");
|
||||||
keyCell.textContent = key;
|
keyCell.textContent = key;
|
||||||
valueCell = document.createElement("td");
|
|
||||||
|
let valueCell = document.createElement("td");
|
||||||
valueCell.textContent = value;
|
valueCell.textContent = value;
|
||||||
row = document.createElement("tr");
|
|
||||||
|
let row = document.createElement("tr");
|
||||||
row.appendChild(keyCell);
|
row.appendChild(keyCell);
|
||||||
row.appendChild(valueCell);
|
row.appendChild(valueCell);
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
function shortcutElementReplace(elt, img, text) {
|
function shortcutElementReplace(elt, img, text) {
|
||||||
imgElements = elt.getElementsByTagName("img")
|
// If more than one hyperlink element found,
|
||||||
for (i=0; i<imgElements.length; i++) {
|
// then keep the last one but with href of the first one.
|
||||||
if (i == 0) {
|
let aElements = elt.getElementsByTagName("a");
|
||||||
elt.getElementsByTagName("a")[0].classList.add("has_notif");
|
if (aElements.length > 1) {
|
||||||
|
aElements[aElements.length - 1].classList.add("has_notif");
|
||||||
|
aElements[aElements.length - 1].setAttribute("href", aElements[0].getAttribute("href"));
|
||||||
|
for (let i = aElements.length - 2; i >= 0; i --) {
|
||||||
|
aElements[i].remove();
|
||||||
}
|
}
|
||||||
imgElements[i].remove();
|
|
||||||
i --;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spanImageElement = document.createElement("span");
|
let spanImageElement = document.createElement("span");
|
||||||
spanImageElement.classList.add("shortcut_element_image");
|
spanImageElement.classList.add("shortcut_element_image");
|
||||||
|
|
||||||
imgElement = document.createElement("img");
|
let imgElement = document.createElement("img");
|
||||||
imgElement.setAttribute("src", chrome.runtime.getURL("images/"+img+".svg"));
|
imgElement.setAttribute("src", chrome.runtime.getURL("images/"+img+".svg"));
|
||||||
spanImageElement.appendChild(imgElement);
|
spanImageElement.appendChild(imgElement);
|
||||||
|
|
||||||
hyperlinkElement = elt.getElementsByTagName("a")[0];
|
aElements[0].textContent = "";
|
||||||
hyperlinkElement.textContent = "";
|
aElements[0].appendChild(spanImageElement);
|
||||||
hyperlinkElement.appendChild(spanImageElement);
|
|
||||||
|
|
||||||
if (text) {
|
if (text) {
|
||||||
spanDescElement = document.createElement("span");
|
let spanDescElement = document.createElement("span");
|
||||||
spanDescElement.classList.add("shortcut_element_desc");
|
spanDescElement.classList.add("shortcut_element_desc");
|
||||||
spanDescElement.textContent = text;
|
spanDescElement.textContent = text;
|
||||||
hyperlinkElement.appendChild(spanDescElement);
|
aElements[0].appendChild(spanDescElement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Improve main menu display */
|
/* Improve main menu display */
|
||||||
layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
let layCastleTopElements = document.getElementsByClassName("lay_castle_top");
|
||||||
if (layCastleTopElements.length == 1) {
|
if (layCastleTopElements.length === 1) {
|
||||||
document.getElementById("banner_skyscraper").remove();
|
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[0], "ranking", shortcutElements[0].textContent.replace(/[^0-9]/g, ""));
|
||||||
shortcutElementReplace(shortcutElements[1], "ally", "");
|
shortcutElementReplace(shortcutElements[1], "ally", "");
|
||||||
shortcutElementReplace(shortcutElements[2], "profile", "");
|
shortcutElementReplace(shortcutElements[2], "profile", "");
|
||||||
@@ -72,34 +75,33 @@ if (layCastleTopElements.length == 1) {
|
|||||||
shortcutElementReplace(shortcutElements[5], "tools", "");
|
shortcutElementReplace(shortcutElements[5], "tools", "");
|
||||||
shortcutElementReplace(shortcutElements[6], "favorites", "");
|
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[0].classList.add("shortcut_container_left");
|
||||||
shortcutContainers[2].classList.add("shortcut_container_right");
|
shortcutContainers[2].classList.add("shortcut_container_right");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display unit-points on user profile */
|
/* Display unit-points on user profile */
|
||||||
if (document.body.id === "info_player") {
|
if (document.body.id === "info_player") {
|
||||||
mainContentPane = document.getElementsByClassName("contentpane")[1];
|
let mainContentPane = document.getElementsByClassName("contentpane")[1];
|
||||||
borderLists = mainContentPane.getElementsByClassName("borderlist");
|
let borderLists = mainContentPane.getElementsByClassName("borderlist");
|
||||||
|
|
||||||
playerPropertiesTable = borderLists[0];
|
let playerPropertiesTable = borderLists[0];
|
||||||
playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
let playerPropertiesRows = playerPropertiesTable.getElementsByTagName("tr");
|
||||||
totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
let totalPoints = num(playerPropertiesRows[2].getElementsByTagName("td")[1].textContent);
|
||||||
villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
let villagesCount = num(playerPropertiesRows[4].getElementsByTagName("td")[1].textContent);
|
||||||
|
|
||||||
villagesTable = borderLists[1];
|
let villagesTable = borderLists[1];
|
||||||
villagesRows = villagesTable.getElementsByTagName("tr");
|
let villagesRows = villagesTable.getElementsByTagName("tr");
|
||||||
villagesPoints = 0;
|
let villagesPoints = 0;
|
||||||
for (i=1; i<villagesRows.length; i+=1) {
|
for (let i=1; i<villagesRows.length; i+=1) {
|
||||||
villagesPoints += num(villagesRows[i].getElementsByTagName("td")[2].textContent);
|
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) {
|
if (villagesCount > 0) {
|
||||||
armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %";
|
armyPercent = (Math.round(armyPoints / villagesCount) / 100).toString() + " %";
|
||||||
} else {
|
|
||||||
armyPercent = "-";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints)));
|
playerPropertiesTable.appendChild(createRow("Points troupes:", str(armyPoints)));
|
||||||
@@ -108,15 +110,16 @@ if (document.body.id === "info_player") {
|
|||||||
|
|
||||||
/* Display unit-points on village overview */
|
/* Display unit-points on village overview */
|
||||||
if (document.body.id === "overview") {
|
if (document.body.id === "overview") {
|
||||||
settlements = document.getElementById("settlement").textContent.split("|");
|
let settlements = document.getElementById("settlement").textContent.split("|");
|
||||||
noborderRows = document.getElementsByClassName("noborder");
|
let noBorderRows = document.getElementsByClassName("noborder");
|
||||||
for (i=0; i<noborderRows.length; i++) {
|
let villagePointsRow = noBorderRows[0];
|
||||||
if (noborderRows[i].textContent.startsWith("Points:")) {
|
for (let i=0; i<noBorderRows.length; i++) {
|
||||||
villagePointsRow = noborderRows[i];
|
if (noBorderRows[i].textContent.startsWith("Points:")) {
|
||||||
|
villagePointsRow = noBorderRows[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unitPointsRow = villagePointsRow.cloneNode(true);
|
let unitPointsRow = villagePointsRow.cloneNode(true);
|
||||||
villagePointsRow.getElementsByTagName("td")[1].textContent = "Points village: " + settlements[3];
|
villagePointsRow.getElementsByTagName("td")[1].textContent = "Points village: " + settlements[3];
|
||||||
unitPointsRow.getElementsByTagName("td")[1].textContent = "Points troupes: " + settlements[4];
|
unitPointsRow.getElementsByTagName("td")[1].textContent = "Points troupes: " + settlements[4];
|
||||||
villagePointsRow.after(unitPointsRow);
|
villagePointsRow.after(unitPointsRow);
|
||||||
|
|||||||
Reference in New Issue
Block a user