fix many more warnings

scapegoat
Thibault Duplessis 2019-12-08 12:12:00 -06:00
parent b3cecd8a58
commit c0c3948c2b
114 changed files with 241 additions and 373 deletions

View File

@ -132,7 +132,7 @@ final class Account(
def email = Auth { implicit ctx => me =>
if (getBool("check")) Ok(renderCheckYourEmail).fuccess
else emailForm(me) map { form =>
Ok(html.account.email(me, form))
Ok(html.account.email(form))
}
}
@ -152,7 +152,7 @@ final class Account(
implicit val req = ctx.body
env.security.forms.preloadEmailDns >> emailForm(me).flatMap { form =>
FormFuResult(form) { err =>
fuccess(html.account.email(me, err))
fuccess(html.account.email(err))
} { data =>
val email = env.security.emailAddressValidator.validate(data.realEmail) err s"Invalid email ${data.email}"
val newUserEmail = lila.security.EmailConfirm.UserEmail(me.username, email.acceptable)

View File

@ -1,5 +1,6 @@
package controllers
import com.github.ghik.silencer.silent
import ornicar.scalalib.Zero
import play.api.data.{ Form, FormError }
import play.api.libs.json._
@ -460,7 +461,7 @@ final class Auth(
case Some((user, storedEmail)) => {
MagicLinkRateLimit(user, storedEmail, ctx.req) {
lila.mon.user.auth.magicLinkRequest("success")()
env.security.magicLink.send(user, storedEmail) inject Redirect(routes.Auth.magicLinkSent(storedEmail.conceal))
env.security.magicLink.send(user, storedEmail) inject Redirect(routes.Auth.magicLinkSent(storedEmail.value))
}
}
case _ => {
@ -473,9 +474,9 @@ final class Auth(
)
}
def magicLinkSent(email: String) = Open { implicit ctx =>
def magicLinkSent(@silent email: String) = Open { implicit ctx =>
fuccess {
Ok(html.auth.bits.magicLinkSent(email))
Ok(html.auth.bits.magicLinkSent)
}
}

View File

@ -140,7 +140,6 @@ final class Message(env: Env) extends LilaController(env) {
f(forms thread me),
reqUser = user,
reqTitle = title,
reqMod = getBool("mod"),
canMessage = canMessage || Granter(_.MessageAnyone)(me),
oldEnough = env.chat.panic.allowed(me)
)

View File

@ -95,7 +95,7 @@ final class Mod(
}(actionResult(username))
def disableTwoFactor(username: String) = Secure(_.DisableTwoFactor) { implicit ctx => me =>
modApi.disableTwoFactor(me.id, username) >> userC.modZoneOrRedirect(username, me)
modApi.disableTwoFactor(me.id, username) >> userC.modZoneOrRedirect(username)
}
def closeAccount(username: String) = OAuthMod(_.CloseAccount) { _ => me =>

View File

@ -37,11 +37,10 @@ final class Report(
Ok(html.report.list(reports, room, counts, streamers))
}
def inquiry(id: String) = Secure(_.SeeReport) { implicit ctx => me =>
for {
current <- api.inquiries ofModId me.id
newInquiry <- api.inquiries.toggle(AsMod(me), id)
} yield newInquiry.fold(Redirect(routes.Report.list))(onInquiryStart)
def inquiry(id: String) = Secure(_.SeeReport) { _ => me =>
api.inquiries.toggle(AsMod(me), id) map { newInquiry =>
newInquiry.fold(Redirect(routes.Report.list))(onInquiryStart)
}
}
private def onInquiryStart(inquiry: ReportModel) =
@ -66,7 +65,7 @@ final class Report(
inquiry match {
case None =>
goTo.fold(Redirect(routes.Report.list).fuccess) { s =>
userC.modZoneOrRedirect(s.user.username, me)
userC.modZoneOrRedirect(s.user.username)
}
case Some(prev) =>
def thenGoTo = dataOpt.flatMap(_ get "then").flatMap(_.headOption) flatMap {
@ -86,7 +85,7 @@ final class Report(
}
}
}
else if (force) userC.modZoneOrRedirect(prev.user, me)
else if (force) userC.modZoneOrRedirect(prev.user)
else api.inquiries.toggle(AsMod(me), prev.id) map {
_.fold(redirectToList)(onInquiryStart)
}
@ -101,7 +100,7 @@ final class Report(
}
}
def xfiles(id: String) = Secure(_.SeeReport) { implicit ctx => me =>
def xfiles(id: String) = Secure(_.SeeReport) { _ => _ =>
api.moveToXfiles(id) inject Redirect(routes.Report.list)
}
@ -115,7 +114,7 @@ final class Report(
}
}
def form = Auth { implicit ctx => implicit me =>
def form = Auth { implicit ctx => _ =>
get("username") ?? env.user.repo.named flatMap { user =>
env.report.forms.createWithCaptcha map {
case (form, captcha) => Ok(html.report.form(form, user, captcha))
@ -133,16 +132,15 @@ final class Report(
},
data =>
if (data.user == me) notFound
else api.create(data candidate lila.report.Reporter(me)) map { report =>
else api.create(data candidate lila.report.Reporter(me)) inject
Redirect(routes.Report.thanks(data.user.username))
}
)
}
def flag = AuthBody { implicit ctx => implicit me =>
implicit val req = ctx.body
env.report.forms.flag.bindFromRequest.fold(
err => BadRequest.fuccess,
_ => BadRequest.fuccess,
data => env.user.repo named data.username flatMap {
_ ?? { user =>
if (user == me) BadRequest.fuccess

View File

@ -1,6 +1,5 @@
package controllers
import lila.api._
import lila.user.UserContext
import lila.common.Form.trueish
import lila.common.IsMobile

View File

@ -7,7 +7,7 @@ import lila.api.Context
import lila.app._
import lila.chat.Chat
import lila.common.HTTPRequest
import lila.game.{ Pov, Game => GameModel, PgnDump, PlayerRef }
import lila.game.{ Pov, Game => GameModel, PgnDump }
import lila.tournament.{ TourMiniView, Tournament => Tour }
import lila.user.{ User => UserModel }
import views._
@ -76,7 +76,7 @@ final class Round(
}
}
private def getNext(currentGame: GameModel)(povs: List[Pov])(implicit ctx: Context) =
private def getNext(currentGame: GameModel)(povs: List[Pov]) =
povs find { pov =>
pov.isMyTurn && (pov.game.hasClock || !currentGame.hasClock)
}
@ -192,7 +192,7 @@ final class Round(
case (Some(tid), _) => {
ctx.isAuth && tour.fold(true)(tournamentC.canHaveChat(_, none))
} ?? env.chat.api.userChat.cached.findMine(Chat.Id(tid), ctx.me).map(toEventChat(s"tournament/$tid"))
case (_, Some(sid)) => game.simulId.?? { sid =>
case (_, Some(_)) => game.simulId.?? { sid =>
env.chat.api.userChat.cached.findMine(Chat.Id(sid), ctx.me).map(toEventChat(s"simul/$sid"))
}
case _ => game.hasChat ?? {
@ -224,12 +224,12 @@ final class Round(
import play.api.data._
implicit val req = ctx.body
Form(single("text" -> text)).bindFromRequest.fold(
err => fuccess(BadRequest),
_ => fuccess(BadRequest),
text => env.round.noteApi.set(gameId, me.id, text.trim take 10000)
)
}
def readNote(gameId: String) = Auth { implicit ctx => me =>
def readNote(gameId: String) = Auth { _ => me =>
env.round.noteApi.get(gameId, me.id) map { text =>
Ok(text)
}

View File

@ -55,7 +55,7 @@ final class Search(
}
),
api = _ => searchForm.bindFromRequest.fold(
failure => Ok(jsonError("Could not process search query")).fuccess,
_ => Ok(jsonError("Could not process search query")).fuccess,
data => data.nonEmptyQuery ?? { query =>
env.gameSearch.paginator(query, page) map (_.some)
} flatMap {

View File

@ -8,7 +8,7 @@ import scala.concurrent.duration._
import chess.format.FEN
import lila.api.{ Context, BodyContext }
import lila.app._
import lila.common.{ HTTPRequest, LilaCookie, IpAddress }
import lila.common.{ HTTPRequest, IpAddress }
import lila.game.{ Pov, AnonCookie }
import lila.setup.Processor.HookResult
import lila.setup.ValidFen

View File

@ -7,13 +7,11 @@ import lila.api.Context
import lila.app._
import lila.chat.Chat
import lila.common.HTTPRequest
import lila.hub.LightTeam._
import lila.simul.{ Simul => Sim }
import views._
final class Simul(
env: Env,
teamC: => Team,
apiC: => Team
) extends LilaController(env) {
@ -112,7 +110,7 @@ final class Simul(
AsHost(simulId) { simul =>
implicit val req = ctx.body
forms.setText.bindFromRequest.fold(
err => BadRequest,
_ => BadRequest,
text => {
env.simul.api.setText(simul.id, text)
jsonOkResult

View File

@ -24,7 +24,7 @@ final class Streamer(
} yield Ok(html.streamer.index(live, pager, requests))
}
def live = apiC.ApiRequest { implicit ctx =>
def live = apiC.ApiRequest { _ =>
env.user.lightUserApi asyncMany env.streamer.liveStreamApi.userIds.toList dmap (_.flatten) map { users =>
val playingIds = env.relation.online.playing intersect users.map(_.id)
apiC.toApiResult {
@ -63,7 +63,7 @@ final class Streamer(
env.user.noteApi.forMod(user.id) map some
}
def edit = Auth { implicit ctx => me =>
def edit = Auth { implicit ctx => _ =>
AsStreamer { s =>
env.streamer.liveStreamApi of s flatMap { sws =>
modData(s.user) map { forMod =>
@ -93,7 +93,7 @@ final class Streamer(
}
}
def approvalRequest = AuthBody { implicit ctx => me =>
def approvalRequest = AuthBody { _ => me =>
api.approval.request(me) inject Redirect(routes.Streamer.edit)
}

View File

@ -110,7 +110,7 @@ final class Study(
def mineLikes(order: String, page: Int) = Auth { implicit ctx => me =>
env.study.pager.mineLikes(me, Order(order), page) flatMap { pag =>
negotiate(
html = Ok(html.study.list.mineLikes(pag, Order(order), me)).fuccess,
html = Ok(html.study.list.mineLikes(pag, Order(order))).fuccess,
api = _ => apiStudies(pag)
)
}
@ -201,7 +201,7 @@ final class Study(
}
}
def chapterMeta(id: String, chapterId: String) = Open { implicit ctx =>
def chapterMeta(id: String, chapterId: String) = Open { _ =>
env.study.chapterRepo.byId(chapterId).map {
_.filter(_.studyId.value == id) ?? { chapter =>
Ok(env.study.jsonView.chapterConfig(chapter))
@ -219,7 +219,7 @@ final class Study(
def createAs = AuthBody { implicit ctx => me =>
implicit val req = ctx.body
lila.study.DataForm.importGame.form.bindFromRequest.fold(
err => Redirect(routes.Study.byOwnerDefault(me.username)).fuccess,
_ => Redirect(routes.Study.byOwnerDefault(me.username)).fuccess,
data => for {
owner <- env.study.studyRepo.recentByOwner(me.id, 50)
contrib <- env.study.studyRepo.recentByContributor(me.id, 50)
@ -232,7 +232,7 @@ final class Study(
def create = AuthBody { implicit ctx => me =>
implicit val req = ctx.body
lila.study.DataForm.importGame.form.bindFromRequest.fold(
err => Redirect(routes.Study.byOwnerDefault(me.username)).fuccess,
_ => Redirect(routes.Study.byOwnerDefault(me.username)).fuccess,
data => createStudy(data, me)
)
}
@ -244,13 +244,13 @@ final class Study(
}
}
def delete(id: String) = Auth { implicit ctx => me =>
def delete(id: String) = Auth { _ => me =>
env.study.api.byIdAndOwner(id, me) flatMap {
_ ?? env.study.api.delete
} inject Redirect(routes.Study.mine("hot"))
}
def clearChat(id: String) = Auth { implicit ctx => me =>
def clearChat(id: String) = Auth { _ => me =>
env.study.api.isOwner(id, me) flatMap {
_ ?? env.chat.api.userChat.clear(Chat.Id(id))
} inject Redirect(routes.Study.show(id))
@ -298,7 +298,7 @@ final class Study(
private def embedNotFound(implicit req: RequestHeader): Fu[Result] =
fuccess(NotFound(html.study.embed.notFound))
def cloneStudy(id: String) = Auth { implicit ctx => me =>
def cloneStudy(id: String) = Auth { implicit ctx => _ =>
OptionFuResult(env.study.api.byId(id)) { study =>
CanViewResult(study) {
Ok(html.study.clone(study)).fuccess

View File

@ -8,7 +8,6 @@ import lila.app._
import lila.common.config.MaxPerSecond
import lila.common.HTTPRequest
import lila.hub.LightTeam
import lila.hub.LightTeam._
import lila.security.Granter
import lila.team.{ Joined, Motivate, Team => TeamModel }
import lila.user.{ User => UserModel }
@ -62,7 +61,7 @@ final class Team(
}
}
def edit(id: String) = Auth { implicit ctx => me =>
def edit(id: String) = Auth { implicit ctx => _ =>
OptionFuResult(api team id) { team =>
Owner(team) { fuccess(html.team.form.edit(team, forms edit team)) }
}
@ -98,7 +97,7 @@ final class Team(
}
}
}
def kickUser(teamId: String, userId: String) = Scoped(_.Team.Write) { req => me =>
def kickUser(teamId: String, userId: String) = Scoped(_.Team.Write) { _ => me =>
api team teamId flatMap {
_ ?? { team =>
if (team isCreator me.id) api.kick(team, userId, me) inject jsonOkResult
@ -107,7 +106,7 @@ final class Team(
}
}
def changeOwnerForm(id: String) = Auth { implicit ctx => me =>
def changeOwnerForm(id: String) = Auth { implicit ctx => _ =>
OptionFuResult(api team id) { team =>
Owner(team) {
env.team.memberRepo userIdsByTeam team.id map { userIds =>
@ -219,7 +218,7 @@ final class Team(
auth = ctx => me => OptionResult(api.quit(id, me)) { team =>
Redirect(routes.Team.show(team.id))
}(ctx),
scoped = req => me => api.quit(id, me) flatMap {
scoped = _ => me => api.quit(id, me) flatMap {
_.fold(notFoundJson())(_ => jsonOkResult.fuccess)
}
)

View File

@ -3,7 +3,6 @@ package controllers
import lila.api.Context
import lila.app._
import lila.game.{ Game => GameModel, Pov, AnonCookie }
import lila.security.Granter
import play.api.mvc._
private[controllers] trait TheftPrevention { self: LilaController =>

View File

@ -1,5 +1,6 @@
package controllers
import com.github.ghik.silencer.silent
import play.api.libs.json._
import play.api.mvc._
import scala.concurrent.duration._
@ -7,10 +8,10 @@ import scala.concurrent.duration._
import lila.api.Context
import lila.app._
import lila.chat.Chat
import lila.common.HTTPRequest
import lila.common.config.MaxPerPage
import lila.common.HTTPRequest
import lila.hub.LightTeam._
import lila.tournament.{ TournamentRepo, PairingRepo, VisibleTournaments, Tournament => Tour }
import lila.tournament.{ VisibleTournaments, Tournament => Tour }
import lila.user.{ User => UserModel }
import views._
@ -64,7 +65,7 @@ final class Tournament(
)
}
def help(sysStr: Option[String]) = Open { implicit ctx =>
def help(@silent sysStr: Option[String]) = Open { implicit ctx =>
Ok(html.tournament.faq.page).fuccess
}
@ -152,7 +153,7 @@ final class Tournament(
}
}
def player(tourId: String, userId: String) = Open { implicit ctx =>
def player(tourId: String, userId: String) = Open { _ =>
env.tournament.tournamentRepo byId tourId flatMap {
_ ?? { tour =>
JsonOk {
@ -164,7 +165,7 @@ final class Tournament(
}
}
def teamInfo(tourId: String, teamId: String) = Open { implicit ctx =>
def teamInfo(tourId: String, teamId: String) = Open { _ =>
env.tournament.tournamentRepo byId tourId flatMap {
_ ?? { tour =>
jsonView.teamInfo(tour, teamId) map {
@ -213,7 +214,7 @@ final class Tournament(
def form = Auth { implicit ctx => me =>
NoLameOrBot {
teamC.teamsIBelongTo(me) map { teams =>
Ok(html.tournament.form(forms(me), forms, me, teams))
Ok(html.tournament.form(forms(me), me, teams))
}
}
}
@ -222,7 +223,7 @@ final class Tournament(
NoLameOrBot {
env.team.api.owns(teamId, me.id) map {
_ ?? {
Ok(html.tournament.form(forms(me, teamId.some), forms, me, Nil))
Ok(html.tournament.form(forms(me, teamId.some), me, Nil))
}
}
}
@ -252,7 +253,7 @@ final class Tournament(
implicit val req = ctx.body
negotiate(
html = forms(me).bindFromRequest.fold(
err => BadRequest(html.tournament.form(err, forms, me, teams)).fuccess,
err => BadRequest(html.tournament.form(err, me, teams)).fuccess,
setup => {
val cost = if (me.hasTitle ||
env.streamer.liveStreamApi.isStreaming(me.id) ||

View File

@ -7,19 +7,19 @@ final class TournamentCrud(env: Env) extends LilaController(env) {
private def crud = env.tournament.crudApi
def index(page: Int) = Secure(_.ManageTournament) { implicit ctx => me =>
def index(page: Int) = Secure(_.ManageTournament) { implicit ctx => _ =>
crud.paginator(page) map { paginator =>
html.tournament.crud.index(paginator)
}
}
def edit(id: String) = Secure(_.ManageTournament) { implicit ctx => me =>
def edit(id: String) = Secure(_.ManageTournament) { implicit ctx => _ =>
OptionOk(crud one id) { tour =>
html.tournament.crud.edit(tour, crud editForm tour)
}
}
def update(id: String) = SecureBody(_.ManageTournament) { implicit ctx => me =>
def update(id: String) = SecureBody(_.ManageTournament) { implicit ctx => _ =>
OptionFuResult(crud one id) { tour =>
implicit val req = ctx.body
crud.editForm(tour).bindFromRequest.fold(
@ -29,7 +29,7 @@ final class TournamentCrud(env: Env) extends LilaController(env) {
}
}
def form = Secure(_.ManageTournament) { implicit ctx => me =>
def form = Secure(_.ManageTournament) { implicit ctx => _ =>
Ok(html.tournament.crud.create(crud.createForm)).fuccess
}
@ -43,7 +43,7 @@ final class TournamentCrud(env: Env) extends LilaController(env) {
)
}
def cloneT(id: String) = Secure(_.ManageTournament) { implicit ctx => me =>
def cloneT(id: String) = Secure(_.ManageTournament) { implicit ctx => _ =>
OptionFuResult(crud one id) { old =>
val tour = crud clone old
Ok(html.tournament.crud.create(crud editForm tour)).fuccess

View File

@ -1,7 +1,6 @@
package controllers
import play.api.http.ContentTypes
import play.api.mvc._
import lila.api.Context
import lila.app._
@ -27,7 +26,7 @@ final class Tv(
}
}
def channels = apiC.ApiRequest { implicit ctx =>
def channels = apiC.ApiRequest { _ =>
import play.api.libs.json._
implicit val championWrites = Json.writes[lila.tv.Tv.Champion]
env.tv.tv.getChampions map {
@ -47,7 +46,7 @@ final class Tv(
env.game.crosstableApi.withMatchup(game) zip
env.tv.tv.getChampions map {
case data ~ cross ~ champions => NoCache {
Ok(html.tv.index(channel, champions, pov, data, cross, flip, history))
Ok(html.tv.index(channel, champions, pov, data, cross, history))
}
}
},
@ -67,7 +66,7 @@ final class Tv(
}
}
def feed = Action.async { req =>
def feed = Action.async {
import makeTimeout.short
import akka.pattern.ask
import lila.round.TvBroadcast

View File

@ -12,7 +12,6 @@ import lila.api.{ Context, BodyContext }
import lila.app._
import lila.app.mashup.{ GameFilterMenu, GameFilter }
import lila.common.paginator.Paginator
import lila.common.Json._
import lila.common.{ IpAddress, HTTPRequest }
import lila.game.{ Pov, Game => GameModel }
import lila.rating.PerfType
@ -73,8 +72,7 @@ final class User(
info <- env.userInfo(u, nbs, ctx)
social <- env.socialInfo(u, ctx)
} yield status(html.user.show.page.activity(u, as, info, social))
}
else env.activity.read.recent(u) map { as =>
} else env.activity.read.recent(u) map { as =>
status(html.activity(u, as))
}
@ -208,14 +206,12 @@ final class User(
negotiate(
html = for {
nbAllTime <- env.user.cached topNbGame nb
nbDay <- fuccess(Nil)
tourneyWinners <- env.tournament.winners.all.map(_.top)
_ <- env.user.lightUserApi preloadMany tourneyWinners.map(_.userId)
} yield Ok(html.user.list(
tourneyWinners = tourneyWinners,
online = env.user.cached.getTop50Online,
leaderboards = leaderboards,
nbDay = nbDay,
nbAllTime = nbAllTime
)),
api = _ => fuccess {
@ -262,19 +258,19 @@ final class User(
)
}
def mod(username: String) = Secure(_.UserSpy) { implicit ctx => me =>
modZoneOrRedirect(username, me)
def mod(username: String) = Secure(_.UserSpy) { implicit ctx => _ =>
modZoneOrRedirect(username)
}
protected[controllers] def modZoneOrRedirect(username: String, me: UserModel)(implicit ctx: Context): Fu[Result] =
if (HTTPRequest isEventSource ctx.req) renderModZone(username, me)
protected[controllers] def modZoneOrRedirect(username: String)(implicit ctx: Context): Fu[Result] =
if (HTTPRequest isEventSource ctx.req) renderModZone(username)
else fuccess(modC.redirect(username))
private def futureToSource[A](fu: Fu[Option[A]]): Source[A, _] = Source futureSource {
fu.map(_.fold(Source.empty[A])(Source.single))
}
protected[controllers] def renderModZone(username: String, me: UserModel)(implicit ctx: Context): Fu[Result] = {
protected[controllers] def renderModZone(username: String)(implicit ctx: Context): Fu[Result] = {
env.user.repo withEmails username orFail s"No such user $username" map {
case UserModel.WithEmails(user, emails) =>
val parts =
@ -300,7 +296,7 @@ final class User(
}
}
val identification = spyFu map { spy =>
html.user.mod.identification(user, spy, env.security.printBan.blocks).some
html.user.mod.identification(spy, env.security.printBan.blocks).some
}
val irwin = env.irwin.api.reports.withPovs(user) map {
_ ?? { reps =>
@ -440,7 +436,7 @@ final class User(
}
}
def myself = Auth { ctx => me =>
def myself = Auth { _ => me =>
fuccess(Redirect(routes.User.show(me.username)))
}
}

View File

@ -11,7 +11,6 @@ import scala.concurrent.duration._
import lila.api.Context
import lila.app._
import lila.game.Pov
import lila.i18n.I18nKeys
import lila.round.Forecast.{ forecastStepJsonFormat, forecastJsonWriter }
import lila.round.JsonView.WithFlags
import views._
@ -86,9 +85,8 @@ final class UserAnalysis(
env.game.gameRepo initialFen pov.gameId flatMap { initialFen =>
gameC.preloadUsers(pov.game) zip
(env.analyse.analyser get pov.game) zip
env.game.crosstableApi(pov.game) zip
env.bookmark.api.exists(pov.game, ctx.me) flatMap {
case _ ~ analysis ~ crosstable ~ bookmarked =>
env.game.crosstableApi(pov.game) flatMap {
case _ ~ analysis ~ crosstable =>
import lila.game.JsonView.crosstableWrites
env.api.roundApi.review(pov, apiVersion,
tv = none,
@ -117,7 +115,7 @@ final class UserAnalysis(
).map(_ as JSON)
}
def forecasts(fullId: String) = AuthBody(parse.json) { implicit ctx => me =>
def forecasts(fullId: String) = AuthBody(parse.json) { implicit ctx => _ =>
import lila.round.Forecast
OptionFuResult(env.round.proxyRepo pov fullId) { pov =>
if (isTheft(pov)) fuccess(theftResponse)
@ -134,7 +132,7 @@ final class UserAnalysis(
}
}
def forecastsOnMyTurn(fullId: String, uci: String) = AuthBody(parse.json) { implicit ctx => me =>
def forecastsOnMyTurn(fullId: String, uci: String) = AuthBody(parse.json) { implicit ctx => _ =>
import lila.round.Forecast
OptionFuResult(env.round.proxyRepo pov fullId) { pov =>
if (isTheft(pov)) fuccess(theftResponse)

View File

@ -2,9 +2,7 @@ package lila.app
package http
import akka.stream.Materializer
import play.api.Logging
import play.api.mvc._
import play.api.routing._
import lila.common.HTTPRequest

View File

@ -2,9 +2,9 @@ package lila.app
package mashup
import lila.forum.MiniForumPost
import lila.team.{ Team, RequestRepo, MemberRepo, RequestWithUser, TeamApi }
import lila.team.{ Team, RequestRepo, RequestWithUser, TeamApi }
import lila.tournament.{ Tournament, TournamentRepo }
import lila.user.{ User, UserRepo }
import lila.user.User
case class TeamInfo(
mine: Boolean,
@ -26,8 +26,8 @@ final class TeamInfoApi(
categApi: lila.forum.CategApi,
forumRecent: lila.forum.Recent,
teamCached: lila.team.Cached,
tournamentRepo: lila.tournament.TournamentRepo,
requestRepo: lila.team.RequestRepo
tournamentRepo: TournamentRepo,
requestRepo: RequestRepo
) {
def apply(team: Team, me: Option[User]): Fu[TeamInfo] = for {

View File

@ -9,7 +9,7 @@ import lila.forum.PostApi
import lila.game.Crosstable
import lila.relation.RelationApi
import lila.security.Granter
import lila.user.{ User, Trophy, Trophies, TrophyApi }
import lila.user.{ User, Trophies, TrophyApi }
case class UserInfo(
user: User,

View File

@ -1,7 +1,6 @@
package lila.app
package templating
import controllers.routes
import play.api.mvc.RequestHeader
import lila.api.Context
@ -38,7 +37,7 @@ trait AssetHelper { self: I18nHelper with SecurityHelper =>
def cssTagWithTheme(name: String, theme: String): Frag =
cssAt(s"css/$name.$theme.${if (isProd) "min" else "dev"}.css")
def cssTagNoTheme(name: String)(implicit ctx: Context): Frag =
def cssTagNoTheme(name: String): Frag =
cssAt(s"css/$name.${if (isProd) "min" else "dev"}.css")
private def cssAt(path: String): Frag =

View File

@ -84,7 +84,7 @@ trait DateHelper { self: I18nHelper =>
def momentFromNowOnce(date: DateTime) = momentFromNow(date, once = true)
def secondsFromNow(seconds: Int, alwaysRelative: Boolean = false)(implicit ctx: Context) =
def secondsFromNow(seconds: Int, alwaysRelative: Boolean = false) =
momentFromNow(DateTime.now plusSeconds seconds, alwaysRelative)
private val atomDateFormatter = ISODateTimeFormat.dateTime

View File

@ -240,7 +240,6 @@ trait GameHelper { self: I18nHelper with UserHelper with AiHelper with StringHel
val cssClass = isLive ?? ("live mini-board-" + game.id)
val variant = game.variant.key
val tag = if (withLink) a else span
val classes = s"mini-board mini-board-${game.id} cg-wrap parse-fen is2d $cssClass $variant"
tag(
href := withLink.option(gameLink(game, pov.color, ownerLink, tv)),
title := withTitle.option(gameTitle(game, pov.color)),
@ -270,7 +269,7 @@ trait GameHelper { self: I18nHelper with UserHelper with AiHelper with StringHel
)(cgWrapContent)
}
def challengeTitle(c: lila.challenge.Challenge)(implicit ctx: UserContext) = {
def challengeTitle(c: lila.challenge.Challenge) = {
val speed = c.clock.map(_.config).fold(chess.Speed.Correspondence.name) { clock =>
s"${chess.Speed(clock).name} (${clock.show})"
}
@ -285,7 +284,7 @@ trait GameHelper { self: I18nHelper with UserHelper with AiHelper with StringHel
s"$speed$variant ${c.mode.name} Chess • $players"
}
def challengeOpenGraph(c: lila.challenge.Challenge)(implicit ctx: UserContext) =
def challengeOpenGraph(c: lila.challenge.Challenge) =
lila.app.ui.OpenGraph(
title = challengeTitle(c),
url = s"$netBaseUrl${routes.Round.watcher(c.id, chess.White.name).url}",

View File

@ -5,7 +5,7 @@ import play.api.libs.json.JsObject
import play.api.i18n.Lang
import lila.app.ui.ScalatagsTemplate._
import lila.i18n.{ LangList, I18nKey, Translator, JsQuantity, I18nDb, JsDump, TimeagoLocales }
import lila.i18n.{ LangList, I18nKey, Translator, I18nDb, JsDump, TimeagoLocales }
import lila.user.UserContext
trait I18nHelper extends HasEnv {

View File

@ -13,12 +13,12 @@ trait PaginatorHelper {
val pre = fromPage match {
case 1 => Nil
case 2 => List(1.some)
case x => List(1.some, none)
case _ => List(1.some, none)
}
val post = toPage match {
case x if x == pager.nbPages => Nil
case x if x == pager.nbPages - 1 => List(pager.nbPages.some)
case x if showPost => List(none, pager.nbPages.some)
case _ if showPost => List(none, pager.nbPages.some)
case _ => List(none)
}
pre ::: (fromPage to toPage).view.map(some).toList ::: post

View File

@ -56,7 +56,7 @@ trait SetupHelper { self: I18nHelper =>
(Mode.Rated.id.toString, trans.ratedTournament.txt(), none)
)
private def variantTuple(variant: chess.variant.Variant)(implicit ctx: Context): SelectChoice =
private def variantTuple(variant: chess.variant.Variant): SelectChoice =
(variant.id.toString, variant.name, variant.title.some)
def translatedVariantChoices(implicit ctx: Context) = List(

View File

@ -4,7 +4,7 @@ package templating
import controllers.routes
import lila.app.ui.ScalatagsTemplate._
import lila.tournament.{ Tournament, Schedule }
import lila.user.{ User, UserContext }
import lila.user.User
import play.api.libs.json.Json

View File

@ -9,7 +9,7 @@ import controllers.routes
object email {
def apply(u: lila.user.User, form: play.api.data.Form[_])(implicit ctx: Context) = account.layout(
def apply(form: play.api.data.Form[_])(implicit ctx: Context) = account.layout(
title = trans.changeEmail.txt(),
active = "email"
) {

View File

@ -4,7 +4,7 @@ package account
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.pref.{ Pref, PrefCateg }
import lila.pref.PrefCateg
import controllers.routes

View File

@ -57,7 +57,7 @@ object activity {
div(
ps.headOption map onePractice,
ps match {
case first :: rest if rest.nonEmpty => subTag(rest map onePractice)
case _ :: rest if rest.nonEmpty => subTag(rest map onePractice)
case _ => emptyFrag
}
)
@ -270,7 +270,7 @@ object activity {
s"""<score>${scoreStr("win", s.win, trans.nbWins)}${scoreStr("draw", s.draw, trans.nbDraws)}${scoreStr("loss", s.loss, trans.nbLosses)}</score>"""
}
private def ratingProgFrag(r: RatingProg)(implicit ctx: Context) = ratingTag(
private def ratingProgFrag(r: RatingProg) = ratingTag(
r.after.value,
ratingProgress(r.diff)
)

View File

@ -1,7 +1,6 @@
package views.html.analyse
import play.api.libs.json.{ Json, JsObject }
import play.api.mvc.RequestHeader
import lila.app.templating.Environment._
import lila.app.ui.EmbedConfig

View File

@ -1,6 +1,5 @@
package views.html.analyse
import bits.dataPanel
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
@ -16,8 +15,6 @@ object replayBot {
cross: Option[lila.game.Crosstable.WithMatchup]
)(implicit ctx: Context) = {
import pov._
views.html.analyse.bits.layout(
title = replay titleOf pov,
moreCss = cssTag("analyse.round"),

View File

@ -104,7 +104,7 @@ object bits {
)
}
def magicLinkSent(email: String)(implicit ctx: Context) =
def magicLinkSent(implicit ctx: Context) =
views.html.base.layout(
title = "Log in by email"
) {

View File

@ -1,7 +1,5 @@
package views.html.base
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
object bits {

View File

@ -2,7 +2,6 @@ package views.html
package base
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import controllers.routes

View File

@ -1,14 +1,13 @@
package views.html.base
import play.api.libs.json.Json
import play.api.i18n.Lang
import play.api.libs.json.Json
import lila.api.{ Context, AnnounceStore }
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.safeJsonValue
import lila.common.ContentSecurityPolicy
import lila.pref.Pref
import lila.common.String.html.safeJsonValue
import controllers.routes
@ -96,7 +95,6 @@ object layout {
private val dataUser = attr("data-user")
private val dataSoundSet = attr("data-sound-set")
private val dataSocketDomain = attr("data-socket-domain")
private val dataZoom = attr("data-zoom")
private val dataPreload = attr("data-preload")
private val dataNonce = attr("data-nonce")
private val dataAnnounce = attr("data-announce")
@ -183,37 +181,33 @@ object layout {
"is2d" -> ctx.pref.is2d,
"is3d" -> ctx.pref.is3d
))(body),
ctx.me.map { me =>
div(
id := "friend_box",
dataPreload := safeJsonValue(Json.obj(
"users" -> ctx.onlineFriends.users.map(_.titleName),
"playing" -> ctx.onlineFriends.playing,
"patrons" -> ctx.onlineFriends.patrons,
"studying" -> ctx.onlineFriends.studying,
"i18n" -> i18nJsObject(List(
trans.nbFriendsOnline
))
))
)(
div(cls := "friend_box_title") {
val count = ctx.onlineFriends.users.size
trans.nbFriendsOnline.plural(count, strong(count))
},
div(cls := "content_wrap")(
div(cls := "content list"),
div(cls := List(
"nobody" -> true,
"none" -> ctx.onlineFriends.users.nonEmpty
))(
span(trans.noFriendsOnline()),
a(cls := "find button", href := routes.User.opponents)(
span(cls := "is3 text", dataIcon := "h")(trans.findFriends())
)
ctx.isAuth option div(
id := "friend_box",
dataPreload := safeJsonValue(Json.obj(
"users" -> ctx.onlineFriends.users.map(_.titleName),
"playing" -> ctx.onlineFriends.playing,
"patrons" -> ctx.onlineFriends.patrons,
"studying" -> ctx.onlineFriends.studying,
"i18n" -> i18nJsObject(List(trans.nbFriendsOnline))
))
)(
div(cls := "friend_box_title") {
val count = ctx.onlineFriends.users.size
trans.nbFriendsOnline.plural(count, strong(count))
},
div(cls := "content_wrap")(
div(cls := "content list"),
div(cls := List(
"nobody" -> true,
"none" -> ctx.onlineFriends.users.nonEmpty
))(
span(trans.noFriendsOnline()),
a(cls := "find button", href := routes.User.opponents)(
span(cls := "is3 text", dataIcon := "h")(trans.findFriends())
)
)
)
},
),
a(id := "reconnecting", cls := "link text", dataIcon := "B")(trans.reconnecting()),
chessground option jsTag("vendor/chessground.min.js"),
ctx.requiresFingerprint option fingerprintTag,

View File

@ -2,7 +2,6 @@ package views.html.blog
import play.api.mvc.RequestHeader
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator

View File

@ -1,7 +1,5 @@
package views.html.board
import play.api.libs.json.JsObject
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -2,7 +2,6 @@ package views.html.board
import play.api.i18n.Lang
import lila.api.Context
import lila.app.templating.Environment._
import lila.i18n.{ I18nKeys => trans }

View File

@ -8,8 +8,8 @@ import controllers.routes
object bookmark {
def toggle(g: lila.game.Game, bookmarked: Boolean)(implicit ctx: Context) = ctx.me map { m =>
a(cls := List(
def toggle(g: lila.game.Game, bookmarked: Boolean)(implicit ctx: Context) =
if (ctx.isAuth) a(cls := List(
"bookmark" -> true,
"bookmarked" -> bookmarked
), href := routes.Bookmark.toggle(g.id), title := trans.bookmarkThisGame.txt())(
@ -17,9 +17,8 @@ object bookmark {
iconTag("s")(cls := "off is3"),
span(g.showBookmarks)
)
} orElse {
g.hasBookmarks option span(cls := "bookmark")(
else if (g.hasBookmarks) span(cls := "bookmark")(
span(dataIcon := "s", cls := "is3")(g.showBookmarks)
)
}
else emptyFrag
}

View File

@ -5,7 +5,6 @@ import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.common.String.html.richText
import controllers.routes

View File

@ -9,7 +9,7 @@ import controllers.routes
object review {
def list(c: lila.coach.Coach.WithUser, reviews: lila.coach.CoachReview.Reviews)(implicit ctx: Context) =
def list(reviews: lila.coach.CoachReview.Reviews)(implicit ctx: Context) =
reviews.list.nonEmpty option div(cls := "coach-show__reviews")(
h2(pluralize("Player review", reviews.list.size)),
reviews.list.map { r =>

View File

@ -59,7 +59,7 @@ $('.coach-review-form form').show();
"Send a private message"
),
ctx.me.exists(_.id != c.user.id) option review.form(c, myReview),
review.list(c, coachReviews)
review.list(coachReviews)
),
div(cls := "coach-show__main coach-main box")(
div(cls := "coach-widget")(widget(c, link = false)),

View File

@ -4,7 +4,6 @@ package coach
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import controllers.routes
@ -15,7 +14,7 @@ object widget {
c.user.realNameOrUsername
)
def pic(c: lila.coach.Coach.WithUser, size: Int)(implicit ctx: Context) =
def pic(c: lila.coach.Coach.WithUser, size: Int) =
c.coach.picturePath.map { path =>
img(width := size, height := size, cls := "picture", src := dbImageUrl(path.value), alt := s"${c.user.titleUsername} lichess coach")
}.getOrElse {

View File

@ -1,12 +1,11 @@
package views.html
import play.api.data.{ Field, Form }
import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.richText
import lila.user.User
import controllers.routes

View File

@ -10,7 +10,7 @@ import controllers.routes
object post {
def recent(posts: List[lila.forum.MiniForumPost])(implicit ctx: Context) = ol(
def recent(posts: List[lila.forum.MiniForumPost]) = ol(
posts map { p =>
li(
a(dataIcon := p.isTeam.option("f"), cls := "post_link text", href := routes.ForumPost.redirect(p.postId), title := p.topicName)(

View File

@ -65,14 +65,12 @@ object side {
frag(if (game.isBeingPlayed) trans.playingRightNow() else momentFromNow(game.createdAt))
}
),
game.pgnImport.flatMap(_.date).map { date =>
small(
"Imported ",
game.pgnImport.flatMap(_.user).map { user =>
trans.by(userIdLink(user.some, None, false))
}
)
}
game.pgnImport.exists(_.date.isDefined) option small(
"Imported ",
game.pgnImport.flatMap(_.user).map { user =>
trans.by(userIdLink(user.some, None, false))
}
)
)
),
div(cls := "game__meta__players")(

View File

@ -6,8 +6,6 @@ import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.game.{ Game, Pov, Player }
import controllers.routes
object widgets {
private val separator = " • "
@ -15,8 +13,7 @@ object widgets {
def apply(
games: Seq[Game],
user: Option[lila.user.User] = None,
ownerLink: Boolean = false,
mini: Boolean = false
ownerLink: Boolean = false
)(implicit ctx: Context): Frag = games map { g =>
val fromPlayer = user flatMap g.player
val firstPlayer = fromPlayer | g.firstPlayer
@ -56,9 +53,9 @@ object widgets {
)
),
div(cls := "versus")(
gamePlayer(g.variant, g.whitePlayer),
gamePlayer(g.whitePlayer),
div(cls := "swords", dataIcon := "U"),
gamePlayer(g.variant, g.blackPlayer)
gamePlayer(g.blackPlayer)
),
div(cls := "result")(
if (g.isBeingPlayed) trans.playingRightNow() else {
@ -114,7 +111,7 @@ object widgets {
private lazy val anonSpan = span(cls := "anon")(lila.user.User.anonymous)
private def gamePlayer(variant: chess.variant.Variant, player: Player)(implicit ctx: Context) =
private def gamePlayer(player: Player)(implicit ctx: Context) =
div(cls := s"player ${player.color.name}")(
player.playerUser map { playerUser =>
frag(

View File

@ -87,7 +87,7 @@ lichess.insight = LichessInsight(document.getElementById('insight'), ${
)
)
def refreshForm(u: User, action: String)(implicit ctx: Context) =
def refreshForm(u: User, action: String) =
postForm(cls := "insight-refresh", st.action := routes.Insight.refresh(u.username))(
button(dataIcon := "E", cls := "button text")(action),
div(cls := "crunching none")(

View File

@ -117,7 +117,7 @@ object bits {
)
)
def currentGameInfo(current: lila.app.mashup.Preload.CurrentGame)(implicit ctx: Context) = nopeInfo(
def currentGameInfo(current: lila.app.mashup.Preload.CurrentGame) = nopeInfo(
h1("Hang on!"),
p("You have a game in progress with ", strong(current.opponent), "."),
br, br,

View File

@ -5,8 +5,6 @@ import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.game.Pov
import controllers.routes
object blindLobby {
def apply(games: List[Pov])(implicit ctx: Context) = div(

View File

@ -1,12 +1,11 @@
package views.html.lobby
import play.api.libs.json.{ Json, JsObject }
import play.api.libs.json.Json
import lila.api.Context
import lila.app.mashup.Preload.Homepage
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.HTTPRequest
import lila.common.String.html.safeJsonValue
import lila.game.Pov
@ -93,14 +92,13 @@ object home {
simuls.find(_.spotlightable).find(isFeaturable) map views.html.simul.bits.homepageSpotlight
)
),
ctx.me map { u =>
div(cls := "timeline")(
ctx.blind option h2("Timeline"),
views.html.timeline entries userTimeline,
// userTimeline.size >= 8 option
userTimeline.nonEmpty option a(cls := "more", href := routes.Timeline.home)(trans.more(), " »")
)
} getOrElse div(cls := "about-side")(
if (ctx.isAuth) div(cls := "timeline")(
ctx.blind option h2("Timeline"),
views.html.timeline entries userTimeline,
// userTimeline.size >= 8 option
userTimeline.nonEmpty option a(cls := "more", href := routes.Timeline.home)(trans.more(), " »")
)
else div(cls := "about-side")(
ctx.blind option h2("About"),
trans.xIsAFreeYLibreOpenSourceChessServer("Lichess", a(cls := "blue", href := routes.Plan.features)(trans.really.txt())),
" ",

View File

@ -5,7 +5,6 @@ import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.common.String.html.safeJsonValue
import controllers.routes
@ -16,7 +15,6 @@ object form {
form: Form[_],
reqUser: Option[lila.user.User],
reqTitle: Option[String],
reqMod: Boolean,
canMessage: Boolean,
oldEnough: Boolean
)(implicit ctx: Context) =

View File

@ -5,7 +5,6 @@ import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.common.String.html.richText
import controllers.routes

View File

@ -4,8 +4,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import controllers.routes
object mobile {
def apply(apkDoc: io.prismic.Document, resolver: io.prismic.DocumentLinkResolver)(implicit ctx: Context) =

View File

@ -97,7 +97,7 @@ object gamify {
}
}
def champion(champ: Option[lila.mod.Gamify.ModMixed], img: String, period: lila.mod.Gamify.Period)(implicit ctx: Context) =
def champion(champ: Option[lila.mod.Gamify.ModMixed], img: String, period: lila.mod.Gamify.Period) =
div(cls := "champ")(
st.img(src := staticUrl(s"images/mod/$img.png")),
h2("Mod of the ", period.name),

View File

@ -1,6 +1,5 @@
package views.html.mod
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
@ -8,7 +7,7 @@ import controllers.routes
object impersonate {
def apply(user: lila.user.User)(implicit ctx: Context) =
def apply(user: lila.user.User) =
div(id := "impersonate")(
div(cls := "meat")(
"You are impersonating ",

View File

@ -136,7 +136,7 @@ object inquiry {
button(in.user.engine)(dataIcon := "n"),
autoNextInput
),
thenForms(in, url, button(false))
thenForms(url, button(false))
)
},
isGranted(_.MarkBooster) option {
@ -150,7 +150,7 @@ object inquiry {
button(in.user.booster)(dataIcon := "9"),
autoNextInput
),
thenForms(in, url, button(false))
thenForms(url, button(false))
)
},
isGranted(_.Shadowban) option {
@ -168,7 +168,7 @@ object inquiry {
button(in.user.troll)(dataIcon := "c"),
autoNextInput
),
thenForms(in, url, button(false))
thenForms(url, button(false))
)
},
div(cls := "dropper more buttons")(
@ -203,7 +203,7 @@ object inquiry {
}
private def thenInput(what: String) = input(tpe := "hidden", name := "then", value := what)
private def thenForms(in: lila.mod.Inquiry, url: String, button: Tag) = div(
private def thenForms(url: String, button: Tag) = div(
postForm(
action := url,
button("And stay on this report"),

View File

@ -4,8 +4,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import controllers.routes
object log {
def apply(logs: List[lila.mod.Modlog])(implicit ctx: Context) = {

View File

@ -1,7 +1,5 @@
package views.html.mod
import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -1,7 +1,6 @@
package views.html.plan
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
object badCheckout {

View File

@ -3,7 +3,6 @@ package views.html.plan
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.pref.PrefCateg
import controllers.routes
@ -220,7 +219,7 @@ object index {
}
}
private def faq(implicit ctx: Context) = div(cls := "faq")(
private def faq = div(cls := "faq")(
dl(
dt("Where does the money go?"),
dd(

View File

@ -8,8 +8,6 @@ import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.safeJsonValue
import controllers.routes
object show {
def apply(

View File

@ -1,7 +1,5 @@
package views.html.puzzle
import play.api.mvc.RequestHeader
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.app.ui.EmbedConfig

View File

@ -7,7 +7,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.safeJsonValue
import lila.game.Pov
import controllers.routes
@ -65,7 +64,7 @@ object show {
views.html.study.bits.streamers(streams)
))
def widget(r: lila.relay.Relay.WithStudyAndLiked, extraCls: String = "")(implicit ctx: Context) =
def widget(r: lila.relay.Relay.WithStudyAndLiked, extraCls: String = "") =
div(cls := s"relay-widget $extraCls", dataIcon := "")(
a(cls := "overlay", href := routes.Relay.show(r.relay.slug, r.relay.id.value)),
div(

View File

@ -89,11 +89,10 @@ object list {
r.atoms.size > 3 option i(cls := "more")("And ", (r.atoms.size - 3), " more")
),
td(
r.processedBy map { u =>
postForm(action := routes.Report.inquiry(r.id), cls := "reopen")(
submitButton(dataIcon := "G", cls := "text button button-metal")("Re-open")
)
} getOrElse postForm(action := routes.Report.inquiry(r.id), cls := "inquiry")(
if (r.processedBy.isDefined) postForm(action := routes.Report.inquiry(r.id), cls := "reopen")(
submitButton(dataIcon := "G", cls := "text button button-metal")("Re-open")
)
else postForm(action := routes.Report.inquiry(r.id), cls := "inquiry")(
submitButton(dataIcon := "G", cls := "button button-metal")
),
postForm(action := routes.Report.process(r.id), cls := "cancel")(

View File

@ -1,11 +1,10 @@
package views.html.report
import play.api.data.Form
import com.github.ghik.silencer.silent
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.user.User
import controllers.routes
@ -15,7 +14,7 @@ object thanks {
val title = "Thanks for the report"
val moreJs = embedJsUnsafe("""
@silent val moreJs = embedJsUnsafe("""
$('button.report-block').one('click', function() {
var $button = $(this);
$button.find('span').text('Blocking...');

View File

@ -5,7 +5,7 @@ import chess.variant.{ Variant, Crazyhouse }
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.game.{ Game, Pov, Player }
import lila.game.{ Game, Pov }
import controllers.routes

View File

@ -6,12 +6,9 @@ import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.HTTPRequest
import lila.common.String.html.safeJsonValue
import lila.game.Pov
import controllers.routes
object player {
def apply(

View File

@ -6,12 +6,9 @@ import play.api.libs.json.{ Json, JsObject }
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.HTTPRequest
import lila.common.String.html.safeJsonValue
import lila.game.Pov
import controllers.routes
object watcher {
def apply(

View File

@ -6,8 +6,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.gameSearch.{ Query, Sorting }
import lila.user.User
import controllers.routes

View File

@ -5,7 +5,6 @@ import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.gameSearch.{ Query, Sorting }
import lila.user.User
import controllers.routes

View File

@ -84,7 +84,7 @@ private object bits {
def renderLabel(field: Field, content: Frag) =
label(`for` := s"$prefix${field.id}")(content)
def renderTimeMode(form: Form[_], config: lila.setup.BaseConfig)(implicit ctx: Context) =
def renderTimeMode(form: Form[_])(implicit ctx: Context) =
div(cls := "time_mode_config optional_config")(
div(cls := "label_select")(
renderLabel(form("timeMode"), trans.timeControl()),

View File

@ -1,6 +1,6 @@
package views.html.setup
import play.api.data.{ Form, Field }
import play.api.data.Form
import lila.api.Context
import lila.app.templating.Environment._
@ -30,20 +30,18 @@ object filter {
td(trans.mode()),
td(renderCheckboxes(form, "mode", filter.mode.map(_.id.toString), translatedModeChoices))
),
ctx.me.map { me =>
tr(
td(trans.ratingRange()),
td(
label(cls := "range")("? - ?"),
div(cls := "rating-range")(
renderInput(form("ratingRange"))(
dataMin := RatingRange.min,
dataMax := RatingRange.max
)
ctx.isAuth option tr(
td(trans.ratingRange()),
td(
label(cls := "range")("? - ?"),
div(cls := "rating-range")(
renderInput(form("ratingRange"))(
dataMin := RatingRange.min,
dataMax := RatingRange.max
)
)
)
}
)
)
),
ctx.isAnon option frag(
@ -62,7 +60,7 @@ object filter {
key: String,
checks: List[String],
options: Seq[(Any, String, Option[String])]
)(implicit ctx: Context): Frag =
): Frag =
options.zipWithIndex.map {
case ((value, text, hint), index) => div(cls := "checkable")(
renderCheckbox(form, key, index, value.toString, checks, raw(text), hint)

View File

@ -7,7 +7,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.rating.RatingRange
import lila.setup.{ FriendConfig, HookConfig }
import lila.user.User
import controllers.routes
@ -17,14 +16,13 @@ object forms {
import bits._
def hook(form: Form[_])(implicit ctx: Context) = layout(
form,
"hook",
trans.createAGame(),
routes.Setup.hook("sri-placeholder")
) {
frag(
renderVariant(form, translatedVariantChoicesWithVariants),
renderTimeMode(form, lila.setup.HookConfig),
renderTimeMode(form),
ctx.isAuth option frag(
div(cls := "mode_choice buttons")(
renderRadios(form("mode"), translatedModeChoices)
@ -47,11 +45,11 @@ object forms {
}
def ai(form: Form[_], ratings: Map[Int, Int], validFen: Option[lila.setup.ValidFen])(implicit ctx: Context) =
layout(form, "ai", trans.playWithTheMachine(), routes.Setup.ai) {
layout("ai", trans.playWithTheMachine(), routes.Setup.ai) {
frag(
renderVariant(form, translatedAiVariantChoices),
fenInput(form("fen"), true, validFen),
renderTimeMode(form, lila.setup.AiConfig),
renderTimeMode(form),
if (ctx.blind) frag(
renderLabel(form("level"), trans.level()),
renderSelect(form("level"), lila.setup.AiConfig.levelChoices),
@ -66,7 +64,7 @@ object forms {
),
div(cls := "ai_info")(
ratings.toList.map {
case (level, rating) => div(cls := s"${prefix}level_$level")(trans.aiNameLevelAiLevel("A.I.", level))
case (level, _) => div(cls := s"${prefix}level_$level")(trans.aiNameLevelAiLevel("A.I.", level))
}
)
)
@ -81,7 +79,6 @@ object forms {
validFen: Option[lila.setup.ValidFen]
)(implicit ctx: Context) =
layout(
form,
"friend",
(if (user.isDefined) trans.challengeToPlay else trans.playWithAFriend)(),
routes.Setup.friend(user map (_.id)),
@ -92,7 +89,7 @@ object forms {
},
renderVariant(form, translatedVariantChoicesWithVariantsAndFen),
fenInput(form("fen"), false, validFen),
renderTimeMode(form, lila.setup.FriendConfig),
renderTimeMode(form),
ctx.isAuth option div(cls := "mode_choice buttons")(
renderRadios(form("mode"), translatedModeChoices)
),
@ -106,7 +103,6 @@ object forms {
)
private def layout(
form: Form[_],
typ: String,
titleF: Frag,
route: Call,

View File

@ -1,7 +1,5 @@
package views.html.simul
import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
@ -51,7 +49,7 @@ object bits {
}
)
private[simul] def setup(sim: lila.simul.Simul)(implicit ctx: Context) =
private[simul] def setup(sim: lila.simul.Simul) =
span(cls := List("setup" -> true, "rich" -> sim.variantRich))(
sim.clock.config.show,
" • ",

View File

@ -1,7 +1,6 @@
package views.html.simul
import play.api.data.Form
import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
@ -26,7 +25,7 @@ object form {
p(trans.whenCreateSimul()),
br, br,
globalError(form),
form3.group(form("variant"), trans.simulVariantsHint()) { f =>
form3.group(form("variant"), trans.simulVariantsHint()) { _ =>
div(cls := "variants")(
views.html.setup.filter.renderCheckboxes(form, "variants", form.value.map(_.variants.map(_.toString)).getOrElse(Nil), translatedVariantChoicesWithVariants)
)

View File

@ -1,7 +1,5 @@
package views.html.simul
import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -1,7 +1,5 @@
package views.html.simul
import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
@ -74,7 +72,7 @@ object homeInner {
)
)
private def simTd(sim: lila.simul.Simul)(implicit ctx: Context) =
private def simTd(sim: lila.simul.Simul) =
td(cls := "header")(
a(href := routes.Simul.show(sim.id))(
span(cls := "name")(sim.fullName),

View File

@ -4,8 +4,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import controllers.routes
object bits {
def getFishnet()(implicit ctx: Context) =

View File

@ -282,13 +282,13 @@ object contact {
))
private def renderNode(node: Node, parent: Option[Node]): Frag = node match {
case Leaf(id, name, content) => List(
case Leaf(_, _, content) => List(
div(makeId(node.id), cls := "node leaf")(
h2(parent map goBack, node.name),
div(cls := "content")(content)
)
)
case b @ Branch(id, name, children) => frag(
case b @ Branch(id, _, children) => frag(
div(makeId(node.id), cls := s"node branch $id")(
h2(parent map goBack, node.name),
div(cls := "links")(

View File

@ -1,7 +1,6 @@
package views
package html.site
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -1,6 +1,5 @@
package views.html.site
import controllers.routes
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -1,7 +1,6 @@
package views
package html.site
import controllers.routes
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -25,7 +25,7 @@ object bits {
)
)
def pic(s: lila.streamer.Streamer, u: User, size: Int = 300)(implicit ctx: Context) = s.picturePath match {
def pic(s: lila.streamer.Streamer, u: User, size: Int = 300) = s.picturePath match {
case Some(path) => img(
width := size,
height := size,

View File

@ -6,7 +6,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.richText
import lila.user.User
import controllers.routes

View File

@ -5,7 +5,7 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.richText
import lila.streamer.Stream.{ Twitch, YouTube }
import lila.streamer.Stream.YouTube
object show {

View File

@ -4,7 +4,6 @@ package study
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.user.User
import controllers.routes
@ -15,7 +14,7 @@ object bits {
submitButton(cls := "button button-green", dataIcon := "O", title := trans.study.createStudy.txt())
)
def authLinks(me: User, active: String, order: lila.study.Order)(implicit ctx: Context) = {
def authLinks(active: String, order: lila.study.Order)(implicit ctx: Context) = {
def activeCls(c: String) = cls := (c == active).option("active")
frag(
a(activeCls("mine"), href := routes.Study.mine(order.key))(trans.study.myStudies()),

View File

@ -1,7 +1,5 @@
package views.html.study
import play.api.libs.json.Json
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._

View File

@ -1,7 +1,6 @@
package views.html.study
import play.api.libs.json.Json
import play.api.mvc.RequestHeader
import lila.app.templating.Environment._
import lila.app.ui.EmbedConfig

View File

@ -22,7 +22,7 @@ object list {
pag = pag,
searchFilter = "",
url = o => routes.Study.all(o)
)(trans.study.allStudies())
)
def byOwner(pag: Paginator[WithChaptersAndLiked], order: Order, owner: User)(implicit ctx: Context) = layout(
title = trans.study.studiesCreatedByX.txt(owner.titleUsername),
@ -31,7 +31,7 @@ object list {
pag = pag,
searchFilter = s"owner:${owner.username}",
url = o => routes.Study.byOwner(owner.username, o)
)(trans.study.studiesCreatedByX(userLink(owner)))
)
def mine(pag: Paginator[WithChaptersAndLiked], order: Order, me: User)(implicit ctx: Context) = layout(
title = trans.study.myStudies.txt(),
@ -40,12 +40,11 @@ object list {
pag = pag,
searchFilter = s"owner:${me.username}",
url = o => routes.Study.mine(o)
)(trans.study.myStudies())
)
def mineLikes(
pag: Paginator[WithChaptersAndLiked],
order: Order,
me: User
order: Order
)(implicit ctx: Context) = layout(
title = trans.study.myFavoriteStudies.txt(),
active = "mineLikes",
@ -53,7 +52,7 @@ object list {
pag = pag,
searchFilter = "",
url = o => routes.Study.mineLikes(o)
)(trans.study.myFavoriteStudies())
)
def mineMember(pag: Paginator[WithChaptersAndLiked], order: Order, me: User)(implicit ctx: Context) = layout(
title = trans.study.studiesIContributeTo.txt(),
@ -62,7 +61,7 @@ object list {
pag = pag,
searchFilter = s"member:${me.username}",
url = o => routes.Study.mineMember(o)
)(trans.study.studiesIContributeTo())
)
def minePublic(pag: Paginator[WithChaptersAndLiked], order: Order, me: User)(implicit ctx: Context) = layout(
title = trans.study.myPublicStudies.txt(),
@ -71,7 +70,7 @@ object list {
pag = pag,
searchFilter = s"owner:${me.username}",
url = o => routes.Study.minePublic(o)
)(trans.study.myPublicStudies())
)
def minePrivate(pag: Paginator[WithChaptersAndLiked], order: Order, me: User)(implicit ctx: Context) = layout(
title = trans.study.myPrivateStudies.txt(),
@ -80,7 +79,7 @@ object list {
pag = pag,
searchFilter = s"owner:${me.username}",
url = o => routes.Study.minePrivate(o)
)(trans.study.myPrivateStudies())
)
def search(pag: Paginator[WithChaptersAndLiked], text: String)(implicit ctx: Context) =
views.html.base.layout(
@ -116,7 +115,7 @@ object list {
private[study] def menu(active: String, order: Order)(implicit ctx: Context) =
st.aside(cls := "page-menu__menu subnav")(
a(cls := active.active("all"), href := routes.Study.all(order.key))(trans.study.allStudies()),
ctx.me.map { bits.authLinks(_, active, order) },
ctx.isAuth option bits.authLinks(active, order),
a(cls := "text", dataIcon := "", href := "/blog/V0KrLSkAAMo3hsi4/study-chess-the-lichess-way")(trans.study.whatAreStudies())
)
@ -133,7 +132,7 @@ object list {
pag: Paginator[WithChaptersAndLiked],
url: String => Call,
searchFilter: String
)(titleFrag: Frag)(implicit ctx: Context) = views.html.base.layout(
)(implicit ctx: Context) = views.html.base.layout(
title = title,
moreCss = cssTag("study.index"),
wrapClass = "full-screen-force",

View File

@ -3,7 +3,6 @@ package views.html.team
import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import controllers.routes

View File

@ -23,7 +23,7 @@ object form {
postForm(cls := "form3", action := routes.Team.create())(
form3.globalError(form),
form3.group(form("name"), trans.name())(form3.input(_)),
form3.group(form("open"), trans.joiningPolicy()) { f =>
form3.group(form("open"), trans.joiningPolicy()) { _ =>
form3.select(form("open"), Seq(0 -> trans.aConfirmationIsRequiredToJoin.txt(), 1 -> trans.anyoneCanJoin.txt()))
},
form3.group(form("location"), trans.location())(form3.input(_)),

View File

@ -13,15 +13,13 @@ object list {
name = trans.search.txt() + " \"" + text + "\"",
teams = teams,
nextPageUrl = n => routes.Team.search(text, n).url,
tab = "all",
search = text
)
def all(teams: Paginator[lila.team.Team])(implicit ctx: Context) = list(
name = trans.teams.txt(),
teams = teams,
nextPageUrl = n => routes.Team.all(n).url,
tab = "all"
nextPageUrl = n => routes.Team.all(n).url
)
def mine(teams: List[lila.team.Team])(implicit ctx: Context) =
@ -49,7 +47,6 @@ object list {
name: String,
teams: Paginator[lila.team.Team],
nextPageUrl: Int => String,
tab: String,
search: String = ""
)(implicit ctx: Context) =
bits.layout(title = "%s - page %d".format(name, teams.currentPage)) {

View File

@ -42,7 +42,7 @@ object timeline {
case Follow(u1, u2) => trans.xStartedFollowingY(userIdLink(u1.some, withOnline = false), userIdLink(u2.some, withOnline = false))
case TeamJoin(userId, teamId) => trans.xJoinedTeamY(userIdLink(userId.some, withOnline = false), teamLink(teamId, withIcon = false))
case TeamCreate(userId, teamId) => trans.xCreatedTeamY(userIdLink(userId.some, withOnline = false), teamLink(teamId, withIcon = false))
case ForumPost(userId, topicId, topicName, postId) => trans.xPostedInForumY(
case ForumPost(userId, _, topicName, postId) => trans.xPostedInForumY(
userIdLink(userId.some, withOnline = false),
a(
href := routes.ForumPost.redirect(postId),

View File

@ -7,8 +7,6 @@ import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.String.html.safeJsonValue
import controllers.routes
object calendar {
def apply(json: play.api.libs.json.JsObject)(implicit ctx: Context) = views.html.base.layout(

View File

@ -7,7 +7,6 @@ import lila.api.Context
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.rating.PerfType
import lila.tournament.crud.CrudForm
import lila.tournament.{ DataForm, Tournament }

View File

@ -13,7 +13,7 @@ import controllers.routes
object form {
def apply(form: Form[_], config: DataForm, me: User, teams: List[lila.hub.LightTeam])(implicit ctx: Context) = views.html.base.layout(
def apply(form: Form[_], me: User, teams: List[lila.hub.LightTeam])(implicit ctx: Context) = views.html.base.layout(
title = trans.newTournament.txt(),
moreCss = cssTag("tournament.form"),
moreJs = frag(
@ -121,7 +121,7 @@ object form {
}
)
def startingPosition(field: Field)(implicit ctx: Context) = st.select(
def startingPosition(field: Field) = st.select(
id := form3.id(field),
name := field.name,
cls := "form-control"

Some files were not shown because too many files have changed in this diff Show More