From 048db843ee654f8231f6a5eecf70ace2f4872e28 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Thu, 24 Dec 2015 10:57:20 +0700 Subject: [PATCH] user perf stats UI wip --- app/controllers/User.scala | 11 ++++-- app/views/user/perfStat.scala.html | 27 ++++++++++--- app/views/user/show.scala.html | 63 +----------------------------- app/views/user/side.scala.html | 58 +++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 70 deletions(-) create mode 100644 app/views/user/side.scala.html diff --git a/app/controllers/User.scala b/app/controllers/User.scala index 7bd5c1140e..2955e03662 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -223,10 +223,13 @@ object User extends LilaController { } def perfStat(username: String, perfKey: String) = Open { implicit ctx => - OptionFuResult(UserRepo named username) { user => - lila.rating.PerfType(perfKey).fold(notFound) { perfType => - Env.perfStat.get(user, perfType).map { perfStat => - Ok(html.user.perfStat(user, perfStat)) + OptionFuResult(UserRepo named username) { u => + if ((u.disabled || (u.lame && !ctx.is(u))) && !isGranted(_.UserSpy)) notFound + else lila.rating.PerfType(perfKey).fold(notFound) { perfType => + Env.perfStat.get(u, perfType).flatMap { perfStat => + Env.current.userInfo(u, ctx).map { info => + Ok(html.user.perfStat(u, info, perfStat)) + } } } } diff --git a/app/views/user/perfStat.scala.html b/app/views/user/perfStat.scala.html index 4e08fc573e..0ce4cc5f04 100644 --- a/app/views/user/perfStat.scala.html +++ b/app/views/user/perfStat.scala.html @@ -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) { +
+
+

+ + + @u.titleUsername + + @perfStat.perfType.name stats +

+
- - View all @perfStat.perfType.name games - + @perfStat + + + View all @perfStat.perfType.name games + +
+} diff --git a/app/views/user/show.scala.html b/app/views/user/show.scala.html index 8ec474bf63..298dbe7794 100644 --- a/app/views/user/show.scala.html +++ b/app/views/user/show.scala.html @@ -2,8 +2,6 @@ @import lila.rating.PerfType -@title = @{ s"${u.username} : ${userGameFilterTitleNoTag(info, filters.current)}${if(games.currentPage == 1) "" else " - page " + games.currentPage}" } - @evenMoreJs = { @if(!u.lame || ctx.is(u) || isGranted(_.UserSpy)) { @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) = { -
-

- @if(lila.rating.PerfType.nonGame.contains(perfType)) { - @name.getOrElse(perfType.name).toUpperCase - } else { - - @name.getOrElse(perfType.name).toUpperCase - - } -

-
- @perf.glicko.intRating@if(perf.provisional){?} - / @perf.nb.localize @if(perfType.key == "puzzle") {@trans.puzzles()} else {@trans.games()} - @showProgress(perf.progress) -
-
- @info.ranks.get(perfType.key).map { rank => - Rank: @rank.localize@nth(rank) - } -
-
-} - -@side = { -
- @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) -
- @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) - } -
- } - @showPerf(u.perfs.puzzle, PerfType.Puzzle) - @showPerf(u.perfs.opening, PerfType.Opening) -
-} - @user.layout( -title = title, -side = side.some, +title = s"${u.username} : ${userGameFilterTitleNoTag(info, filters.current)}${if(games.currentPage == 1) "" else " - page " + games.currentPage}", +side = side(u, info).some, robots = false, evenMoreJs = evenMoreJs, openGraph = lila.app.ui.OpenGraph( diff --git a/app/views/user/side.scala.html b/app/views/user/side.scala.html new file mode 100644 index 0000000000..e564d599d3 --- /dev/null +++ b/app/views/user/side.scala.html @@ -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) = { +
+

+ @if(lila.rating.PerfType.nonGame.contains(perfType)) { + @name.getOrElse(perfType.name).toUpperCase + } else { + + @name.getOrElse(perfType.name).toUpperCase + + } +

+
+ @perf.glicko.intRating@if(perf.provisional){?} + / @perf.nb.localize @if(perfType.key == "puzzle") {@trans.puzzles()} else {@trans.games()} + @showProgress(perf.progress) +
+
+ @info.ranks.get(perfType.key).map { rank => + Rank: @rank.localize@nth(rank) + } +
+
+} + +
+ @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) +
+ @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) + } +
+ } + @showPerf(u.perfs.puzzle, PerfType.Puzzle) + @showPerf(u.perfs.opening, PerfType.Opening) +