pyc-website
main website for pyc inc.
git clone https://9o.is/git/pyc-website.git
UtilSnips.scala
(3269B)
1 package inc.pyc
2 package snippet
3
4 import model.field._
5 import xml._
6 import net.liftweb._
7 import common.Box
8 import http._
9 import util._
10 import js._
11 import JE._
12 import JsCmds._
13 import Helpers._
14 import json.JsonAST._
15 import net.liftmodules._
16 import extras._, snippet._
17 import dispatch._, Defaults._
18 import net.liftweb.builtin.snippet.Menu
19
20
21 object Assets extends AssetLoader
22
23 trait AngularSnippet {
24 implicit def boxedJValueToJValue(in: Box[JValue]): JValue = in openOr JNull
25 implicit def listJValueToJValue(in: List[JValue]): JValue = in.headOption.getOrElse(JNull)
26 implicit def listFutureJValueToJValue(in: List[Future[JValue]]): JValue = in.headOption.getOrElse(Future(JNull))()
27
28 def roundTrips: List[RoundTripInfo]
29
30 def render(in: NodeSeq): NodeSeq = {
31 for (sess <- S.session) yield {
32 val roundtrips = sess.buildRoundtrip(roundTrips)
33 val className: String = this.getClass.getName.split("""\.""").last
34 val script = SetExp(JsVar("window", className), roundtrips)
35 S.appendGlobalJs(script)
36 }
37 in
38 }
39 }
40
41 object Menus extends BsMenu {
42 import net.liftweb.sitemap.SiteMap
43
44 override def group = {
45 val menus: NodeSeq =
46 for {
47 group <- S.attr("group") ?~ "Group not specified"
48 sitemap <- LiftRules.siteMap ?~ "Sitemap is empty"
49 request <- S.request ?~ "Request is empty"
50 curLoc <- request.location ?~ "Current location is empty"
51 } yield ({
52 val currentClass = S.attr("current_class").openOr("active")
53 sitemap.locForGroup(group) flatMap { loc =>
54 val nonHiddenKids = loc.menu.kids.filterNot(_.loc.hidden)
55 val styles =
56 if (curLoc.name == loc.name || loc.menu.kids.exists(_.loc.name == curLoc.name)) currentClass
57 else ""
58
59 if (nonHiddenKids.length == 0) {
60 <li class={styles}>{SiteMap.buildLink(loc.name)}</li>
61 }
62 else {
63 val dropdown: NodeSeq = nonHiddenKids.map { kid =>
64 <li>{SiteMap.buildLink(kid.loc.name)}</li>
65 }
66
67 <li class={styles + " dropdown"}>
68 <a href="#" class="dropdown-toggle" data-toggle="dropdown">{loc.linkText.openOr(Text("Empty Name"))}</a>
69 <ul class="dropdown-menu">{ dropdown }</ul>
70 </li>
71 }
72 }
73 }): NodeSeq
74
75 "* -*" #> menus
76 }
77 }
78
79 object ProductionOnly {
80 def render(in: NodeSeq): NodeSeq =
81 if (Props.productionMode) in
82 else NodeSeq.Empty
83 }
84
85 object Selector extends USStatesSelector
86
87 object PYC {
88 def logo: CssSel = "* [src]" #> "https://s3.amazonaws.com/assets-pyc/logo-noslogan.png"
89 }
90
91 object Social {
92 def facebookLink: CssSel = "* [href]" #> "https://www.facebook.com/pycinc"
93 def twitterLink: CssSel = "* [href]" #> "https://twitter.com/pyc_inc"
94 def gplusLink: CssSel = "* [href]" #> "https://plus.google.com/113129814840501272637"
95 def instagramLink: CssSel = "* [href]" #> "https://instagram.com/pyc_inc"
96 }
97
98 object Placeholder extends SnippetHelper {
99
100 def render: CssSel =
101 for (name <- S.attr("name")) yield {
102 "* [placeholder]" #> {S ? name}
103 }
104 }
105
106 object LocaleTitle extends SnippetHelper {
107 def render = "* *" #> ( for {
108 loc <- S.request.map(_.location)
109 name <- loc.map(S ? _.name)
110 } yield name)
111 }