scala-news-reader
rss/atom news reader in scala
git clone https://9o.is/git/scala-news-reader.git
BlogSnips.scala
(3463B)
1 package com.joereader.snippet
2
3 import scala.xml._
4
5 import net.liftweb._
6 import http._
7 import common._
8 import util._
9 import Helpers._
10
11 import net.liftmodules.extras.SnippetHelper
12
13 import com.joereader._
14 import com.joereader.model._
15 import config._
16
17
18 trait BlogSnip extends SnippetHelper with Logger {
19
20 protected def blog: Box[Blog]
21
22 protected def serve(snip: Blog => NodeSeq)
23 (test: Boolean, fallback: NodeSeq): NodeSeq =
24 (for {
25 b <- blog ?~ "Blog not found"
26 } yield {
27 if (test) snip(b) else fallback
28 }): NodeSeq
29
30 protected def serve(html: NodeSeq)
31 (snip: Blog => CssSel)
32 (test: Boolean, fallback: NodeSeq): NodeSeq =
33 (for {
34 b <- blog ?~ "Blog not found"
35 } yield {
36 if (test) snip(b)(html) else fallback
37 }): NodeSeq
38 }
39
40 trait BlogWriterSnip extends SnippetHelper with Logger {
41
42 protected def blog: Box[Blog]
43
44 protected def blogWriter: Box[BlogWriter]
45
46 protected def serve(snip: (Blog, BlogWriter) => NodeSeq)
47 (test: Boolean, fallback: NodeSeq): NodeSeq =
48 (for {
49 b <- blog ?~ "Blog not found"
50 bw <- blogWriter ?~ "Blog Writer not found"
51 } yield {
52 if (test) snip(b, bw) else fallback
53 }): NodeSeq
54
55 protected def serve(html: NodeSeq)
56 (snip: (Blog, BlogWriter) => CssSel)
57 (test: Boolean, fallback: NodeSeq): NodeSeq =
58 (for {
59 b <- blog ?~ "Blog not found"
60 bw <- blogWriter ?~ "Blog Writer not found"
61 } yield {
62 if (test) snip(b, bw)(html) else fallback
63 }): NodeSeq
64
65 protected def serve(snip: (Blog, BlogWriter, User) => NodeSeq)
66 (test: Boolean, fallback: NodeSeq): NodeSeq =
67 (for {
68 b <- blog ?~ "Blog not found"
69 bw <- blogWriter ?~ "Blog Writer not found"
70 u <- User.currentUser ?~ "User not found"
71 } yield {
72 if (test) snip(b, bw, u) else fallback
73 }): NodeSeq
74 }
75
76 trait BlogWriterUserSnip extends BlogWriterSnip {
77
78 protected def bwu: Box[BlogWriterUser]
79
80 override protected def blog = bwu.map(_.blog) match {
81 case Full(Some(t)) => Full(t)
82 case _ => Empty
83 }
84
85 override protected def blogWriter = bwu.map(_.blogWriter) match {
86 case Full(Some(t)) => Full(t)
87 case _ => Empty
88 }
89
90 }
91
92 object ProfileLocBlog extends BlogSnipEdit with BlogWritersSnipView {
93 protected def blog = Site.blogProfileLoc.currentValue
94 }
95
96 object BlogSettings extends BlogSnipEdit with BlogWritersSnipView {
97 protected def blog = Site.blogSettingsLoc.currentValue
98 }
99
100 object ProfileLocBlogWriter extends BlogWriterSnipView with FollowSnip {
101 protected def bwu = Site.blogWriterProfileLoc.currentValue
102 }
103
104 object PreviewLocBlogWriter extends BlogWriterSnipView with FollowSnip {
105 override def bwu = Site.blogWriterPreviewLoc.currentValue
106
107 def about: NodeSeq = for (bwu <- bwu; user <- bwu.user) yield {
108 Text(user.about.get)
109 }
110
111 def navbar =
112 "#profile-btn [href]" #> (for (bwu <- bwu; user <- bwu.user) yield {
113 Site.userProfileLoc.calcHref(user)
114 }) &
115 "#back-btn [href]" #> S.referer
116
117 def redirect(html: NodeSeq) =
118 if (bwu.exists(_.user.isDefined)) html
119 else S.redirectTo(Site.notFound.url)
120 }
121
122 /*
123 * (hack) Used during sign up wizard to handle the blog-name text input
124 * field which rests outside of blog-profile.html
125 */
126 object ProfileLocBlogReq extends BlogSnipEdit {
127 protected def blog = Blog.findByStringId(BlogIdVar.is)
128 }