scala-news-reader

rss/atom news reader in scala

git clone https://9o.is/git/scala-news-reader.git

BackgroundSnip.scala

(2652B)


      1 package com.joereader.snippet
      2 
      3 import net.liftweb._
      4 import common._
      5 import http.SHtml._
      6 import util._, Helpers._
      7 
      8 import scala.xml._
      9 
     10 import com.joereader._
     11 import snippet.SnipHelpers._
     12 import config._, S3Config._
     13 import model._
     14 import lib._
     15 import ImageUpload.ImageType._
     16 
     17 /**
     18  * Handles profile backgrounds
     19  */
     20 trait BackgroundSnip {
     21 
     22   val backgrounds = Seq(
     23     "big-island",
     24     "blue-grid",
     25     "orangey",
     26     "breen-gloss",
     27     "rainbow-landscape",
     28     "water-wave")
     29 
     30   def listBackgrounds(currentDefault: String, bwu: BlogWriterUser) = ajaxRadio[String](
     31     backgrounds,
     32     backgrounds.find(_ == currentDefault),
     33     {
     34       s =>
     35         for {
     36           user <- bwu.user
     37           u <- User.find(user.id.get)
     38         } { 
     39           ImageUpload.deleteFile(u.bgImg.get)
     40           u.bgImg(s).update
     41         }
     42         
     43         for {
     44           blog <- bwu.blog
     45           b <- Blog.find(blog.id.get)
     46         } { 
     47           ImageUpload.deleteFile(b.bgImg.get)
     48           b.bgImg(s).update
     49         }
     50         
     51         UpdateImage(imgBgId, s3.fileUrl(s))
     52     }).backgroundChoices
     53 
     54   def radios = ajaxRadio[Boolean](
     55     Seq(true, false),
     56     Full(true),
     57     {
     58       bool =>
     59         if (bool) Show("backgrounds-list") & Hide("bg-fileupload-container")
     60         else Show("bg-fileupload-container") & Hide("backgrounds-list")
     61     })
     62 
     63   def defaultBackground: String = s3.fileUrl(backgrounds.head)
     64 
     65   def imageBgUrl(u: User) =
     66     if (u.bgImg.get.nonEmpty) s3.fileUrl(u.bgImg.get)
     67     else defaultBackground
     68 
     69   def imageBgUrl(b: Blog) =
     70     if (b.bgImg.get.nonEmpty) s3.fileUrl(b.bgImg.get)
     71     else defaultBackground
     72 
     73   def uploadBgImg(user: User): CssSel = {
     74 
     75     val radios = this.radios
     76 
     77     "#bg-fileupload-container *" #>
     78       insertFileUpload(bg, ImageUpload.userUrl(bg)) &
     79       "#backgrounds-list *" #>
     80       listBackgrounds(user.bgImg.get, new BlogWriterUser(user)) &
     81       "#backgrounds-q-yes" #> radios(0) &
     82       "#backgrounds-q-no" #> radios(1)
     83   }
     84 
     85   def uploadBgImg(blog: Blog): CssSel = {
     86 
     87     val radios = this.radios
     88 
     89     "#bg-fileupload-container *" #>
     90       insertFileUpload(bg, ImageUpload.blogUrl(blog, bg)) &
     91       "#backgrounds-list *" #>
     92       listBackgrounds(blog.bgImg.get, new BlogWriterUser(None, Some(blog))) &
     93       "#backgrounds-q-yes" #> radios(0) &
     94       "#backgrounds-q-no" #> radios(1)
     95   }
     96 
     97   implicit class BackgroundsRadioDesign2Implicit(choices: ChoiceHolder[String]) {
     98     def backgroundChoices: NodeSeq = {
     99       for (i <- 0 until choices.items.size) yield {
    100         val bg = backgrounds(i)
    101         val item = choices.items(i)
    102         <label>{ item.xhtml }<img src={ s3.fileUrl(bg) }/></label>
    103       }
    104     }
    105   }
    106 }