more relay WIP

pull/3627/head
Thibault Duplessis 2017-09-23 00:43:19 -05:00
parent 63c717fccf
commit a611a8a9c0
14 changed files with 89 additions and 25 deletions

View File

@ -28,14 +28,15 @@ object Relay extends LilaController {
env.forms.create.bindFromRequest.fold(
err => BadRequest(html.relay.create(err)).fuccess,
setup => env.api.create(setup, me) map { relay =>
Redirect(routes.Relay.show(relay.id.value))
Redirect(routes.Relay.show(relay.slug, relay.id.value))
}
)
}
def show(id: String) = Open { implicit ctx =>
OptionOk(env.api byId RelayModel.Id(id)) { relay =>
html.relay.show(relay)
def show(slug: String, id: String) = Open { implicit ctx =>
OptionFuResult(env.api byId RelayModel.Id(id)) { relay =>
if (relay.slug != slug) Redirect(routes.Relay.show(relay.slug, relay.id.value)).fuccess
else Ok(html.relay.show(relay)).fuccess
}
}
}

View File

@ -1,7 +1,7 @@
@(title: String)(body: Html)(implicit ctx: Context)
@moreCss = {
@cssAt("vendor/flatpickr/dist/flatpickr.min.css")
@cssTag("flatpickr.css")
@cssTag("material.form.css")
@cssTag("event.crud.css")
}

View File

@ -1,13 +1,22 @@
@(form: Form[_])(implicit ctx: Context)
@moreCss = {
@cssTag("flatpickr.css")
@cssTag("material.form.css")
@cssTag("relay.css")
}
@moreJs = {
@jsAt("vendor/flatpickr/dist/flatpickr.min.js")
@embedJs {
$(".flatpickr").flatpickr();
}
}
@base.layout(
title = "New live broadcast",
moreCss = moreCss
moreCss = moreCss,
moreJs = moreJs
) {
<div class="relay_form content_box small_box no_padding">
<h1 class="lichess_title">New live broadcast</h1>

View File

@ -1,18 +1,18 @@
@(form: Form[_])(implicit ctx: Context)
@base.form.group(form("name"), Html("Event name")) {
@base.form.input(form("name"))
@base.form.input(form("name"), required = true)
}
@defining(form("description")) { field =>
@base.form.group(field, Html("Event description")) {
<textarea class="description" name="@field.name" id="@field.id">@field.value</textarea>
<textarea class="description" name="@field.name" id="@field.id" required>@field.value</textarea>
}
}
@base.form.group(form("startsAt"), Html("Start date <strong>UTC</strong>")) {
@base.form.flatpickr(form("startsAt"))
}
@base.form.group(form("pgnUrl"), Html("Live PGN URL")) {
@base.form.input(form("pgnUrl"))
@base.form.input(form("pgnUrl"), typ = "url", required = true)
}
@base.form.submit()

View File

@ -12,7 +12,7 @@
@base.layout(
title = "Live tournament broadcasts",
moreCss = cssTag("relay.css")) {
moreCss = cssTag("relay-list.css")) {
<div class="content_box no_padding relays">
<div class="top">
<h1>Live tournament broadcasts</h1>

View File

@ -1,8 +1,39 @@
@(r: lila.relay.Relay)(implicit ctx: Context)
@(r: lila.relay.Relay, data: lila.relay.JsonView.JsData)(implicit ctx: Context)
@moreCss = {
@cssTag("analyse.css")
@cssTag("study.css")
@cssTag("relay.css")
}
@moreJs = {
@jsAt(s"compiled/lichess.analyse${isProd??(".min")}.js")
@embedJs {
lichess = lichess || {};
lichess.relay = {
relay: @Html(J.stringify(data.relay)),
study: @Html(J.stringify(data.study)),
data: @Html(J.stringify(data.analysis)),
i18n: @board.userAnalysisI18n(),
explorer: {
endpoint: "@explorerEndpoint",
tablebaseEndpoint: "@tablebaseEndpoint"
}
};
}
}
@side = {
<div class="side_box study_box"></div>
}
@base.layout(
title = r.name,
moreCss = cssTag("relay.css")
) {
<h1 class="lichess_title">@r.name</h1>
title = relay.relay.name,
side = side.some,
underchat = none,
moreCss = moreCss,
moreJs = moreJs,
chessground = false,
zoomable = true) {
<div class="analyse cg-512">@miniBoardContent</div>
}

View File

@ -1,5 +1,5 @@
@(r: lila.relay.Relay.WithStudy)(implicit ctx: Context)
<a class="overlay" href="@routes.Relay.show(r.relay.id.value)"></a>
<a class="overlay" href="@routes.Relay.show(r.relay.slug, r.relay.id.value)"></a>
<h2>
<i class="icon" data-icon=""></i>
<strong>@r.relay.name</strong>

View File

@ -153,7 +153,7 @@ POST /study/$id<\w{8}>/clear-chat controllers.Study.clearChat(id: String)
GET /relay controllers.Relay.index
GET /relay/new controllers.Relay.form
POST /relay/new controllers.Relay.create
GET /relay/$id<\w{8}> controllers.Relay.show(id: String)
GET /relay/:slug/$id<\w{8}> controllers.Relay.show(slug: String, id: String)
# Learn
GET /learn controllers.Learn.index

View File

@ -0,0 +1,8 @@
package lila.relay
import play.api.libs.json._
object JsonView {
case class JsData(study: JsObject, analysis: JsObject)
}

View File

@ -20,6 +20,8 @@ case class Relay(
def studyId = Study.Id(id.value)
def slug = lila.common.String slugify name
override def toString = s"id:$id pgnUrl:$pgnUrl"
}

View File

@ -4,7 +4,7 @@ import org.joda.time.DateTime
import reactivemongo.bson._
import lila.db.dsl._
import lila.study.StudyApi
import lila.study.{ StudyApi, Study }
import lila.user.User
final class RelayApi(
@ -16,6 +16,15 @@ final class RelayApi(
def byId(id: Relay.Id) = coll.byId[Relay](id.value)
def byIdWithStudy(id: Relay.Id): Fu[Option[Relay.WithStudy]] =
byId(id) flatMap {
_ ?? { relay =>
studyApi.byId(relay.studyId) map2 { (study: Study) =>
Relay.WithStudy(relay, study)
}
}
}
def all: Fu[Relay.Selection] =
created.flatMap(withStudy) zip
started.flatMap(withStudy) zip

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
.relay_form h1.lichess_title {
text-align: center;
margin-bottom: 0!important;
}
.relay_form textarea.description {
height: 10em;
}

View File

@ -1,7 +0,0 @@
.relay_form h1.lichess_title {
text-align: center;
margin-bottom: 0!important;
}
.relay_form textarea.description {
height: 10em;
}