UI improvements

This commit is contained in:
clarkerubber 2015-01-27 23:47:34 +11:00
parent 649cde92ef
commit 9219ec255e
5 changed files with 83 additions and 26 deletions

View file

@ -1,20 +1,27 @@
@import lila.evaluation.GameResults
@(game: Game, results: GameResults)(implicit ctx: Context)
<br />
@if(isGranted(_.MarkEngine) && game.analysable && !game.isCorrespondence && game.turns > 40) {
<button type="button" id="refreshAssessment">Refresh</button>
@game.players.map { p =>
<br />
@playerLink(p, cssClass = s"is color-icon ${p.color.name}".some, withOnline = false, mod = true)
<select id="@(p.color.name)Assessment">
<option value="1">Not cheating</option>
<option value="2">Unlikely cheating</option>
<option value="3">Unclear</option>
<option value="4">Likely cheating</option>
<option value="5">Cheating</option>
</select>
<br />
@results.report(p.color)
<table class="modAssessment">
<tr>
@playerLink(p, cssClass = s"is color-icon ${p.color.name}".some, withOnline = false, mod = true)
</tr>
<tr>
<td>
<select id="@(p.color.name)Assessment" data-val="@results.assessment(p.color)">
<option value="0"></option>
<option value="1">Not cheating</option>
<option value="2">Unlikely cheating</option>
<option value="3">Unclear</option>
<option value="4">Likely cheating</option>
<option value="5">Cheating</option>
</select>
</td>
<td class="@results.htmlClass(p.color)"><a href="@results.href(p.color)">@results.matchPercentage(p.color)</a></td>
</tr>
</table>
}
<button type="button" id="refreshAssessment">Refresh</button>
}

View file

@ -34,17 +34,34 @@ case class GameResults(
white: Option[GameGroupResult],
black: Option[GameGroupResult]
) {
def report(color: Color): String = {
def printResult(result: GameGroupResult): String = {
result.targetGameId + "/" + result.targetColor + " => " + result.assessment + " " + (if (result.positiveMatch) "MATCHES" else "PARTIAL") + " " + result.matchPercentage
def assessment(color: Color): Int =
((white, black), color) match {
case ((Some(result), _), Color.White) => result.assessment
case ((_, Some(result)), Color.Black) => result.assessment
case _ => 0
}
def htmlClass(color: Color): String =
((white, black), color) match {
case ((Some(result), _), Color.White) => printResult(result)
case ((_, Some(result)), Color.Black) => printResult(result)
case _ => "No matches found"
case ((Some(result), _), Color.White) => if (result.positiveMatch) "match" else "partial"
case ((_, Some(result)), Color.Black) => if (result.positiveMatch) "match" else "partial"
case _ => "none"
}
}
def href(color: Color): String =
((white, black), color) match {
case ((Some(result), _), Color.White) => "/" + result.targetGameId + "/" + result.targetColor
case ((_, Some(result)), Color.Black) => "/" + result.targetGameId + "/" + result.targetColor
case _ => ""
}
def matchPercentage(color: Color): String =
((white, black), color) match {
case ((Some(result), _), Color.White) => result.matchPercentage + "%"
case ((_, Some(result)), Color.Black) => result.matchPercentage + "%"
case _ => "None"
}
}
case class Rating(perf: Int, interval: Int)

View file

@ -17,12 +17,10 @@ final class AssessApi(collRef: Coll, collRes: Coll, logApi: ModlogApi) {
private implicit val playerAssessmentBSONhandler = Macros.handler[PlayerAssessment]
private implicit val gameGroupResultBSONhandler = Macros.handler[GameGroupResult]
def createPlayerAssessment(assessed: PlayerAssessment) = {
def createPlayerAssessment(assessed: PlayerAssessment) =
collRef.update(BSONDocument("_id" -> assessed._id), assessed, upsert = true) >>
logApi.assessGame(assessed.by, assessed.gameId, assessed.color.name, assessed.assessment) >>
refreshAssess(assessed.gameId)
}
def createResult(result: GameGroupResult) =
collRes.update(BSONDocument("_id" -> result._id), result, upsert = true).void

View file

@ -2030,11 +2030,15 @@ lichess.storage = {
});
if ($('#refreshAssessment').length) {
$('#whiteAssessment').val($('#whiteAssessment').data('val'));
$('#blackAssessment').val($('#blackAssessment').data('val'));
var sendAssessment = function(side, e) {
$.post('/mod/' + data.game.id + '/' + side + '/assess', {
assessment: $(e.target).val()
});
if ($(e.target).val() != "0") {
$.post('/mod/' + data.game.id + '/' + side + '/assess', {
assessment: $(e.target).val()
});
}
}
$('#whiteAssessment').change(sendAssessment.bind(null, 'white'));
$('#blackAssessment').change(sendAssessment.bind(null, 'black'));
@ -2043,6 +2047,7 @@ lichess.storage = {
$.post('/mod/refreshAssess', {
assess: data.game.id
});
location.reload();
});
}
}

View file

@ -262,3 +262,33 @@ div.shortcuts li {
width: 512px;
text-align: center;
}
table.modAssessment {
border-spacing: 2px;
border-collapse: separate;
}
table.modAssessment a {
margin-left: 10px;
text-decoration: none;
font-weight: bold;
}
table.modAssessment td.match a {
color: #759900;
}
table.modAssessment td.partial a {
color: #d59120;
}
table.modAssessment td.none a {
color: #ac524f;
}
.modAssessment select {
margin-left: 15px;
}
#refreshAssessment {
margin: 10px auto auto 80px;
}