lila/app/views/streamer/index.scala

100 lines
3.2 KiB
Scala

package views.html.streamer
import controllers.routes
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
object index {
import trans.streamer._
private val dataDedup = attr("data-dedup")
def apply(
live: List[lila.streamer.Streamer.WithUserAndStream],
pager: Paginator[lila.streamer.Streamer.WithUser],
requests: Boolean
)(implicit ctx: Context) = {
val title = if (requests) "Streamer approval requests" else lichessStreamers.txt()
def widget(s: lila.streamer.Streamer.WithUser, stream: Option[lila.streamer.Stream]) =
frag(
a(
cls := "overlay",
href := {
if (requests) s"${routes.Streamer.edit()}?u=${s.user.username}"
else routes.Streamer.show(s.user.username).url
}
),
stream.isDefined option span(cls := "ribbon")(span(trans.streamer.live())),
bits.pic(s.streamer, s.user),
div(cls := "overview")(
h1(dataIcon := "")(titleTag(s.user.title), stringValueFrag(s.streamer.name)),
s.streamer.headline.map(_.value).map { d =>
p(
cls := s"headline ${if (d.length < 60) "small" else if (d.length < 120) "medium" else "large"}"
)(d)
},
div(cls := "services")(
s.streamer.twitch.map { twitch =>
div(cls := "service twitch")(twitch.minUrl)
},
s.streamer.youTube.map { youTube =>
div(cls := "service youTube")(youTube.minUrl)
}
),
div(cls := "ats")(
stream.map { s =>
p(cls := "at")(
currentlyStreaming(strong(s.status))
)
} getOrElse frag(
p(cls := "at")(trans.lastSeenActive(momentFromNow(s.streamer.seenAt))),
s.streamer.liveAt.map { liveAt =>
p(cls := "at")(lastStream(momentFromNow(liveAt)))
}
)
)
)
)
views.html.base.layout(
title = title,
moreCss = cssTag("streamer.list"),
moreJs = infiniteScrollTag
) {
main(cls := "page-menu")(
bits.menu(if (requests) "requests" else "index", none)(ctx)(cls := " page-menu__menu"),
div(cls := "page-menu__content box streamer-list")(
h1(dataIcon := "", cls := "text")(title),
!requests option div(cls := "list live")(
live.map { s =>
st.article(cls := "streamer")(widget(s.withoutStream, s.stream))
}
),
div(cls := "list infinitescroll")(
(live.size % 2 == 1) option div(cls := "none"),
pager.currentPageResults.map { s =>
st.article(cls := "streamer paginated", dataDedup := s.streamer.id.value)(widget(s, none))
},
pagerNext(
pager,
np =>
addQueryParameter(
addQueryParameter(routes.Streamer.index().url, "page", np),
"requests",
if (requests) 1 else 0
)
).map {
frag(_, div(cls := "none")) // don't break the even/odd CSS flow
}
)
)
)
}
}
}