let hosts name their simuls

pull/6331/head^2
Thibault Duplessis 2020-04-07 11:55:46 -05:00
parent fb0db9936b
commit 53f3eeaafd
7 changed files with 63 additions and 157 deletions

View File

@ -121,7 +121,7 @@ final class Simul(
def form = Auth { implicit ctx => me =>
NoLameOrBot {
apiC.teamsIBelongTo(me) map { teams =>
Ok(html.simul.form(forms.create, teams))
Ok(html.simul.form(forms.create(me), teams))
}
}
}
@ -129,16 +129,19 @@ final class Simul(
def create = AuthBody { implicit ctx => implicit me =>
NoLameOrBot {
implicit val req = ctx.body
forms.create.bindFromRequest.fold(
err =>
apiC.teamsIBelongTo(me) map { teams =>
BadRequest(html.simul.form(err, teams))
},
setup =>
env.simul.api.create(setup, me) map { simul =>
Redirect(routes.Simul.show(simul.id))
}
)
forms
.create(me)
.bindFromRequest
.fold(
err =>
apiC.teamsIBelongTo(me) map { teams =>
BadRequest(html.simul.form(err, teams))
},
setup =>
env.simul.api.create(setup, me) map { simul =>
Redirect(routes.Simul.show(simul.id))
}
)
}
}

View File

@ -23,12 +23,19 @@ object form {
main(cls := "box box-pad page-small simul-form")(
h1(trans.hostANewSimul()),
postForm(cls := "form3", action := routes.Simul.create())(
br,
br,
p(trans.whenCreateSimul()),
br,
br,
globalError(form),
form3.group(form("name"), trans.name()) { f =>
div(
form3.input(f),
" Simul",
br,
small(cls := "form-help")(trans.inappropriateNameWarning())
)
},
form3.group(form("variant"), trans.simulVariantsHint()) { _ =>
div(cls := "variants")(
views.html.setup.filter.renderCheckboxes(

View File

@ -142,12 +142,9 @@ object Simul {
case class OnStart(simul: Simul)
private def makeName(host: User) =
if (host.title.isDefined) host.titleUsername
else RandomName()
def make(
host: User,
name: String,
clock: SimulClock,
variants: List[Variant],
position: Option[StartingPosition],
@ -156,7 +153,7 @@ object Simul {
team: Option[String]
): Simul = Simul(
_id = Random nextString 8,
name = makeName(host),
name = name,
status = SimulStatus.Created,
clock = clock,
hostId = host.id,

View File

@ -44,6 +44,7 @@ final class SimulApi(
def create(setup: SimulForm.Setup, me: User): Fu[Simul] = {
val simul = Simul.make(
name = setup.name,
clock = SimulClock(
config = chess.Clock.Config(setup.clockTime * 60, setup.clockIncrement),
hostExtraTime = setup.clockExtra * 60

View File

@ -2,6 +2,8 @@ package lila.simul
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.{ Constraint, Constraints }
import lila.user.User
import chess.StartingPosition
import lila.common.Form._
@ -28,9 +30,24 @@ object SimulForm {
)
val colorDefault = "white"
def create =
private val nameType = text.verifying(
Constraints minLength 2,
Constraints maxLength 40,
Constraints.pattern(
regex = """[\p{L}\p{N}-\s:,;]+""".r,
error = "error.unknown"
),
Constraint[String] { (t: String) =>
if (t.toLowerCase contains "lichess")
validation.Invalid(validation.ValidationError("Must not contain \"lichess\""))
else validation.Valid
}
)
def create(host: User) =
Form(
mapping(
"name" -> nameType,
"clockTime" -> numberIn(clockTimeChoices),
"clockIncrement" -> numberIn(clockIncrementChoices),
"clockExtra" -> numberIn(clockExtraChoices),
@ -55,6 +72,7 @@ object SimulForm {
"team" -> optional(nonEmptyText)
)(Setup.apply)(Setup.unapply)
) fill Setup(
name = host.titleUsername,
clockTime = clockTimeDefault,
clockIncrement = clockIncrementDefault,
clockExtra = clockExtraDefault,
@ -77,6 +95,7 @@ object SimulForm {
def setText = Form(single("text" -> text))
case class Setup(
name: String,
clockTime: Int,
clockIncrement: Int,
clockExtra: Int,

View File

@ -2,133 +2,6 @@ package lila
package object simul extends PackageObject {
private[simul] object RandomName {
private val names = IndexedSeq(
"Actinium",
"Aluminium",
"Americium",
"Antimony",
"Argon",
"Arsenic",
"Astatine",
"Barium",
"Berkelium",
"Beryllium",
"Bismuth",
"Bohrium",
"Boron",
"Bromine",
"Cadmium",
"Caesium",
"Calcium",
"Californium",
"Carbon",
"Cerium",
"Chlorine",
"Chromium",
"Cobalt",
"Copernicium",
"Copper",
"Curium",
"Darmstadtium",
"Dubnium",
"Dysprosium",
"Einsteinium",
"Erbium",
"Europium",
"Fermium",
"Flerovium",
"Fluorine",
"Francium",
"Gadolinium",
"Gallium",
"Germanium",
"Gold",
"Hafnium",
"Hassium",
"Helium",
"Holmium",
"Hydrogen",
"Indium",
"Iodine",
"Iridium",
"Iron",
"Krypton",
"Lanthanum",
"Lawrencium",
"Lead",
"Lithium",
"Livermorium",
"Lutetium",
"Magnesium",
"Manganese",
"Meitnerium",
"Mendelevium",
"Mercury",
"Molybdenum",
"Moscovium",
"Neodymium",
"Neon",
"Neptunium",
"Nickel",
"Nihonium",
"Niobium",
"Nitrogen",
"Nobelium",
"Oganesson",
"Osmium",
"Oxygen",
"Palladium",
"Phosphorus",
"Platinum",
"Plutonium",
"Polonium",
"Potassium",
"Praseodymium",
"Promethium",
"Protactinium",
"Radium",
"Radon",
"Rhenium",
"Rhodium",
"Roentgenium",
"Rubidium",
"Ruthenium",
"Rutherfordium",
"Samarium",
"Scandium",
"Seaborgium",
"Selenium",
"Silicon",
"Silver",
"Sodium",
"Strontium",
"Sulfur",
"Tantalum",
"Technetium",
"Tellurium",
"Tennessine",
"Terbium",
"Thallium",
"Thorium",
"Thulium",
"Tin",
"Titanium",
"Tungsten",
"Uranium",
"Vanadium",
"Xenon",
"Ytterbium",
"Yttrium",
"Zinc",
"Zirconium"
)
private val size = names.size
def apply(): String = names(scala.util.Random nextInt size)
}
private[simul] val logger = lila.log("simul")
}

View File

@ -1,15 +1,21 @@
.simul-form .variants {
display: flex;
flex-flow: row wrap;
.checkable {
flex: 1 1 33%;
white-space: nowrap;
input {
margin-right: .3em;
}
label, input {
vertical-align: middle;
cursor: pointer;
.simul-form {
#form3-name {
width: 48%!important;
display: inline-block;
}
.variants {
display: flex;
flex-flow: row wrap;
.checkable {
flex: 1 1 33%;
white-space: nowrap;
input {
margin-right: .3em;
}
label, input {
vertical-align: middle;
cursor: pointer;
}
}
}
}