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 }