Skip to content

Commit 2b380bb

Browse files
authored
refactor: use ElementWithUtils in page class (@fehmer) (monkeytypegame#7223)
1 parent 735740d commit 2b380bb

File tree

16 files changed

+50
-25
lines changed

16 files changed

+50
-25
lines changed

frontend/__tests__/setup-tests.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ vi.mock("../src/ts/utils/dom", () => {
6464
getOffsetTop: vi.fn().mockReturnValue(0),
6565
getOffsetLeft: vi.fn().mockReturnValue(0),
6666
animate: vi.fn().mockResolvedValue(null),
67+
promiseAnimate: vi.fn().mockResolvedValue(null),
6768
native: document.createElement("div"),
6869
};
6970
};

frontend/src/ts/controllers/page-controller.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ async function showSyncLoading({
5959
loadingOptions: LoadingOptions[];
6060
totalDuration: number;
6161
}): Promise<void> {
62-
PageLoading.page.element.removeClass("hidden").css("opacity", 0);
62+
PageLoading.page.element.show().setStyle({ opacity: "0" });
6363
await PageLoading.page.beforeShow({});
6464

6565
const fillDivider = loadingOptions.length;
6666
const fillOffset = 100 / fillDivider;
6767

6868
//void here to run the loading promise as soon as possible
69-
void Misc.promiseAnimate(PageLoading.page.element[0] as HTMLElement, {
69+
void PageLoading.page.element.promiseAnimate({
7070
opacity: "1",
7171
duration: totalDuration / 2,
7272
});
@@ -97,13 +97,13 @@ async function showSyncLoading({
9797
}
9898
}
9999

100-
await Misc.promiseAnimate(PageLoading.page.element[0] as HTMLElement, {
100+
await PageLoading.page.element.promiseAnimate({
101101
opacity: "0",
102102
duration: totalDuration / 2,
103103
});
104104

105105
await PageLoading.page.afterHide();
106-
PageLoading.page.element.addClass("hidden");
106+
PageLoading.page.element.hide();
107107
}
108108

109109
// Global abort controller for keyframe promises
@@ -206,12 +206,12 @@ export async function change(
206206

207207
//previous page
208208
await previousPage?.beforeHide?.();
209-
previousPage.element.removeClass("hidden").css("opacity", 1);
210-
await Misc.promiseAnimate(previousPage.element[0] as HTMLElement, {
209+
previousPage.element.show().setStyle({ opacity: "1" });
210+
await previousPage.element.promiseAnimate({
211211
opacity: "0",
212212
duration: totalDuration / 2,
213213
});
214-
previousPage.element.addClass("hidden");
214+
previousPage.element.hide();
215215
await previousPage?.afterHide();
216216

217217
// we need to evaluate and store next page loading mode in case options.loadingOptions.loadingMode is sync
@@ -281,8 +281,8 @@ export async function change(
281281
});
282282
}
283283

284-
nextPage.element.removeClass("hidden").css("opacity", 0);
285-
await Misc.promiseAnimate(nextPage.element[0] as HTMLElement, {
284+
nextPage.element.show().setStyle({ opacity: "0" });
285+
await nextPage.element.promiseAnimate({
286286
opacity: "1",
287287
duration: totalDuration / 2,
288288
});

frontend/src/ts/pages/404.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import Page from "./page";
22
import * as Skeleton from "../utils/skeleton";
3+
import { qsr } from "../utils/dom";
34

45
export const page = new Page({
56
id: "404",
6-
element: $(".page.page404"),
7+
element: qsr(".page.page404"),
78
path: "/404",
89
afterHide: async (): Promise<void> => {
910
Skeleton.remove("page404");

frontend/src/ts/pages/about.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import * as Skeleton from "../utils/skeleton";
1010
import { TypingStats, SpeedHistogram } from "@monkeytype/schemas/public";
1111
import { getNumberWithMagnitude, numberWithSpaces } from "../utils/numbers";
1212
import { tryCatch } from "@monkeytype/util/trycatch";
13+
import { qsr } from "../utils/dom";
1314

1415
function reset(): void {
1516
$(".pageAbout .contributors").empty();
@@ -199,7 +200,7 @@ function getHistogramDataBucketed(data: Record<string, number>): {
199200

200201
export const page = new Page({
201202
id: "about",
202-
element: $(".page.pageAbout"),
203+
element: qsr(".page.pageAbout"),
203204
path: "/about",
204205
afterHide: async (): Promise<void> => {
205206
reset();

frontend/src/ts/pages/account-settings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import * as BlockedUserTable from "../elements/account-settings/blocked-user-tab
1212
import * as Notifications from "../elements/notifications";
1313
import { z } from "zod";
1414
import * as AuthEvent from "../observables/auth-event";
15+
import { qsr } from "../utils/dom";
1516

1617
const pageElement = $(".page.pageAccountSettings");
1718

@@ -229,7 +230,7 @@ AuthEvent.subscribe((event) => {
229230
export const page = new PageWithUrlParams({
230231
id: "accountSettings",
231232
display: "Account Settings",
232-
element: pageElement,
233+
element: qsr(".page.pageAccountSettings"),
233234
path: "/account-settings",
234235
urlParamsSchema: UrlParameterSchema,
235236
afterHide: async (): Promise<void> => {

frontend/src/ts/pages/account.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { SnapshotResult } from "../constants/default-snapshot";
3535
import Ape from "../ape";
3636
import { AccountChart } from "@monkeytype/schemas/configs";
3737
import { SortedTableWithLimit } from "../utils/sorted-table";
38+
import { qsr } from "../utils/dom";
3839

3940
let filterDebug = false;
4041
//toggle filterdebug
@@ -1195,7 +1196,7 @@ ConfigEvent.subscribe(({ key }) => {
11951196

11961197
export const page = new Page<undefined>({
11971198
id: "account",
1198-
element: $(".page.pageAccount"),
1199+
element: qsr(".page.pageAccount"),
11991200
path: "/account",
12001201
loadingOptions: {
12011202
loadingMode: () => {

frontend/src/ts/pages/friends.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ import { Friend, UserNameSchema } from "@monkeytype/schemas/users";
3030
import * as Loader from "../elements/loader";
3131
import { LocalStorageWithSchema } from "../utils/local-storage-with-schema";
3232
import { remoteValidation } from "../utils/remote-validation";
33-
34-
const pageElement = $(".page.pageFriends");
33+
import { qsr } from "../utils/dom";
3534

3635
let friendsTable: SortedTable<Friend> | undefined = undefined;
3736

@@ -499,7 +498,7 @@ function update(): void {
499498
export const page = new Page<undefined>({
500499
id: "friends",
501500
display: "Friends",
502-
element: pageElement,
501+
element: qsr(".page.pageFriends"),
503502
path: "/friends",
504503
loadingOptions: {
505504
loadingMode: () => {

frontend/src/ts/pages/leaderboards.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import { isSafeNumber } from "@monkeytype/util/numbers";
4444
import { Mode, Mode2, ModeSchema } from "@monkeytype/schemas/shared";
4545
import * as ServerConfiguration from "../ape/server-configuration";
4646
import { getAvatarElement } from "../utils/discord-avatar";
47+
import { qsr } from "../utils/dom";
4748

4849
const LeaderboardTypeSchema = z.enum(["allTime", "weekly", "daily"]);
4950
type LeaderboardType = z.infer<typeof LeaderboardTypeSchema>;
@@ -1489,7 +1490,7 @@ $(".page.pageLeaderboards .buttonGroup.friendsOnlyButtons").on(
14891490

14901491
export const page = new PageWithUrlParams({
14911492
id: "leaderboards",
1492-
element: $(".page.pageLeaderboards"),
1493+
element: qsr(".page.pageLeaderboards"),
14931494
path: "/leaderboards",
14941495
urlParamsSchema: UrlParameterSchema,
14951496

frontend/src/ts/pages/loading.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Page from "./page";
22
import * as Skeleton from "../utils/skeleton";
33
import { promiseAnimate } from "../utils/misc";
4+
import { qsr } from "../utils/dom";
45

56
const pageEl = $(".page.pageLoading");
67
const barEl = pageEl.find(".bar");
@@ -45,7 +46,7 @@ export async function showBar(): Promise<void> {
4546

4647
export const page = new Page({
4748
id: "loading",
48-
element: pageEl,
49+
element: qsr(".page.pageLoading"),
4950
path: "/",
5051
afterHide: async (): Promise<void> => {
5152
Skeleton.remove("pageLoading");

frontend/src/ts/pages/login.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ new ValidatedHtmlInputElement(passwordVerifyInputEl, {
208208

209209
export const page = new Page({
210210
id: "login",
211-
element: $(".page.pageLogin"),
211+
element: qsr(".page.pageLogin"),
212212
path: "/login",
213213
afterHide: async (): Promise<void> => {
214214
hidePreloader();

0 commit comments

Comments
 (0)