UI improvements
This commit is contained in:
parent
649cde92ef
commit
9219ec255e
|
@ -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>
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue