From 53f3eeaafd4e0fa7104a4bbe3ba981985f18c537 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Tue, 7 Apr 2020 11:55:46 -0500 Subject: [PATCH] let hosts name their simuls --- app/controllers/Simul.scala | 25 ++--- app/views/simul/form.scala | 9 +- modules/simul/src/main/Simul.scala | 7 +- modules/simul/src/main/SimulApi.scala | 1 + modules/simul/src/main/SimulForm.scala | 21 +++- modules/simul/src/main/package.scala | 127 ------------------------- ui/simul/css/_form.scss | 30 +++--- 7 files changed, 63 insertions(+), 157 deletions(-) diff --git a/app/controllers/Simul.scala b/app/controllers/Simul.scala index f2abc45307..0407a2bfb8 100644 --- a/app/controllers/Simul.scala +++ b/app/controllers/Simul.scala @@ -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)) + } + ) } } diff --git a/app/views/simul/form.scala b/app/views/simul/form.scala index 15d9e17ead..01e74c3621 100644 --- a/app/views/simul/form.scala +++ b/app/views/simul/form.scala @@ -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( diff --git a/modules/simul/src/main/Simul.scala b/modules/simul/src/main/Simul.scala index 4cdbca316b..4cfc102c4f 100644 --- a/modules/simul/src/main/Simul.scala +++ b/modules/simul/src/main/Simul.scala @@ -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, diff --git a/modules/simul/src/main/SimulApi.scala b/modules/simul/src/main/SimulApi.scala index 29ea1aa913..8b2f397e94 100644 --- a/modules/simul/src/main/SimulApi.scala +++ b/modules/simul/src/main/SimulApi.scala @@ -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 diff --git a/modules/simul/src/main/SimulForm.scala b/modules/simul/src/main/SimulForm.scala index c9b32f8167..0905f88bb0 100644 --- a/modules/simul/src/main/SimulForm.scala +++ b/modules/simul/src/main/SimulForm.scala @@ -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, diff --git a/modules/simul/src/main/package.scala b/modules/simul/src/main/package.scala index 84e29a1a3f..e183ed6e5e 100644 --- a/modules/simul/src/main/package.scala +++ b/modules/simul/src/main/package.scala @@ -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") } diff --git a/ui/simul/css/_form.scss b/ui/simul/css/_form.scss index 0e8f5b2c86..1d5411ea55 100644 --- a/ui/simul/css/_form.scss +++ b/ui/simul/css/_form.scss @@ -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; + } } } }