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 }