homepage UI
parent
05eb7bb30f
commit
adc0b22989
|
@ -46,7 +46,7 @@ final class Preload(
|
|||
leaderboard(()) zip
|
||||
tourneyWinners zip
|
||||
(ctx.noBot ?? dailyPuzzle()) zip
|
||||
liveStreams().dmap(_.autoFeatured.withTitles(lightUserApi)) zip
|
||||
liveStreams().dmap(_.autoFeatured withTitles lightUserApi) zip
|
||||
(ctx.userId ?? getPlayban) flatMap {
|
||||
case (data, povs) ~ posts ~ tours ~ events ~ simuls ~ feat ~ entries ~ lead ~ tWinners ~ puzzle ~ streams ~ playban =>
|
||||
val currentGame = ctx.me ?? Preload.currentGameMyTurn(povs, lightUserApi.sync) _
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@(form: Form[_])(implicit ctx: Context)
|
||||
|
||||
@layout(title = "New event") {
|
||||
@layout(title = "New event", css = "mod.form") {
|
||||
<div class="crud page-menu__content box box-pad">
|
||||
<h1>New event</h1>
|
||||
<form class="content_box_content form3" action="@routes.Event.create" method="POST">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@(event: lila.event.Event, form: Form[_])(implicit ctx: Context)
|
||||
|
||||
@layout(title = event.title) {
|
||||
@layout(title = event.title, css = "mod.form") {
|
||||
<div class="crud edit page-menu__content box box-pad">
|
||||
<h1>
|
||||
@event.title
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@(title: String)(body: Html)(implicit ctx: Context)
|
||||
@(title: String, css: String = "mod.misc")(body: Html)(implicit ctx: Context)
|
||||
|
||||
@moreJs = {
|
||||
@flatpickrTag
|
||||
|
@ -7,7 +7,7 @@
|
|||
|
||||
@base.layout(
|
||||
title = title,
|
||||
moreCss = responsiveCssTag("mod.misc"),
|
||||
moreCss = responsiveCssTag(css),
|
||||
responsive = true,
|
||||
moreJs = moreJs) {
|
||||
<main class="page-menu">
|
||||
|
|
|
@ -83,33 +83,31 @@ object bits {
|
|||
}
|
||||
|
||||
def vstext(pov: Pov)(ctxOption: Option[Context]) =
|
||||
div(cls := "vstext clearfix")(
|
||||
div(cls := "left user_link")(
|
||||
div(cls := "vstext")(
|
||||
div(cls := "vstext__pl user_link")(
|
||||
playerUsername(pov.player, withRating = false, withTitle = false),
|
||||
br,
|
||||
playerTitle(pov.player) map { t => frag(t, " ") },
|
||||
pov.player.rating,
|
||||
pov.player.provisional option "?"
|
||||
),
|
||||
div(cls := "right user_link")(
|
||||
pov.game.clock map { c =>
|
||||
div(cls := "vstext__clock")(shortClockName(c.config))
|
||||
} orElse {
|
||||
ctxOption flatMap { implicit ctx =>
|
||||
pov.game.daysPerTurn map { days =>
|
||||
div(cls := "vstext__clock")(
|
||||
if (days == 1) trans.oneDay.frag() else trans.nbDays.pluralSame(days)
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
div(cls := "vstext__op user_link")(
|
||||
playerUsername(pov.opponent, withRating = false, withTitle = false),
|
||||
br,
|
||||
pov.opponent.rating,
|
||||
pov.opponent.provisional option "?",
|
||||
playerTitle(pov.opponent) map { t => frag(" ", t) }
|
||||
),
|
||||
pov.game.clock map { c =>
|
||||
div(cls := "center")(span(cls := "text", dataIcon := "p")(shortClockName(c.config)))
|
||||
} orElse {
|
||||
ctxOption flatMap { implicit ctx =>
|
||||
pov.game.daysPerTurn map { days =>
|
||||
div(cls := "center")(
|
||||
span(title := trans.correspondence.txt())(
|
||||
if (days == 1) trans.oneDay() else trans.nbDays.pluralSame(days)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -19,12 +19,12 @@ object bits {
|
|||
leaderboard: List[lila.user.User.LightPerf],
|
||||
tournamentWinners: List[lila.tournament.Winner]
|
||||
)(implicit ctx: Context) = frag(
|
||||
div(cls := "lobby__leaderboard")(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.User.list)(trans.more(), " »"),
|
||||
span(cls := "title text", dataIcon := "C")(trans.leaderboard())
|
||||
div(cls := "lobby__leaderboard lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "C")(trans.leaderboard.frag()),
|
||||
a(cls := "more", href := routes.User.list)(trans.more.frag(), " »")
|
||||
),
|
||||
div(cls := "undertable_inner scroll-shadow-hard")(
|
||||
div(cls := "lobby__box__content")(
|
||||
table(tbody(
|
||||
leaderboard map { l =>
|
||||
tr(
|
||||
|
@ -38,12 +38,12 @@ object bits {
|
|||
))
|
||||
)
|
||||
),
|
||||
div(cls := "lobby__winners")(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.Tournament.leaderboard)(trans.more(), " »"),
|
||||
span(cls := "title text", dataIcon := "g")(trans.tournamentWinners())
|
||||
div(cls := "lobby__winners lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "g")(trans.tournamentWinners.frag()),
|
||||
a(cls := "more", href := routes.Tournament.leaderboard)(trans.more.frag(), " »")
|
||||
),
|
||||
div(cls := "undertable_inner scroll-shadow-hard")(
|
||||
div(cls := "lobby__box__content")(
|
||||
table(tbody(
|
||||
tournamentWinners take 10 map { w =>
|
||||
tr(
|
||||
|
@ -54,39 +54,39 @@ object bits {
|
|||
))
|
||||
)
|
||||
),
|
||||
div(cls := "lobby__tournaments")(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.Tournament.home())(frag(trans.more(), " »")),
|
||||
span(cls := "title text", dataIcon := "g")(trans.openTournaments())
|
||||
div(cls := "lobby__tournaments lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "g")(trans.openTournaments.frag()),
|
||||
a(cls := "more", href := routes.Tournament.home())(trans.more.frag(), " »")
|
||||
),
|
||||
div(id := "enterable_tournaments", cls := "enterable_list undertable_inner scroll-shadow-hard")(
|
||||
div(id := "enterable_tournaments", cls := "enterable_list lobby__box__content scroll-shadow-hard")(
|
||||
views.html.tournament.enterable(tours)
|
||||
)
|
||||
),
|
||||
div(cls := List("lobby__simuls" -> true, "none" -> simuls.isEmpty))(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.Simul.home())(frag(trans.more(), " »")),
|
||||
span(cls := "title text", dataIcon := "|")(trans.simultaneousExhibitions())
|
||||
div(cls := "lobby__simuls lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "|")(trans.simultaneousExhibitions.frag()),
|
||||
a(cls := "more", href := routes.Simul.home())(trans.more.frag(), " »")
|
||||
),
|
||||
div(id := "enterable_simuls", cls := "enterable_list undertable_inner")(
|
||||
div(id := "enterable_simuls", cls := "enterable_list lobby__box__content")(
|
||||
views.html.simul.bits.allCreated(simuls)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def lastPosts(posts: List[lila.blog.MiniPost])(implicit ctx: Context): Option[Frag] = posts.nonEmpty option
|
||||
div(cls := "lobby__forum")(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.Blog.index())(trans.more(), " »"),
|
||||
span(cls := "title text", dataIcon := "6")(trans.latestUpdates())
|
||||
div(cls := "lobby__blog lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "6")(trans.latestUpdates.frag()),
|
||||
a(cls := "more", href := routes.Blog.index())(trans.more.frag(), " »")
|
||||
),
|
||||
div(cls := "undertable_inner")(
|
||||
div(cls := "lobby__box__content")(
|
||||
posts map { post =>
|
||||
a(cls := "post", href := routes.Blog.show(post.id, post.slug))(
|
||||
img(src := post.image),
|
||||
span(cls := "text")(
|
||||
span(cls := "title")(post.title),
|
||||
p(cls := "shortlede")(post.shortlede)
|
||||
strong(post.title),
|
||||
span(post.shortlede)
|
||||
),
|
||||
semanticDate(post.date)
|
||||
)
|
||||
|
@ -149,7 +149,7 @@ object bits {
|
|||
def spotlight(e: lila.event.Event)(implicit ctx: Context) = a(
|
||||
href := (if (e.isNow) e.url else routes.Event.show(e.id).url),
|
||||
cls := List(
|
||||
s"tour_spotlight event_spotlight id_${e.id}" -> true,
|
||||
s"tour-spotlight event-spotlight id_${e.id}" -> true,
|
||||
"invert" -> e.isNowOrSoon
|
||||
)
|
||||
)(
|
||||
|
|
|
@ -55,11 +55,13 @@ object home {
|
|||
) {
|
||||
main(cls := "lobby")(
|
||||
div(cls := "lobby__side")(
|
||||
ctx.noKid option st.section(id := "streams_on_air")(views.html.streamer.bits liveStreams streams),
|
||||
events.map(bits.spotlight),
|
||||
!ctx.isBot option frag(
|
||||
lila.tournament.Spotlight.select(tours, ctx.me, 3) map { views.html.tournament.homepageSpotlight(_) },
|
||||
simuls.find(_.spotlightable) take 2 map { views.html.simul.bits.homepageSpotlight(_) } toList
|
||||
ctx.noKid option st.section(cls := "lobby__streams")(views.html.streamer.bits liveStreams streams),
|
||||
div(cls := "lobby__spotlights")(
|
||||
events.map(bits.spotlight),
|
||||
!ctx.isBot option frag(
|
||||
lila.tournament.Spotlight.select(tours, ctx.me, 3 - events.size) map { views.html.tournament.homepageSpotlight(_) },
|
||||
simuls.find(_.spotlightable).headOption map views.html.simul.bits.homepageSpotlight
|
||||
)
|
||||
),
|
||||
ctx.me map { u =>
|
||||
div(cls := "timeline", dataHref := routes.Timeline.home)(
|
||||
|
@ -117,26 +119,30 @@ object home {
|
|||
)
|
||||
},
|
||||
ctx.noBot option bits.underboards(tours, simuls, leaderboard, tournamentWinners),
|
||||
ctx.noKid option div(cls := "lobby__forum")(
|
||||
div(cls := "undertable_top")(
|
||||
a(cls := "more", href := routes.ForumCateg.index)(trans.more.frag(), " »"),
|
||||
span(cls := "title text", dataIcon := "d")(trans.latestForumPosts.frag())
|
||||
ctx.noKid option div(cls := "lobby__forum lobby__box")(
|
||||
div(cls := "lobby__box__top")(
|
||||
span(cls := "title text", dataIcon := "d")(trans.latestForumPosts.frag()),
|
||||
a(cls := "more", href := routes.ForumCateg.index)(trans.more.frag(), " »")
|
||||
),
|
||||
div(cls := "undertable_inner scroll-shadow-hard")(
|
||||
div(cls := "content")(views.html.forum.post recent forumRecent)
|
||||
div(cls := "lobby__box__content scroll-shadow-hard")(
|
||||
views.html.forum.post recent forumRecent
|
||||
)
|
||||
),
|
||||
bits.lastPosts(lastPost),
|
||||
div(cls := "lobby__support")(
|
||||
a(href := routes.Plan.index)(
|
||||
iconTag(patronIconChar),
|
||||
strong("Lichess Patron"),
|
||||
span(trans.directlySupportLichess.frag())
|
||||
span(cls := "lobby__support__text")(
|
||||
strong("Lichess Patron"),
|
||||
span(trans.directlySupportLichess.frag())
|
||||
)
|
||||
),
|
||||
a(href := routes.Page.swag)(
|
||||
iconTag(""),
|
||||
strong("Swag Store"),
|
||||
span(trans.playChessInStyle.frag())
|
||||
span(cls := "lobby__support__text")(
|
||||
strong("Swag Store"),
|
||||
span(trans.playChessInStyle.frag())
|
||||
)
|
||||
)
|
||||
),
|
||||
div(cls := "lobby__about")(a(href := "/about")(trans.aboutX.frag("lichess.org")))
|
||||
|
|
|
@ -40,7 +40,7 @@ object bits {
|
|||
)
|
||||
|
||||
def allCreated(simuls: List[lila.simul.Simul]) =
|
||||
table(cls := "tournaments")(
|
||||
table(
|
||||
simuls map { simul =>
|
||||
tr(
|
||||
td(cls := "name")(
|
||||
|
|
|
@ -11,7 +11,7 @@ object bits {
|
|||
def liveStreams(l: lila.streamer.LiveStreams.WithTitles): Frag =
|
||||
l.live.streams.map { s =>
|
||||
a(cls := "stream highlight", href := routes.Streamer.show(s.streamer.id.value), title := s.status)(
|
||||
span(cls := "text", dataIcon := "")(l titleName s),
|
||||
strong(cls := "text", dataIcon := "")(l titleName s),
|
||||
" ",
|
||||
s.status
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@(form: Form[_])(implicit ctx: Context)
|
||||
|
||||
@layout(title = "New tournament") {
|
||||
@layout(title = "New tournament", css = "mod.form") {
|
||||
<div class="crud page-menu__content box box-pad">
|
||||
<h1>New tournament</h1>
|
||||
<form class="content_box_content form3" action="@routes.TournamentCrud.create" method="POST">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@(tour: lila.tournament.Tournament, form: Form[_])(implicit ctx: Context)
|
||||
|
||||
@layout(title = tour.fullName) {
|
||||
@layout(title = tour.fullName, css = "mod.form") {
|
||||
<div class="crud edit page-menu__content box box-pad">
|
||||
<h1>
|
||||
<a href="@routes.Tournament.show(tour.id)">@tour.fullName</a>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@(title: String, evenMoreJs: Html = emptyHtml)(body: Html)(implicit ctx: Context)
|
||||
@(title: String, evenMoreJs: Html = emptyHtml, css: String = "mod.misc")(body: Html)(implicit ctx: Context)
|
||||
|
||||
@moreJs = {
|
||||
@flatpickrTag
|
||||
|
@ -8,7 +8,7 @@
|
|||
|
||||
@base.layout(
|
||||
title = title,
|
||||
moreCss = responsiveCssTag("mod.misc"),
|
||||
moreCss = responsiveCssTag(css),
|
||||
responsive = true,
|
||||
moreJs = moreJs) {
|
||||
<main class="page-menu">
|
||||
|
|
|
@ -14,10 +14,7 @@ object enterable {
|
|||
tours map { tour =>
|
||||
tr(
|
||||
td(cls := "name")(
|
||||
a(cls := "text", href := routes.Tournament.show(tour.id))(
|
||||
span(dataIcon := tournamentIconChar(tour)),
|
||||
tour.name
|
||||
)
|
||||
a(cls := "text", dataIcon := tournamentIconChar(tour), href := routes.Tournament.show(tour.id))(tour.name)
|
||||
),
|
||||
tour.schedule.fold(td()) { s => td(momentFromNow(s.at)) },
|
||||
td(tour.durationString),
|
||||
|
|
|
@ -55,7 +55,7 @@ final class LiveStreamApi(
|
|||
// requested = false,
|
||||
// granted = true,
|
||||
// ignored = false,
|
||||
// autoFeatured = false,
|
||||
// autoFeatured = true,
|
||||
// chatEnabled = true
|
||||
// ),
|
||||
// picturePath = none,
|
||||
|
@ -70,6 +70,7 @@ final class LiveStreamApi(
|
|||
// updatedAt = DateTime.now
|
||||
// ))
|
||||
// )))
|
||||
|
||||
def of(s: Streamer.WithUser): Fu[Streamer.WithUserAndStream] = all.map { live =>
|
||||
Streamer.WithUserAndStream(s.streamer, s.user, live get s.streamer)
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ final class Tv(trouper: Trouper, roundProxyGame: Game.ID => Fu[Option[Game]]) {
|
|||
_.map(roundProxyGame).sequenceFu.map(_.flatten)
|
||||
}
|
||||
|
||||
def getBestGame = getGame(Tv.Channel.Best)
|
||||
def getBestGame = getGame(Tv.Channel.Best) orElse lila.game.GameRepo.random
|
||||
|
||||
def getBestAndHistory = getGameAndHistory(Tv.Channel.Best)
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
%base-font {
|
||||
font-family: 'Noto Sans';
|
||||
font-weight: normal;
|
||||
}
|
||||
%roboto {
|
||||
font-family: 'Roboto';
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
.user_link {
|
||||
@extend %nowrap-hidden;
|
||||
color: $c-font;
|
||||
&:hover {
|
||||
color: $c-link;
|
||||
}
|
||||
.line {
|
||||
@extend %data-icon;
|
||||
color: $c-font;
|
||||
|
@ -48,3 +45,6 @@
|
|||
color: $c-bad;
|
||||
}
|
||||
}
|
||||
a.user_link:hover {
|
||||
color: $c-link;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
.vstext {
|
||||
@extend %flex-between, %nowrap-hidden, %box-neat;
|
||||
background: $c-bg-box;
|
||||
padding: .3em .6em;
|
||||
&__center {
|
||||
text-align: center;
|
||||
}
|
||||
&__pl,
|
||||
&__op {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
&__pl {
|
||||
text-align: left;
|
||||
}
|
||||
&__op {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
.lobby {
|
||||
&__box {
|
||||
@extend %flex-column, %box-neat-force;
|
||||
background: $c-bg-box;
|
||||
&__top {
|
||||
@extend %metal, %flex-between;
|
||||
flex: 0 0 auto;
|
||||
padding: .3em .5em;
|
||||
.more {
|
||||
color: $c-font-dim;
|
||||
}
|
||||
.title {
|
||||
font-weight: bold;
|
||||
color: $c-font-dim;
|
||||
padding: .3em;
|
||||
}
|
||||
}
|
||||
&__content {
|
||||
overflow: hidden;
|
||||
&:hover {
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
.user_link {
|
||||
font-weight: bold;
|
||||
color: $c-font-dim;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
td {
|
||||
padding: .5em .4em;
|
||||
border-top: $border;
|
||||
white-space: nowrap;
|
||||
}
|
||||
tr:nth-child(even) {
|
||||
background: $c-bg-zebra;
|
||||
}
|
||||
}
|
||||
&__leaderboard,
|
||||
&__winners {
|
||||
td:first-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
td:last-child {
|
||||
text-align: right;
|
||||
padding-right: .7em;
|
||||
}
|
||||
}
|
||||
&__forum .lobby__box__top,
|
||||
&__blog .lobby__box__top {
|
||||
border-bottom: $border;
|
||||
}
|
||||
&__forum {
|
||||
max-height: 20em;
|
||||
li {
|
||||
margin: 0.6em 0;
|
||||
padding-left: 9px;
|
||||
line-height: 14px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.extract {
|
||||
font-weight: 300;
|
||||
}
|
||||
}
|
||||
&__blog {
|
||||
.post {
|
||||
@extend %flex-between;
|
||||
color: $c-font;
|
||||
flex-wrap: nowrap;
|
||||
overflow: hidden;
|
||||
padding: .2em .5em;
|
||||
&:hover {
|
||||
background: mix($c-link, $c-bg-box, 15%);
|
||||
}
|
||||
.text {
|
||||
flex: 1 1 100%;
|
||||
}
|
||||
strong {
|
||||
display: block;
|
||||
}
|
||||
img {
|
||||
height: 4em;
|
||||
width: 4em;
|
||||
margin-right: .8em;
|
||||
}
|
||||
time {
|
||||
color: $c-font-dim;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
.lobby__forum {
|
||||
li {
|
||||
margin: 0.6em 0;
|
||||
padding-left: 9px;
|
||||
line-height: 14px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.extract {
|
||||
font-family: 'Roboto';
|
||||
font-weight: 300;
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
$mq-col2: $mq-medium;
|
||||
$mq-col3: $mq-x-large;
|
||||
|
||||
$col2-app-height: minmax(500px, 70vh);
|
||||
$app-tabs-height: 30px;
|
||||
|
||||
.lobby {
|
||||
|
@ -27,20 +26,21 @@ $app-tabs-height: 30px;
|
|||
|
||||
@include breakpoint($mq-col2) {
|
||||
|
||||
grid-template-columns: repeat(3, minmax(150px, 350px));
|
||||
grid-template-columns:
|
||||
minmax(150px, 350px)
|
||||
minmax(150px, 400px)
|
||||
minmax(150px, 400px);
|
||||
|
||||
grid-template-rows: min-content $col2-app-height;
|
||||
grid-template-rows: max-content fit-content(0) fit-content(0) fit-content(0);
|
||||
|
||||
grid-template-areas:
|
||||
'table app app '
|
||||
'side app app '
|
||||
'tv leader winner'
|
||||
'puzzle tours tours '
|
||||
'. simuls simuls'
|
||||
'. forum forum '
|
||||
'. blog blog '
|
||||
'. support support'
|
||||
'. about about ';
|
||||
'table app app'
|
||||
'side app app'
|
||||
'tv leader winner'
|
||||
'puzzle tours tours '
|
||||
'about simuls simuls'
|
||||
'support forum forum '
|
||||
'. blog blog';
|
||||
}
|
||||
|
||||
@include breakpoint($mq-col3) {
|
||||
|
@ -51,17 +51,19 @@ $app-tabs-height: 30px;
|
|||
minmax(150px, 300px)
|
||||
minmax(150px, 350px);
|
||||
|
||||
grid-template-rows: $col2-app-height;
|
||||
grid-template-rows: fit-content(0) fit-content(0);
|
||||
|
||||
grid-template-areas:
|
||||
'side app app table '
|
||||
'side app app table'
|
||||
'tv leader winner puzzle'
|
||||
'. tours tours . '
|
||||
'. simuls simuls . '
|
||||
'. forum forum . '
|
||||
'. blog blog . '
|
||||
'. support support . '
|
||||
'. about about . ';
|
||||
'about tours tours support'
|
||||
'. simuls simuls .'
|
||||
'. forum forum .'
|
||||
'. blog blog .';
|
||||
|
||||
&__tournaments {
|
||||
max-height: 20em;
|
||||
}
|
||||
}
|
||||
|
||||
&__side { grid-area: side; }
|
||||
|
|
|
@ -1,7 +1,19 @@
|
|||
@import 'layout';
|
||||
@import 'app/app';
|
||||
@import 'puzzle';
|
||||
@import 'side';
|
||||
@import 'table';
|
||||
@import 'stream';
|
||||
@import 'spotlight';
|
||||
@import 'timeline';
|
||||
@import 'box';
|
||||
@import 'support';
|
||||
|
||||
.lobby__side {
|
||||
@extend %flex-column;
|
||||
margin-top: .3em;
|
||||
overflow: hidden;
|
||||
}
|
||||
.lobby__about {
|
||||
justify-self: center;
|
||||
margin-top: .5em;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
.lobby__puzzle {
|
||||
.mini-board {
|
||||
.vstext {
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
.lobby__side {
|
||||
@extend %flex-column;
|
||||
padding-top: $app-tabs-height;
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
.lobby__spotlights {
|
||||
@extend %box-radius-force;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
.tour-spotlight {
|
||||
@extend %flex-center, %box-radius, %nowrap-hidden;
|
||||
@extend %flex-center-nowrap, %nowrap-hidden;
|
||||
flex: 0 0 auto;
|
||||
padding: .3em;
|
||||
opacity: 0.8;
|
||||
|
@ -7,6 +11,7 @@
|
|||
background: $c-bg-low;
|
||||
text-shadow: $text-shadow;
|
||||
color: $c-font;
|
||||
border-bottom: 1px solid $c-bg-page;
|
||||
&.invert,
|
||||
&.event-spotlight,
|
||||
&:hover {
|
||||
|
@ -18,13 +23,11 @@
|
|||
opacity: 1;
|
||||
}
|
||||
.img {
|
||||
flex: 0 0 40px;
|
||||
margin: 0 10px 0 5px;
|
||||
flex: 0 0 50px;
|
||||
margin: 0 .5em 0 .3em;
|
||||
}
|
||||
img.img {
|
||||
width: 40px;
|
||||
filter: brightness(9);
|
||||
filter: brightness(9);
|
||||
}
|
||||
i.img,
|
||||
.img.icon {
|
||||
|
@ -32,7 +35,7 @@
|
|||
}
|
||||
i.img::before {
|
||||
color: #fff;
|
||||
font-size: 40px;
|
||||
font-size: 50px;
|
||||
text-shadow: 1px 1px 3px rgba(0,0,0,0.3);
|
||||
}
|
||||
.name {
|
||||
|
@ -53,10 +56,10 @@
|
|||
}
|
||||
&.little {
|
||||
.img {
|
||||
flex: 0 0 2.2em;
|
||||
flex: 0 0 40px;
|
||||
margin: 0 .5em 0 .3em;
|
||||
&::before {
|
||||
font-size: 2.2em;
|
||||
font-size: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
.lobby__streams {
|
||||
a.stream {
|
||||
@extend %roboto, %nowrap-hidden;
|
||||
color: $c-font-page;
|
||||
display: block;
|
||||
text-overflow: ellipsis;
|
||||
margin-bottom: .5em;
|
||||
line-height: .9;
|
||||
strong {
|
||||
@extend %base-font;
|
||||
}
|
||||
&.highlight strong {
|
||||
color: $c-brag;
|
||||
}
|
||||
strong:before {
|
||||
font-size: 1.5em;
|
||||
margin-right: .1rem;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
$c-support: $c-brag;
|
||||
|
||||
.lobby__support {
|
||||
a {
|
||||
@extend %flex-center, %box-neat;
|
||||
background: $c-bg-box;
|
||||
box-sizing: border-box;
|
||||
font-size: 1.3em;
|
||||
margin-bottom: $block-gap;
|
||||
padding: .2em .5em;
|
||||
@include transition();
|
||||
&:hover {
|
||||
background: $c-support;
|
||||
}
|
||||
&:hover,
|
||||
&:hover * {
|
||||
color: #fff;
|
||||
}
|
||||
&:hover i::before {
|
||||
opacity: 1;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
i {
|
||||
flex: 0 0 auto;
|
||||
margin: 0 .5em;
|
||||
&::before {
|
||||
margin-right: .15em;
|
||||
color: $c-support;
|
||||
font-size: 2.6em;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
&__text {
|
||||
flex: 1 1 auto;
|
||||
color: $c-support;
|
||||
strong {
|
||||
color: $c-support;
|
||||
font-weight: normal;
|
||||
display: block;
|
||||
}
|
||||
span {
|
||||
@extend %nowrap-hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: block;
|
||||
font-size: .8em;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,22 +8,28 @@
|
|||
justify-content: center;
|
||||
flex: 1 1 auto;
|
||||
a {
|
||||
margin: 1.2em 0;
|
||||
font-size: 1.3em;
|
||||
padding: 1em;
|
||||
text-align: center;
|
||||
letter-spacing: -1px;
|
||||
&.disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
margin: .2em 0;
|
||||
padding: .5em;
|
||||
@include breakpoint($mq-col3) {
|
||||
margin: 1.2em 0;
|
||||
padding: 1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
&__counters {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
@extend %flex-column;
|
||||
@include breakpoint($mq-col3) {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
a {
|
||||
color: $c-font;
|
||||
color: $c-font-page;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
.timeline {
|
||||
flex: 1 1 auto;
|
||||
margin-top: 1em;
|
||||
color: $c-font-page;
|
||||
overflow: hidden;
|
||||
&:hover {
|
||||
overflow-y: auto;
|
||||
|
@ -9,7 +10,7 @@
|
|||
@extend %roboto;
|
||||
a {
|
||||
@extend %base-font;
|
||||
color: $c-font;
|
||||
color: $c-font-page;
|
||||
}
|
||||
&:hover a {
|
||||
color: $c-link;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
.lobby__app {
|
||||
@extend %flex-column;
|
||||
height: 700px;
|
||||
user-select: none;
|
||||
&__content {
|
||||
flex: 1 1 100%;
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
border-bottom: 2px solid $c-border;
|
||||
> span {
|
||||
span {
|
||||
@extend %roboto, %box-radius-bottom;
|
||||
flex: 1 1 0;
|
||||
flex: 1 1 auto;
|
||||
text-align: center;
|
||||
font-size: .9em;
|
||||
// font-size: .9em;
|
||||
line-height: #{$app-tabs-height - 2px};
|
||||
padding: 0 .1em;
|
||||
cursor: pointer;
|
||||
|
@ -35,4 +35,7 @@
|
|||
color: $c-accent;
|
||||
}
|
||||
}
|
||||
.unread {
|
||||
margin-left: .3em;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
@import '../../../common/css/plugin';
|
||||
@import '../../../common/css/component/scroll-shadow';
|
||||
@import '../../../common/css/component/now-playing';
|
||||
@import '../../../common/css/component/vs';
|
||||
@import '../lobby';
|
||||
|
|
|
@ -31,7 +31,7 @@ module.exports = function(cfg, element) {
|
|||
return l.slice(0, 2).toLowerCase();
|
||||
});
|
||||
langs.push($('html').attr('lang'));
|
||||
$('#streams_on_air a, .event-spotlight').each(function() {
|
||||
$('.lobby__streams a, .event-spotlight').each(function() {
|
||||
var match = $(this).text().match(/\[(\w{2})\]/mi);
|
||||
if (match && langs.indexOf(match[1].toLowerCase()) === -1) $(this).hide();
|
||||
});
|
||||
|
@ -60,7 +60,7 @@ module.exports = function(cfg, element) {
|
|||
});
|
||||
},
|
||||
streams: function(html) {
|
||||
$('#streams_on_air').html(html);
|
||||
$('.lobby__streams').html(html);
|
||||
filterStreams();
|
||||
},
|
||||
featured: function(o) {
|
||||
|
|
|
@ -24,7 +24,7 @@ export default function(ctrl: LobbyController) {
|
|||
ctrl.isBot ? undefined : tab(ctrl, 'seeks', active, [ctrl.trans.noarg('correspondence')]),
|
||||
(active === 'now_playing' || ctrl.data.nbNowPlaying > 0 || ctrl.isBot) ? tab(ctrl, 'now_playing', active, [
|
||||
ctrl.trans.plural('nbGamesInPlay', ctrl.data.nbNowPlaying),
|
||||
myTurnPovsNb > 0 ? h('span.unread', myTurnPovsNb) : null
|
||||
myTurnPovsNb > 0 ? h('i.unread', myTurnPovsNb) : null
|
||||
]) : null
|
||||
];
|
||||
};
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
@import '../../../common/css/plugin';
|
||||
@import '../../../common/css/form/form3';
|
||||
@import '../../../common/css/form/cmn-toggle';
|
||||
@import '../../../common/css/vendor/flatpickr';
|
||||
@import '../mod/misc';
|
|
@ -0,0 +1,2 @@
|
|||
@import '../../../common/css/theme/dark';
|
||||
@import 'mod.form';
|
|
@ -0,0 +1,2 @@
|
|||
@import '../../../common/css/theme/light';
|
||||
@import 'mod.form';
|
|
@ -0,0 +1,2 @@
|
|||
@import '../../../common/css/theme/transp';
|
||||
@import 'mod.form';
|
Loading…
Reference in New Issue