@(games: Seq[Game], user: Option[User] = None, ownerLink: Boolean = false, mini: Boolean = false)(implicit ctx: Context) @gamePlayer(variant: chess.variant.Variant, player: Player) = {
@player.playerUser.map { playerUser => @userIdLink(playerUser.id.some, withOnline = false)
@if(player.berserk) { @berserkIconSpanHtml } @playerUser.rating@if(player.provisional) {?} @playerUser.ratingDiff.map(showRatingDiff) }.getOrElse { @player.aiLevel.map { level => @aiName(level, false)
@aiRating(level) }.getOrElse { @player.nameSplit match { case Some((name, rating)) => { @name@rating.map { r =>
@rating } } case _ => {@User.anonymous} }
} }
} @games.map { g =>
@defining(user flatMap g.player) { fromPlayer => @defining(fromPlayer | g.firstPlayer ) { firstPlayer => @gameFen(Pov(g, firstPlayer), ownerLink, withTitle = false)
@if(g.imported) { IMPORT @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 => @if(days == 1) {@trans.oneDay()} else {@trans.nbDays.pluralSame(days)} }.getOrElse { } } • @g.perfType.map(_.name).getOrElse {@chess.variant.FromPosition.name} • @g.rated.fold(trans.rated(), trans.casual()) } @g.pgnImport.flatMap(_.date).getOrElse(momentFromNow(g.createdAt)) @g.tournamentId.map { tourId => • @tournamentLink(tourId) } @g.simulId.map { simulId => • @simulLink(simulId) }
@gamePlayer(g.variant, g.whitePlayer)
@gamePlayer(g.variant, g.blackPlayer)
@if(g.isBeingPlayed) {@trans.playingRightNow()} else { @if(g.finishedOrAborted) { @gameEndStatus(g)@g.winner.map { winner =>, @winner.color.fold(trans.whiteIsVictorious(), trans.blackIsVictorious()) } } else { @g.turnColor.fold(trans.whitePlays(), trans.blackPlays()) } }
@if(g.turns > 0) { @defining(g.pgnMoves take 20) { pgnMoves => @if(!g.fromPosition) { @g.opening.map { opening =>
@opening.opening.ecoName
} }
@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 }
} } else {

}
} }
}