feat: migrate urls

This commit is contained in:
tresabhi committed 2025-05-15 23:44:20 -05:00
1 parent 165a9cd719
commit b90b355f8f
18 files changed
+37 -44

No files matched your search

+1
View File
@@ -132,6 +132,7 @@
"outdir", "outdir",
"outfile", "outfile",
"ownedtanks", "ownedtanks",
"padder",
"partytown", "partytown",
"PIXELFORMAT", "PIXELFORMAT",
"playerachievements", "playerachievements",
+2 -2
View File
@@ -107,8 +107,8 @@ export const auctionCommand = new Promise<CommandRegistry>((resolve) => {
if (!tank) return ''; if (!tank) return '';
const name = `[${tank.name}](<https://blitzkit.app/tools/tankopedia/${ const name = `[${tank.name}](<https://blitzkit.app/tanks/${
tank.id tank.slug
}>)`; }>)`;
const next = const next =
data.next_price === null data.next_price === null
+1 -1
View File
@@ -78,7 +78,7 @@ export const ownedTanksCommand = new Promise<CommandRegistry>((resolve) => {
) )
.map( .map(
(tank) => (tank) =>
`[${flags[tank.nation]} ${markdownEscape(unwrap(tank.name))}](<https://blitzkit.app/tools/tankopedia/${tank.id}>)`, `[${flags[tank.nation]} ${markdownEscape(unwrap(tank.name))}](<https://blitzkit.app/tanks/${tank.slug}>)`,
); );
const lines = [title, ...tankList]; const lines = [title, ...tankList];
+10 -10
View File
@@ -10,16 +10,16 @@ message TankDefinitions {
message TankDefinition { message TankDefinition {
required uint32 id = 1; required uint32 id = 1;
map<uint32, uint32> roles = 2; required string slug = 2;
required bool fixed_camouflage = 4; map<uint32, uint32> roles = 3;
repeated int32 camouflages = 5; required bool fixed_camouflage = 5;
repeated int32 ancestors = 6; repeated int32 camouflages = 6;
repeated int32 successors = 7; repeated int32 ancestors = 7;
repeated Crew crew = 8; repeated int32 successors = 8;
required uint32 health = 9; repeated Crew crew = 9;
required string nation = 10; required uint32 health = 10;
required I18nString name = 11; required string nation = 11;
optional I18nString name_full = 12; required I18nString name = 12;
required TankType type = 13; required TankType type = 13;
required uint32 max_consumables = 14; required uint32 max_consumables = 14;
required uint32 max_provisions = 15; required uint32 max_provisions = 15;
@@ -27,7 +27,7 @@ export async function popularTanks() {
fieldName: 'pagePath', fieldName: 'pagePath',
stringFilter: { stringFilter: {
matchType: 'BEGINS_WITH', matchType: 'BEGINS_WITH',
value: '/tools/tankopedia/', value: '/tanks/',
}, },
}, },
}, },
@@ -43,7 +43,7 @@ export async function popularTanks() {
(row) => (row) =>
row.dimensionValues && row.dimensionValues &&
row.dimensionValues[0].value && row.dimensionValues[0].value &&
row.dimensionValues[0].value !== '/tools/tankopedia/' && row.dimensionValues[0].value !== '/tanks/' &&
row.metricValues && row.metricValues &&
row.metricValues[0].value, row.metricValues[0].value,
) )
@@ -105,7 +105,7 @@ export function TankCard({ index, tank }: TankCardProps) {
return ( return (
<StickyColumnHeaderCell> <StickyColumnHeaderCell>
<Flex direction="column" align="center" justify="between" gap="2"> <Flex direction="column" align="center" justify="between" gap="2">
<TankControl index={index} key={tank.id} id={tank.id} /> <TankControl index={index} key={tank.id} slug={tank.slug} />
<Flex <Flex
ref={draggable} ref={draggable}
@@ -11,7 +11,7 @@ import { TankSearch } from '../TankSearch';
interface TankControlProps { interface TankControlProps {
index: number; index: number;
id: number; slug: string;
} }
const [provisionDefinitions, modelDefinitions] = await Promise.all([ const [provisionDefinitions, modelDefinitions] = await Promise.all([
@@ -19,7 +19,7 @@ const [provisionDefinitions, modelDefinitions] = await Promise.all([
awaitableModelDefinitions, awaitableModelDefinitions,
]); ]);
export function TankControl({ index, id }: TankControlProps) { export function TankControl({ index, slug }: TankControlProps) {
const { locale } = useLocale(); const { locale } = useLocale();
const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false); const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false);
const mutateCompareEphemeral = CompareEphemeral.useMutation(); const mutateCompareEphemeral = CompareEphemeral.useMutation();
@@ -79,11 +79,7 @@ export function TankControl({ index, id }: TankControlProps) {
</Dialog.Content> </Dialog.Content>
</Dialog.Root> </Dialog.Root>
<LinkI18n <LinkI18n locale={locale} href={`/tanks/${slug}`} target="_blank">
locale={locale}
href={`/tools/tankopedia/${id}`}
target="_blank"
>
<IconButton variant="ghost"> <IconButton variant="ghost">
<ExternalLinkIcon /> <ExternalLinkIcon />
</IconButton> </IconButton>
+4 -4
View File
@@ -141,7 +141,7 @@ const strings = getStrings(locale);
(branch) => (branch) =>
branch !== assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH), branch !== assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH),
); );
const selected = Astro.url.pathname.includes(`/tools/${tool.id}`); const selected = Astro.url.pathname.includes(`/${tool.id}`);
const toolStrings = const toolStrings =
strings.website.tools[ strings.website.tools[
(tool.stringsId ?? (tool.stringsId ??
@@ -157,7 +157,7 @@ const strings = getStrings(locale);
color="gray" color="gray"
highContrast={selected} highContrast={selected}
size="2" size="2"
href={`/tools/${tool.id}`} href={`/${tool.id}`}
underline="hover" underline="hover"
> >
{toolStrings.name} {toolStrings.name}
@@ -227,12 +227,12 @@ const strings = getStrings(locale);
color="gray" color="gray"
highContrast highContrast
style={{ display: 'contents' }} style={{ display: 'contents' }}
href={`/tools/${tool.id}`} href={`/${tool.id}`}
> >
<Box <Box
style={{ style={{
borderRadius: Var('radius-2'), borderRadius: Var('radius-2'),
backgroundImage: `url(/assets/images/tools/${tool.id}.webp)`, backgroundImage: `url(/assets/images/${tool.id}.webp)`,
backgroundSize: '200%', backgroundSize: '200%',
backgroundPosition: 'right center', backgroundPosition: 'right center',
}} }}
@@ -73,7 +73,7 @@ export const TankCard = forwardRef<HTMLSpanElement, TankCardProps>(
locale={locale} locale={locale}
className="link" className="link"
underline="hover" underline="hover"
href={provideLink ? `/tools/tankopedia/${tank.id}` : '#'} href={provideLink ? `/tanks/${tank.slug}` : '#'}
onClick={(event) => { onClick={(event) => {
if (!provideLink) event.preventDefault(); if (!provideLink) event.preventDefault();
}} }}
@@ -18,11 +18,7 @@ export function TankRowHeaderCell({ tank }: TankRowHeaderCellProps) {
width={{ initial: '144px', sm: '240px' }} width={{ initial: '144px', sm: '240px' }}
style={{ overflow: 'hidden' }} style={{ overflow: 'hidden' }}
> >
<LinkI18n <LinkI18n locale={locale} href={`/tanks/${tank.slug}`} tabIndex={-1}>
locale={locale}
href={`/tools/tankopedia/${tank.id}`}
tabIndex={-1}
>
<img <img
alt={unwrap(tank.name)} alt={unwrap(tank.name)}
draggable={false} draggable={false}
@@ -48,7 +44,7 @@ export function TankRowHeaderCell({ tank }: TankRowHeaderCellProps) {
highContrast={tank.type === TankType.RESEARCHABLE} highContrast={tank.type === TankType.RESEARCHABLE}
underline="hover" underline="hover"
wrap="nowrap" wrap="nowrap"
href={`/tools/tankopedia/${tank.id}`} href={`/tanks/${tank.slug}`}
style={{ style={{
paddingLeft: 'var(--space-2)', paddingLeft: 'var(--space-2)',
display: 'flex', display: 'flex',
@@ -18,7 +18,7 @@ export function QuickLink({ topResult }: QuickLinkProps) {
return ( return (
<TextField.Slot> <TextField.Slot>
<LinkI18n locale={locale} href={`/tools/tankopedia/${topResult.id}`}> <LinkI18n locale={locale} href={`/tanks/${topResult.slug}`}>
<Button variant="ghost"> <Button variant="ghost">
{unwrap(topResult.name)} <CaretRightIcon /> {unwrap(topResult.name)} <CaretRightIcon />
</Button> </Button>
@@ -57,7 +57,7 @@ export function SearchBar({ topResult, skeleton, onSelect }: SearchBarProps) {
if (onSelect) { if (onSelect) {
onSelect(topResult); onSelect(topResult);
} else { } else {
window.location.href = `/tools/tankopedia/${topResult.id}`; window.location.href = `/tanks/${topResult.slug}`;
} }
}, },
[topResult], [topResult],
@@ -135,7 +135,10 @@ function ModuleButton({
); );
return isTank ? ( return isTank ? (
<LinkI18n locale={locale} href={`/tools/tankopedia/${unlock.id}`}> <LinkI18n
locale={locale}
href={`/tanks/${tankDefinitions.tanks[unlock.id].slug}`}
>
{button} {button}
</LinkI18n> </LinkI18n>
) : ( ) : (
@@ -46,7 +46,7 @@ export function Node({ id, highlight, nextIds, skeleton }: NodeProps) {
return ( return (
<LinkI18n <LinkI18n
locale={locale} locale={locale}
href={`/tools/tankopedia/${id}`} href={`/tanks/${tankDefinitions.tanks[id].slug}`}
key={id} key={id}
style={{ style={{
textDecoration: 'none', textDecoration: 'none',
@@ -12,7 +12,7 @@ export function Share() {
<CopyButton <CopyButton
variant="outline" variant="outline"
copy={() => copy={() =>
`${location.origin}/tools/tier-list?${generateTierListParams(rows)}` `${location.origin}/tier-list?${generateTierListParams(rows)}`
} }
> >
<Share2Icon /> {strings.website.tools.tier_list.buttons.share} <Share2Icon /> {strings.website.tools.tier_list.buttons.share}
@@ -61,7 +61,7 @@ const toolStrings =
{locale} {locale}
className="link" className="link"
underline="none" underline="none"
href={disabled ? '#' : (tool.href ?? `/tools/${tool.id}`)} href={disabled ? '#' : (tool.href ?? `/${tool.id}`)}
target={tool.href ? '_blank' : undefined} target={tool.href ? '_blank' : undefined}
> >
<Box <Box
@@ -1,3 +0,0 @@
export function pushTankopediaPath(id: number) {
window.history.pushState(null, '', `/tools/tankopedia/${id}`);
}
@@ -50,7 +50,7 @@ function Content() {
> >
<LinkI18n <LinkI18n
locale={locale} locale={locale}
href={`/tools/embed/${embed}`} href={`/embed/${embed}`}
color="gray" color="gray"
highContrast highContrast
style={{ style={{