From e126664ca058f081ac01f5b6f25073289011f0fa Mon Sep 17 00:00:00 2001 From: Sherman Siu Date: Fri, 25 Aug 2023 08:03:03 -0400 Subject: [PATCH 1/3] Fix how dates are displayed in RTL languages. --- app/templating/DateHelper.scala | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/app/templating/DateHelper.scala b/app/templating/DateHelper.scala index ffd43a370a4ea..de721b88dd3bd 100644 --- a/app/templating/DateHelper.scala +++ b/app/templating/DateHelper.scala @@ -22,6 +22,8 @@ trait DateHelper: private val englishDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM) + private val rtlLanguages = Set("ar", "fa", "he", "ps", "ur") + private def dateTimeFormatter(using lang: Lang): DateTimeFormatter = dateTimeFormatters.computeIfAbsent( lang.code, @@ -35,6 +37,8 @@ trait DateHelper: _ => DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(lang.toLocale) ) + def isRightToLeft(lang: Lang): Boolean = rtlLanguages.contains(lang.language) + def showInstantUTC(instant: Instant)(using Lang): String = dateTimeFormatter print instant @@ -49,12 +53,21 @@ trait DateHelper: def showEnglishDate(instant: Instant): String = englishDateFormatter print instant def showEnglishInstant(instant: Instant): String = englishDateTimeFormatter print instant - def semanticDate(instant: Instant)(using Lang): Tag = - timeTag(datetimeAttr := isoDateTime(instant))(showDate(instant)) - - def semanticDate(date: LocalDate)(using Lang): Tag = - timeTag(datetimeAttr := isoDateTime(date.atStartOfDay.instant))(showDate(date)) - + def semanticDate(instant: Instant)(using lang: Lang): Tag = + timeTag( + datetimeAttr := isoDateTime(instant), + if isRightToLeft(lang) + then dir := "rtl" + else () + )(showDate(instant)) + + def semanticDate(date: LocalDate)(using lang: Lang): Tag = + timeTag( + datetimeAttr := isoDateTime(date.atStartOfDay.instant), + if isRightToLeft(lang) + then dir := "rtl" + else () + )(showDate(date)) def showMinutes(minutes: Int)(using Lang): String = showDuration(Duration.ofMinutes(minutes)) From c12998c055c8c44bcf11619f5944756bc28648e3 Mon Sep 17 00:00:00 2001 From: Sherman Siu Date: Fri, 25 Aug 2023 08:16:20 -0400 Subject: [PATCH 2/3] Add newline. --- app/templating/DateHelper.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/app/templating/DateHelper.scala b/app/templating/DateHelper.scala index de721b88dd3bd..9e9f3e0ab78d4 100644 --- a/app/templating/DateHelper.scala +++ b/app/templating/DateHelper.scala @@ -68,6 +68,7 @@ trait DateHelper: then dir := "rtl" else () )(showDate(date)) + def showMinutes(minutes: Int)(using Lang): String = showDuration(Duration.ofMinutes(minutes)) From c1f0115c47268c14c3ca889d4d37583e86bae147 Mon Sep 17 00:00:00 2001 From: Sherman Siu Date: Sat, 26 Aug 2023 22:32:05 -0400 Subject: [PATCH 3/3] Use existing RTL helper function. --- app/templating/DateHelper.scala | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/app/templating/DateHelper.scala b/app/templating/DateHelper.scala index 9e9f3e0ab78d4..9980102312bf2 100644 --- a/app/templating/DateHelper.scala +++ b/app/templating/DateHelper.scala @@ -6,7 +6,7 @@ import play.api.i18n.Lang import java.time.format.{ FormatStyle, DateTimeFormatter } import java.time.{ Duration, LocalDate } -import lila.app.ui.ScalatagsTemplate.* +import lila.app.ui.ScalatagsTemplate.{*, given} import lila.i18n.PeriodLocales trait DateHelper: @@ -22,8 +22,6 @@ trait DateHelper: private val englishDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM) - private val rtlLanguages = Set("ar", "fa", "he", "ps", "ur") - private def dateTimeFormatter(using lang: Lang): DateTimeFormatter = dateTimeFormatters.computeIfAbsent( lang.code, @@ -37,8 +35,6 @@ trait DateHelper: _ => DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(lang.toLocale) ) - def isRightToLeft(lang: Lang): Boolean = rtlLanguages.contains(lang.language) - def showInstantUTC(instant: Instant)(using Lang): String = dateTimeFormatter print instant @@ -56,17 +52,13 @@ trait DateHelper: def semanticDate(instant: Instant)(using lang: Lang): Tag = timeTag( datetimeAttr := isoDateTime(instant), - if isRightToLeft(lang) - then dir := "rtl" - else () + dir := isRTL.option("rtl") )(showDate(instant)) def semanticDate(date: LocalDate)(using lang: Lang): Tag = timeTag( datetimeAttr := isoDateTime(date.atStartOfDay.instant), - if isRightToLeft(lang) - then dir := "rtl" - else () + dir := isRTL.option("rtl") )(showDate(date)) def showMinutes(minutes: Int)(using Lang): String =