Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
ed26d39
dynamic themes
schlawg Mar 30, 2024
415151d
fix build errors
schlawg Mar 30, 2024
6e2a3a1
prettier
schlawg Mar 30, 2024
fc89c7c
merge from master, clean up
schlawg Mar 30, 2024
93c6c50
add trailing line feed to generated files so prettier doesnt fail
schlawg Mar 30, 2024
ff8e048
readme
schlawg Mar 31, 2024
cadeebc
some random edit that i had from last night, no idea
schlawg Mar 31, 2024
80d01e6
Update readme.md
schlawg Apr 1, 2024
2d7ec60
Merge remote-tracking branch 'upstream/master' into ui-dynamic-themes
schlawg Apr 2, 2024
53cf44a
Merge branch 'master' into ui-dynamic-themes
ornicar Apr 3, 2024
9b527ce
typo in build readme
ornicar Apr 3, 2024
9dda250
Merge remote-tracking branch 'upstream/master' into ui-dynamic-themes
schlawg Apr 4, 2024
86cb358
no genned source in git
schlawg Apr 5, 2024
c76e365
remove unnecessary param
schlawg Apr 5, 2024
151f775
Merge remote-tracking branch 'upstream/master' into ui-dynamic-themes
schlawg Apr 5, 2024
af96f14
ui/build is done. now for the asset mappings
schlawg Mar 23, 2024
df213f1
server mostly done
schlawg Apr 6, 2024
ed3206f
fix thing
schlawg Apr 6, 2024
dc4d1f7
refactor moreJs so we can dedup chunk scripts
schlawg Apr 7, 2024
a6bcdf3
get it fully working
schlawg Apr 7, 2024
e20dfbf
Merge remote-tracking branch 'upstream/master' into asset-hash-caching
schlawg Apr 7, 2024
5af7b6e
merge from master
schlawg Apr 7, 2024
0ba2e64
fix lint warnings
schlawg Apr 7, 2024
2579f9c
change formatting
schlawg Apr 7, 2024
a88747d
change formatting
schlawg Apr 7, 2024
306df15
nvui tags as EsmList instead of option
schlawg Apr 7, 2024
4297d1a
remove ui/build -s argument from github workflow, code splitting is m…
schlawg Apr 8, 2024
79c3454
remove unused imports
schlawg Apr 8, 2024
2cc8704
unfuck server embedded loadEsm calls
schlawg Apr 8, 2024
eeaca5d
add a cautionary note about --clean
schlawg Apr 8, 2024
1c185f6
fix ui/build parameter confusion
schlawg Apr 8, 2024
fd94c7f
Merge branch 'master' into asset-hash-caching
ornicar Apr 8, 2024
a552e80
type EsmList = List[Option[EsmInit]] and scala tweaks/golf
ornicar Apr 8, 2024
5ce69a7
Merge branch 'master' into asset-hash-caching
ornicar Apr 8, 2024
16c374e
move inline js from head to body
schlawg Apr 8, 2024
e7ae78a
move inline js and module preloads to body
schlawg Apr 8, 2024
f4629af
Merge remote-tracking branch 'upstream/master' into asset-hash-caching
schlawg Apr 8, 2024
07c0554
cleanup argument lists
schlawg Apr 8, 2024
146003a
permissive implicit conversions for jsModule to enhance readability
schlawg Apr 8, 2024
cf1613b
Merge remote-tracking branch 'upstream/master' into asset-hash-caching
schlawg Apr 8, 2024
bac6f87
fix css source maps and transp colors
schlawg Apr 9, 2024
a5d08e2
trigger manifest updates on prod in an obviously wrong manner
schlawg Apr 9, 2024
fddd45f
scalafmt
schlawg Apr 9, 2024
e9ae2df
Merge branch 'master' into asset-hash-caching
ornicar Apr 9, 2024
93d6eb6
fix compile error from master
ornicar Apr 9, 2024
ed22061
scala tweaks
ornicar Apr 9, 2024
33f4909
make the side effecting function more obvious
ornicar Apr 9, 2024
46e751e
Update ui/site/src/assets.ts
schlawg Apr 9, 2024
1a507a0
move FOUC busting javascript (system theme only) back to head
schlawg Apr 9, 2024
a5228f9
Merge remote-tracking branch 'origin/asset-hash-caching' into asset-h…
schlawg Apr 9, 2024
fa42d16
fix sass watch bug added in color themes PR
schlawg Apr 9, 2024
125ebb4
change mix color prefix to $m- for proper sorting behind $c-
schlawg Apr 9, 2024
eb103bf
split script src tags from init js so preloads can go back in head
schlawg Apr 9, 2024
15c3191
merge from master
schlawg Apr 9, 2024
da9ef91
always recompile ui/build for now
schlawg Apr 10, 2024
77a9d95
Merge branch 'master' into asset-hash-caching
ornicar Apr 10, 2024
373ef95
fix merge
ornicar Apr 10, 2024
3f87a72
fix broken study links
schlawg Apr 10, 2024
677c4c6
Merge remote-tracking branch 'origin/asset-hash-caching' into asset-h…
schlawg Apr 10, 2024
5c90da4
gah
schlawg Apr 10, 2024
0c0b075
gah
schlawg Apr 10, 2024
eb942de
Merge remote-tracking branch 'upstream/master' into asset-hash-caching
schlawg Apr 10, 2024
56a2b42
allow twitch player to survive in credentialless world
schlawg Apr 10, 2024
fca037e
fix from master
schlawg Apr 10, 2024
93c1ceb
fix cg variables
schlawg Apr 10, 2024
df44081
remove embed hack from relay controller
schlawg Apr 11, 2024
40734a2
fetch manifest from asset.base_url_internal
schlawg Apr 11, 2024
4d80d95
paper over fs exceptions on dev startup
schlawg Apr 11, 2024
7bb5006
remove cache buster from client css requests
schlawg Apr 11, 2024
a7f2589
Merge remote-tracking branch 'origin/asset-hash-caching' into asset-h…
schlawg Apr 11, 2024
bf7731a
add debug logging
schlawg Apr 11, 2024
0dc1643
Revert "add debug logging"
schlawg Apr 11, 2024
6674957
merge from upstream/master and upstream/coep-credentialless-alt
schlawg Apr 12, 2024
aecfbc3
remove unused dirty flag from AssetVersion
schlawg Apr 12, 2024
14914a0
handle daily merge conflicts
schlawg Apr 13, 2024
c879f59
daily merge conflicts, wip
schlawg Apr 14, 2024
7e74319
Merge remote-tracking branch 'upstream/coep-credentialless-alt' into …
schlawg Apr 14, 2024
caa0800
scalafmt
schlawg Apr 14, 2024
c6f0ae5
Merge branch 'master' into asset-hash-caching
ornicar Apr 15, 2024
8be9ff6
move to lila.web.AssetManifest, remove Dev.runCommand hack
ornicar Apr 15, 2024
a733ff8
bugfixes from ui-improve-dasher
schlawg Apr 16, 2024
857a948
Merge branch 'master' into asset-hash-caching
ornicar Apr 16, 2024
7ca7d3f
remove craplet in package.json
schlawg Apr 16, 2024
6b88558
Merge remote-tracking branch 'origin/asset-hash-caching' into asset-h…
schlawg Apr 16, 2024
0a2b640
fix merge
ornicar Apr 16, 2024
efff6a0
Merge branch 'asset-hash-caching' of https://github.com/schlawg/lila …
ornicar Apr 16, 2024
0e7b14a
merge from master
schlawg Apr 17, 2024
0facafe
Merge remote-tracking branch 'origin/asset-hash-caching' into asset-h…
schlawg Apr 17, 2024
7df5320
Merge branch 'master' into asset-hash-caching
ornicar Apr 17, 2024
bfdf4b0
tweak AssetManifest
ornicar Apr 17, 2024
6aa718a
tweak AssetManifest.logger
ornicar Apr 17, 2024
aea6622
remove nullish coalescing assignments from all javascript
schlawg Apr 17, 2024
7bed962
that should do it
schlawg Apr 17, 2024
d036094
Merge branch 'master' into asset-hash-caching
ornicar Apr 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/assets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
id: ab
- run: pnpm link "$GITHUB_WORKSPACE/ab"
if: steps.ab.outcome == 'success'
- run: ./ui/build --no-install -ps
- run: ./ui/build --no-install -p
- run: cd ui && pnpm run test && cd -
- run: mkdir assets && mv public assets/ && cp bin/download-lifat LICENSE COPYING.md README.md assets/ && git log -n 1 --pretty=oneline > assets/commit.txt
- run: cd assets && tar --zstd -cvpf ../assets.tar.zst . && cd -
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
project/.bloop/
conf/application.conf
conf/version.conf
conf/manifest.*

logs
project/metals.sbt
Expand All @@ -21,6 +22,7 @@ data/
dist/
node_modules/
local/
gen/
ui/common/**/*.js
ui/common/**/*.d.ts
ui/chess/**/*.js
Expand Down
1 change: 0 additions & 1 deletion .ignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# search ignores
vendor
translation/dest
ui/*/css/build
public/font
public/sound
public/piece
Expand Down
2 changes: 2 additions & 0 deletions app/Env.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ final class Env(
SessionCookieBaker
):
val net: NetConfig = config.get[NetConfig]("net")

export net.{ domain, baseUrl, assetBaseUrlInternal }

given Mode = environment.mode
Expand Down Expand Up @@ -138,6 +139,7 @@ given ConfigLoader[NetConfig] = ConfigLoader(config =>
assetBaseUrl = get[AssetBaseUrl]("asset.base_url"),
assetBaseUrlInternal = get[AssetBaseUrlInternal]("asset.base_url_internal"),
minifiedAssets = get[Boolean]("asset.minified"),
externalManifest = get[Boolean]("asset.external_manifest"),
stageBanner = get[Boolean]("stage.banner"),
siteName = get[String]("site.name"),
socketDomains = get[List[String]]("socket.domains"),
Expand Down
1 change: 1 addition & 0 deletions app/controllers/Plan.scala
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ final class Plan(env: Env) extends LilaController(env):
res <- info match
case Some(info: CustomerInfo.Monthly) =>
Ok.page(html.plan.indexStripe(me, patron, info, env.plan.stripePublicKey, pricing, gifts))

case Some(CustomerInfo.OneTime(cus)) =>
renderIndex(cus.email.map { EmailAddress(_) }, patron.some)
case None =>
Expand Down
4 changes: 3 additions & 1 deletion app/controllers/RelayRound.scala
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,9 @@ final class RelayRound(
page <- renderPage:
html.relay.show(rt.withStudy(sc.study), data, chat, sVersion, crossSiteIsolation)
_ = if HTTPRequest.isHuman(req) then lila.mon.http.path(rt.tour.path).increment()
yield if crossSiteIsolation then Ok(page).enforceCrossSiteIsolation else Ok(page)
yield
if crossSiteIsolation then Ok(page).enforceCrossSiteIsolation
else Ok(page).withHeaders(crossOriginPolicy.unsafe*)
)(
studyC.privateUnauthorizedFu(oldSc.study),
studyC.privateForbiddenFu(oldSc.study)
Expand Down
92 changes: 41 additions & 51 deletions app/templating/AssetHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import lila.core.net.AssetVersion
import lila.core.data.SafeJsonStr
import lila.common.String.html.safeJsonValue
import lila.web.ui.*
import lila.web.Nonce
import lila.web.ContentSecurityPolicy

trait AssetHelper:
Expand All @@ -16,6 +17,12 @@ trait AssetHelper:
def env: Env

case class PageModule(name: String, data: JsValue | SafeJsonStr)
case class EsmInit(key: String, init: Frag)
type EsmList = List[Option[EsmInit]]
given Conversion[EsmInit, EsmList] with
def apply(esmInit: EsmInit): EsmList = List(Some(esmInit))
given Conversion[Option[EsmInit], EsmList] with
def apply(esmOption: Option[EsmInit]): EsmList = List(esmOption)

private lazy val netDomain = env.net.domain
private lazy val assetDomain = env.net.assetDomain
Expand All @@ -30,6 +37,8 @@ trait AssetHelper:

def assetVersion = AssetVersion.current

def updateManifest() = if !env.net.isProd then env.web.manifest.update()

// bump flairs version if a flair is changed only (not added or removed)
val flairVersion = "______2"

Expand All @@ -40,26 +49,8 @@ trait AssetHelper:

def flairSrc(flair: Flair): String = staticAssetUrl(s"$flairVersion/flair/img/$flair.webp")

def cssTag(name: String)(using ctx: Context): Frag =
cssTagWithTheme(name, ctx.pref.currentBg)

def cssTagWithTheme(name: String, theme: String): Frag =
if theme == "system" then
frag(
cssTagWithSimpleTheme(name, "light")(media := "(prefers-color-scheme: light)"),
cssTagWithSimpleTheme(name, "dark")(media := "(prefers-color-scheme: dark)")
)
else cssTagWithSimpleTheme(name, theme)

private def cssTagWithSimpleTheme(name: String, theme: String): Tag =
cssAt:
s"css/$name.$theme.${if minifiedAssets then "min" else "dev"}.css"

def cssTagNoTheme(name: String): Frag =
cssAt(s"css/$name.${if minifiedAssets then "min" else "dev"}.css")

private def cssAt(path: String): Tag =
link(href := assetUrl(path), rel := "stylesheet")
def cssTag(key: String)(using ctx: Context): Frag =
link(href := staticAssetUrl(s"css/${env.web.manifest.css(key).getOrElse(key)}"), rel := "stylesheet")

def jsonScript(json: JsValue | SafeJsonStr, id: String = "page-init-data") =
script(tpe := "application/json", st.id := id):
Expand All @@ -68,40 +59,39 @@ trait AssetHelper:
case json: JsValue => safeJsonValue(json).value
case json => json.toString

val systemThemePolyfillJs = """
if (window.matchMedia('(prefers-color-scheme: dark)').media === 'not all')
document.querySelectorAll('[media="(prefers-color-scheme: dark)"]').forEach(e=>e.media='')
"""

// load iife scripts in <head> and defer
def iifeModule(path: String): Frag = script(deferAttr, src := assetUrl(path))

private val loadEsmFunction = "site.asset.loadEsm"

// jsModule is esm, no defer needed
def jsModule(name: String): Frag =
script(tpe := "module", src := assetUrl(s"compiled/$name${minifiedAssets.so(".min")}.js"))

def jsModuleInit(name: String)(using PageContext): Frag =
frag(jsModule(name), embedJsUnsafeLoadThen(s"$loadEsmFunction('$name')"))
def jsModuleInit(name: String, json: SafeJsonStr)(using PageContext): Frag =
frag(jsModule(name), embedJsUnsafeLoadThen(s"$loadEsmFunction('$name',{init:$json})"))
def jsModuleInit[A: Writes](name: String, value: A)(using PageContext): Frag =
jsModuleInit(name, safeJsonValue(Json.toJson(value)))

def jsModuleInit(name: String, text: SafeJsonStr, nonce: lila.web.Nonce): Frag =
frag(jsModule(name), embedJsUnsafeLoadThen(s"$loadEsmFunction('$name',{init:$text})", nonce))
def jsModuleInit(name: String, json: JsValue, nonce: lila.web.Nonce): Frag =
jsModuleInit(name, safeJsonValue(json), nonce)

def jsPageModule(name: String)(using PageContext) =
frag(jsModule(name), embedJsUnsafeLoadThen(s"site.asset.loadPageEsm('$name')"))

def analyseNvuiTag(using ctx: PageContext) = ctx.blind.option(jsModule("analysisBoard.nvui"))
private val load = "site.asset.loadEsm"

def jsName(key: String): String =
env.web.manifest.js(key).fold(key)(_.name)
def jsTag(key: String): Frag =
script(tpe := "module", src := staticAssetUrl(s"compiled/${jsName(key)}"))
def jsDeps(keys: List[String]): Frag = frag:
env.web.manifest.deps(keys).map { dep =>
script(tpe := "module", src := staticAssetUrl(s"compiled/$dep"))
}
def jsModule(key: String): EsmInit =
EsmInit(key, emptyFrag)
def jsModuleInit(key: String)(using PageContext): EsmInit =
EsmInit(key, embedJsUnsafeLoadThen(s"$load('${jsName(key)}')"))
def jsModuleInit(key: String, json: SafeJsonStr)(using PageContext): EsmInit =
EsmInit(key, embedJsUnsafeLoadThen(s"$load('${jsName(key)}',{init:$json})"))
def jsModuleInit[A: Writes](key: String, value: A)(using PageContext): EsmInit =
jsModuleInit(key, safeJsonValue(Json.toJson(value)))
def jsModuleInit(key: String, text: SafeJsonStr, nonce: Nonce): EsmInit =
EsmInit(key, embedJsUnsafeLoadThen(s"$load('${jsName(key)}',{init:$text})", nonce))
def jsModuleInit(key: String, json: JsValue, nonce: Nonce): EsmInit =
jsModuleInit(key, safeJsonValue(json), nonce)
def jsPageModule(key: String)(using PageContext): EsmInit =
EsmInit(key, embedJsUnsafeLoadThen(s"site.asset.loadPageEsm('${jsName(key)}')"))

def analyseNvuiTag(using ctx: PageContext) = ctx.blind.option(jsModule("analyse.nvui"))
def puzzleNvuiTag(using ctx: PageContext) = ctx.blind.option(jsModule("puzzle.nvui"))
def roundNvuiTag(using ctx: PageContext) = ctx.blind.option(jsModule("round.nvui"))
def infiniteScrollTag(using PageContext) = jsModuleInit("infiniteScroll")
def captchaTag = jsModule("captcha")
def infiniteScrollTag(using PageContext) = jsModuleInit("bits.infiniteScroll")
def captchaTag = jsModule("bits.captcha")
def cashTag = iifeModule("javascripts/vendor/cash.min.js")
def fingerprintTag = iifeModule("javascripts/fipr.js")
def chessgroundTag = script(tpe := "module", src := assetUrl("npm/chessground.min.js"))
Expand All @@ -126,13 +116,13 @@ if (window.matchMedia('(prefers-color-scheme: dark)').media === 'not all')
s""" nonce="$nonce""""
s"""<script$nonce>$js</script>"""

def embedJsUnsafe(js: String, nonce: lila.web.Nonce): Frag = raw:
def embedJsUnsafe(js: String, nonce: Nonce): Frag = raw:
s"""<script nonce="$nonce">$js</script>"""

private val onLoadFunction = "site.load.then"

def embedJsUnsafeLoadThen(js: String)(using PageContext): Frag =
embedJsUnsafe(s"""$onLoadFunction(()=>{$js})""")

def embedJsUnsafeLoadThen(js: String, nonce: lila.web.Nonce): Frag =
def embedJsUnsafeLoadThen(js: String, nonce: Nonce): Frag =
embedJsUnsafe(s"""$onLoadFunction(()=>{$js})""", nonce)
6 changes: 4 additions & 2 deletions app/views/account/layout.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ object layout:
title: String,
active: String,
evenMoreCss: Frag = emptyFrag,
evenMoreJs: Frag = emptyFrag
evenMoreJs: Frag = emptyFrag,
modules: EsmList = Nil
)(body: Frag)(using ctx: PageContext): Frag =
views.html.base.layout(
title = title,
moreCss = frag(cssTag("account"), evenMoreCss),
moreJs = frag(jsModule("account"), evenMoreJs)
moreJs = evenMoreJs,
modules = jsModule("bits.account") ++ modules
):
def activeCls(c: String) = cls := active.activeO(c)
main(cls := "account page-menu")(
Expand Down
2 changes: 1 addition & 1 deletion app/views/account/passwd.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ object passwd:
account.layout(
title = trans.site.changePassword.txt(),
active = "password",
evenMoreJs = jsModuleInit("passwordComplexity")
modules = jsModuleInit("bits.passwordComplexity")
):
div(cls := "box box-pad")(
h1(cls := "box__top")(trans.site.changePassword()),
Expand Down
4 changes: 3 additions & 1 deletion app/views/analyse/bits.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ object bits:
pageModule: PageModule,
moreCss: Frag = emptyFrag,
moreJs: Frag = emptyFrag,
modules: EsmList = Nil,
openGraph: Option[lila.web.OpenGraph] = None
)(body: Frag)(using PageContext): Frag =
views.html.base.layout(
title = title,
moreCss = moreCss,
moreJs = moreJs,
modules = modules,
pageModule = pageModule.some,
openGraph = openGraph,
robots = false,
Expand All @@ -29,4 +31,4 @@ object bits:
def csp(using PageContext) = analysisCsp.withPeer.withInlineIconFont.withChessDbCn.some

def analyseModule(mode: String, json: JsObject)(using ctx: PageContext) =
PageModule("analysisBoard", Json.obj("mode" -> mode, "cfg" -> json))
PageModule("analyse", Json.obj("mode" -> mode, "cfg" -> json))
2 changes: 1 addition & 1 deletion app/views/analyse/embed.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ object embed:
cssModule = "lpv.embed"
)(
div(cls := "is2d")(div(pgn)),
jsModule("lpv.embed"),
jsTag("site.lpv.embed"),
lpvJs(orientation, getPgn)
)

Expand Down
2 changes: 1 addition & 1 deletion app/views/analyse/replay.scala
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ object replay:
(pov.game.variant == Crazyhouse).option(cssTag("analyse.zh")),
ctx.blind.option(cssTag("round.nvui"))
),
moreJs = analyseNvuiTag,
modules = analyseNvuiTag,
pageModule = bits.analyseModule(
"replay",
Json
Expand Down
5 changes: 1 addition & 4 deletions app/views/appeal/bits.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,5 @@ object bits:
cssTag("appeal"),
isGranted(_.UserModView).option(cssTag("mod.user"))
),
moreJs = frag(
jsModule("appeal"),
isGranted(_.UserModView).option(jsModule("mod.user"))
)
modules = jsModule("mod.appeal") ++ isGranted(_.UserModView).so(jsModule("mod.user"))
)(body)
2 changes: 1 addition & 1 deletion app/views/auth/bits.scala
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ object bits:
views.html.base.layout(
title = s"${me.username} - ${trans.site.changePassword.txt()}",
moreCss = cssTag("form3"),
moreJs = jsModuleInit("passwordComplexity")
modules = jsModuleInit("bits.passwordComplexity")
):
main(cls := "page-small box box-pad")(
boxTop(
Expand Down
2 changes: 1 addition & 1 deletion app/views/auth/login.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ object login:
def apply(form: Form[?], referrer: Option[String])(using PageContext) =
views.html.base.layout(
title = trans.site.signIn.txt(),
moreJs = jsModuleInit("login", "login"),
modules = jsModuleInit("bits.login", "login"),
moreCss = cssTag("auth"),
withHrefLangs = lila.core.app.LangPath(routes.Auth.login).some
) {
Expand Down
7 changes: 2 additions & 5 deletions app/views/auth/signup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,8 @@ object signup:
def apply(form: lila.core.security.HcaptchaForm[?])(using ctx: PageContext) =
views.html.base.layout(
title = trans.site.signUp.txt(),
moreJs = frag(
jsModuleInit("login", "signup"),
lila.web.views.hcaptcha.script(form),
fingerprintTag
),
modules = jsModuleInit("bits.login", "signup"),
moreJs = frag(lila.web.views.hcaptcha.script(form), fingerprintTag),
moreCss = cssTag("auth"),
csp = defaultCsp.withHcaptcha.some,
withHrefLangs = LangPath(routes.Auth.signup).some
Expand Down
5 changes: 3 additions & 2 deletions app/views/base/embed.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ object embed:
layout.bits.viewport,
layout.bits.metaCsp(basicCsp.withNonce(ctx.nonce).withInlineIconFont),
st.headTitle(title),
layout.bits.systemThemeEmbedScript,
layout.bits.pieceSprite(ctx.pieceSet),
cssTagWithTheme(cssModule, ctx.bg),
(ctx.bg == "system").option(embedJsUnsafe(systemThemePolyfillJs, ctx.nonce))
cssTag("theme-light"), // includes both light & dark colors
cssTag(cssModule)
),
st.body(cls := s"${ctx.bg} highlight ${ctx.boardClass}")(
layout.dataSoundSet := SoundSet.silent.key,
Expand Down
Loading