Merge branch 'master' of github.com:ornicar/lila into v2

* 'master' of github.com:ornicar/lila:
  fix /@/<user>/search after #4973
  Make date picker label appear on same line as date picker
  Use flatpickr instead of native input field
  Add datepicker to search menu
more-scalatags
Thibault Duplessis 2019-04-15 08:18:37 +07:00
commit 66bf448e26
4 changed files with 22 additions and 20 deletions

View File

@ -89,6 +89,11 @@ trait AssetHelper { self: I18nHelper with SecurityHelper =>
val flatpickrTag = raw {
s"""<script defer src="${staticUrl("javascripts/vendor/flatpickr.min.js")}"></script>"""
}
val nonAsyncFlatpickrTag = Html {
s"""<script defer src="${staticUrl("javascripts/vendor/flatpickr.min.js")}"></script>"""
}
def delayFlatpickrStart(implicit ctx: Context) = embedJs {
"""$(function() { setTimeout(function() { $(".flatpickr").flatpickr(); }, 2000) });"""
}

View File

@ -51,13 +51,7 @@ private[gameSearch] final class DataForm {
}
private[gameSearch] object DataForm {
val DateDelta = """\d++[a-z]""".r
private val dateConstraint = Constraints.pattern(
regex = DateDelta,
error = "Invalid date."
)
val dateField = optional(nonEmptyText.verifying(dateConstraint))
val dateField = optional(ISODateOrTimestamp.isoDateOrTimestamp)
}
private[gameSearch] case class SearchData(
@ -76,8 +70,8 @@ private[gameSearch] case class SearchData(
durationMin: Option[Int] = None,
durationMax: Option[Int] = None,
clock: SearchClock = SearchClock(),
dateMin: Option[String] = None,
dateMax: Option[String] = None,
dateMin: Option[DateTime] = None,
dateMax: Option[DateTime] = None,
status: Option[Int] = None,
analysed: Option[Int] = None,
sort: Option[SearchSort] = None
@ -100,7 +94,7 @@ private[gameSearch] case class SearchData(
aiLevel = Range(aiLevelMin, aiLevelMax),
duration = Range(durationMin, durationMax),
clock = Clocking(clock.initMin, clock.initMax, clock.incMin, clock.incMax),
date = Range(dateMin flatMap toDate, dateMax flatMap toDate),
date = Range(dateMin, dateMax),
status = status,
analysed = analysed map (_ == 1),
whiteUser = players.cleanWhite,
@ -110,16 +104,6 @@ private[gameSearch] case class SearchData(
def nonEmptyQuery = Some(query).filter(_.nonEmpty)
import DataForm.DateDelta
private def toDate(delta: String): Option[DateTime] = delta match {
case DateDelta(n, "h") => parseIntOption(n) map DateTime.now.minusHours
case DateDelta(n, "d") => parseIntOption(n) map DateTime.now.minusDays
case DateDelta(n, "w") => parseIntOption(n) map DateTime.now.minusWeeks
case DateDelta(n, "m") => parseIntOption(n) map DateTime.now.minusMonths
case DateDelta(n, "y") => parseIntOption(n) map DateTime.now.minusYears
case _ => None
}
}
private[gameSearch] case class SearchPlayer(

View File

@ -85,4 +85,11 @@ $(function() {
$form.find("input,select").filter(function() { return !this.value; }).attr("disabled", "disabled");
$form.addClass('searching');
});
$form.find(".flatpickr").flatpickr({
maxDate: 'today',
dateFormat: 'Z',
altInput: true,
altFormat: 'Y-m-d h:i K'
});
});

View File

@ -38,6 +38,12 @@ form.search .half select {
width: 78%;
}
form.search .half .flatpickr {
width: 74.93%; /* this will make the date picker just as large as the select */
border: 1px solid rgb(169, 169, 169);
padding: 0.5% 1%;
}
form.search input.submit {
width: 99%;
}