Fill in language integration
This commit is contained in:
parent
fe201e4a39
commit
930ae80642
|
@ -32,7 +32,7 @@ for(const key of planet.resources.resources) {
|
||||||
<Image src="/images/resources/energy.png" alt="energy" class="icon" width={32} height={32} />
|
<Image src="/images/resources/energy.png" alt="energy" class="icon" width={32} height={32} />
|
||||||
<span class={`res-amount ${planet.energy.consumption > planet.energy.production ? "prod-full" : planet.energy.consumption >= (planet.energy.production * 0.9) ? "prod-almost-full" : ""}`}>{planet.energy.production - planet.energy.consumption}</span>
|
<span class={`res-amount ${planet.energy.consumption > planet.energy.production ? "prod-full" : planet.energy.consumption >= (planet.energy.production * 0.9) ? "prod-almost-full" : ""}`}>{planet.energy.production - planet.energy.consumption}</span>
|
||||||
<div class="resourcebar-item-tooltip">
|
<div class="resourcebar-item-tooltip">
|
||||||
<span class="resourcebar-item-tooltip-title">Energy</span>
|
<span class="resourcebar-item-tooltip-title">{getName(lang, 'resources', 'energy')}</span>
|
||||||
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'production')}</span><span class={`resourcebar-item-tooltip-amount`}>{planet.energy.production}</span>
|
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'production')}</span><span class={`resourcebar-item-tooltip-amount`}>{planet.energy.production}</span>
|
||||||
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'consumption')}</span><span class="resourcebar-item-tooltip-amount">{planet.energy.consumption}</span>
|
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'consumption')}</span><span class="resourcebar-item-tooltip-amount">{planet.energy.consumption}</span>
|
||||||
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'balance')}</span><span class={`resourcebar-item-tooltip-amount ${planet.energy.consumption > planet.energy.production ? "prod-full" : planet.energy.consumption >= (planet.energy.production * 0.9) ? "prod-almost-full" : ""}`}>{planet.energy.production - planet.energy.consumption}</span>
|
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'balance')}</span><span class={`resourcebar-item-tooltip-amount ${planet.energy.consumption > planet.energy.production ? "prod-full" : planet.energy.consumption >= (planet.energy.production * 0.9) ? "prod-almost-full" : ""}`}>{planet.energy.production - planet.energy.consumption}</span>
|
||||||
|
@ -42,7 +42,7 @@ for(const key of planet.resources.resources) {
|
||||||
<Image src="/images/resources/stellar-quartz.png" alt="stellar-quartz" class="icon" width={32} height={32} />
|
<Image src="/images/resources/stellar-quartz.png" alt="stellar-quartz" class="icon" width={32} height={32} />
|
||||||
<span class={`res-amount`}>0</span>
|
<span class={`res-amount`}>0</span>
|
||||||
<div class="resourcebar-item-tooltip">
|
<div class="resourcebar-item-tooltip">
|
||||||
<span class="resourcebar-item-tooltip-title">Stellar Quartz</span>
|
<span class="resourcebar-item-tooltip-title">{getName(lang, 'resources', 'stellar-quartz')}</span>
|
||||||
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'avaliable')}</span><span class={`resourcebar-item-tooltip-amount`}>0</span>
|
<span class="resourcebar-item-tooltip-name">{getName(lang, 'general', 'avaliable')}</span><span class={`resourcebar-item-tooltip-amount`}>0</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,6 +9,7 @@ export const getLang = async (language = "en") => {
|
||||||
resources: (await lang[3].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
resources: (await lang[3].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
||||||
research: (await lang[4].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
research: (await lang[4].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
||||||
structures: (await lang[5].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
structures: (await lang[5].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
||||||
defenses: (await lang[6].find({}).toArray()).map(({ _id, ...rest }) => rest)
|
defenses: (await lang[6].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
||||||
|
missions: (await lang[7].find({}).toArray()).map(({ _id, ...rest }) => rest),
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -91,7 +91,8 @@ export const Lang = async (language = "en") => {
|
||||||
await db.collection('resources'),
|
await db.collection('resources'),
|
||||||
await db.collection('research'),
|
await db.collection('research'),
|
||||||
await db.collection('structures'),
|
await db.collection('structures'),
|
||||||
await db.collection('defenses')
|
await db.collection('defenses'),
|
||||||
|
await db.collection('missions'),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,9 @@ export async function getLocales(language: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getName(locale: { [key: string]: { id: string, name: string }[] }, type: string, name: string) {
|
export function getName(locale: { [key: string]: { id: string, name: string }[] }, type: string, name: string) {
|
||||||
return locale[type].find((element: { id: string }) => element.id === name)?.name ?? `NTL_${name}`;
|
return locale[type]?.find((element: { id: string }) => element.id === name)?.name ?? `NTL_${name}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getObj(locale: { [key: string]: { id: string, name: string, description: string | null }[] }, type: string, name: string) {
|
export function getObj(locale: { [key: string]: { id: string, name: string, description: string | null }[] }, type: string, name: string) {
|
||||||
return locale[type].find((element: { id: string }) => element.id === name) ?? { id: name, name: `NTL_${name}`, description: `NTL_${name}` };
|
return locale[type]?.find((element: { id: string }) => element.id === name) ?? { id: name, name: `NTL_${name}`, description: `NTL_${name}` };
|
||||||
}
|
}
|
|
@ -15,15 +15,12 @@ const frontend = async (context: APIContext, next: MiddlewareNext) => {
|
||||||
const user = locationManager.getUser(checkUser._id);
|
const user = locationManager.getUser(checkUser._id);
|
||||||
if(user === null) return context.redirect('/logout');
|
if(user === null) return context.redirect('/logout');
|
||||||
|
|
||||||
const lang = await getLocales(context.cookies.get('language')?.value ?? await getHighestWeightedLanguage(context.request.headers.get('accept-language')));
|
|
||||||
|
|
||||||
const activeId = context.cookies.get('currentPlanet')?.value ?? "0";
|
const activeId = context.cookies.get('currentPlanet')?.value ?? "0";
|
||||||
const active = locationManager.findId(new ObjectId(activeId));
|
const active = locationManager.findId(new ObjectId(activeId));
|
||||||
|
|
||||||
if(active === null) return context.redirect('/logout');
|
if(active === null) return context.redirect('/logout');
|
||||||
|
|
||||||
context.locals.token = loggedToken;
|
context.locals.token = loggedToken;
|
||||||
context.locals.lang = lang;
|
|
||||||
context.locals.user = user;
|
context.locals.user = user;
|
||||||
context.locals.active = active;
|
context.locals.active = active;
|
||||||
|
|
||||||
|
@ -31,5 +28,10 @@ const frontend = async (context: APIContext, next: MiddlewareNext) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const onRequest = defineMiddleware(async (context, next) => {
|
export const onRequest = defineMiddleware(async (context, next) => {
|
||||||
|
if(context.url.pathname.startsWith('/api')) return next();
|
||||||
|
|
||||||
|
const lang = await getLocales(context.cookies.get('language')?.value ?? await getHighestWeightedLanguage(context.request.headers.get('accept-language')));
|
||||||
|
context.locals.lang = lang;
|
||||||
|
|
||||||
return context.url.pathname.startsWith('/game') ? frontend(context, next) : next();
|
return context.url.pathname.startsWith('/game') ? frontend(context, next) : next();
|
||||||
});
|
});
|
|
@ -60,12 +60,12 @@ const buildingsByCategory = buildingsList.reduce((acc: { [key: string]: Array<DB
|
||||||
<LoggedIn id="buildings" title="Buildings">
|
<LoggedIn id="buildings" title="Buildings">
|
||||||
<div id="building-modal-background">
|
<div id="building-modal-background">
|
||||||
<div id="building-modal-details" data-building-id="">
|
<div id="building-modal-details" data-building-id="">
|
||||||
<h3>Required resources</h3>
|
<h3>{getName(lang, 'general', 'required-resources')}</h3>
|
||||||
<div class="building-modal-text" id="building-modal-req-resources">None</div>
|
<div class="building-modal-text" id="building-modal-req-resources">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required buildings</h3>
|
<h3>{getName(lang, 'general', 'required-buildings')}</h3>
|
||||||
<div class="building-modal-text" id="building-modal-req-buildings">None</div>
|
<div class="building-modal-text" id="building-modal-req-buildings">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required research</h3>
|
<h3>{getName(lang, 'general', 'required-research')}</h3>
|
||||||
<div class="building-modal-text" id="building-modal-req-research">None</div>
|
<div class="building-modal-text" id="building-modal-req-research">{getName(lang, 'general', 'none')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{Object.entries(buildingsByCategory).map(([category, buildings]) => <>
|
{Object.entries(buildingsByCategory).map(([category, buildings]) => <>
|
||||||
|
@ -145,19 +145,21 @@ h1 {
|
||||||
if(!modalDiv) return;
|
if(!modalDiv) return;
|
||||||
modalDiv.style.display = 'block';
|
modalDiv.style.display = 'block';
|
||||||
|
|
||||||
|
const langNone = lang['general'].find(g => g.id === 'none').name;
|
||||||
|
|
||||||
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
||||||
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
||||||
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
||||||
|
|
||||||
modalResources.innerHTML = reqResources.length === 0 ? "None" : reqResources.map(resource => {
|
modalResources.innerHTML = reqResources.length === 0 ? langNone : reqResources.map(resource => {
|
||||||
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalBuildings.innerHTML = reqBuildings.length === 0 ? "None" : reqBuildings.map(building => {
|
modalBuildings.innerHTML = reqBuildings.length === 0 ? langNone : reqBuildings.map(building => {
|
||||||
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalResearch.innerHTML = reqResearch.length === 0 ? "None" : reqResearch.map(research => {
|
modalResearch.innerHTML = reqResearch.length === 0 ? langNone : reqResearch.map(research => {
|
||||||
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
import SystemManager from '../../lib/classes/managers/SystemManager';
|
||||||
import { getAllDefenses } from '../../lib/db/defenses';
|
import { getAllDefenses } from '../../lib/db/defenses';
|
||||||
import { getObj } from '../../lib/utils/langDriver';
|
import { getName, getObj } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
const { token, lang } = Astro.locals;
|
const { token, lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
const active: SystemManager | Planet = Astro.locals.active;
|
||||||
|
@ -47,12 +47,12 @@ const planetId = active instanceof SystemManager ? active.data._id : active._id;
|
||||||
<LoggedIn id="defenses" title="Defenses">
|
<LoggedIn id="defenses" title="Defenses">
|
||||||
<div id="ship-modal-background">
|
<div id="ship-modal-background">
|
||||||
<div id="ship-modal-details" data-building-id="">
|
<div id="ship-modal-details" data-building-id="">
|
||||||
<h3>Required resources</h3>
|
<h3>{getName(lang, 'general', 'required-resources')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-resources">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-resources">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required buildings</h3>
|
<h3>{getName(lang, 'general', 'required-buildings')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-buildings">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-buildings">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required research</h3>
|
<h3>{getName(lang, 'general', 'required-research')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-research">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-research">{getName(lang, 'general', 'none')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -120,19 +120,21 @@ const planetId = active instanceof SystemManager ? active.data._id : active._id;
|
||||||
if(!modalDiv) return;
|
if(!modalDiv) return;
|
||||||
modalDiv.style.display = 'block';
|
modalDiv.style.display = 'block';
|
||||||
|
|
||||||
|
const langNone = lang['general'].find(g => g.id === 'none').name;
|
||||||
|
|
||||||
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
||||||
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
||||||
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
||||||
|
|
||||||
modalResources.innerHTML = reqResources.length === 0 ? "None" : reqResources.map(resource => {
|
modalResources.innerHTML = reqResources.length === 0 ? langNone : reqResources.map(resource => {
|
||||||
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalBuildings.innerHTML = reqBuildings.length === 0 ? "None" : reqBuildings.map(building => {
|
modalBuildings.innerHTML = reqBuildings.length === 0 ? langNone : reqBuildings.map(building => {
|
||||||
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalResearch.innerHTML = reqResearch.length === 0 ? "None" : reqResearch.map(research => {
|
modalResearch.innerHTML = reqResearch.length === 0 ? langNone : reqResearch.map(research => {
|
||||||
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import LoggedIn from '../../layouts/LoggedIn.astro';
|
import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
import SystemManager from '../../lib/classes/managers/SystemManager';
|
||||||
|
import { getName } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
const { token, lang } = Astro.locals;
|
const { token, lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
const active: SystemManager | Planet = Astro.locals.active;
|
||||||
|
@ -31,13 +32,13 @@ const buildingsList = {
|
||||||
<form method="post" class="form-container">
|
<form method="post" class="form-container">
|
||||||
<table>
|
<table>
|
||||||
<tr class="table-col-header">
|
<tr class="table-col-header">
|
||||||
<th>Building name</th>
|
<th>{getName(lang, 'general', 'building-name')}</th>
|
||||||
<th>Level</th>
|
<th>{getName(lang, 'general', 'level')}</th>
|
||||||
<th>Production %</th>
|
<th>{getName(lang, 'general', 'production-percent')}</th>
|
||||||
<th>Production per hour</th>
|
<th>{getName(lang, 'general', 'production-per-hour')}</th>
|
||||||
<th>Energy usage</th>
|
<th>{getName(lang, 'general', 'energy-usage')}</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td colspan="5" class="table-separator">Mines</td></tr>
|
<tr><td colspan="5" class="table-separator">{getName(lang, 'buildings', 'cat-mines')}</td></tr>
|
||||||
{buildingsList.mines.map(building => <tr>
|
{buildingsList.mines.map(building => <tr>
|
||||||
<td>{building.data.id}</td>
|
<td>{building.data.id}</td>
|
||||||
<td>{building.level}</td>
|
<td>{building.level}</td>
|
||||||
|
@ -57,7 +58,7 @@ const buildingsList = {
|
||||||
<td>15</td>
|
<td>15</td>
|
||||||
<td class="red">-{building.level * building.data.energy}</td>
|
<td class="red">-{building.level * building.data.energy}</td>
|
||||||
</tr>)}
|
</tr>)}
|
||||||
<tr><td colspan="5" class="table-separator">Power plants</td></tr>
|
<tr><td colspan="5" class="table-separator">{getName(lang, 'buildings', 'cat-power-plants')}</td></tr>
|
||||||
{buildingsList.powerPlants.map(building => <tr>
|
{buildingsList.powerPlants.map(building => <tr>
|
||||||
<td>{building.data.id}</td>
|
<td>{building.data.id}</td>
|
||||||
<td>{building.level}</td>
|
<td>{building.level}</td>
|
||||||
|
@ -77,7 +78,7 @@ const buildingsList = {
|
||||||
<td></td>
|
<td></td>
|
||||||
<td class="green">+{building.level * building.data.energy}</td>
|
<td class="green">+{building.level * building.data.energy}</td>
|
||||||
</tr>)}
|
</tr>)}
|
||||||
<tr><td colspan="5" class="table-separator">Utilities</td></tr>
|
<tr><td colspan="5" class="table-separator">{getName(lang, 'buildings', 'cat-utilities')}</td></tr>
|
||||||
{buildingsList.utilities.map(building => <tr>
|
{buildingsList.utilities.map(building => <tr>
|
||||||
<td>{building.data.id}</td>
|
<td>{building.data.id}</td>
|
||||||
<td>{building.level}</td>
|
<td>{building.level}</td>
|
||||||
|
@ -85,7 +86,7 @@ const buildingsList = {
|
||||||
<td></td>
|
<td></td>
|
||||||
<td class="red">-{building.level * building.data.energy}</td>
|
<td class="red">-{building.level * building.data.energy}</td>
|
||||||
</tr>)}
|
</tr>)}
|
||||||
<tr><td colspan="5" class="table-separator">Storage</td></tr>
|
<tr><td colspan="5" class="table-separator">{getName(lang, 'buildings', 'cat-storage')}</td></tr>
|
||||||
{buildingsList.storage.map(building => <tr>
|
{buildingsList.storage.map(building => <tr>
|
||||||
<td>{building.data.id}</td>
|
<td>{building.data.id}</td>
|
||||||
<td>{building.level}</td>
|
<td>{building.level}</td>
|
||||||
|
@ -94,7 +95,7 @@ const buildingsList = {
|
||||||
<td class="red">-{building.level * building.data.energy}</td>
|
<td class="red">-{building.level * building.data.energy}</td>
|
||||||
</tr>)}
|
</tr>)}
|
||||||
</table>
|
</table>
|
||||||
<input type="submit" value="Save" class="save-button" />
|
<input type="submit" value={getName(lang, 'general', 'save')} class="save-button" />
|
||||||
</form>
|
</form>
|
||||||
</LoggedIn>
|
</LoggedIn>
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -114,7 +114,7 @@ const sectorsList = galaxies.map(galaxy => {
|
||||||
const discovered = discoveredSectors.find(s => s.systemId.equals(system.data._id));
|
const discovered = discoveredSectors.find(s => s.systemId.equals(system.data._id));
|
||||||
if(!discovered && !system.data.ownedBy.id.equals(user.id)) return {
|
if(!discovered && !system.data.ownedBy.id.equals(user.id)) return {
|
||||||
_id: system.data._id,
|
_id: system.data._id,
|
||||||
name: `${system.data.name} (not discovered)`,
|
name: `${system.data.name} ${getName(lang, 'general', 'not-discovered')}`,
|
||||||
planets: []
|
planets: []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,12 +133,25 @@ const sectorsList = galaxies.map(galaxy => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const langJS = {
|
||||||
|
noSectors: getName(lang, 'general', 'no-sectors'),
|
||||||
|
noSystems: getName(lang, 'general', 'no-systems'),
|
||||||
|
noPlanets: getName(lang, 'general', 'no-planets'),
|
||||||
|
atLeastOneShip: getName(lang, 'general', 'at-least-one-ship'),
|
||||||
|
sourceDestinationSame: getName(lang, 'general', 'source-destination-same'),
|
||||||
|
notEnoughFuel: getName(lang, 'general', 'not-enough-fuel'),
|
||||||
|
notEnoughSolidCargo: getName(lang, 'general', 'not-enough-solid-cargo'),
|
||||||
|
notEnoughLiquidCargo: getName(lang, 'general', 'not-enough-liquid-cargo'),
|
||||||
|
notEnoughGasCargo: getName(lang, 'general', 'not-enough-gas-cargo'),
|
||||||
|
notEnoughGasForFuel: getName(lang, 'general', 'not-enough-gas-for-fuel'),
|
||||||
|
}
|
||||||
---
|
---
|
||||||
<LoggedIn id="fleet" title="Fleet">
|
<LoggedIn id="fleet" title="Fleet">
|
||||||
<label for="fleet-toggle">
|
<label for="fleet-toggle">
|
||||||
<input type="checkbox" id="fleet-toggle">
|
<input type="checkbox" id="fleet-toggle">
|
||||||
<div class="fleet-status">
|
<div class="fleet-status">
|
||||||
<h2>Fleet status ({fleet.length} total | {own} own | {friendly} friendly | {enemy} enemy)</h2>
|
<h2>{getName(lang, 'general', 'fleet-status')} ({fleet.length} {getName(lang, 'general', 'total')} | {own} {getName(lang, 'general', 'own')} | {friendly} {getName(lang, 'general', 'friendly')} | {enemy} {getName(lang, 'general', 'enemy')})</h2>
|
||||||
<ul>
|
<ul>
|
||||||
{fleet.map(f => {
|
{fleet.map(f => {
|
||||||
const source = locationManager.findId(f.source);
|
const source = locationManager.findId(f.source);
|
||||||
|
@ -147,14 +160,14 @@ const sectorsList = galaxies.map(galaxy => {
|
||||||
return (<li>
|
return (<li>
|
||||||
<div class="ship-cards">
|
<div class="ship-cards">
|
||||||
<span style={`${source instanceof SystemManager && "color:red;"}`}>{(source instanceof SystemManager ? source.data.name : source?.name) ?? "?"}</span> => <span style={`${destination instanceof SystemManager && "color:red;"}`}>{(destination instanceof SystemManager ? destination.data.name : destination?.name) ?? "?"}</span> | {f.mission}{f.returning ? " (R)" : ""}<br />
|
<span style={`${source instanceof SystemManager && "color:red;"}`}>{(source instanceof SystemManager ? source.data.name : source?.name) ?? "?"}</span> => <span style={`${destination instanceof SystemManager && "color:red;"}`}>{(destination instanceof SystemManager ? destination.data.name : destination?.name) ?? "?"}</span> | {f.mission}{f.returning ? " (R)" : ""}<br />
|
||||||
Containing: {f.ships.map(s => {
|
{getName(lang, 'general', 'containing')}: {f.ships.map(s => {
|
||||||
const ship = ships.find(ship => ship.id === s.id);
|
const ship = ships.find(ship => ship.id === s.id);
|
||||||
return `${getName(lang, 'ships', s.id)} x${s.amount}`;
|
return `${getName(lang, 'ships', s.id)} x${s.amount}`;
|
||||||
}).join(', ')} <br />
|
}).join(', ')} <br />
|
||||||
Cargo: {typeof f.cargo === "undefined" || f.cargo.length === 0 ? <>None</> : f.cargo.map(c => `${c.amount} ${getName(lang, 'resources', c.id)}`).join(', ')} <br />
|
{getName(lang, 'general', 'cargo')}: {typeof f.cargo === "undefined" || f.cargo.length === 0 ? <>{getName(lang, 'general', 'none')}</> : f.cargo.map(c => `${c.amount} ${getName(lang, 'resources', c.id)}`).join(', ')} <br />
|
||||||
Departured at: {f.departureTime.toISOString()} <br />
|
{getName(lang, 'general', 'departued-at')}: {f.departureTime.toISOString()} <br />
|
||||||
Arrives: {f.arrivalTime.toISOString()} ({Math.floor((f.arrivalTime.getTime() - new Date().getTime()) / 1000)}) <br />
|
{getName(lang, 'general', 'arrives')}: {f.arrivalTime.toISOString()} ({Math.floor((f.arrivalTime.getTime() - new Date().getTime()) / 1000)}) <br />
|
||||||
<button class="revert" style={`${f.returning && "display: none;"}`} data-id={f._id.toString()}>Revert</button>
|
<button class="revert" style={`${f.returning && "display: none;"}`} data-id={f._id.toString()}>{getName(lang, 'general', 'revert')}</button>
|
||||||
</div>
|
</div>
|
||||||
</li>)
|
</li>)
|
||||||
})}
|
})}
|
||||||
|
@ -163,9 +176,9 @@ const sectorsList = galaxies.map(galaxy => {
|
||||||
</label>
|
</label>
|
||||||
<div class="fleet-send-container">
|
<div class="fleet-send-container">
|
||||||
<form method="post" id="send-fleet">
|
<form method="post" id="send-fleet">
|
||||||
<h1>Sending fleet from {active instanceof SystemManager ? active.data.name : active.name}</h1>
|
<h1>{getName(lang, 'general', 'sending-fleet-from')} {active instanceof SystemManager ? active.data.name : active.name}</h1>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Ships</h2>
|
<h2>{getName(lang, 'general', 'ships')}</h2>
|
||||||
<div class="fleet-send-ships">
|
<div class="fleet-send-ships">
|
||||||
{active.ships.ships.map(ship => <div class="fleet-ship-card">
|
{active.ships.ships.map(ship => <div class="fleet-ship-card">
|
||||||
<h3>{getName(lang, 'ships', ship.data.id)} - {ship.amount}</h3>
|
<h3>{getName(lang, 'ships', ship.data.id)} - {ship.amount}</h3>
|
||||||
|
@ -173,74 +186,74 @@ const sectorsList = galaxies.map(galaxy => {
|
||||||
</div>)}
|
</div>)}
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Mission</h2>
|
<h2>{getName(lang, 'general', 'mission')}</h2>
|
||||||
<label for="attack"><input type="radio" name="mission" value="ATTACK" id="attack" required />Attack</label>
|
<label for="attack"><input type="radio" name="mission" value="ATTACK" id="attack" required />{getName(lang, 'missions', 'ATTACK')}</label>
|
||||||
<label for="transport"><input type="radio" name="mission" value="TRANSPORT" id="transport" />Transport</label>
|
<label for="transport"><input type="radio" name="mission" value="TRANSPORT" id="transport" />{getName(lang, 'missions', 'TRANSPORT')}</label>
|
||||||
<label for="transfer"><input type="radio" name="mission" value="TRANSFER" id="transfer" />Transfer</label>
|
<label for="transfer"><input type="radio" name="mission" value="TRANSFER" id="transfer" />{getName(lang, 'missions', 'TRANSFER')}</label>
|
||||||
<label for="expedition"><input type="radio" name="mission" value="EXPEDITION" id="expedition" />Expedition</label>
|
<label for="expedition"><input type="radio" name="mission" value="EXPEDITION" id="expedition" />{getName(lang, 'missions', 'EXPEDITION')}</label>
|
||||||
<label for="spy"><input type="radio" name="mission" value="SPY" id="spy" />Spying</label>
|
<label for="spy"><input type="radio" name="mission" value="SPY" id="spy" />{getName(lang, 'missions', 'SPY')}</label>
|
||||||
<label for="colonize"><input type="radio" name="mission" value="COLONIZE" id="colonize" />Colonize</label>
|
<label for="colonize"><input type="radio" name="mission" value="COLONIZE" id="colonize" />{getName(lang, 'missions', 'COLONIZE')}</label>
|
||||||
<label><input type="checkbox" name="toSystem" />Send to system</label>
|
<label><input type="checkbox" name="toSystem" />{getName(lang, 'general', 'send-to-system')}</label>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Send to</h2>
|
<h2>{getName(lang, 'general', 'send-to')}</h2>
|
||||||
<div class="fleet-destination">
|
<div class="fleet-destination">
|
||||||
<div>
|
<div>
|
||||||
<h3>Galaxy</h3>
|
<h3>{getName(lang, 'general', 'galaxy')}</h3>
|
||||||
<select id="destination-galaxy" name="destination-galaxy">
|
<select id="destination-galaxy" name="destination-galaxy">
|
||||||
{galaxies.map(galaxy => <option value={galaxy._id.toString()}>{galaxy.name}</option>)}
|
{galaxies.map(galaxy => <option value={galaxy._id.toString()}>{galaxy.name}</option>)}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3>Sector</h3>
|
<h3>{getName(lang, 'general', 'sector')}</h3>
|
||||||
<select id="destination-sector" name="destination-sector"></select>
|
<select id="destination-sector" name="destination-sector"></select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3>System</h3>
|
<h3>{getName(lang, 'general', 'system')}</h3>
|
||||||
<select id="destination-system" name="destination-system"></select>
|
<select id="destination-system" name="destination-system"></select>
|
||||||
<div id="destination-system-error"></div>
|
<div id="destination-system-error"></div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3>Planet</h3>
|
<h3>{getName(lang, 'general', 'planet')}</h3>
|
||||||
<select id="destination-planet" name="destination-planet"></select>
|
<select id="destination-planet" name="destination-planet"></select>
|
||||||
<div id="destination-planet-error"></div>
|
<div id="destination-planet-error"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Cargo</h2>
|
<h2>{getName(lang, 'general', 'cargo')}</h2>
|
||||||
<div id="cargo-available">
|
<div id="cargo-available">
|
||||||
Solid: <span id="available-solid">0</span><br />
|
{getName(lang, 'general', 'solid')}: <span id="available-solid">0</span><br />
|
||||||
Liquid: <span id="available-liquid">0</span><br />
|
{getName(lang, 'general', 'liquid')}: <span id="available-liquid">0</span><br />
|
||||||
Gas: <span id="available-gas">0</span><br />
|
{getName(lang, 'general', 'gas')}: <span id="available-gas">0</span><br />
|
||||||
</div>
|
</div>
|
||||||
<div class="cargo-container" id="cargo-container">
|
<div class="cargo-container" id="cargo-container">
|
||||||
<div class="cargo-item">
|
<div class="cargo-item">
|
||||||
<select name="cargo[0][id]" class="select">
|
<select name="cargo[0][id]" class="select">
|
||||||
<option value="coal">Coal</option>
|
<option value="coal">{getName(lang, 'resources', 'coal')}</option>
|
||||||
<option value="iron">Iron</option>
|
<option value="iron">{getName(lang, 'resources', 'iron')}</option>
|
||||||
<option value="gold">Gold</option>
|
<option value="gold">{getName(lang, 'resources', 'gold')}</option>
|
||||||
<option value="water">Water</option>
|
<option value="water">{getName(lang, 'resources', 'water')}</option>
|
||||||
<option value="sulfuric-acid">Sulfuric Acid</option>
|
<option value="sulfuric-acid">{getName(lang, 'resources', 'sulfuric-acid')}</option>
|
||||||
<option value="liquid-nitrogen">Liquid Nitrogen</option>
|
<option value="liquid-nitrogen">{getName(lang, 'resources', 'liquid-nitrogen')}</option>
|
||||||
<option value="hydrogen">Hydrogen</option>
|
<option value="hydrogen">{getName(lang, 'resources', 'hydrogen')}</option>
|
||||||
<option value="oxygen">Oxygen</option>
|
<option value="oxygen">{getName(lang, 'resources', 'oxygen')}</option>
|
||||||
<option value="helium-3">Helium-3</option>
|
<option value="helium-3">{getName(lang, 'resources', 'helium-3')}</option>
|
||||||
</select>
|
</select>
|
||||||
<input type="number" name="cargo[0][amount]" class="input" />
|
<input type="number" name="cargo[0][amount]" class="input" />
|
||||||
<button type="button" class="cargo-sendall" name="cargo[0][all]">All</button>
|
<button type="button" class="cargo-sendall" name="cargo[0][all]">{getName(lang, 'general', 'all')}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="cargo-add-new">Add new +</div>
|
<div id="cargo-add-new">{getName(lang, 'general', 'add-new')} +</div>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Fuel consumption</h2>
|
<h2>{getName(lang, 'general', 'fuel-consumption')}</h2>
|
||||||
<div>Base usage from ships: <span id="fuel-consumption">0</span></div>
|
<div>{getName(lang, 'general', 'base-usage-from-ships')}: <span id="fuel-consumption">0</span></div>
|
||||||
<div>Distance: <span id="fuel-consumption-distance">0</span></div>
|
<div>{getName(lang, 'general', 'distance')}: <span id="fuel-consumption-distance">0</span></div>
|
||||||
<div><span id="fuel-consumption-required">0</span> hydrogen will be added to cargo as fuel</div>
|
<div><span id="fuel-consumption-required">0</span> {getName(lang, 'general', 'hydrogen-as-fuel')}</div>
|
||||||
<hr />
|
<hr />
|
||||||
<h2>Estimates</h2>
|
<h2>{getName(lang, 'general', 'estimates')}</h2>
|
||||||
<div>Fleet will arrive at destination at: <span id="arrival-time"></span></div>
|
<div>{getName(lang, 'general', 'fleet-arrive-at')}: <span id="arrival-time"></span></div>
|
||||||
<div>Fleet will return at: <span id="return-time"></span></div>
|
<div>{getName(lang, 'general', 'fleet-return-at')}: <span id="return-time"></span></div>
|
||||||
<hr />
|
<hr />
|
||||||
<button type="submit">Send fleet</button>
|
<button type="submit">{getName(lang, 'general', 'send-fleet')}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</LoggedIn>
|
</LoggedIn>
|
||||||
|
@ -376,7 +389,7 @@ label {
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script define:vars={{ lang, sectorsList, url, ships, activeId }}>
|
<script define:vars={{ lang, sectorsList, url, ships, activeId, langJS }}>
|
||||||
const revertButtons = document.querySelectorAll('.revert');
|
const revertButtons = document.querySelectorAll('.revert');
|
||||||
const destinationGalaxy = document.getElementById('destination-galaxy');
|
const destinationGalaxy = document.getElementById('destination-galaxy');
|
||||||
const destinationSector = document.getElementById('destination-sector');
|
const destinationSector = document.getElementById('destination-sector');
|
||||||
|
@ -421,7 +434,7 @@ label {
|
||||||
if(destinationSector.children.length === 0) {
|
if(destinationSector.children.length === 0) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No sectors';
|
opt.innerText = langJS.noSectors;
|
||||||
destinationSector.appendChild(opt);
|
destinationSector.appendChild(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,10 +460,10 @@ label {
|
||||||
if(destinationSystem.children.length === 0) {
|
if(destinationSystem.children.length === 0) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No systems';
|
opt.innerText = langJS.noSystems;
|
||||||
destinationSystem.appendChild(opt);
|
destinationSystem.appendChild(opt);
|
||||||
|
|
||||||
document.getElementById('destination-system-error').innerHTML = "No systems";
|
document.getElementById('destination-system-error').innerHTML = langJS.noSystems;
|
||||||
}
|
}
|
||||||
|
|
||||||
destinationSystem.dispatchEvent(new Event('change'));
|
destinationSystem.dispatchEvent(new Event('change'));
|
||||||
|
@ -470,7 +483,7 @@ label {
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No planets';
|
opt.innerText = 'No planets';
|
||||||
destinationPlanet.appendChild(opt);
|
destinationPlanet.appendChild(opt);
|
||||||
document.getElementById('destination-planet-error').innerHTML = "No planets";
|
document.getElementById('destination-planet-error').innerHTML = langJS.noPlanets;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,7 +500,7 @@ label {
|
||||||
if(destinationPlanet.children.length === 0) {
|
if(destinationPlanet.children.length === 0) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No planets';
|
opt.innerText = langJS.noPlanets;
|
||||||
destinationPlanet.appendChild(opt);
|
destinationPlanet.appendChild(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,14 +597,14 @@ label {
|
||||||
|
|
||||||
// at least one ship
|
// at least one ship
|
||||||
if(Array.from(shipInputs).reduce((acc, cur) => acc + parseInt(cur.value), 0) === 0) {
|
if(Array.from(shipInputs).reduce((acc, cur) => acc + parseInt(cur.value), 0) === 0) {
|
||||||
alert('You need to send at least one ship');
|
alert(langJS.atLeastOneShip);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// source === destination
|
// source === destination
|
||||||
const destinationId = document.querySelector('input[name="toSystem"]').checked ? document.getElementById('destination-system').value : document.getElementById('destination-planet').value;
|
const destinationId = document.querySelector('input[name="toSystem"]').checked ? document.getElementById('destination-system').value : document.getElementById('destination-planet').value;
|
||||||
if(destinationId === activeId) {
|
if(destinationId === activeId) {
|
||||||
alert('Source and destination cannot be the same');
|
alert(langJS.sourceDestinationSame);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,7 +613,7 @@ label {
|
||||||
const storedFuel = parseInt(document.getElementById('resource-hydrogen').dataset.resAmount);
|
const storedFuel = parseInt(document.getElementById('resource-hydrogen').dataset.resAmount);
|
||||||
|
|
||||||
if(storedFuel < requiredFuel) {
|
if(storedFuel < requiredFuel) {
|
||||||
alert('Not enough fuel in storage');
|
alert(langJS.notEnoughFuel);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,22 +649,22 @@ label {
|
||||||
const cargoGasCapacity = document.getElementById('available-gas').innerText;
|
const cargoGasCapacity = document.getElementById('available-gas').innerText;
|
||||||
|
|
||||||
if(cargoSolidStored > cargoSolidCapacity) {
|
if(cargoSolidStored > cargoSolidCapacity) {
|
||||||
alert('Not enough solid capacity in ships');
|
alert(langJS.notEnoughSolidCargo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cargoLiquidStored > cargoLiquidCapacity) {
|
if(cargoLiquidStored > cargoLiquidCapacity) {
|
||||||
alert('Not enough liquid capacity in ships');
|
alert(langJS.notEnoughLiquidCargo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cargoGasStored > cargoGasCapacity) {
|
if(cargoGasStored > cargoGasCapacity) {
|
||||||
alert('Not enough gas capacity in ships');
|
alert(langJS.notEnoughGasCargo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((cargoGasStored + requiredFuel) > cargoGasCapacity) {
|
if((cargoGasStored + requiredFuel) > cargoGasCapacity) {
|
||||||
alert('Not enough gas capacity in ships for fuel');
|
alert(langJS.notEnoughGasForFuel);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,9 @@ import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import locationManager from '../../lib/classes/managers/LocationManager';
|
import locationManager from '../../lib/classes/managers/LocationManager';
|
||||||
import User from '../../lib/classes/User';
|
import User from '../../lib/classes/User';
|
||||||
import { getUserSpyReports } from '../../lib/db/users';
|
import { getUserSpyReports } from '../../lib/db/users';
|
||||||
|
import { getName } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
const user: User = Astro.locals.user;
|
const user: User = Astro.locals.user;
|
||||||
|
|
||||||
const allGalaxies = locationManager.galaxies;
|
const allGalaxies = locationManager.galaxies;
|
||||||
|
@ -34,8 +36,8 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
const system = locationManager.getSystem(spy.systemId);
|
const system = locationManager.getSystem(spy.systemId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
username: user?.username ?? "Unknown",
|
username: user?.username ?? getName(lang, 'general', 'unknown'),
|
||||||
systemName: system?.data.name ?? "Unknown",
|
systemName: system?.data.name ?? getName(lang, 'general', 'unknown'),
|
||||||
sectorId: system?.data.sector._id.toString(),
|
sectorId: system?.data.sector._id.toString(),
|
||||||
scannedAt: spy.scannedAt,
|
scannedAt: spy.scannedAt,
|
||||||
research: spy.research,
|
research: spy.research,
|
||||||
|
@ -50,7 +52,7 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
id: planet._id.toString(),
|
id: planet._id.toString(),
|
||||||
name: planet.name,
|
name: planet.name,
|
||||||
scanned: spy.planets.find(p => p.id.equals(planet._id))?.scanned ?? false,
|
scanned: spy.planets.find(p => p.id.equals(planet._id))?.scanned ?? false,
|
||||||
scannedAt: report?.scannedAt ?? "Unknown",
|
scannedAt: report?.scannedAt ?? getName(lang, 'general', 'unknown'),
|
||||||
resources: report?.resources ?? [],
|
resources: report?.resources ?? [],
|
||||||
buildings: report?.buildings ?? [],
|
buildings: report?.buildings ?? [],
|
||||||
ships: report?.ships ?? [],
|
ships: report?.ships ?? [],
|
||||||
|
@ -59,40 +61,47 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const langJS = {
|
||||||
|
scanned: getName(lang, 'general', 'scanned'),
|
||||||
|
notScanned: getName(lang, 'general', 'not-scanned'),
|
||||||
|
buildings: getName(lang, 'general', 'buildings'),
|
||||||
|
structures: getName(lang, 'general', 'structures'),
|
||||||
|
}
|
||||||
---
|
---
|
||||||
<LoggedIn id="galaxyView" title="Galaxy view">
|
<LoggedIn id="galaxyView" title="Galaxy view">
|
||||||
<div id="report-modal-background">
|
<div id="report-modal-background">
|
||||||
<div id="report-modal-details">
|
<div id="report-modal-details">
|
||||||
<h3>Spy report from <span id="report-modal-date"></span> at <span id="report-modal-name"></span></h3>
|
<h3>{getName(lang, 'general', 'spy-report-from')} <span id="report-modal-date"></span> {getName(lang, 'general', 'at')} <span id="report-modal-name"></span></h3>
|
||||||
<div id="report-modal-content">
|
<div id="report-modal-content">
|
||||||
<div class="report-modal-row">
|
<div class="report-modal-row">
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
<h3>Resources:</h3>
|
<h3>{getName(lang, 'general', 'resources')}:</h3>
|
||||||
<div id="report-modal-resources"></div>
|
<div id="report-modal-resources"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
<h3 id="report-modal-structure-title">Structures:</h3>
|
<h3 id="report-modal-structure-title">{getName(lang, 'general', 'structures')}:</h3>
|
||||||
<div id="report-modal-structures"></div>
|
<div id="report-modal-structures"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="report-modal-row">
|
<div class="report-modal-row">
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
|
|
||||||
<h3>Ships:</h3>
|
<h3>{getName(lang, 'general', 'ships')}:</h3>
|
||||||
<div id="report-modal-ships"></div>
|
<div id="report-modal-ships"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
<h3>Defense:</h3>
|
<h3>{getName(lang, 'general', 'defense')}:</h3>
|
||||||
<div id="report-modal-defense"></div>
|
<div id="report-modal-defense"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="report-modal-row" id="report-modal-row-systeminfo">
|
<div class="report-modal-row" id="report-modal-row-systeminfo">
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
<h3>Research:</h3>
|
<h3>{getName(lang, 'general', 'research')}:</h3>
|
||||||
<div id="report-modal-research"></div>
|
<div id="report-modal-research"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="report-modal-card">
|
<div class="report-modal-card">
|
||||||
<h3>Planets:</h3>
|
<h3>{getName(lang, 'general', 'planets')}:</h3>
|
||||||
<div id="report-modal-planets"></div>
|
<div id="report-modal-planets"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -221,7 +230,7 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
width: 45%;
|
width: 45%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script define:vars={{ spyReports }}>
|
<script define:vars={{ spyReports, langJS }}>
|
||||||
function gvinit() {
|
function gvinit() {
|
||||||
const galaxyIcons = document.querySelectorAll('.galaxy-icon');
|
const galaxyIcons = document.querySelectorAll('.galaxy-icon');
|
||||||
const sidebarDetails = document.querySelector('.sidebar-details');
|
const sidebarDetails = document.querySelector('.sidebar-details');
|
||||||
|
@ -256,7 +265,7 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
|
|
||||||
report.planets.forEach(planet => {
|
report.planets.forEach(planet => {
|
||||||
const planetDiv = document.createElement('div');
|
const planetDiv = document.createElement('div');
|
||||||
planetDiv.innerText = `${planet.name} - ${planet.scanned ? "Scanned" : "Not scanned"}`;
|
planetDiv.innerText = `${planet.name} - ${planet.scanned ? langJS.scanned : langJS.notScanned}`;
|
||||||
planetDiv.classList.add('sidebar-planet');
|
planetDiv.classList.add('sidebar-planet');
|
||||||
|
|
||||||
planetDiv.addEventListener('click', () => {
|
planetDiv.addEventListener('click', () => {
|
||||||
|
@ -270,7 +279,7 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
document.getElementById('report-modal-date').innerHTML = planet.scannedAt;
|
document.getElementById('report-modal-date').innerHTML = planet.scannedAt;
|
||||||
document.getElementById('report-modal-name').innerHTML = planet.name;
|
document.getElementById('report-modal-name').innerHTML = planet.name;
|
||||||
document.getElementById('report-modal-resources').innerHTML = planet.resources.map(res => `${res.id}: ${res.amount}`).join('<br>');
|
document.getElementById('report-modal-resources').innerHTML = planet.resources.map(res => `${res.id}: ${res.amount}`).join('<br>');
|
||||||
document.getElementById('report-modal-structure-title').innerHTML = "Buildings:";
|
document.getElementById('report-modal-structure-title').innerHTML = `${langJS.buildings}:`;
|
||||||
document.getElementById('report-modal-structures').innerHTML = planet.buildings.map(str => `${str.id}: ${str.level}`).join('<br>');
|
document.getElementById('report-modal-structures').innerHTML = planet.buildings.map(str => `${str.id}: ${str.level}`).join('<br>');
|
||||||
document.getElementById('report-modal-ships').innerHTML = planet.ships.map(ship => `${ship.id}: ${ship.amount}`).join('<br>');
|
document.getElementById('report-modal-ships').innerHTML = planet.ships.map(ship => `${ship.id}: ${ship.amount}`).join('<br>');
|
||||||
document.getElementById('report-modal-defense').innerHTML = planet.defense.map(def => `${def.id}: ${def.amount}`).join('<br>');
|
document.getElementById('report-modal-defense').innerHTML = planet.defense.map(def => `${def.id}: ${def.amount}`).join('<br>');
|
||||||
|
@ -295,7 +304,7 @@ const spyReports = spyReportsDB.map(spy => {
|
||||||
document.getElementById('report-modal-name').innerHTML = report.systemName;
|
document.getElementById('report-modal-name').innerHTML = report.systemName;
|
||||||
document.getElementById('report-modal-research').innerHTML = report.research.map(res => `${res.id}: ${res.level}`).join('<br>');
|
document.getElementById('report-modal-research').innerHTML = report.research.map(res => `${res.id}: ${res.level}`).join('<br>');
|
||||||
document.getElementById('report-modal-resources').innerHTML = report.resources.map(res => `${res.id}: ${res.amount}`).join('<br>');
|
document.getElementById('report-modal-resources').innerHTML = report.resources.map(res => `${res.id}: ${res.amount}`).join('<br>');
|
||||||
document.getElementById('report-modal-structure-title').innerHTML = "Structures:";
|
document.getElementById('report-modal-structure-title').innerHTML = `${langJS.structures}:`;
|
||||||
document.getElementById('report-modal-structures').innerHTML = report.structures.map(str => `${str.id}: ${str.level}`).join('<br>');
|
document.getElementById('report-modal-structures').innerHTML = report.structures.map(str => `${str.id}: ${str.level}`).join('<br>');
|
||||||
document.getElementById('report-modal-ships').innerHTML = report.ships.map(ship => `${ship.id}: ${ship.amount}`).join('<br>');
|
document.getElementById('report-modal-ships').innerHTML = report.ships.map(ship => `${ship.id}: ${ship.amount}`).join('<br>');
|
||||||
document.getElementById('report-modal-defense').innerHTML = report.defense.map(def => `${def.id}: ${def.amount}`).join('<br>');
|
document.getElementById('report-modal-defense').innerHTML = report.defense.map(def => `${def.id}: ${def.amount}`).join('<br>');
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
import LoggedIn from '../../layouts/LoggedIn.astro';
|
import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
import SystemManager from '../../lib/classes/managers/SystemManager';
|
||||||
|
import { getName } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
const active: SystemManager | Planet = Astro.locals.active;
|
||||||
---
|
---
|
||||||
<LoggedIn id="overview" title="Overview">
|
<LoggedIn id="overview" title="Overview">
|
||||||
<h1>{active instanceof SystemManager ? `${active.data.name} system` : `${active.name} in ${active.system.data.name}`}</h1>
|
<h1>{active instanceof SystemManager ? `${active.data.name} ${getName(lang, 'general', 'system')}` : `${active.name} ${getName(lang, 'general', 'at')} ${active.system.data.name}`}</h1>
|
||||||
</LoggedIn>
|
</LoggedIn>
|
||||||
<style>
|
<style>
|
||||||
h1 {
|
h1 {
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
---
|
---
|
||||||
import LoggedIn from '../../layouts/LoggedIn.astro';
|
import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import locationManager from '../../lib/classes/managers/LocationManager';
|
import locationManager from '../../lib/classes/managers/LocationManager';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
|
||||||
import { getMailsByTo } from '../../lib/db/mails';
|
import { getMailsByTo } from '../../lib/db/mails';
|
||||||
|
import { getName } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
const { user, token, lang } = Astro.locals;
|
const { user, lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
|
||||||
|
|
||||||
const mails = (await getMailsByTo(user.id)).sort((a, b) => b.date.getTime() - a.date.getTime());
|
const mails = (await getMailsByTo(user.id)).sort((a, b) => b.date.getTime() - a.date.getTime());
|
||||||
---
|
---
|
||||||
<LoggedIn id="mail" title="Mail">
|
<LoggedIn id="mail" title="Mail">
|
||||||
{mails.map(mail => <div class="mail-card">
|
{mails.map(mail => <div class="mail-card">
|
||||||
<h1>{!mail.read && "(NEW) "}{mail.subject} | from: {mail.from === null ? "SYSTEM" : locationManager.getUser(mail.from)?.username ?? "Unknown"}</h1>
|
<h1>{!mail.read && `${getName(lang, 'general', 'mail-new')} `}{mail.subject} | {getName(lang, 'general', 'from')}: {mail.from === null ? getName(lang, 'general', 'mail-system') : locationManager.getUser(mail.from)?.username ?? getName(lang, 'general', 'unknown')}</h1>
|
||||||
<p>{mail.date.toLocaleString()}</p>
|
<p>{mail.date.toLocaleString()}</p>
|
||||||
<hr />
|
<hr />
|
||||||
<p style="white-space: pre-line">{mail.body}</p>
|
<p style="white-space: pre-line">{mail.body}</p>
|
||||||
|
|
|
@ -5,7 +5,7 @@ import User from '../../lib/classes/User';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
import SystemManager from '../../lib/classes/managers/SystemManager';
|
||||||
import { getAllResearch } from '../../lib/db/research';
|
import { getAllResearch } from '../../lib/db/research';
|
||||||
import { getObj } from '../../lib/utils/langDriver';
|
import { getName, getObj } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
const { token, lang } = Astro.locals;
|
const { token, lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
const active: SystemManager | Planet = Astro.locals.active;
|
||||||
|
@ -45,12 +45,12 @@ for(const research of researchList) {
|
||||||
<LoggedIn id="research" title="Research">
|
<LoggedIn id="research" title="Research">
|
||||||
<div id="research-modal-background">
|
<div id="research-modal-background">
|
||||||
<div id="research-modal-details" data-building-id="">
|
<div id="research-modal-details" data-building-id="">
|
||||||
<h3>Required resources</h3>
|
<h3>{getName(lang, 'general', 'required-resources')}</h3>
|
||||||
<div class="research-modal-text" id="research-modal-req-resources">None</div>
|
<div class="research-modal-text" id="research-modal-req-resources">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required buildings</h3>
|
<h3>{getName(lang, 'general', 'required-buildings')}</h3>
|
||||||
<div class="research-modal-text" id="research-modal-req-buildings">None</div>
|
<div class="research-modal-text" id="research-modal-req-buildings">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required research</h3>
|
<h3>{getName(lang, 'general', 'required-research')}</h3>
|
||||||
<div class="research-modal-text" id="research-modal-req-research">None</div>
|
<div class="research-modal-text" id="research-modal-req-research">{getName(lang, 'general', 'none')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="research-cards">
|
<div class="research-cards">
|
||||||
|
@ -59,7 +59,7 @@ for(const research of researchList) {
|
||||||
category="research"
|
category="research"
|
||||||
id={research.id}
|
id={research.id}
|
||||||
name={getObj(lang, "research", research.id).name}
|
name={getObj(lang, "research", research.id).name}
|
||||||
level={research.onetime === true ? user.research.getResearchById(research.id)?.level === 1 ? "Researched" : "Not researched" : user.research.getResearchById(research.id)?.level.toString() ?? "0"}
|
level={research.onetime === true ? user.research.getResearchById(research.id)?.level === 1 ? getName(lang, 'general', 'researched') : getName(lang, 'general', 'not-researched') : user.research.getResearchById(research.id)?.level.toString() ?? "0"}
|
||||||
description={getObj(lang, "research", research.id).description ?? ""}
|
description={getObj(lang, "research", research.id).description ?? ""}
|
||||||
image={`/images/research/${research.id}.jpeg`}
|
image={`/images/research/${research.id}.jpeg`}
|
||||||
button_type="general"
|
button_type="general"
|
||||||
|
@ -115,21 +115,21 @@ for(const research of researchList) {
|
||||||
if(!modalDiv) return;
|
if(!modalDiv) return;
|
||||||
modalDiv.style.display = 'block';
|
modalDiv.style.display = 'block';
|
||||||
|
|
||||||
console.log(modalSet)
|
const langNone = lang['general'].find(g => g.id === 'none').name;
|
||||||
|
|
||||||
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
||||||
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
||||||
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
||||||
|
|
||||||
modalResources.innerHTML = reqResources.length === 0 ? "None" : reqResources.map(resource => {
|
modalResources.innerHTML = reqResources.length === 0 ? langNone : reqResources.map(resource => {
|
||||||
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalBuildings.innerHTML = reqBuildings.length === 0 ? "None" : reqBuildings.map(building => {
|
modalBuildings.innerHTML = reqBuildings.length === 0 ? langNone : reqBuildings.map(building => {
|
||||||
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalResearch.innerHTML = reqResearch.length === 0 ? "None" : reqResearch.map(research => {
|
modalResearch.innerHTML = reqResearch.length === 0 ? langNone : reqResearch.map(research => {
|
||||||
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import LoggedIn from '../../layouts/LoggedIn.astro';
|
||||||
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
import { Planet } from '../../lib/classes/managers/PlanetManager';
|
||||||
import SystemManager from '../../lib/classes/managers/SystemManager';
|
import SystemManager from '../../lib/classes/managers/SystemManager';
|
||||||
import { getAllShips } from '../../lib/db/ships';
|
import { getAllShips } from '../../lib/db/ships';
|
||||||
import { getObj } from '../../lib/utils/langDriver';
|
import { getName, getObj } from '../../lib/utils/langDriver';
|
||||||
|
|
||||||
const { token, lang } = Astro.locals;
|
const { token, lang } = Astro.locals;
|
||||||
const active: SystemManager | Planet = Astro.locals.active;
|
const active: SystemManager | Planet = Astro.locals.active;
|
||||||
|
@ -49,12 +49,12 @@ const planetId = active instanceof SystemManager ? active.data._id : active._id;
|
||||||
<LoggedIn id="ships" title="Ships">
|
<LoggedIn id="ships" title="Ships">
|
||||||
<div id="ship-modal-background">
|
<div id="ship-modal-background">
|
||||||
<div id="ship-modal-details" data-building-id="">
|
<div id="ship-modal-details" data-building-id="">
|
||||||
<h3>Required resources</h3>
|
<h3>{getName(lang, 'general', 'required-resources')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-resources">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-resources">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required buildings</h3>
|
<h3>{getName(lang, 'general', 'required-buildings')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-buildings">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-buildings">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required research</h3>
|
<h3>{getName(lang, 'general', 'required-research')}</h3>
|
||||||
<div class="ship-modal-text" id="ship-modal-req-research">None</div>
|
<div class="ship-modal-text" id="ship-modal-req-research">{getName(lang, 'general', 'none')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -122,19 +122,21 @@ const planetId = active instanceof SystemManager ? active.data._id : active._id;
|
||||||
if(!modalDiv) return;
|
if(!modalDiv) return;
|
||||||
modalDiv.style.display = 'block';
|
modalDiv.style.display = 'block';
|
||||||
|
|
||||||
|
const langNone = lang['general'].find(g => g.id === 'none').name;
|
||||||
|
|
||||||
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
const reqResources = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.resources ?? [];
|
||||||
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
const reqBuildings = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.buildings ?? [];
|
||||||
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
const reqResearch = modalSet[el.parentElement.parentElement.parentElement.dataset.id]?.research ?? [];
|
||||||
|
|
||||||
modalResources.innerHTML = reqResources.length === 0 ? "None" : reqResources.map(resource => {
|
modalResources.innerHTML = reqResources.length === 0 ? langNone : reqResources.map(resource => {
|
||||||
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalBuildings.innerHTML = reqBuildings.length === 0 ? "None" : reqBuildings.map(building => {
|
modalBuildings.innerHTML = reqBuildings.length === 0 ? langNone : reqBuildings.map(building => {
|
||||||
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
return `${lang['buildings'].find(b => b.id === building.id).name}: ${building.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalResearch.innerHTML = reqResearch.length === 0 ? "None" : reqResearch.map(research => {
|
modalResearch.innerHTML = reqResearch.length === 0 ? langNone : reqResearch.map(research => {
|
||||||
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { ObjectId } from "mongodb";
|
import { ObjectId } from "mongodb";
|
||||||
import LoggedIn from "../../../../layouts/LoggedIn.astro";
|
import LoggedIn from "../../../../layouts/LoggedIn.astro";
|
||||||
import locationManager from "../../../../lib/classes/managers/LocationManager";
|
import locationManager from "../../../../lib/classes/managers/LocationManager";
|
||||||
|
import { getName } from "../../../../lib/utils/langDriver";
|
||||||
|
|
||||||
const { token, lang } = Astro.locals;
|
const { token, lang } = Astro.locals;
|
||||||
|
|
||||||
|
@ -17,19 +18,19 @@ if(currentSystem === undefined) {
|
||||||
const discoveredAsteroids = currentSystem.asteroids.asteroids;
|
const discoveredAsteroids = currentSystem.asteroids.asteroids;
|
||||||
---
|
---
|
||||||
<LoggedIn id="systemManager" title="System Manager">
|
<LoggedIn id="systemManager" title="System Manager">
|
||||||
<h1>Selected system: {currentSystem.data.name} <a href="/game/systemManager/select">(change)</a></h1>
|
<h1>{getName(lang, 'general', 'selected-system')}: {currentSystem.data.name} <a href="/game/systemManager/select">{getName(lang, 'general', 'change')}</a></h1>
|
||||||
<div class="system-links">
|
<div class="system-links">
|
||||||
<a href="/game/systemManager">Overview</a>
|
<a href="/game/systemManager">{getName(lang, 'general', 'overview')}</a>
|
||||||
<a href="/game/systemManager/structures">System-wide structures</a>
|
<a href="/game/systemManager/structures">{getName(lang, 'general', 'systemwide-structures')}</a>
|
||||||
<a href="/game/systemManager/spaceStations">Space stations</a>
|
<a href="/game/systemManager/spaceStations">{getName(lang, 'general', 'space-stations')}</a>
|
||||||
<a href="/game/systemManager/asteroids">Asteroids</a>
|
<a href="/game/systemManager/asteroids">{getName(lang, 'general', 'asteroids')}</a>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h2>Avaliable asteroids <button id="scan">Scan for new</button></h2>
|
<h2>{getName(lang, 'general', 'available-asteroids')} <button id="scan">{getName(lang, 'general', 'scan-new')}</button></h2>
|
||||||
<div>
|
<div>
|
||||||
{discoveredAsteroids.map((asteroid) => <div>
|
{discoveredAsteroids.map((asteroid) => <div>
|
||||||
<h3>{asteroid.name} <a href={`/game/systemManager/asteroids/send?dest=${asteroid.id}`}>Send</a></h3>
|
<h3>{asteroid.name} <a href={`/game/systemManager/asteroids/send?dest=${asteroid.id}`}>{getName(lang, 'general', 'send')}</a></h3>
|
||||||
<h4>Resources left: </h4>
|
<h4>{getName(lang, 'general', 'resources-left')}: </h4>
|
||||||
{asteroid.resources.map((resource) => <div><p>{resource.id} - {resource.amount}</p></div>)}
|
{asteroid.resources.map((resource) => <div><p>{resource.id} - {resource.amount}</p></div>)}
|
||||||
</div>)}
|
</div>)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -51,19 +51,22 @@ if(Astro.request.method === "POST") {
|
||||||
const params = parseParams(Astro.request.url);
|
const params = parseParams(Astro.request.url);
|
||||||
|
|
||||||
const systems = locationManager.getSystemsOwnedBy(user.id).map(sys => { return { id: sys.data._id, name: sys.data.name, hasAsteroidMiner: sys.ships.ships.find(ship => ship.data.id === "asteroid-miner") !== undefined, planets: sys.planets.map(planet => { return { id: planet._id, name: planet.name, hasAsteroidMiner: planet.ships.ships.find(ship => ship.data.id === "asteroid-miner") !== undefined } }) } });
|
const systems = locationManager.getSystemsOwnedBy(user.id).map(sys => { return { id: sys.data._id, name: sys.data.name, hasAsteroidMiner: sys.ships.ships.find(ship => ship.data.id === "asteroid-miner") !== undefined, planets: sys.planets.map(planet => { return { id: planet._id, name: planet.name, hasAsteroidMiner: planet.ships.ships.find(ship => ship.data.id === "asteroid-miner") !== undefined } }) } });
|
||||||
|
|
||||||
|
const noMiner = getName(lang, 'general', 'no-miner');
|
||||||
|
const noPlanets = getName(lang, 'general', 'no-planets');
|
||||||
---
|
---
|
||||||
<LoggedIn id="systemManager" title="System Manager">
|
<LoggedIn id="systemManager" title="System Manager">
|
||||||
<h1><a href="/game/systemManager/asteroids"><= go back</a>Sending</h1>
|
<h1><a href="/game/systemManager/asteroids"><= {getName(lang, 'general', 'go-back')}</a>{getName(lang, 'general', 'sending')}</h1>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<input type="hidden" name="asteroid-id" value={params.dest} />
|
<input type="hidden" name="asteroid-id" value={params.dest} />
|
||||||
<input type="hidden" name="current-system" value={currentSystemId} />
|
<input type="hidden" name="current-system" value={currentSystemId} />
|
||||||
<label><input type="checkbox" name="fromSystem" />Send from system</label>
|
<label><input type="checkbox" name="fromSystem" />{getName(lang, 'general', 'send-from-system')}</label>
|
||||||
<h3>System</h3>
|
<h3>{getName(lang, 'general', 'system')}</h3>
|
||||||
<select id="source-system" name="source-system"></select>
|
<select id="source-system" name="source-system"></select>
|
||||||
<h3>Planet</h3>
|
<h3>{getName(lang, 'general', 'planet')}</h3>
|
||||||
<select id="source-planet" name="source-planet"></select>
|
<select id="source-planet" name="source-planet"></select>
|
||||||
<hr />
|
<hr />
|
||||||
<button type="submit">Send fleet</button>
|
<button type="submit">{getName(lang, 'general', 'send-fleet')}</button>
|
||||||
</form>
|
</form>
|
||||||
</LoggedIn>
|
</LoggedIn>
|
||||||
<style>
|
<style>
|
||||||
|
@ -112,7 +115,7 @@ select {
|
||||||
background-color: darkgray;
|
background-color: darkgray;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script define:vars={{ systems }}>
|
<script define:vars={{ systems, noMiner, noPlanets }}>
|
||||||
const sourceSystem = document.getElementById('source-system');
|
const sourceSystem = document.getElementById('source-system');
|
||||||
const sourcePlanet = document.getElementById('source-planet');
|
const sourcePlanet = document.getElementById('source-planet');
|
||||||
const fromSystemCheckbox = document.querySelector('input[name="fromSystem"]');
|
const fromSystemCheckbox = document.querySelector('input[name="fromSystem"]');
|
||||||
|
@ -125,7 +128,7 @@ if(!sourceSystem || !sourcePlanet || !fromSystemCheckbox) {
|
||||||
for(const system of systems) {
|
for(const system of systems) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = system.id;
|
opt.value = system.id;
|
||||||
opt.innerText = system.hasAsteroidMiner ? system.name : `${system.name} (no miner)`;
|
opt.innerText = system.hasAsteroidMiner ? system.name : `${system.name} ${noMiner}`;
|
||||||
sourceSystem.appendChild(opt);
|
sourceSystem.appendChild(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +138,7 @@ sourceSystem.addEventListener('change', () => {
|
||||||
sourcePlanet.innerHTML = '';
|
sourcePlanet.innerHTML = '';
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No planets';
|
opt.innerText = noPlanets;
|
||||||
sourcePlanet.appendChild(opt);
|
sourcePlanet.appendChild(opt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -145,14 +148,14 @@ sourceSystem.addEventListener('change', () => {
|
||||||
for(const planet of system.planets) {
|
for(const planet of system.planets) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = planet.id;
|
opt.value = planet.id;
|
||||||
opt.innerText = planet.hasAsteroidMiner ? planet.name : `${planet.name} (no miner)`;
|
opt.innerText = planet.hasAsteroidMiner ? planet.name : `${planet.name} ${noMiner}`;
|
||||||
sourcePlanet.appendChild(opt);
|
sourcePlanet.appendChild(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sourcePlanet.children.length === 0) {
|
if(sourcePlanet.children.length === 0) {
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = '';
|
opt.value = '';
|
||||||
opt.innerText = 'No planets';
|
opt.innerText = noPlanets;
|
||||||
sourcePlanet.appendChild(opt);
|
sourcePlanet.appendChild(opt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
import { ObjectId } from "mongodb";
|
import { ObjectId } from "mongodb";
|
||||||
import LoggedIn from "../../../layouts/LoggedIn.astro";
|
import LoggedIn from "../../../layouts/LoggedIn.astro";
|
||||||
import locationManager from "../../../lib/classes/managers/LocationManager";
|
import locationManager from "../../../lib/classes/managers/LocationManager";
|
||||||
|
import { getName } from "../../../lib/utils/langDriver";
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
|
|
||||||
const currentSystemId = Astro.cookies.get('currentSystem')?.value ?? null;
|
const currentSystemId = Astro.cookies.get('currentSystem')?.value ?? null;
|
||||||
if(currentSystemId === null) return Astro.redirect('/game/systemManager/select');
|
if(currentSystemId === null) return Astro.redirect('/game/systemManager/select');
|
||||||
|
@ -28,42 +31,42 @@ if(Astro.request.method === "POST") {
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
<LoggedIn id="systemManager" title="System Manager">
|
<LoggedIn id="systemManager" title="System Manager">
|
||||||
<h1>Selected system: {currentSystem.data.name} in {currentSystem.data.sector.name} in {currentSystem.data.sector.galaxy.name} <a href="/game/systemManager/select">(change)</a></h1>
|
<h1>{getName(lang, 'general', 'selected-system')}: {currentSystem.data.name} {getName(lang, 'general', 'in')} {currentSystem.data.sector.name} {getName(lang, 'general', 'in')} {currentSystem.data.sector.galaxy.name} <a href="/game/systemManager/select">{getName(lang, 'general', 'change')}</a></h1>
|
||||||
<div class="system-links">
|
<div class="system-links">
|
||||||
<a href="/game/systemManager">Overview</a>
|
<a href="/game/systemManager">{getName(lang, 'general', 'overview')}</a>
|
||||||
<a href="/game/systemManager/structures">System-wide structures</a>
|
<a href="/game/systemManager/structures">{getName(lang, 'general', 'systemwide-structures')}</a>
|
||||||
<a href="/game/systemManager/spaceStations">Space stations</a>
|
<a href="/game/systemManager/spaceStations">{getName(lang, 'general', 'space-stations')}</a>
|
||||||
<a href="/game/systemManager/asteroids">Asteroids</a>
|
<a href="/game/systemManager/asteroids">{getName(lang, 'general', 'asteroids')}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="planet-list">
|
<div class="planet-list">
|
||||||
<div class="system-card">
|
<div class="system-card">
|
||||||
<h2 style="color: red;">{currentSystem.data.name}<div><form method="post"><input type="hidden" name="planetId" value={currentSystem.data._id.toString()} /><input type="submit" value="Select" /></form></div></h2>
|
<h2 style="color: red;">{currentSystem.data.name}<div><form method="post"><input type="hidden" name="planetId" value={currentSystem.data._id.toString()} /><input type="submit" value="Select" /></form></div></h2>
|
||||||
<h3>Resources:</h3>
|
<h3>{getName(lang, 'general', 'resources')}:</h3>
|
||||||
<div>
|
<div>
|
||||||
{currentSystem.resources.resources.length === 0 ? <span>None</span> : currentSystem.resources.resources.map(res => (
|
{currentSystem.resources.resources.length === 0 ? <span>{getName(lang, 'general', 'none')}</span> : currentSystem.resources.resources.map(res => (
|
||||||
<p>{res.data.id} - {res.amount}</p>
|
<p>{res.data.id} - {res.amount}</p>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<h3>Ships: </h3>
|
<h3>{getName(lang, 'general', 'ships')}: </h3>
|
||||||
<div>
|
<div>
|
||||||
{currentSystem.ships.ships.length === 0 ? <span>None</span> : currentSystem.ships.ships.map(ship => (
|
{currentSystem.ships.ships.length === 0 ? <span>{getName(lang, 'general', 'none')}</span> : currentSystem.ships.ships.map(ship => (
|
||||||
<p>{ship.data.id} - {ship.amount}</p>
|
<p>{ship.data.id} - {ship.amount}</p>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{currentSystem.planets.length === 0 ? <span>No planets in this sector</span> : currentSystem.planets.map(planet => (
|
{currentSystem.planets.length === 0 ? <span>{getName(lang, 'general', 'no-planets-in-this-sector')}</span> : currentSystem.planets.map(planet => (
|
||||||
<div class="planet-card">
|
<div class="planet-card">
|
||||||
<h2>{planet.name}<div><form method="post"><input type="hidden" name="planetId" value={planet._id.toString()} /><input type="submit" value="Select" /></form></div></h2>
|
<h2>{planet.name}<div><form method="post"><input type="hidden" name="planetId" value={planet._id.toString()} /><input type="submit" value="Select" /></form></div></h2>
|
||||||
<p>Fields: {planet.fields}</p>
|
<p>{getName(lang, 'general', 'fields')}: {planet.fields}</p>
|
||||||
<h3>Buildings:</h3>
|
<h3>{getName(lang, 'general', 'buildings')}:</h3>
|
||||||
<div>
|
<div>
|
||||||
{planet.buildings.buildings.length === 0 ? <span>None</span> : planet.buildings.buildings.map(building => (
|
{planet.buildings.buildings.length === 0 ? <span>{getName(lang, 'general', 'none')}</span> : planet.buildings.buildings.map(building => (
|
||||||
<p>{building.data.id} - {building.level}</p>
|
<p>{building.data.id} - {building.level}</p>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<h3>Ships: </h3>
|
<h3>{getName(lang, 'general', 'ships')}: </h3>
|
||||||
<div>
|
<div>
|
||||||
{planet.ships.ships.length === 0 ? <span>None</span> : planet.ships.ships.map(ship => (
|
{planet.ships.ships.length === 0 ? <span>{getName(lang, 'general', 'none')}</span> : planet.ships.ships.map(ship => (
|
||||||
<p>{ship.data.id} - {ship.amount}</p>
|
<p>{ship.data.id} - {ship.amount}</p>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
import LoggedIn from "../../../layouts/LoggedIn.astro";
|
import LoggedIn from "../../../layouts/LoggedIn.astro";
|
||||||
import User from "../../../lib/classes/User";
|
import User from "../../../lib/classes/User";
|
||||||
import locationManager from "../../../lib/classes/managers/LocationManager";
|
import locationManager from "../../../lib/classes/managers/LocationManager";
|
||||||
|
import { getName } from "../../../lib/utils/langDriver";
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
const user: User = Astro.locals.user;
|
const user: User = Astro.locals.user;
|
||||||
|
|
||||||
if(Astro.request.method === "POST") {
|
if(Astro.request.method === "POST") {
|
||||||
|
@ -27,7 +29,7 @@ const systems = locationManager.getSystemsOwnedBy(user.id);
|
||||||
{systems.map(system => (
|
{systems.map(system => (
|
||||||
<div class="system-card">
|
<div class="system-card">
|
||||||
<h2>{system.data.name}</h2>
|
<h2>{system.data.name}</h2>
|
||||||
<div><form method="post"><input type="hidden" name="systemId" value={system.data._id.toString()} /><input type="submit" value="Select" /></form></div>
|
<div><form method="post"><input type="hidden" name="systemId" value={system.data._id.toString()} /><input type="submit" value={getName(lang, 'general', 'select')} /></form></div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -52,21 +52,21 @@ for(const structure of structureList) {
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
<LoggedIn id="systemManager" title="System Manager">
|
<LoggedIn id="systemManager" title="System Manager">
|
||||||
<h1>Selected system: {currentSystem.data.name} <a href="/game/systemManager/select">(change)</a></h1>
|
<h1>{getName(lang, 'general', 'selected-system')}: {currentSystem.data.name} <a href="/game/systemManager/select">{getName(lang, 'general', 'change')}</a></h1>
|
||||||
<div class="system-links">
|
<div class="system-links">
|
||||||
<a href="/game/systemManager">Overview</a>
|
<a href="/game/systemManager">{getName(lang, 'general', 'overview')}</a>
|
||||||
<a href="/game/systemManager/structures">System-wide structures</a>
|
<a href="/game/systemManager/structures">{getName(lang, 'general', 'systemwide-structures')}</a>
|
||||||
<a href="/game/systemManager/spaceStations">Space stations</a>
|
<a href="/game/systemManager/spaceStations">{getName(lang, 'general', 'space-stations')}</a>
|
||||||
<a href="/game/systemManager/asteroids">Asteroids</a>
|
<a href="/game/systemManager/asteroids">{getName(lang, 'general', 'asteroids')}</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="structure-modal-background">
|
<div id="structure-modal-background">
|
||||||
<div id="structure-modal-details" data-structure-id="">
|
<div id="structure-modal-details" data-structure-id="">
|
||||||
<h3>Required resources</h3>
|
<h3>{getName(lang, 'general', 'required-resources')}</h3>
|
||||||
<div class="structure-modal-text" id="structure-modal-req-resources">None</div>
|
<div class="structure-modal-text" id="structure-modal-req-resources">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required structures</h3>
|
<h3>{getName(lang, 'general', 'required-structures')}</h3>
|
||||||
<div class="structure-modal-text" id="structure-modal-req-structures">None</div>
|
<div class="structure-modal-text" id="structure-modal-req-structures">{getName(lang, 'general', 'none')}</div>
|
||||||
<h3>Required research</h3>
|
<h3>{getName(lang, 'general', 'required-research')}</h3>
|
||||||
<div class="structure-modal-text" id="structure-modal-req-research">None</div>
|
<div class="structure-modal-text" id="structure-modal-req-research">{getName(lang, 'general', 'none')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="structure-list">
|
<div class="structure-list">
|
||||||
|
@ -171,19 +171,21 @@ h1 a {
|
||||||
if(!modalDiv) return;
|
if(!modalDiv) return;
|
||||||
modalDiv.style.display = 'block';
|
modalDiv.style.display = 'block';
|
||||||
|
|
||||||
|
const langNone = lang['general'].find(g => g.id === 'none').name;
|
||||||
|
|
||||||
const reqResources = modalSet[el.parentElement.parentElement.dataset.id]?.resources ?? [];
|
const reqResources = modalSet[el.parentElement.parentElement.dataset.id]?.resources ?? [];
|
||||||
const reqStructures = modalSet[el.parentElement.parentElement.dataset.id]?.structures ?? [];
|
const reqStructures = modalSet[el.parentElement.parentElement.dataset.id]?.structures ?? [];
|
||||||
const reqResearch = modalSet[el.parentElement.parentElement.dataset.id]?.research ?? [];
|
const reqResearch = modalSet[el.parentElement.parentElement.dataset.id]?.research ?? [];
|
||||||
|
|
||||||
modalResources.innerHTML = reqResources.length === 0 ? "None" : reqResources.map(resource => {
|
modalResources.innerHTML = reqResources.length === 0 ? langNone : reqResources.map(resource => {
|
||||||
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
return `${lang['resources'].find(r => r.id === resource.id).name}: ${resource.amount}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalStructures.innerHTML = reqStructures.length === 0 ? "None" : reqStructures.map(structure => {
|
modalStructures.innerHTML = reqStructures.length === 0 ? langNone : reqStructures.map(structure => {
|
||||||
return `${lang['structures'].find(s => s.id === structure.id).name}: ${structure.level}`;
|
return `${lang['structures'].find(s => s.id === structure.id).name}: ${structure.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
modalResearch.innerHTML = reqResearch.length === 0 ? "None" : reqResearch.map(research => {
|
modalResearch.innerHTML = reqResearch.length === 0 ? langNone : reqResearch.map(research => {
|
||||||
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
return `${lang['research'].find(r => r.id === research.id).name}: ${research.level}`;
|
||||||
}).join("<br />");
|
}).join("<br />");
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
import NavBar from '../components/NavBar.astro';
|
import NavBar from '../components/NavBar.astro';
|
||||||
|
|
||||||
import { getUserByNickOrEmail, updateLastLogin } from '../lib/db/users';
|
import { getUserByNickOrEmail, updateLastLogin } from '../lib/db/users';
|
||||||
|
|
||||||
import config from '../../config.json';
|
import config from '../../config.json';
|
||||||
|
|
||||||
import { verify } from 'argon2';
|
import { verify } from 'argon2';
|
||||||
import locationManager from '../lib/classes/managers/LocationManager';
|
import locationManager from '../lib/classes/managers/LocationManager';
|
||||||
|
import { getName } from '../lib/utils/langDriver';
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
|
|
||||||
let error = "";
|
let error = "";
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@ if(Astro.request.method === "POST") {
|
||||||
const username = data.get("username") as string | "";
|
const username = data.get("username") as string | "";
|
||||||
const password = data.get("password") as string | "";
|
const password = data.get("password") as string | "";
|
||||||
|
|
||||||
if(username === "") error = "username is required";
|
if(username === "") error = getName(lang, 'general', 'username-required');
|
||||||
if(password === "") error = "password is required";
|
if(password === "") error = getName(lang, 'general', 'password-required');
|
||||||
|
|
||||||
if(error === "") {
|
if(error === "") {
|
||||||
const userDB = await getUserByNickOrEmail(username as string);
|
const userDB = await getUserByNickOrEmail(username as string);
|
||||||
|
@ -73,7 +73,7 @@ if(Astro.request.method === "POST") {
|
||||||
});
|
});
|
||||||
|
|
||||||
return Astro.redirect("/game");
|
return Astro.redirect("/game");
|
||||||
} else error = "invalid username or password";
|
} else error = getName(lang, 'general', 'invalid-username-or-password');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
|
@ -81,9 +81,9 @@ if(Astro.request.method === "POST") {
|
||||||
<Layout title="Login">
|
<Layout title="Login">
|
||||||
<NavBar loggedIn="false" active="login" />
|
<NavBar loggedIn="false" active="login" />
|
||||||
<form method="POST" class="login-form">
|
<form method="POST" class="login-form">
|
||||||
<input class="login-input" type="text" name="username" placeholder="username" /><br />
|
<input class="login-input" type="text" name="username" placeholder={getName(lang, 'general', 'username')} /><br />
|
||||||
<input class="login-input" type="password" name="password" placeholder="password" /><br />
|
<input class="login-input" type="password" name="password" placeholder={getName(lang, 'general', 'password')} /><br />
|
||||||
<input class="login-submit" type="submit" value="login" />
|
<input class="login-submit" type="submit" value={getName(lang, 'general', 'login')} />
|
||||||
<p style="color: red;">{error}</p>
|
<p style="color: red;">{error}</p>
|
||||||
</form>
|
</form>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
---
|
---
|
||||||
import NavBar from '../components/NavBar.astro';
|
import NavBar from '../components/NavBar.astro';
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
|
|
||||||
import { createUser } from '../lib/db/users';
|
import { createUser } from '../lib/db/users';
|
||||||
|
|
||||||
import { AstroCookieSetOptions } from 'astro';
|
import { AstroCookieSetOptions } from 'astro';
|
||||||
import { ObjectId } from 'mongodb';
|
import { ObjectId } from 'mongodb';
|
||||||
import config from '../../config.json';
|
import config from '../../config.json';
|
||||||
|
@ -16,7 +14,9 @@ import DBSystem from '../types/db/DBSystem';
|
||||||
import locationManager from '../lib/classes/managers/LocationManager';
|
import locationManager from '../lib/classes/managers/LocationManager';
|
||||||
import SystemManager, { System } from '../lib/classes/managers/SystemManager';
|
import SystemManager, { System } from '../lib/classes/managers/SystemManager';
|
||||||
import User from '../lib/classes/User';
|
import User from '../lib/classes/User';
|
||||||
import ResearchManager from '../lib/classes/managers/ResearchManager';
|
import { getName } from '../lib/utils/langDriver';
|
||||||
|
|
||||||
|
const { lang } = Astro.locals;
|
||||||
|
|
||||||
let error = "";
|
let error = "";
|
||||||
|
|
||||||
|
@ -27,14 +27,14 @@ if(Astro.request.method === "POST") {
|
||||||
const password = data.get("password") as string | "";
|
const password = data.get("password") as string | "";
|
||||||
const password2 = data.get("password2") as string | "";
|
const password2 = data.get("password2") as string | "";
|
||||||
|
|
||||||
if(username === "") error = "username is required";
|
if(username === "") error = getName(lang, 'general', 'username-required');
|
||||||
if(username.match(/^[a-zA-Z0-9]{3,20}$/) === null) error = "username must be between 3 and 20 characters long and can only contain letters and numbers";
|
if(username.match(/^[a-zA-Z0-9]{3,20}$/) === null) error = getName(lang, 'general', 'username-invalid')
|
||||||
if(email === "") error = "email is required";
|
if(email === "") error = getName(lang, 'general', 'email-required');
|
||||||
if(email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/) === null) error = "email is invalid";
|
if(email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/) === null) error = getName(lang, 'general', 'email-invalid');
|
||||||
if(password === "") error = "password is required";
|
if(password === "") error = getName(lang, 'general', 'password-required');
|
||||||
if(password2 === "") error = "password2 is required";
|
if(password2 === "") error = getName(lang, 'general', 'password2-required');
|
||||||
if(password.length < 8 || password.length > 50) error = "password must be between 8 and 50 characters long";
|
if(password.length < 8 || password.length > 50) error = getName(lang, 'general', 'password-length');
|
||||||
if(password !== password2) error = "passwords must match";
|
if(password !== password2) error = getName(lang, 'general', 'password-match');
|
||||||
|
|
||||||
if(error === "") {
|
if(error === "") {
|
||||||
const userId = new ObjectId();
|
const userId = new ObjectId();
|
||||||
|
@ -143,11 +143,11 @@ if(Astro.request.method === "POST") {
|
||||||
<Layout title="Register">
|
<Layout title="Register">
|
||||||
<NavBar loggedIn="false" active="register" />
|
<NavBar loggedIn="false" active="register" />
|
||||||
<form method="POST" class="register-form">
|
<form method="POST" class="register-form">
|
||||||
<input class="register-input" type="text" name="username" placeholder="username" /><br />
|
<input class="register-input" type="text" name="username" placeholder={getName(lang, 'general', 'username')} /><br />
|
||||||
<input class="register-input" type="email" name="email" placeholder="email" /><br />
|
<input class="register-input" type="email" name="email" placeholder={getName(lang, 'general', 'email')} /><br />
|
||||||
<input class="register-input" type="password" name="password" placeholder="password" /><br />
|
<input class="register-input" type="password" name="password" placeholder={getName(lang, 'general', 'password')} /><br />
|
||||||
<input class="register-input" type="password" name="password2" placeholder="password2" /><br />
|
<input class="register-input" type="password" name="password2" placeholder={getName(lang, 'general', 'password2')} /><br />
|
||||||
<input class="register-submit" type="submit" value="register" />
|
<input class="register-submit" type="submit" value={getName(lang, 'general', 'register')} />
|
||||||
<p style="color: red;">{error}</p>
|
<p style="color: red;">{error}</p>
|
||||||
</form>
|
</form>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
Loading…
Reference in New Issue