lila/app/views/puzzle/show.scala

65 lines
1.9 KiB
Scala

package views.html.puzzle
import play.api.libs.json.{ JsObject, Json }
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.safeJsonValue
import controllers.routes
object show {
def apply(
puzzle: lila.puzzle.Puzzle,
data: JsObject,
pref: JsObject,
difficulty: Option[lila.puzzle.PuzzleDifficulty] = None
)(implicit
ctx: Context
) =
views.html.base.layout(
title = trans.puzzles.txt(),
moreCss = cssTag("puzzle"),
moreJs = frag(
jsModule("puzzle"),
embedJsUnsafeLoadThen(s"""LichessPuzzle(${safeJsonValue(
Json
.obj(
"data" -> data,
"pref" -> pref,
"i18n" -> bits.jsI18n
)
.add("themes" -> ctx.isAuth.option(bits.jsonThemes))
.add("difficulty" -> difficulty.map(_.key))
)})""")
),
csp = defaultCsp.withWebAssembly.some,
chessground = false,
openGraph = lila.app.ui
.OpenGraph(
image = cdnUrl(routes.Export.puzzleThumbnail(puzzle.id.value).url).some,
title = s"Chess tactic #${puzzle.id} - ${puzzle.color.name.capitalize} to play",
url = s"$netBaseUrl${routes.Puzzle.show(puzzle.id.value).url}",
description = s"Lichess tactic trainer: " + puzzle.color
.fold(
trans.puzzle.findTheBestMoveForWhite,
trans.puzzle.findTheBestMoveForBlack
)
.txt() + s" Played by ${puzzle.plays} players."
)
.some,
zoomable = true
) {
main(cls := "puzzle")(
st.aside(cls := "puzzle__side")(
div(cls := "puzzle__side__metas")
),
div(cls := "puzzle__board main-board")(chessgroundBoard),
div(cls := "puzzle__tools"),
div(cls := "puzzle__controls")
)
}
}