ublog atom RSS link

pull/9751/head
Thibault Duplessis 2021-09-07 17:16:24 +02:00
parent 5296ed2ccc
commit 7047222889
5 changed files with 82 additions and 8 deletions

View File

@ -211,8 +211,22 @@ final class Ublog(env: Env) extends LilaController(env) {
}
}
def userAtom(username: String) = Action.async {
env.user.repo.enabledNamed(username) flatMap {
case None => NotFound.fuccess
case Some(user) =>
env.ublog.api.getUserBlog(user) flatMap { blog =>
(isBlogVisible(user, blog) ?? env.ublog.paginator.byUser(user, true, 1)) map { posts =>
Ok(html.ublog.atom(user, blog, posts.currentPageResults)) as XML
}
}
}
}
private def isBlogVisible(user: UserModel, blog: UblogBlog) = user.enabled && blog.visible
private def canViewBlogOf(user: UserModel, blog: UblogBlog)(implicit ctx: Context) =
ctx.is(user) || isGranted(_.ModerateBlog) || (user.enabled && blog.visible)
ctx.is(user) || isGranted(_.ModerateBlog) || isBlogVisible(user, blog)
private def canViewPost(user: UserModel, blog: UblogBlog)(post: UblogPost)(implicit ctx: Context) =
canViewBlogOf(user, blog) && (ctx.is(user) || post.live)

View File

@ -197,7 +197,8 @@ object layout {
chessground: Boolean = true,
zoomable: Boolean = false,
csp: Option[ContentSecurityPolicy] = None,
wrapClass: String = ""
wrapClass: String = "",
atomLinkTag: Option[Tag] = None
)(body: Frag)(implicit ctx: Context): Frag =
frag(
doctype,
@ -229,11 +230,12 @@ object layout {
!robots option raw("""<meta content="noindex, nofollow" name="robots">"""),
noTranslate,
openGraph.map(_.frags),
link(
(atomLinkTag | link(
href := routes.Blog.atom,
tpe := "application/atom+xml",
rel := "alternate",
st.title := trans.blog.txt()
))(
tpe := "application/atom+xml",
rel := "alternate"
),
ctx.currentBg == "transp" option ctx.pref.bgImgOrDefault map { img =>
raw(

View File

@ -0,0 +1,51 @@
package views.html.ublog
import controllers.routes
import lila.app.templating.Environment._
import lila.app.ui.ScalatagsTemplate._
import lila.common.paginator.Paginator
import lila.user.User
import lila.ublog.{ UblogBlog, UblogPost }
object atom {
import views.html.base.atom.atomDate
import views.html.ublog.blog.urlOfBlog
import views.html.ublog.post.{ thumbnail, urlOfPost }
def apply(
user: User,
blog: UblogBlog,
posts: Seq[UblogPost.PreviewPost]
) =
views.html.base.atom(
elems = posts,
htmlCall = routes.Ublog.index(user.username),
atomCall = routes.Blog.atom,
title = "lichess.org blog",
updated = posts.headOption.flatMap(_.lived).map(_.at)
) { post =>
frag(
tag("id")(s"$netBaseUrl${urlOfBlog(blog)}"),
tag("published")(post.lived.map(_.at) map atomDate),
link(
rel := "alternate",
tpe := "text/html",
href := s"$netBaseUrl${urlOfPost(post)}"
),
tag("title")(post.title),
// tag("category")(
// tag("term")(doc.getText("blog.category")),
// tag("label")(slugify(~doc.getText("blog.category")))
// ),
tag("content")(tpe := "html")(
thumbnail(post, _.Large),
"<br>", // yes, scalatags encodes it.
post.intro
),
tag("tag")("media:thumbnail")(attr("url") := thumbnail.url(post, _.Large)),
tag("author")(tag("name")(user.titleUsername))
)
}
}

View File

@ -13,18 +13,23 @@ object blog {
import views.html.ublog.{ post => postView }
def apply(user: User, blog: UblogBlog, posts: Paginator[UblogPost.PreviewPost])(implicit ctx: Context) =
def apply(user: User, blog: UblogBlog, posts: Paginator[UblogPost.PreviewPost])(implicit ctx: Context) = {
val title = blog.title | "Blog"
views.html.base.layout(
moreCss = cssTag("ublog"),
moreJs = frag(
posts.hasNextPage option infiniteScrollTag,
ctx.isAuth option jsModule("ublog")
),
title = trans.ublog.xBlog.txt(user.username)
title = title,
atomLinkTag = link(
href := routes.Ublog.userAtom(user.username),
st.title := title
).some
) {
main(cls := "box box-pad page page-small ublog-index")(
div(cls := "box__top")(
h1(trans.ublog.xBlog(userLink(user))),
h1(title),
if (ctx is user)
div(cls := "box__top__actions")(
a(href := routes.Ublog.drafts(user.username))(trans.ublog.drafts()),
@ -44,6 +49,7 @@ object blog {
)
)
}
}
def urlOfBlog(blog: UblogBlog) = blog.id match {
case UblogBlog.Id.User(userId) => routes.Ublog.index(usernameOrId(userId))

View File

@ -62,6 +62,7 @@ GET /@/:username/blog controllers.Ublog.index(username: String,
GET /@/:username/blog/:slug/:id controllers.Ublog.post(username: String, slug: String, id: String)
GET /@/:username/blog/drafts controllers.Ublog.drafts(username: String, page: Int ?= 1)
GET /@/:username/blog/new controllers.Ublog.form(username: String)
GET /@/:username/blog.atom controllers.Ublog.userAtom(username: String)
POST /ublog/new controllers.Ublog.create
GET /ublog/$id<\w{8}>/edit controllers.Ublog.edit(id: String)
POST /ublog/$id<\w{8}>/edit controllers.Ublog.update(id: String)