diff --git a/app/templating/GameHelper.scala b/app/templating/GameHelper.scala index 00c51612ba..1e0899ed7a 100644 --- a/app/templating/GameHelper.scala +++ b/app/templating/GameHelper.scala @@ -18,15 +18,11 @@ trait GameHelper { self: I18nHelper with UserHelper with AiHelper with StringHel def mandatorySecondsToMove = lila.game.Env.current.MandatorySecondsToMove - def povOpenGraph(pov: Pov) = { - Map( - 'type -> "website", - 'image -> cdnUrl(routes.Export.png(pov.game.id).url), - 'title -> titlePov(pov), - 'site_name -> "lichess.org", - 'url -> s"$netBaseUrl${routes.Round.watcher(pov.game.id, pov.color.name).url}", - 'description -> describePov(pov)) - } + def povOpenGraph(pov: Pov) = lila.app.ui.OpenGraph( + image = cdnUrl(routes.Export.png(pov.game.id).url).some, + title = titlePov(pov), + url = s"$netBaseUrl${routes.Round.watcher(pov.game.id, pov.color.name).url}", + description = describePov(pov)) def titlePov(pov: Pov) = { val speed = chess.Speed(pov.game.clock).name diff --git a/app/ui/OpenGraph.scala b/app/ui/OpenGraph.scala new file mode 100644 index 0000000000..ad23be78ec --- /dev/null +++ b/app/ui/OpenGraph.scala @@ -0,0 +1,26 @@ +package lila.app +package ui + +import play.twirl.api.Html + +case class OpenGraph( + title: String, + description: String, + url: String, + `type`: String = "website", + image: Option[String] = None, + siteName: String = "lichess.org") { + + def html = Html(toString) + + private def prop(name: String, value: String) = + s"""""" + + override def toString = List( + "title" -> title, + "description" -> description, + "url" -> url, + "type" -> `type`, + "siteName" -> siteName + ).map((prop _).tupled) + image.?? { prop("image", _) } +} diff --git a/app/views/analyse/layout.scala.html b/app/views/analyse/layout.scala.html index 5a077f72fb..0bebb2116a 100644 --- a/app/views/analyse/layout.scala.html +++ b/app/views/analyse/layout.scala.html @@ -1,4 +1,4 @@ -@(title: String, side: Option[Html] = None, chat: Option[Html] = None, underchat: Option[Html] = None, moreCss: Html = Html(""), moreJs: Html = Html(""), openGraph: Map[Symbol, String] = Map.empty, chessground: Boolean)(body: Html)(implicit ctx: Context) +@(title: String, side: Option[Html] = None, chat: Option[Html] = None, underchat: Option[Html] = None, moreCss: Html = Html(""), moreJs: Html = Html(""), openGraph: Option[lila.app.ui.OpenGraph] = None, chessground: Boolean)(body: Html)(implicit ctx: Context) @base.layout( title = title, diff --git a/app/views/analyse/replay.scala.html b/app/views/analyse/replay.scala.html index 732d65398a..ef337b3e78 100644 --- a/app/views/analyse/replay.scala.html +++ b/app/views/analyse/replay.scala.html @@ -50,7 +50,7 @@ chat = base.chatDom(trans.spectatorRoom.str(), ctx.isAuth).some, underchat = underchat.some, moreCss = moreCss, moreJs = moreJs, -openGraph = povOpenGraph(pov), +openGraph = povOpenGraph(pov).some, chessground = false) {
@miniBoardContent