user perf stats UI wip
This commit is contained in:
parent
b9f62b3321
commit
048db843ee
|
@ -223,10 +223,13 @@ object User extends LilaController {
|
||||||
}
|
}
|
||||||
|
|
||||||
def perfStat(username: String, perfKey: String) = Open { implicit ctx =>
|
def perfStat(username: String, perfKey: String) = Open { implicit ctx =>
|
||||||
OptionFuResult(UserRepo named username) { user =>
|
OptionFuResult(UserRepo named username) { u =>
|
||||||
lila.rating.PerfType(perfKey).fold(notFound) { perfType =>
|
if ((u.disabled || (u.lame && !ctx.is(u))) && !isGranted(_.UserSpy)) notFound
|
||||||
Env.perfStat.get(user, perfType).map { perfStat =>
|
else lila.rating.PerfType(perfKey).fold(notFound) { perfType =>
|
||||||
Ok(html.user.perfStat(user, perfStat))
|
Env.perfStat.get(u, perfType).flatMap { perfStat =>
|
||||||
|
Env.current.userInfo(u, ctx).map { info =>
|
||||||
|
Ok(html.user.perfStat(u, info, perfStat))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,24 @@
|
||||||
@(u: User, perfStat: lila.perfStat.PerfStat)(implicit ctx: Context)
|
@(u: User, info: lila.app.mashup.UserInfo, perfStat: lila.perfStat.PerfStat)(implicit ctx: Context)
|
||||||
|
|
||||||
@perfStat
|
@user.layout(
|
||||||
|
title = s"${u.username} ${perfStat.perfType.name} stats",
|
||||||
|
side = side(u, info).some,
|
||||||
|
robots = false) {
|
||||||
|
<div class="content_box no_padding user_show">
|
||||||
|
<div class="content_box_top">
|
||||||
|
<h1 class="lichess_title">
|
||||||
|
<a href="@routes.User.show(u.username)">
|
||||||
|
<span@if(isOnline(u.id)) { class="connected" title="Online" } else { title="Offline" } data-icon="r"></span>
|
||||||
|
@u.titleUsername
|
||||||
|
</a>
|
||||||
|
@perfStat.perfType.name stats
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
<a href="@routes.User.showFilter(u.username, "search")?perf=@perfStat.perfType.id">
|
@perfStat
|
||||||
View all @perfStat.perfType.name games
|
|
||||||
</a>
|
<a href="@routes.User.showFilter(u.username, "search")?perf=@perfStat.perfType.id">
|
||||||
|
View all @perfStat.perfType.name games
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
@import lila.rating.PerfType
|
@import lila.rating.PerfType
|
||||||
|
|
||||||
@title = @{ s"${u.username} : ${userGameFilterTitleNoTag(info, filters.current)}${if(games.currentPage == 1) "" else " - page " + games.currentPage}" }
|
|
||||||
|
|
||||||
@evenMoreJs = {
|
@evenMoreJs = {
|
||||||
@if(!u.lame || ctx.is(u) || isGranted(_.UserSpy)) {
|
@if(!u.lame || ctx.is(u) || isGranted(_.UserSpy)) {
|
||||||
@if(filters.current.name == "search") {
|
@if(filters.current.name == "search") {
|
||||||
|
@ -24,66 +22,9 @@ if (lichess.once('user-tournaments-tour')) setTimeout(lichess.startTournamentSta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@showPerf(perf: lila.rating.Perf, perfType: PerfType, name: Option[String] = none) = {
|
|
||||||
<div data-icon="@perfType.iconChar">
|
|
||||||
<h3 class="hint--top" data-hint="@perfType.title">
|
|
||||||
@if(lila.rating.PerfType.nonGame.contains(perfType)) {
|
|
||||||
@name.getOrElse(perfType.name).toUpperCase
|
|
||||||
} else {
|
|
||||||
<a href="@routes.User.perfStat(u.username, perfType.key)">
|
|
||||||
@name.getOrElse(perfType.name).toUpperCase
|
|
||||||
</a>
|
|
||||||
}
|
|
||||||
</h3>
|
|
||||||
<div class="rating">
|
|
||||||
<strong class="hint--bottom" data-hint="Glicko rating ±@perf.glicko.intDeviation">@perf.glicko.intRating@if(perf.provisional){?}</strong>
|
|
||||||
<span class="hint--bottom">/ @perf.nb.localize @if(perfType.key == "puzzle") {@trans.puzzles()} else {@trans.games()}</span>
|
|
||||||
@showProgress(perf.progress)
|
|
||||||
</div>
|
|
||||||
<div class="rank" title="Rank is updated every 15 minutes">
|
|
||||||
@info.ranks.get(perfType.key).map { rank =>
|
|
||||||
Rank: @rank.localize@nth(rank)
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
@side = {
|
|
||||||
<div class="side sub_ratings">
|
|
||||||
@if(!u.lame || ctx.is(u) || isGranted(_.UserSpy)) {
|
|
||||||
@showPerf(u.perfs.bullet, PerfType.Bullet)
|
|
||||||
@showPerf(u.perfs.blitz, PerfType.Blitz)
|
|
||||||
@showPerf(u.perfs.classical, PerfType.Classical)
|
|
||||||
@showPerf(u.perfs.correspondence, PerfType.Correspondence)
|
|
||||||
<br />
|
|
||||||
@if(u.perfs.chess960.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.chess960, PerfType.Chess960)
|
|
||||||
}
|
|
||||||
@if(u.perfs.kingOfTheHill.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.kingOfTheHill, PerfType.KingOfTheHill)
|
|
||||||
}
|
|
||||||
@if(u.perfs.threeCheck.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.threeCheck, PerfType.ThreeCheck)
|
|
||||||
}
|
|
||||||
@if(u.perfs.antichess.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.antichess, PerfType.Antichess)
|
|
||||||
}
|
|
||||||
@if(u.perfs.atomic.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.atomic, PerfType.Atomic)
|
|
||||||
}
|
|
||||||
@if(u.perfs.horde.nonEmpty) {
|
|
||||||
@showPerf(u.perfs.horde, PerfType.Horde)
|
|
||||||
}
|
|
||||||
<br />
|
|
||||||
}
|
|
||||||
@showPerf(u.perfs.puzzle, PerfType.Puzzle)
|
|
||||||
@showPerf(u.perfs.opening, PerfType.Opening)
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
@user.layout(
|
@user.layout(
|
||||||
title = title,
|
title = s"${u.username} : ${userGameFilterTitleNoTag(info, filters.current)}${if(games.currentPage == 1) "" else " - page " + games.currentPage}",
|
||||||
side = side.some,
|
side = side(u, info).some,
|
||||||
robots = false,
|
robots = false,
|
||||||
evenMoreJs = evenMoreJs,
|
evenMoreJs = evenMoreJs,
|
||||||
openGraph = lila.app.ui.OpenGraph(
|
openGraph = lila.app.ui.OpenGraph(
|
||||||
|
|
58
app/views/user/side.scala.html
Normal file
58
app/views/user/side.scala.html
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
@(u: User, info: lila.app.mashup.UserInfo)(implicit ctx: Context)
|
||||||
|
|
||||||
|
@import lila.rating.PerfType
|
||||||
|
|
||||||
|
@showPerf(perf: lila.rating.Perf, perfType: PerfType, name: Option[String] = none) = {
|
||||||
|
<div data-icon="@perfType.iconChar">
|
||||||
|
<h3 class="hint--top" data-hint="@perfType.title">
|
||||||
|
@if(lila.rating.PerfType.nonGame.contains(perfType)) {
|
||||||
|
@name.getOrElse(perfType.name).toUpperCase
|
||||||
|
} else {
|
||||||
|
<a href="@routes.User.perfStat(u.username, perfType.key)">
|
||||||
|
@name.getOrElse(perfType.name).toUpperCase
|
||||||
|
</a>
|
||||||
|
}
|
||||||
|
</h3>
|
||||||
|
<div class="rating">
|
||||||
|
<strong class="hint--bottom" data-hint="Glicko rating ±@perf.glicko.intDeviation">@perf.glicko.intRating@if(perf.provisional){?}</strong>
|
||||||
|
<span class="hint--bottom">/ @perf.nb.localize @if(perfType.key == "puzzle") {@trans.puzzles()} else {@trans.games()}</span>
|
||||||
|
@showProgress(perf.progress)
|
||||||
|
</div>
|
||||||
|
<div class="rank" title="Rank is updated every 15 minutes">
|
||||||
|
@info.ranks.get(perfType.key).map { rank =>
|
||||||
|
Rank: @rank.localize@nth(rank)
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="side sub_ratings">
|
||||||
|
@if(!u.lame || ctx.is(u) || isGranted(_.UserSpy)) {
|
||||||
|
@showPerf(u.perfs.bullet, PerfType.Bullet)
|
||||||
|
@showPerf(u.perfs.blitz, PerfType.Blitz)
|
||||||
|
@showPerf(u.perfs.classical, PerfType.Classical)
|
||||||
|
@showPerf(u.perfs.correspondence, PerfType.Correspondence)
|
||||||
|
<br />
|
||||||
|
@if(u.perfs.chess960.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.chess960, PerfType.Chess960)
|
||||||
|
}
|
||||||
|
@if(u.perfs.kingOfTheHill.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.kingOfTheHill, PerfType.KingOfTheHill)
|
||||||
|
}
|
||||||
|
@if(u.perfs.threeCheck.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.threeCheck, PerfType.ThreeCheck)
|
||||||
|
}
|
||||||
|
@if(u.perfs.antichess.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.antichess, PerfType.Antichess)
|
||||||
|
}
|
||||||
|
@if(u.perfs.atomic.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.atomic, PerfType.Atomic)
|
||||||
|
}
|
||||||
|
@if(u.perfs.horde.nonEmpty) {
|
||||||
|
@showPerf(u.perfs.horde, PerfType.Horde)
|
||||||
|
}
|
||||||
|
<br />
|
||||||
|
}
|
||||||
|
@showPerf(u.perfs.puzzle, PerfType.Puzzle)
|
||||||
|
@showPerf(u.perfs.opening, PerfType.Opening)
|
||||||
|
</div>
|
Loading…
Reference in a new issue