lila/app/views/game/widgets.scala.html

112 lines
3.7 KiB
HTML

@(games: Seq[Game], user: Option[User] = None, ownerLink: Boolean = false, mini: Boolean = false)(implicit ctx: Context)
@gamePlayer(variant: chess.variant.Variant, player: Player) = {
<div class="player @player.color.name">
@player.playerUser.map { playerUser =>
@userIdLink(playerUser.id.some, withOnline = false)
<br />
@if(player.berserk) { @berserkIconSpanHtml }
@playerUser.rating@if(player.provisional) {?}
@playerUser.ratingDiff.map(showRatingDiff)
}.getOrElse {
@player.aiLevel.map { level =>
<span>@aiName(level, false)</span><br />@aiRating(level)
}.getOrElse {
<span>@player.nameSplit match {
case Some((name, rating)) => {
<span>@name</span>@rating.map { r =>
<br />@rating
}
}
case _ => {<span class="anon">@User.anonymous</span>}
}</span>
}
}
</div>
}
@games.map { g =>
<div class="game_row paginated_element">
@defining(user flatMap g.player) { fromPlayer =>
@defining(fromPlayer | g.firstPlayer ) { firstPlayer =>
@gameFen(Pov(g, firstPlayer), ownerLink, withTitle = false)
<a class="game_link_overlay" href="@gameLink(g, firstPlayer.color, ownerLink)"></a>
<div class="infos" data-icon="@gameIcon(g)">
<div class="header">
<strong>
@if(g.imported) {
<span>IMPORT</span>
@g.pgnImport.flatMap(_.user).map { user =>
@trans.by(userIdLink(user.some, None, false))
}
@if(g.variant.exotic) {
@variantLink(g.variant, g.variant.name.toUpperCase, cssClass = "hint--top")
} else {
@g.variant.name.toUpperCase
}
} else {
@g.clock.map(_.config.show).getOrElse {
@g.daysPerTurn.map { days =>
<span data-hint="@trans.correspondence()" class="hint--top">@if(days == 1) {@trans.oneDay()} else {@trans.nbDays.pluralSame(days)}</span>
}.getOrElse {
<span data-hint="@trans.unlimited()" class="hint--top"></span>
}
}
• @g.perfType.map(_.name).getOrElse {@chess.variant.FromPosition.name}
• @g.rated.fold(trans.rated(), trans.casual())
}
</strong>
@g.pgnImport.flatMap(_.date).getOrElse(momentFromNow(g.createdAt))
@g.tournamentId.map { tourId =>
• @tournamentLink(tourId)
}
@g.simulId.map { simulId =>
• @simulLink(simulId)
}
</div>
<div class="versus">
@gamePlayer(g.variant, g.whitePlayer)
<div class="swords" data-icon="U"></div>
@gamePlayer(g.variant, g.blackPlayer)
</div>
<div class="result">
@if(g.isBeingPlayed) {@trans.playingRightNow()} else {
@if(g.finishedOrAborted) {
<span class="@{ g.winner.flatMap(w => fromPlayer.map(p => (p == w).fold("up", "down"))) }">
@gameEndStatus(g)@g.winner.map { winner =>, @winner.color.fold(trans.whiteIsVictorious(), trans.blackIsVictorious()) }
</span>
} else {
@g.turnColor.fold(trans.whitePlays(), trans.blackPlays())
}
}
</div>
@if(g.turns > 0) {
@defining(g openingPgnMoves 20) { pgnMoves =>
@if(!g.fromPosition) {
@g.opening.map { opening =>
<div class="opening">@opening.opening.ecoName</div>
}
}
<div class="pgn">@pgnMoves.take(6).grouped(2).zipWithIndex.map {
case (Vector(w, b), i) => {@(i+1). @w @b}
case (Vector(w), i) => {@(i+1). @w}
case _ => {}
}.mkString(" ")@if(g.turns > 6) { ... @{1 + (g.turns - 1) / 2} moves }
</div>
}
} else {
<br /><br />
}
<div class="metadata">
@if(g.metadata.analysed) {<span data-icon="&#xe004;"> @trans.computerAnalysisAvailable()</span><br />}
@g.pgnImport.flatMap(_.user).map { user =>
PGN import by @userIdLink(user.some)<br />
}
</div>
</div>
}
}
</div>
}