scala-news-reader
rss/atom news reader in scala
git clone https://9o.is/git/scala-news-reader.git
UserSnips.scala
(1844B)
1 package com.joereader.snippet
2
3 import scala.xml._
4
5 import net.liftweb._
6 import common._
7 import http._
8 import util._
9
10 import net.liftmodules._
11 import extras.SnippetHelper
12
13 import com.joereader._
14 import model._
15 import config._
16
17
18 trait UserSnip extends SnippetHelper with Logger {
19
20 protected def user: Box[User]
21
22 protected def serve(snip: User => NodeSeq)
23 (test: Boolean, fallback: NodeSeq): NodeSeq =
24 (for {
25 u <- user ?~ "User not found"
26 } yield {
27 if (test) snip(u) else fallback
28 }): NodeSeq
29
30 protected def serve(html: NodeSeq)
31 (snip: User => CssSel)
32 (test: Boolean, fallback: NodeSeq): NodeSeq =
33 (for {
34 u <- user ?~ "User not found"
35 } yield {
36 if (test) snip(u)(html) else fallback
37 }): NodeSeq
38 }
39
40 object CurrentReader extends UserReaderSnipEdit {
41 protected def user = User.currentUser
42 }
43
44 object CurrentWriter extends UserWriterSnipEdit {
45 protected def user = User.currentUser
46 }
47
48 object ProfileLocReader extends UserReaderSnipEdit with FollowSnip {
49 override protected def user = Site.userProfileLoc.currentValue
50 protected def bwu = user.map(u => new BlogWriterUser(u))
51 }
52
53 object ProfileLocWriter extends UserWriterSnipEdit {
54 protected def user = Site.userProfileLoc.currentValue
55 }
56
57 /*
58 * Go to a user's (must be a writer) following page
59 * to view who they follows.
60 */
61 object UserFollowing extends FollowSnip {
62
63 override protected def followingUser =
64 Site.userFollowingLoc.currentValue
65 protected def bwu = Empty
66
67 def redirect(html: NodeSeq) =
68 if (followingUser.exists(_.isWriter)) html
69 else S.redirectTo(Site.notFound.url)
70 }
71
72 /* What the currently loggedin user follows. */
73 object MyFollowing extends FollowSnip {
74 override protected def followingUser = User.currentUser
75 protected def bwu = Empty
76 }