65 lines
1.9 KiB
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")
|
|
)
|
|
}
|
|
}
|