mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-09-08 12:16:12 -05:00
Misc edit widgets page tweaks
This commit is contained in:
@@ -10,7 +10,7 @@ import {
|
||||
TIMEZONE_OPTIONS,
|
||||
} from "../core/widgets/widget-form-schemas";
|
||||
import type { loader } from "../loaders/u.$identifier.edit-widgets.server";
|
||||
import { USER } from "../user-page-constants";
|
||||
import { SENS_OPTIONS, USER } from "../user-page-constants";
|
||||
import { GameBadgeSelectField } from "./GameBadgeSelectField";
|
||||
|
||||
export function WidgetSettingsForm({
|
||||
@@ -144,11 +144,6 @@ function FavoriteBadgesField() {
|
||||
);
|
||||
}
|
||||
|
||||
const SENS_OPTIONS = [
|
||||
-50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35,
|
||||
40, 45, 50,
|
||||
];
|
||||
|
||||
function SensFields() {
|
||||
const { t } = useTranslation(["user"]);
|
||||
const { values, setValue, onFieldChange } = useFormFieldContext();
|
||||
|
||||
@@ -246,7 +246,7 @@ export const DEFAULT_WIDGETS: StoredWidget[] = [
|
||||
{ id: "teams" },
|
||||
{
|
||||
id: "sens",
|
||||
settings: { controller: "s2-pro-con", motionSens: null, stickSens: null },
|
||||
settings: { controller: "s1-pro-con", motionSens: null, stickSens: null },
|
||||
},
|
||||
{ id: "join-date" },
|
||||
];
|
||||
|
||||
@@ -19,7 +19,8 @@ import {
|
||||
} from "~/form/fields";
|
||||
import type { FormObjectSchema, SelectOption } from "~/form/types";
|
||||
import { GAME_BADGE_IDS } from "~/modules/in-game-lists/game-badge-ids";
|
||||
import { USER } from "../../user-page-constants";
|
||||
import { superRefine } from "~/utils/schema";
|
||||
import { SENS_OPTIONS, USER } from "../../user-page-constants";
|
||||
|
||||
export const bioSchema = v.object({
|
||||
bio: textAreaOptional({
|
||||
@@ -47,11 +48,18 @@ export const xRankPeaksSchema = v.object({
|
||||
}),
|
||||
});
|
||||
|
||||
export const timezoneSchema = v.object({
|
||||
timezone: selectDynamic({
|
||||
label: "labels.timezone",
|
||||
export const timezoneSchema = v.pipe(
|
||||
v.object({
|
||||
timezone: selectDynamic({
|
||||
label: "labels.timezone",
|
||||
}),
|
||||
}),
|
||||
});
|
||||
superRefine((data, ctx) => {
|
||||
if (TIMEZONES.includes(data.timezone)) return;
|
||||
|
||||
ctx.addIssue({ message: "Invalid timezone", path: ["timezone"] });
|
||||
}),
|
||||
);
|
||||
|
||||
export const TIMEZONE_OPTIONS: SelectOption[] = TIMEZONES.map((tz) => ({
|
||||
value: tz,
|
||||
@@ -67,8 +75,9 @@ export const favoriteStageSchema = v.object({
|
||||
export const peakXpUnverifiedSchema = v.object({
|
||||
peakXp: numberField({
|
||||
label: "labels.peakXp",
|
||||
minLength: 4,
|
||||
maxLength: 4,
|
||||
min: USER.PEAK_XP_MIN,
|
||||
max: USER.PEAK_XP_MAX,
|
||||
}),
|
||||
division: select({
|
||||
label: "labels.division",
|
||||
@@ -87,6 +96,8 @@ export const peakXpWeaponSchema = v.object({
|
||||
|
||||
const CONTROLLERS = ["s1-pro-con", "s2-pro-con", "grip", "handheld"] as const;
|
||||
|
||||
const sensValueSchema = v.nullable(v.picklist(SENS_OPTIONS));
|
||||
|
||||
export const sensSchema = v.object({
|
||||
controller: select({
|
||||
label: "labels.controller",
|
||||
@@ -94,10 +105,9 @@ export const sensSchema = v.object({
|
||||
value: controller,
|
||||
label: `options.controller.${controller}` as const,
|
||||
})),
|
||||
initialValue: "s2-pro-con",
|
||||
}),
|
||||
motionSens: customField({ initialValue: null }, v.nullable(v.number())),
|
||||
stickSens: customField({ initialValue: null }, v.nullable(v.number())),
|
||||
motionSens: customField({ initialValue: null }, sensValueSchema),
|
||||
stickSens: customField({ initialValue: null }, sensValueSchema),
|
||||
});
|
||||
|
||||
export const artSchema = v.object({
|
||||
|
||||
@@ -223,6 +223,17 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--s-4);
|
||||
|
||||
/** Narrow profiles show the side widgets above the main ones, so the editor lists them in that order too. */
|
||||
& .sideSlotSection {
|
||||
order: -1;
|
||||
}
|
||||
|
||||
@container (min-width: 768px) {
|
||||
& .sideSlotSection {
|
||||
order: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
|
||||
@@ -35,6 +35,7 @@ import {
|
||||
findWidgetById,
|
||||
maxWidgetsPerSlot,
|
||||
} from "~/features/user-page/core/widgets/portfolio";
|
||||
import type { WidgetId } from "~/features/user-page/core/widgets/types";
|
||||
import { getWidgetFormSchema } from "~/features/user-page/core/widgets/widget-form-schemas";
|
||||
import { USER } from "~/features/user-page/user-page-constants";
|
||||
import { useUnsavedChangesChecker } from "~/form/UnsavedChangesGuard";
|
||||
@@ -291,7 +292,7 @@ function AvailableWidgetsList({
|
||||
if (!searchLower) return true;
|
||||
|
||||
return [
|
||||
t(`user:widget.${widget.id}` as const),
|
||||
t(widgetNameKey(widget.id)),
|
||||
t(
|
||||
`user:widgets.description.${widget.id}` as const,
|
||||
widgetDescriptionParams(widget.id),
|
||||
@@ -338,7 +339,7 @@ function AvailableWidgetsList({
|
||||
<div className={styles.widgetHeader}>
|
||||
<span className={styles.widgetName}>
|
||||
<WidgetNavIcon navItem={widget.navItem} />
|
||||
{t(`user:widget.${widget.id}` as const)}
|
||||
{t(widgetNameKey(widget.id))}
|
||||
</span>
|
||||
{isLocked ? (
|
||||
<Link
|
||||
@@ -452,7 +453,7 @@ function SelectedWidgetsList({
|
||||
</SortableContext>
|
||||
</div>
|
||||
|
||||
<div className={styles.slotSection}>
|
||||
<div className={`${styles.slotSection} ${styles.sideSlotSection}`}>
|
||||
<div className={styles.slotHeader}>
|
||||
<span className="stack horizontal xs">
|
||||
<SideSlotIcon size={24} /> {t("user:widgets.sideSlot")}
|
||||
@@ -556,7 +557,7 @@ function DraggableWidgetItem({
|
||||
<span className={styles.widgetName} {...listeners}>
|
||||
<span className={styles.dragHandle}>☰</span>
|
||||
<WidgetNavIcon navItem={widgetDef?.navItem} />
|
||||
{t(`user:widget.${widget.id}` as const)}
|
||||
{t(widgetNameKey(widget.id))}
|
||||
</span>
|
||||
<div className={styles.widgetActions}>
|
||||
{hasSettings ? (
|
||||
@@ -608,6 +609,18 @@ function WidgetNavIcon({ navItem }: { navItem?: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
/** Widgets whose name is shared with another one, spelled out so the editor lists stay unambiguous. */
|
||||
const EDITOR_WIDGET_NAME_KEYS = {
|
||||
"bio-md": "user:widgets.editorName.bio-md",
|
||||
"game-badges-small": "user:widgets.editorName.game-badges-small",
|
||||
} as const;
|
||||
|
||||
function widgetNameKey(widgetId: WidgetId) {
|
||||
return widgetId in EDITOR_WIDGET_NAME_KEYS
|
||||
? EDITOR_WIDGET_NAME_KEYS[widgetId as keyof typeof EDITOR_WIDGET_NAME_KEYS]
|
||||
: (`user:widget.${widgetId}` as const);
|
||||
}
|
||||
|
||||
const WIDGET_DESCRIPTION_PARAMS: Record<string, Record<string, unknown>> = {
|
||||
"game-badges": { max: USER.GAME_BADGES_MAX },
|
||||
"game-badges-small": { max: USER.GAME_BADGES_SMALL_MAX },
|
||||
|
||||
@@ -16,8 +16,16 @@ export const USER = {
|
||||
GAME_BADGES_SMALL_MAX: 4,
|
||||
COUNTDOWN_TITLE_MAX_LENGTH: 50,
|
||||
MARKDOWN_WIDGET_MAX_LENGTH: 2000,
|
||||
PEAK_XP_MIN: 1000,
|
||||
PEAK_XP_MAX: 6000,
|
||||
};
|
||||
|
||||
/** In-game sensitivity values (-5.0 to +5.0 in 0.5 steps), stored multiplied by ten. */
|
||||
export const SENS_OPTIONS = [
|
||||
-50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35,
|
||||
40, 45, 50,
|
||||
] as const;
|
||||
|
||||
export const SPL2_JOIN_ORDER_CUTOFF = 13_589;
|
||||
|
||||
export const MATCHES_PER_SEASONS_PAGE = 8;
|
||||
|
||||
@@ -19,4 +19,73 @@ describe("widgetsEditSchema", () => {
|
||||
|
||||
expect(result.success).toBe(false);
|
||||
});
|
||||
|
||||
test("rejects the same widget twice", () => {
|
||||
const result = v.safeParse(widgetsEditSchema(false), {
|
||||
widgets: JSON.stringify([{ id: "join-date" }, { id: "join-date" }]),
|
||||
});
|
||||
|
||||
expect(result.success).toBe(false);
|
||||
});
|
||||
|
||||
test.each([
|
||||
{
|
||||
why: "timezone outside the known list",
|
||||
widget: { id: "timezone", settings: { timezone: "Mars/Olympus_Mons" } },
|
||||
},
|
||||
{
|
||||
why: "peak XP below the minimum",
|
||||
widget: {
|
||||
id: "peak-xp-unverified",
|
||||
settings: { peakXp: 0, division: "tentatek" },
|
||||
},
|
||||
},
|
||||
{
|
||||
why: "peak XP above the maximum",
|
||||
widget: {
|
||||
id: "peak-xp-unverified",
|
||||
settings: { peakXp: 99999, division: "tentatek" },
|
||||
},
|
||||
},
|
||||
{
|
||||
why: "sensitivity outside the selectable values",
|
||||
widget: {
|
||||
id: "sens",
|
||||
settings: { controller: "s1-pro-con", motionSens: 51, stickSens: null },
|
||||
},
|
||||
},
|
||||
])("rejects $why", ({ widget }) => {
|
||||
const result = v.safeParse(widgetsEditSchema(true), {
|
||||
widgets: JSON.stringify([widget]),
|
||||
});
|
||||
|
||||
expect(result.success).toBe(false);
|
||||
});
|
||||
|
||||
test.each([
|
||||
{
|
||||
why: "a timezone from the known list",
|
||||
widget: { id: "timezone", settings: { timezone: "Europe/Helsinki" } },
|
||||
},
|
||||
{
|
||||
why: "a four digit peak XP",
|
||||
widget: {
|
||||
id: "peak-xp-unverified",
|
||||
settings: { peakXp: 3123, division: "takoroka" },
|
||||
},
|
||||
},
|
||||
{
|
||||
why: "a selectable sensitivity",
|
||||
widget: {
|
||||
id: "sens",
|
||||
settings: { controller: "s1-pro-con", motionSens: -25, stickSens: 5 },
|
||||
},
|
||||
},
|
||||
])("accepts $why", ({ widget }) => {
|
||||
const result = v.safeParse(widgetsEditSchema(true), {
|
||||
widgets: JSON.stringify([widget]),
|
||||
});
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -180,12 +180,15 @@ export const widgetsEditSchema = (isSupporter: boolean) => {
|
||||
v.minLength(1),
|
||||
v.maxLength(max.main + max.side),
|
||||
v.check((widgets) => {
|
||||
const seenIds = new Set<string>();
|
||||
let mainCount = 0;
|
||||
let sideCount = 0;
|
||||
for (const w of widgets) {
|
||||
const def = findWidgetById(w.id);
|
||||
if (!def) return false;
|
||||
if (def.supporterOnly && !isSupporter) return false;
|
||||
if (seenIds.has(w.id)) return false;
|
||||
seenIds.add(w.id);
|
||||
if (def.slot === "main") mainCount++;
|
||||
else sideCount++;
|
||||
}
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -141,24 +143,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -141,24 +143,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
"widgets.category.art": "Art",
|
||||
"widgets.category.friends": "Friends",
|
||||
"widgets.category.game-badges": "Game Badges",
|
||||
"widgets.editorName.bio-md": "Bio (Markdown)",
|
||||
"widgets.editorName.game-badges-small": "Game Badges (Small)",
|
||||
"widgets.description.bio": "Share freeform information about yourself",
|
||||
"widgets.description.bio-md": "Share freeform information about yourself with markdown formatting",
|
||||
"widgets.description.trophies-owned": "Display your earned trophies",
|
||||
@@ -141,24 +143,8 @@
|
||||
"widgets.description.live-stream": "Show your Twitch stream while you are live streaming Splatoon 3",
|
||||
"widgets.description.countdown": "Count down to a date and event of your choosing",
|
||||
"widgets.description.markdown": "Write anything you want with markdown formatting",
|
||||
"widgets.forms.bio": "Bio",
|
||||
"widgets.forms.bio.markdownSupport": "Supports Markdown",
|
||||
"widgets.forms.division": "Division",
|
||||
"widgets.forms.division.both": "Both divisions",
|
||||
"widgets.forms.division.tentatek": "Tentatek only",
|
||||
"widgets.forms.division.takoroka": "Takoroka only",
|
||||
"widgets.forms.timezone": "Timezone",
|
||||
"widgets.forms.favoriteStage": "Favorite Stage",
|
||||
"widgets.forms.weapon": "Weapon",
|
||||
"widgets.forms.peakXp": "Peak XP",
|
||||
"widgets.forms.source": "Art source",
|
||||
"widgets.forms.source.ALL": "All",
|
||||
"widgets.forms.source.MADE-BY": "Made by me",
|
||||
"widgets.forms.source.MADE-OF": "Made of me",
|
||||
"widgets.forms.links": "Links",
|
||||
"widgets.forms.gameBadges": "Badges",
|
||||
"widgets.forms.gameBadgesSearch": "Search badges by name...",
|
||||
"widgets.forms.tierListUrl": "Tier List URL",
|
||||
"widget.tier-list.untitled": "Untitled Tier List",
|
||||
"controllers.s1-pro-con": "Switch 1 Pro Controller",
|
||||
"controllers.s2-pro-con": "Switch 2 Pro Controller",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "Arte",
|
||||
"widgets.category.friends": "Amigos",
|
||||
"widgets.category.game-badges": "Chapas del juego",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "Comparte información libre sobre ti",
|
||||
"widgets.description.bio-md": "Comparte información libre sobre ti usando formato Markdown",
|
||||
"widgets.description.trophies-owned": "Muestra los trofeos que has ganado",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "Biografía",
|
||||
"widgets.forms.bio.markdownSupport": "Compatible con Markdown",
|
||||
"widgets.forms.division": "División",
|
||||
"widgets.forms.division.both": "Ambas divisiones",
|
||||
"widgets.forms.division.tentatek": "Solo Tentatek",
|
||||
"widgets.forms.division.takoroka": "Solo Sepioca",
|
||||
"widgets.forms.timezone": "Zona horaria",
|
||||
"widgets.forms.favoriteStage": "Escenario favorito",
|
||||
"widgets.forms.weapon": "Arma",
|
||||
"widgets.forms.peakXp": "Energía X máxima",
|
||||
"widgets.forms.source": "Fuente del arte",
|
||||
"widgets.forms.source.ALL": "Todo",
|
||||
"widgets.forms.source.MADE-BY": "Hecho por mí",
|
||||
"widgets.forms.source.MADE-OF": "Hecho sobre mí",
|
||||
"widgets.forms.links": "Enlaces",
|
||||
"widgets.forms.gameBadges": "Chapas",
|
||||
"widgets.forms.gameBadgesSearch": "Buscar chapas por nombre...",
|
||||
"widgets.forms.tierListUrl": "URL de la Tier List",
|
||||
"widget.tier-list.untitled": "Tier List sin título",
|
||||
"controllers.s1-pro-con": "Mando Pro de Switch 1",
|
||||
"controllers.s2-pro-con": "Mando Pro de Switch 2",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "Arte",
|
||||
"widgets.category.friends": "Amigos",
|
||||
"widgets.category.game-badges": "Insignias del juego",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "Comparte información libre sobre ti",
|
||||
"widgets.description.bio-md": "Comparte información libre sobre ti usando formato Markdown",
|
||||
"widgets.description.trophies-owned": "Muestra los trofeos que has ganado",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "Biografía",
|
||||
"widgets.forms.bio.markdownSupport": "Compatible con Markdown",
|
||||
"widgets.forms.division": "División",
|
||||
"widgets.forms.division.both": "Ambas divisiones",
|
||||
"widgets.forms.division.tentatek": "Solo Tentatek",
|
||||
"widgets.forms.division.takoroka": "Solo Pulpioka",
|
||||
"widgets.forms.timezone": "Zona horaria",
|
||||
"widgets.forms.favoriteStage": "Escenario favorito",
|
||||
"widgets.forms.weapon": "Arma",
|
||||
"widgets.forms.peakXp": "Energía X máxima",
|
||||
"widgets.forms.source": "Fuente del arte",
|
||||
"widgets.forms.source.ALL": "Todo",
|
||||
"widgets.forms.source.MADE-BY": "Hecho por mí",
|
||||
"widgets.forms.source.MADE-OF": "Hecho sobre mí",
|
||||
"widgets.forms.links": "Enlaces",
|
||||
"widgets.forms.gameBadges": "Insignias",
|
||||
"widgets.forms.gameBadgesSearch": "Buscar insignias por nombre...",
|
||||
"widgets.forms.tierListUrl": "URL de la Tier List",
|
||||
"widget.tier-list.untitled": "Tier List sin título",
|
||||
"controllers.s1-pro-con": "Control Pro de Switch 1",
|
||||
"controllers.s2-pro-con": "Control Pro de Switch 2",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -139,24 +141,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -139,24 +141,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -141,24 +143,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -92,6 +92,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -143,24 +145,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -91,6 +91,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -142,24 +144,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -92,6 +92,8 @@
|
||||
"widgets.category.art": "",
|
||||
"widgets.category.friends": "",
|
||||
"widgets.category.game-badges": "",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "",
|
||||
"widgets.description.bio-md": "",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -143,24 +145,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "",
|
||||
"widgets.forms.bio.markdownSupport": "",
|
||||
"widgets.forms.division": "",
|
||||
"widgets.forms.division.both": "",
|
||||
"widgets.forms.division.tentatek": "",
|
||||
"widgets.forms.division.takoroka": "",
|
||||
"widgets.forms.timezone": "",
|
||||
"widgets.forms.favoriteStage": "",
|
||||
"widgets.forms.weapon": "",
|
||||
"widgets.forms.peakXp": "",
|
||||
"widgets.forms.source": "",
|
||||
"widgets.forms.source.ALL": "",
|
||||
"widgets.forms.source.MADE-BY": "",
|
||||
"widgets.forms.source.MADE-OF": "",
|
||||
"widgets.forms.links": "",
|
||||
"widgets.forms.gameBadges": "",
|
||||
"widgets.forms.gameBadgesSearch": "",
|
||||
"widgets.forms.tierListUrl": "",
|
||||
"widget.tier-list.untitled": "",
|
||||
"controllers.s1-pro-con": "",
|
||||
"controllers.s2-pro-con": "",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"widgets.category.art": "插画",
|
||||
"widgets.category.friends": "好友",
|
||||
"widgets.category.game-badges": "游戏内徽章",
|
||||
"widgets.editorName.bio-md": "",
|
||||
"widgets.editorName.game-badges-small": "",
|
||||
"widgets.description.bio": "自由分享关于您自己的自定义信息",
|
||||
"widgets.description.bio-md": "自由分享关于您自己的自定义信息,支持 Markdown 语法",
|
||||
"widgets.description.trophies-owned": "",
|
||||
@@ -139,24 +141,8 @@
|
||||
"widgets.description.live-stream": "",
|
||||
"widgets.description.countdown": "",
|
||||
"widgets.description.markdown": "",
|
||||
"widgets.forms.bio": "个人简介",
|
||||
"widgets.forms.bio.markdownSupport": "支持 Markdown 语法",
|
||||
"widgets.forms.division": "组别",
|
||||
"widgets.forms.division.both": "均可",
|
||||
"widgets.forms.division.tentatek": "仅限艾洛眼",
|
||||
"widgets.forms.division.takoroka": "仅限暇古",
|
||||
"widgets.forms.timezone": "时区",
|
||||
"widgets.forms.favoriteStage": "喜爱的场地",
|
||||
"widgets.forms.weapon": "武器",
|
||||
"widgets.forms.peakXp": "最高 XP",
|
||||
"widgets.forms.source": "作品来源",
|
||||
"widgets.forms.source.ALL": "全部",
|
||||
"widgets.forms.source.MADE-BY": "由我创作",
|
||||
"widgets.forms.source.MADE-OF": "与我相关",
|
||||
"widgets.forms.links": "自定义链接",
|
||||
"widgets.forms.gameBadges": "徽章",
|
||||
"widgets.forms.gameBadgesSearch": "按名称搜索徽章...",
|
||||
"widgets.forms.tierListUrl": "自制强度榜 URL",
|
||||
"widget.tier-list.untitled": "未命名自制强度榜",
|
||||
"controllers.s1-pro-con": "Nintendo Switch Pro 控制器",
|
||||
"controllers.s2-pro-con": "Nintendo Switch 2 Pro 控制器",
|
||||
|
||||
Reference in New Issue
Block a user