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 }