Compare commits

...

10 Commits

Author SHA1 Message Date
7d1d957ff3 fix(webui): incorect values for ability override request 2025-08-06 09:55:05 +02:00
4a2d863c9c chore(webui): update to Spanish translation (#2588)
Reviewed-on: OpenWF/SpaceNinjaServer#2588
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-08-05 10:18:36 -07:00
9f0cd91105 chore(webui): update German translation (#2587)
I need to double check some other time if it's also called "TennoLive" in German wf, once I'm home again. Should be prob good enough for now...

Reviewed-on: OpenWF/SpaceNinjaServer#2587
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
2025-08-05 09:47:25 -07:00
ebfef52fb1 fix(webui): proper PvPVariant check (#2585)
Closes #2584

Reviewed-on: OpenWF/SpaceNinjaServer#2585
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
2025-08-04 05:18:45 -07:00
dd7bacd22e chore: update PE+ (#2583)
Reviewed-on: OpenWF/SpaceNinjaServer#2583
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-03 15:37:06 -07:00
c00967931e fix(webui): add k-drive (#2581)
Closes #2580

Reviewed-on: OpenWF/SpaceNinjaServer#2581
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-02 04:57:16 -07:00
b15a635e11 fix(webui): exclude zaw strike pvp variants (#2579)
Reviewed-on: OpenWF/SpaceNinjaServer#2579
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-02 04:57:08 -07:00
7e618539fa fix(webui): explicitly specify websocket protocol (#2578)
apparently some browsers (e.g. 2 year old chrome) need this to establish a connection. can't hurt, anyway.

Reviewed-on: OpenWF/SpaceNinjaServer#2578
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-08-01 03:47:14 -07:00
a29398fae6 chore(webui): update Chinese translation (#2577)
Reviewed-on: OpenWF/SpaceNinjaServer#2577
Co-authored-by: Corvus <corvus@noreply.localhost>
Co-committed-by: Corvus <corvus@noreply.localhost>
2025-07-31 07:46:01 -07:00
601091f1c0 chore(webui): clarify that eidolon override also takes effect on deimos (#2576)
This is an update in the English translation only.

Reviewed-on: OpenWF/SpaceNinjaServer#2576
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-07-31 02:28:03 -07:00
10 changed files with 51 additions and 44 deletions

8
package-lock.json generated
View File

@ -23,7 +23,7 @@
"ncp": "^2.0.0", "ncp": "^2.0.0",
"typescript": "^5.5", "typescript": "^5.5",
"undici": "^7.10.0", "undici": "^7.10.0",
"warframe-public-export-plus": "^0.5.78", "warframe-public-export-plus": "^0.5.79",
"warframe-riven-info": "^0.1.2", "warframe-riven-info": "^0.1.2",
"winston": "^3.17.0", "winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0", "winston-daily-rotate-file": "^5.0.0",
@ -5507,9 +5507,9 @@
} }
}, },
"node_modules/warframe-public-export-plus": { "node_modules/warframe-public-export-plus": {
"version": "0.5.78", "version": "0.5.79",
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.78.tgz", "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.79.tgz",
"integrity": "sha512-Zvg7N+EdXS8cOAZIxqCbqiqyvQZBgh2xTxEwpHnoyJjNBpm3sP/7dtXmzHaxAZjyaCL4pvi9e7kTvxmpH8Pcag==" "integrity": "sha512-mPaFGX7bmSo1FP0xzo//vNCkbzMRz517NHiQB1ZU8gyoRm41IaGQ7/pFWCP8iY8KWbEMvPty4pj1hZtxsujCIA=="
}, },
"node_modules/warframe-riven-info": { "node_modules/warframe-riven-info": {
"version": "0.1.2", "version": "0.1.2",

View File

@ -40,7 +40,7 @@
"ncp": "^2.0.0", "ncp": "^2.0.0",
"typescript": "^5.5", "typescript": "^5.5",
"undici": "^7.10.0", "undici": "^7.10.0",
"warframe-public-export-plus": "^0.5.78", "warframe-public-export-plus": "^0.5.79",
"warframe-riven-info": "^0.1.2", "warframe-riven-info": "^0.1.2",
"winston": "^3.17.0", "winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0", "winston-daily-rotate-file": "^5.0.0",

View File

@ -153,18 +153,21 @@ const getItemListsController: RequestHandler = (req, response) => {
} }
for (const [uniqueName, item] of Object.entries(ExportWeapons)) { for (const [uniqueName, item] of Object.entries(ExportWeapons)) {
if (item.partType) { if (item.partType) {
if (!uniqueName.startsWith("/Lotus/Types/Items/Deimos/")) { if (!uniqueName.split("/")[7]?.startsWith("PvPVariant")) {
res.ModularParts.push({ // not a pvp variant
uniqueName, if (!uniqueName.startsWith("/Lotus/Types/Items/Deimos/")) {
name: getString(item.name, lang), res.ModularParts.push({
partType: item.partType uniqueName,
}); name: getString(item.name, lang),
} partType: item.partType
if (uniqueName.split("/")[5] != "SentTrainingAmplifier") { });
res.miscitems.push({ }
uniqueName: uniqueName, if (uniqueName.split("/")[5] != "SentTrainingAmplifier") {
name: getString(item.name, lang) res.miscitems.push({
}); uniqueName: uniqueName,
name: getString(item.name, lang)
});
}
} }
} else if (item.totalDamage !== 0) { } else if (item.totalDamage !== 0) {
if ( if (

View File

@ -388,11 +388,11 @@
<div class="card" style="height: 400px;"> <div class="card" style="height: 400px;">
<h5 class="card-header" data-loc="inventory_hoverboards"></h5> <h5 class="card-header" data-loc="inventory_hoverboards"></h5>
<div class="card-body overflow-auto"> <div class="card-body overflow-auto">
<form class="input-group mb-3" onsubmit="doAcquireModularEquipment('HoverBoards');return false;"> <form class="input-group mb-3" onsubmit="doAcquireModularEquipment('Hoverboards');return false;">
<input class="form-control" id="acquire-type-HoverBoards-HB_DECK" list="datalist-ModularParts-HB_DECK" /> <input class="form-control" id="acquire-type-Hoverboards-HB_DECK" list="datalist-ModularParts-HB_DECK" />
<input class="form-control" id="acquire-type-HoverBoards-HB_ENGINE" list="datalist-ModularParts-HB_ENGINE" /> <input class="form-control" id="acquire-type-Hoverboards-HB_ENGINE" list="datalist-ModularParts-HB_ENGINE" />
<input class="form-control" id="acquire-type-HoverBoards-HB_FRONT" list="datalist-ModularParts-HB_FRONT" /> <input class="form-control" id="acquire-type-Hoverboards-HB_FRONT" list="datalist-ModularParts-HB_FRONT" />
<input class="form-control" id="acquire-type-HoverBoards-HB_JET" list="datalist-ModularParts-HB_JET" /> <input class="form-control" id="acquire-type-Hoverboards-HB_JET" list="datalist-ModularParts-HB_JET" />
<button class="btn btn-primary" type="submit" data-loc="general_addButton"></button> <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
</form> </form>
<table class="table table-hover w-100"> <table class="table table-hover w-100">

View File

@ -28,7 +28,8 @@ const sendAuth = isRegister => {
}; };
function openWebSocket() { function openWebSocket() {
window.ws = new WebSocket("/custom/ws"); const wsProto = location.protocol === "https:" ? "wss://" : "ws://";
window.ws = new WebSocket(wsProto + location.host + "/custom/ws");
window.ws.onopen = () => { window.ws.onopen = () => {
ws_is_open = true; ws_is_open = true;
sendAuth(false); sendAuth(false);
@ -1290,7 +1291,10 @@ function updateInventory() {
abilityOverrideFormLabel.setAttribute("data-loc", "abilityOverride_label"); abilityOverrideFormLabel.setAttribute("data-loc", "abilityOverride_label");
abilityOverrideFormLabel.innerHTML = loc("abilityOverride_label"); abilityOverrideFormLabel.innerHTML = loc("abilityOverride_label");
abilityOverrideFormLabel.classList = "form-label"; abilityOverrideFormLabel.classList = "form-label";
abilityOverrideFormLabel.setAttribute("for", "abilityOverride-ability"); abilityOverrideFormLabel.setAttribute(
"for",
`abilityOverride-ability-config-${i}`
);
abilityOverrideForm.appendChild(abilityOverrideFormLabel); abilityOverrideForm.appendChild(abilityOverrideFormLabel);
const abilityOverrideInputGroup = document.createElement("div"); const abilityOverrideInputGroup = document.createElement("div");
@ -1298,7 +1302,7 @@ function updateInventory() {
abilityOverrideForm.appendChild(abilityOverrideInputGroup); abilityOverrideForm.appendChild(abilityOverrideInputGroup);
const abilityOverrideInput = document.createElement("input"); const abilityOverrideInput = document.createElement("input");
abilityOverrideInput.id = "abilityOverride-ability"; abilityOverrideInput.id = `abilityOverride-ability-config-${i}`;
abilityOverrideInput.classList = "form-control"; abilityOverrideInput.classList = "form-control";
abilityOverrideInput.setAttribute("list", "datalist-Abilities"); abilityOverrideInput.setAttribute("list", "datalist-Abilities");
if (config.AbilityOverride) { if (config.AbilityOverride) {
@ -1318,7 +1322,7 @@ function updateInventory() {
abilityOverrideInputGroup.appendChild(abilityOverrideOnSlot); abilityOverrideInputGroup.appendChild(abilityOverrideOnSlot);
const abilityOverrideSecondInput = document.createElement("input"); const abilityOverrideSecondInput = document.createElement("input");
abilityOverrideSecondInput.id = "abilityOverride-ability-index"; abilityOverrideSecondInput.id = `abilityOverride-ability-index-config-${i}`;
abilityOverrideSecondInput.classList = "form-control"; abilityOverrideSecondInput.classList = "form-control";
abilityOverrideSecondInput.setAttribute("type", "number"); abilityOverrideSecondInput.setAttribute("type", "number");
abilityOverrideSecondInput.setAttribute("min", "0"); abilityOverrideSecondInput.setAttribute("min", "0");
@ -3086,8 +3090,8 @@ function handleAbilityOverride(event, configIndex) {
event.preventDefault(); event.preventDefault();
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
const action = event.submitter.value; const action = event.submitter.value;
const Ability = getKey(document.getElementById("abilityOverride-ability")); const Ability = getKey(document.getElementById(`abilityOverride-ability-config-${configIndex}`));
const Index = document.getElementById("abilityOverride-ability-index").value; const Index = document.getElementById(`abilityOverride-ability-index-config-${configIndex}`).value;
revalidateAuthz().then(() => { revalidateAuthz().then(() => {
$.post({ $.post({
url: "/custom/abilityOverride?" + window.authz, url: "/custom/abilityOverride?" + window.authz,

View File

@ -242,11 +242,11 @@ dict = {
worldState_creditBoost: `Event Booster: Credit`, worldState_creditBoost: `Event Booster: Credit`,
worldState_affinityBoost: `Event Booster: Erfahrung`, worldState_affinityBoost: `Event Booster: Erfahrung`,
worldState_resourceBoost: `Event Booster: Ressourcen`, worldState_resourceBoost: `Event Booster: Ressourcen`,
worldState_tennoLiveRelay: `[UNTRANSLATED] TennoLive Relay`, worldState_tennoLiveRelay: `TennoLive Relais`,
worldState_baroTennoConRelay: `[UNTRANSLATED] Baro's TennoCon Relay`, worldState_baroTennoConRelay: `Baros TennoCon Relais`,
worldState_starDays: `Sternen-Tage`, worldState_starDays: `Sternen-Tage`,
worldState_galleonOfGhouls: `Galeone der Ghule`, worldState_galleonOfGhouls: `Galeone der Ghule`,
enabled: `[UNTRANSLATED] Enabled`, enabled: `Aktiviert`,
disabled: `Deaktiviert`, disabled: `Deaktiviert`,
worldState_we1: `Wochenende 1`, worldState_we1: `Wochenende 1`,
worldState_we2: `Wochenende 2`, worldState_we2: `Wochenende 2`,

View File

@ -250,9 +250,9 @@ dict = {
worldState_we1: `Weekend 1`, worldState_we1: `Weekend 1`,
worldState_we2: `Weekend 2`, worldState_we2: `Weekend 2`,
worldState_we3: `Weekend 3`, worldState_we3: `Weekend 3`,
worldState_eidolonOverride: `Eidolon Override`, worldState_eidolonOverride: `Eidolon/Deimos Override`,
worldState_day: `Day`, worldState_day: `Day/Fass`,
worldState_night: `Night`, worldState_night: `Night/Vome`,
worldState_vallisOverride: `Orb Vallis Override`, worldState_vallisOverride: `Orb Vallis Override`,
worldState_warm: `Warm`, worldState_warm: `Warm`,
worldState_cold: `Cold`, worldState_cold: `Cold`,

View File

@ -156,8 +156,8 @@ dict = {
invigorations_defensiveLabel: `Mejora Defensiva`, invigorations_defensiveLabel: `Mejora Defensiva`,
invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`, invigorations_expiryLabel: `Caducidad de Mejoras (opcional)`,
abilityOverride_label: `[UNTRANSLATED] Ability Override`, abilityOverride_label: `Anulación de Habilidad`,
abilityOverride_onSlot: `[UNTRANSLATED] on slot`, abilityOverride_onSlot: `en el espacio`,
mods_addRiven: `Agregar Agrietado`, mods_addRiven: `Agregar Agrietado`,
mods_fingerprint: `Huella digital`, mods_fingerprint: `Huella digital`,
@ -242,11 +242,11 @@ dict = {
worldState_creditBoost: `Potenciador de Créditos`, worldState_creditBoost: `Potenciador de Créditos`,
worldState_affinityBoost: `Potenciador de Afinidad`, worldState_affinityBoost: `Potenciador de Afinidad`,
worldState_resourceBoost: `Potenciador de Recursos`, worldState_resourceBoost: `Potenciador de Recursos`,
worldState_tennoLiveRelay: `[UNTRANSLATED] TennoLive Relay`, worldState_tennoLiveRelay: `Repetidor de TennoLive`,
worldState_baroTennoConRelay: `[UNTRANSLATED] Baro's TennoCon Relay`, worldState_baroTennoConRelay: `Repetidor de Baro de la TennoCon`,
worldState_starDays: `Días estelares`, worldState_starDays: `Días estelares`,
worldState_galleonOfGhouls: `Galeón de Gules`, worldState_galleonOfGhouls: `Galeón de Gules`,
enabled: `[UNTRANSLATED] Enabled`, enabled: `Activado`,
disabled: `Desactivado`, disabled: `Desactivado`,
worldState_we1: `Semana 1`, worldState_we1: `Semana 1`,
worldState_we2: `Semana 2`, worldState_we2: `Semana 2`,

View File

@ -251,9 +251,9 @@ dict = {
worldState_we1: `[UNTRANSLATED] Weekend 1`, worldState_we1: `[UNTRANSLATED] Weekend 1`,
worldState_we2: `[UNTRANSLATED] Weekend 2`, worldState_we2: `[UNTRANSLATED] Weekend 2`,
worldState_we3: `[UNTRANSLATED] Weekend 3`, worldState_we3: `[UNTRANSLATED] Weekend 3`,
worldState_eidolonOverride: `[UNTRANSLATED] Eidolon Override`, worldState_eidolonOverride: `[UNTRANSLATED] Eidolon/Deimos Override`,
worldState_day: `[UNTRANSLATED] Day`, worldState_day: `[UNTRANSLATED] Day/Fass`,
worldState_night: `[UNTRANSLATED] Night`, worldState_night: `[UNTRANSLATED] Night/Vome`,
worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`, worldState_vallisOverride: `[UNTRANSLATED] Orb Vallis Override`,
worldState_warm: `[UNTRANSLATED] Warm`, worldState_warm: `[UNTRANSLATED] Warm`,
worldState_cold: `[UNTRANSLATED] Cold`, worldState_cold: `[UNTRANSLATED] Cold`,

View File

@ -242,8 +242,8 @@ dict = {
worldState_creditBoost: `现金加成`, worldState_creditBoost: `现金加成`,
worldState_affinityBoost: `经验加成`, worldState_affinityBoost: `经验加成`,
worldState_resourceBoost: `资源加成`, worldState_resourceBoost: `资源加成`,
worldState_tennoLiveRelay: `TennoLive 中继站`, worldState_tennoLiveRelay: `TennoLive中继站`,
worldState_baroTennoConRelay: `[UNTRANSLATED] Baro's TennoCon Relay`, worldState_baroTennoConRelay: `Baro的TennoCon中继站`,
worldState_starDays: `活动:星日`, worldState_starDays: `活动:星日`,
worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`, worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`,
enabled: `启用`, enabled: `启用`,