Skip to content

Commit

Permalink
/analysis variant selector WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
ornicar committed Feb 15, 2016
1 parent 6e8a334 commit 40ac6bf
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 11 deletions.
20 changes: 14 additions & 6 deletions app/controllers/UserAnalysis.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package controllers
import chess.format.Forsyth
import chess.format.Forsyth.SituationPlus
import chess.Situation
import chess.variant.Standard
import chess.variant.Variant
import play.api.libs.json.Json
import play.api.mvc._
import scala.concurrent.duration._
Expand All @@ -14,16 +16,22 @@ import views._

object UserAnalysis extends LilaController with TheftPrevention {

def index = load("")
def index = load("", Standard)

def load(urlFen: String) = Open { implicit ctx =>
def variantOrLoad(something: String) =
Variant.byKey get something match {
case Some(variant) => load("", variant)
case None => load(something, Standard)
}

def load(urlFen: String, variant: Variant) = Open { implicit ctx =>
val fenStr = Some(urlFen.trim.replace("_", " ")).filter(_.nonEmpty) orElse get("fen")
val decodedFen = fenStr.map { java.net.URLDecoder.decode(_, "UTF-8").trim }.filter(_.nonEmpty)
val situation = (decodedFen flatMap Forsyth.<<<) | SituationPlus(Situation(chess.variant.Standard), 1)
val situation = (decodedFen flatMap Forsyth.<<<) | SituationPlus(Situation(variant), 1)
val pov = makePov(situation)
val orientation = get("color").flatMap(chess.Color.apply) | pov.color
Env.api.roundApi.userAnalysisJson(pov, ctx.pref, decodedFen, orientation, owner = false) map { data =>
Ok(html.board.userAnalysis(data, none))
Ok(html.board.userAnalysis(data, variant))
}
}

Expand All @@ -36,7 +44,7 @@ object UserAnalysis extends LilaController with TheftPrevention {
whitePlayer = lila.game.Player.white,
blackPlayer = lila.game.Player.black,
mode = chess.Mode.Casual,
variant = chess.variant.Standard,
variant = from.situation.board.variant,
source = lila.game.Source.Api,
pgnImport = None).copy(id = "synthetic"),
from.situation.color)
Expand All @@ -46,7 +54,7 @@ object UserAnalysis extends LilaController with TheftPrevention {
GameRepo initialFen game.id flatMap { initialFen =>
val pov = Pov(game, chess.Color(color == "white"))
Env.api.roundApi.userAnalysisJson(pov, ctx.pref, initialFen, pov.color, owner = isMyPov(pov)) map { data =>
Ok(html.board.userAnalysis(data, pov.some))
Ok(html.board.userAnalysis(data, pov.game.variant))
}
} map NoCache
}
Expand Down
19 changes: 18 additions & 1 deletion app/views/board/userAnalysis.scala.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
@(data: play.api.libs.json.JsObject, pov: Option[Pov])(implicit ctx: Context)
@(data: play.api.libs.json.JsObject, variant: chess.variant.Variant)(implicit ctx: Context)

@import lila.rating.PerfType.iconByVariant

@moreCss = {
@cssTag("analyse.css")
Expand Down Expand Up @@ -41,10 +43,25 @@
}
}

@side = {
<div class="mselect">
<div class="button" data-icon="@iconByVariant(variant)">
@variant.name
<i data-icon="u"></i>
</div>
<div class="list">
@chess.variant.Variant.all.filterNot(chess.variant.FromPosition ==).map { v =>
<a data-icon="@iconByVariant(v)" href="@routes.UserAnalysis.variantOrLoad(v.key)">@v.name</a>
}
</div>
</div>
}

@base.layout(
title = trans.analysis.str(),
moreCss = moreCss,
moreJs = moreJs,
side = side.some,
chessground = false,
openGraph = lila.app.ui.OpenGraph(
title = "Chess analysis board",
Expand Down
2 changes: 1 addition & 1 deletion conf/routes
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ POST /training/:id/attempt controllers.Puzzle.attempt(id: Int)
POST /training/:id/vote controllers.Puzzle.vote(id: Int)

# User Analysis
GET /analysis/*urlFen controllers.UserAnalysis.load(urlFen: String)
GET /analysis/*something controllers.UserAnalysis.variantOrLoad(something: String)
GET /analysis controllers.UserAnalysis.index

# Round
Expand Down
2 changes: 1 addition & 1 deletion modules/api/src/main/RoundApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private[api] final class RoundApi(
pgnMoves = pov.game.pgnMoves,
variant = pov.game.variant,
a = a,
initialFen = initialFen | chess.format.Forsyth.initial))
initialFen = initialFen | pov.game.variant.initialFen))

private def withNote(note: String)(json: JsObject) =
if (note.isEmpty) json else json + ("note" -> JsString(note))
Expand Down
2 changes: 1 addition & 1 deletion modules/chess
Submodule chess updated from b7ebe8 to 856aa0
5 changes: 4 additions & 1 deletion modules/rating/src/main/PerfType.scala
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ object PerfType {
}

def byVariant(variant: chess.variant.Variant): Option[PerfType] = variant match {
case chess.variant.Standard => none
case chess.variant.Crazyhouse => Crazyhouse.some
case chess.variant.Chess960 => Chess960.some
case chess.variant.KingOfTheHill => KingOfTheHill.some
Expand All @@ -150,5 +149,9 @@ object PerfType {
case chess.variant.Atomic => Atomic.some
case chess.variant.Horde => Horde.some
case chess.variant.RacingKings => RacingKings.some
case _ => none
}

def iconByVariant(variant: chess.variant.Variant): Char =
byVariant(variant).getOrElse(Classical).iconChar
}
13 changes: 13 additions & 0 deletions public/javascripts/big.js
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,19 @@ lichess.numberFormat = (function() {
return false;
});

$('.mselect .button').on('click', function() {
var $p = $(this).parent();
$p.toggleClass('shown');
setTimeout(function() {
var handler = function(e) {
if ($.contains($p[0], e.target)) return;
$p.removeClass('shown');
$('html').off('click', handler);
};
$('html').on('click', handler);
}, 10);
});

var powerTipLoader = '<div class="square-wrap"><div class="square-spin"></div></div>';

lichess.userPowertip = function($els, placement) {
Expand Down
58 changes: 58 additions & 0 deletions public/stylesheets/analyse.css
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,64 @@ table.modAssessment td.noMatch {
color: #759900;
}

.mselect {
margin-top: 20px;
width: 100%;
font-size: 1.2em;
box-sizing: border-box;
display:inline-block;
position: relative;
padding:0;
border:0;
}
.mselect .button {
position: relative;
display: inline-block;
box-sizing: border-box;
width: 100%;
padding: 10px;
}
.mselect .button i {
font-size: 10px;
position: absolute;
right: 5px;
top: 14px;
}
.mselect .list {
width:100%;
margin:0;
padding:0;
position:absolute;
top:0;
text-align: left;
list-style-type:none;
font-weight: normal;
background:#FFF;
box-shadow: 0px 8px 17px 0px rgba(0, 0, 0, 0.2), 0px 6px 20px 0px rgba(0, 0, 0, 0.19);
border-radius: 3px;
display: none;
}
.mselect.shown .list {
display: block;
}
.mselect .list a {
display: block;
padding: 10px;
background:#fff;
transition: 0.13s;
outline:0;
text-decoration:none;
cursor:pointer;
}
.mselect .list a:hover{
background: #3893E8;
color: #fff;
}
.mselect [data-icon]:before {
font-size: 1.5em;
margin-right: 10px;
}

body.coords_2 .gauge_displayed square[data-coord-y]::before {
color: #fff;
text-shadow: 0 1px 2px #000;
Expand Down

0 comments on commit 40ac6bf

Please sign in to comment.