mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-06 13:40:16 +08:00
added all time lb positions to profiles
This commit is contained in:
parent
dca5450855
commit
ebeafd9880
7 changed files with 145 additions and 14 deletions
|
@ -12,6 +12,7 @@ import { deleteAllPresets } from "../../dal/preset";
|
|||
import { deleteAll as deleteAllResults } from "../../dal/result";
|
||||
import { deleteConfig } from "../../dal/config";
|
||||
import { verify } from "../../utils/captcha";
|
||||
import * as LeaderboardsDAL from "../../dal/leaderboards";
|
||||
|
||||
async function verifyCaptcha(captcha: string): Promise<void> {
|
||||
if (!(await verify(captcha))) {
|
||||
|
@ -503,10 +504,43 @@ export async function getProfile(
|
|||
return new MonkeyResponse("Profile retrived: banned user", baseProfile);
|
||||
}
|
||||
|
||||
const allTime15English = await LeaderboardsDAL.getRank(
|
||||
"time",
|
||||
"15",
|
||||
"english",
|
||||
user.uid
|
||||
);
|
||||
|
||||
const allTime60English = await LeaderboardsDAL.getRank(
|
||||
"time",
|
||||
"60",
|
||||
"english",
|
||||
user.uid
|
||||
);
|
||||
|
||||
const allTime15EnglishRank = allTime15English
|
||||
? allTime15English.rank
|
||||
: undefined;
|
||||
const allTime60EnglishRank = allTime60English
|
||||
? allTime60English.rank
|
||||
: undefined;
|
||||
|
||||
const alltimelbs = {
|
||||
time: {
|
||||
"15": {
|
||||
english: allTime15EnglishRank,
|
||||
},
|
||||
"60": {
|
||||
english: allTime60EnglishRank,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const profileData = {
|
||||
...baseProfile,
|
||||
inventory,
|
||||
details: profileDetails,
|
||||
allTimeLbs: alltimelbs,
|
||||
};
|
||||
|
||||
return new MonkeyResponse("Profile retrieved", profileData);
|
||||
|
|
|
@ -62,6 +62,7 @@
|
|||
grid-template-rows: auto 1fr;
|
||||
grid-template-areas:
|
||||
"info info"
|
||||
"leaderboards leaderboards"
|
||||
"pbsTime pbsWords";
|
||||
|
||||
.pbsWords {
|
||||
|
@ -78,7 +79,8 @@
|
|||
|
||||
.pbsWords,
|
||||
.pbsTime,
|
||||
.details {
|
||||
.details,
|
||||
.leaderboardsPositions {
|
||||
// user-select: none;
|
||||
background: var(--sub-alt-color);
|
||||
padding: 1rem;
|
||||
|
@ -119,6 +121,43 @@
|
|||
.editProfileButton {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
.leaderboardsPositions {
|
||||
grid-area: leaderboards;
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
grid-template-areas: "title t15 t60";
|
||||
grid-template-columns: unset;
|
||||
justify-items: center;
|
||||
.title {
|
||||
color: var(--sub-color);
|
||||
text-align: center;
|
||||
grid-area: title;
|
||||
}
|
||||
.group {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: auto 1fr;
|
||||
align-items: center;
|
||||
.testType {
|
||||
color: var(--sub-color);
|
||||
}
|
||||
.pos {
|
||||
font-size: 2rem;
|
||||
}
|
||||
&.t15 {
|
||||
grid-area: t15;
|
||||
}
|
||||
&.t60 {
|
||||
grid-area: t60;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pbsWords,
|
||||
.pbsTime {
|
||||
.group {
|
||||
justify-self: center;
|
||||
display: grid;
|
||||
|
|
|
@ -197,6 +197,7 @@
|
|||
grid-template-rows: auto auto auto;
|
||||
grid-template-areas:
|
||||
"info"
|
||||
"leaderboards"
|
||||
"pbsTime"
|
||||
"pbsWords";
|
||||
.details.soc {
|
||||
|
@ -247,6 +248,9 @@
|
|||
// }
|
||||
}
|
||||
}
|
||||
.leaderboardsPositions {
|
||||
grid-template-areas: "title title" "t15 t60";
|
||||
}
|
||||
}
|
||||
#leaderboards {
|
||||
.mainTitle {
|
||||
|
@ -498,6 +502,7 @@
|
|||
grid-template-rows: auto auto auto;
|
||||
grid-template-areas:
|
||||
"info"
|
||||
"leaderboards"
|
||||
"pbsTime"
|
||||
"pbsWords";
|
||||
.details.none {
|
||||
|
@ -723,6 +728,9 @@
|
|||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.leaderboardsPositions {
|
||||
grid-template-areas: "title" "t15" "t60";
|
||||
}
|
||||
}
|
||||
#testModesNotice {
|
||||
font-size: 0.75rem;
|
||||
|
|
|
@ -9,11 +9,16 @@ import * as ActivePage from "../states/active-page";
|
|||
|
||||
type ProfileViewPaths = "profile" | "account";
|
||||
|
||||
interface ProfileData extends MonkeyTypes.Snapshot {
|
||||
allTimeLbs: MonkeyTypes.LeaderboardMemory;
|
||||
}
|
||||
|
||||
export async function update(
|
||||
where: ProfileViewPaths,
|
||||
profile: Partial<MonkeyTypes.Snapshot>
|
||||
profile: Partial<ProfileData>
|
||||
): Promise<void> {
|
||||
const elementClass = where.charAt(0).toUpperCase() + where.slice(1);
|
||||
const profileElement = $(`.page${elementClass} .profile`);
|
||||
const details = $(`.page${elementClass} .profile .details`);
|
||||
|
||||
// ============================================================================
|
||||
|
@ -181,6 +186,32 @@ export async function update(
|
|||
`${Misc.abbreviateNumber(xpForLevel - xpToDisplay)} xp until next level`
|
||||
);
|
||||
|
||||
//lbs
|
||||
|
||||
if (banned) {
|
||||
profileElement.find(".leaderboardsPositions").addClass("hidden");
|
||||
} else {
|
||||
profileElement.find(".leaderboardsPositions").removeClass("hidden");
|
||||
|
||||
const lbPos = where === "profile" ? profile.allTimeLbs : profile.lbMemory;
|
||||
|
||||
const t15 = lbPos?.time?.[15]?.["english"];
|
||||
const t60 = lbPos?.time?.[60]?.["english"];
|
||||
|
||||
if (!t15 && !t60) {
|
||||
profileElement.find(".leaderboardsPositions").addClass("hidden");
|
||||
} else {
|
||||
const t15string = t15 ? Misc.getPositionString(t15) : "-";
|
||||
profileElement
|
||||
.find(".leaderboardsPositions .group.t15 .pos")
|
||||
.text(t15string);
|
||||
const t60string = t60 ? Misc.getPositionString(t60) : "-";
|
||||
profileElement
|
||||
.find(".leaderboardsPositions .group.t60 .pos")
|
||||
.text(t60string);
|
||||
}
|
||||
}
|
||||
|
||||
//structure
|
||||
|
||||
const bioAndKey = bio || keyboard;
|
||||
|
|
|
@ -65,6 +65,17 @@ function reset(): void {
|
|||
<div class="value">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="leaderboardsPositions">
|
||||
<div class="title">All-Time English Leaderboards</div>
|
||||
<div class="group t15">
|
||||
<div class="testType">15 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
<div class="group t60">
|
||||
<div class="testType">60 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pbsWords">
|
||||
<div class="group">
|
||||
<div class="quick">
|
||||
|
|
|
@ -93,20 +93,17 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="typingStats triplegroup">
|
||||
<div class="group globalTestsStarted">
|
||||
<div class="title">tests started</div>
|
||||
<div class="val">-</div>
|
||||
<div class="leaderboardsPositions">
|
||||
<div class="title">All-Time English Leaderboards</div>
|
||||
<div class="group t15">
|
||||
<div class="testType">15 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
<div class="group globalTestsCompleted">
|
||||
<div class="title">tests completed</div>
|
||||
<div class="val">-</div>
|
||||
<div class="group t60">
|
||||
<div class="testType">60 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
<div class="group globalTimeTyping">
|
||||
<div class="title">time typing</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="pbsWords">
|
||||
<div class="group">
|
||||
<div class="quick">
|
||||
|
|
|
@ -75,6 +75,17 @@
|
|||
<div class="value">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="leaderboardsPositions">
|
||||
<div class="title">All-Time English Leaderboards</div>
|
||||
<div class="group t15">
|
||||
<div class="testType">15 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
<div class="group t60">
|
||||
<div class="testType">60 seconds</div>
|
||||
<div class="pos">-</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pbsWords">
|
||||
<div class="group">
|
||||
<div class="quick">
|
||||
|
|
Loading…
Add table
Reference in a new issue