| author | Tomas Zeman <tzeman@volny.cz> |
| Tue, 11 Dec 2018 21:37:53 +0100 | |
| changeset 17 | 0ebcd5464503 |
| parent 16 | 4556852613a9 |
| child 18 | 8cfd67425811 |
| permissions | -rw-r--r-- |
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
1 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
2 |
package sqwl.cms |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
3 |
|
| 17 | 4 |
import java.nio.file.{Path, Paths}
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
5 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
6 |
import enumeratum.EnumEntry.Hyphencase |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
7 |
import enumeratum._ |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
8 |
import scala.io.Source |
|
16
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
9 |
import scalatags.Text.all._ |
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
10 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
11 |
sealed abstract class Category(val name: String) extends EnumEntry with |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
12 |
iCategory with Hyphencase {
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
13 |
override def pathSegment: String = entryName |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
14 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
15 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
16 |
object Category extends Enum[Category] {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
17 |
val values = findValues |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
18 |
case object Cat1 extends Category("Category 1")
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
19 |
case object Cat2 extends Category("Category 2")
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
20 |
case object Cat3 extends Category("Category 3")
|
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
21 |
case object Cat4 extends Category("Category 4")
|
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
22 |
case object Cat5 extends Category("Category 5")
|
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
23 |
case object Cat6 extends Category("Category 6")
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
24 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
25 |
|
| 13 | 26 |
sealed abstract class Tag(val name: String) extends EnumEntry with iTag |
27 |
with Hyphencase {
|
|
28 |
override def pathSegment: String = entryName |
|
29 |
} |
|
30 |
||
31 |
object Tag extends Enum[Tag] {
|
|
32 |
val values = findValues |
|
33 |
case object Tag1 extends Tag("Tag 1")
|
|
34 |
case object Tag2 extends Tag("Tag 2")
|
|
35 |
case object Tag3 extends Tag("Tag 3")
|
|
36 |
case object Tag4 extends Tag("Tag 4")
|
|
37 |
case object Tag5 extends Tag("Tag 5")
|
|
38 |
case object Tag6 extends Tag("Tag 6")
|
|
39 |
} |
|
40 |
||
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
41 |
sealed abstract class Article(val title: String, |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
42 |
val category: Option[iCategory], |
|
16
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
43 |
val tags: Seq[iTag] = Seq(), |
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
44 |
val tex: Option[SeqFrag[Frag]] = None |
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
45 |
) extends EnumEntry with ScalatexOrFsArticle with Hyphencase {
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
46 |
|
|
16
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
47 |
override protected def content: Either[Path, SeqFrag[Frag]] = tex match {
|
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
48 |
case Some(v) => Right(v) |
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
49 |
case _ => |
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
50 |
Left(Paths.get(s"example/content/${entryName}.html"))
|
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
51 |
} |
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
52 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
53 |
override def assets: Path = Paths.get(s"example/content/${entryName}")
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
54 |
override def pathSegment: String = entryName |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
55 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
56 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
57 |
object Article extends Enum[Article] {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
58 |
import Category._ |
| 13 | 59 |
import Tag._ |
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
60 |
val values = findValues |
| 13 | 61 |
case object A1 extends Article("Article 1", Some(Cat1),
|
62 |
Seq(Tag1, Tag2, Tag3)) |
|
|
16
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
63 |
case object A2 extends Article("Article 2", Some(Cat1))
|
| 13 | 64 |
case object A3 extends Article("Article 3", Some(Cat1),
|
65 |
Seq(Tag4, Tag5)) |
|
66 |
case object A4 extends Article("Article 4", Some(Cat2), Seq(Tag4))
|
|
67 |
case object A5 extends Article("Article 5", Some(Cat2), Seq(Tag5))
|
|
|
16
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
68 |
import scalatex._ |
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
69 |
case object A6 extends Article("Article 6", Some(Cat1),
|
|
4556852613a9
Scalatex based article implementation
Tomas Zeman <tzeman@volny.cz>
parents:
15
diff
changeset
|
70 |
Seq(Tag1), Some(twf("example/content/a6.scalatex")))
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
71 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
72 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
73 |
object Content extends iContent {
|
| 13 | 74 |
|
| 9 | 75 |
def appTitle: String = "Content management system example" |
| 13 | 76 |
|
| 9 | 77 |
def appTitleShort: String = "CMS" |
| 13 | 78 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
79 |
def icon = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
80 |
("icon.png", Paths.get("example/content/public/images/icon.png"))
|
| 13 | 81 |
|
| 7 | 82 |
def publicAssets: Path = Paths.get("example/content/public")
|
| 13 | 83 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
84 |
def styleSheet = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
85 |
("site.css", Paths.get("example/content/public/css/site.css"))
|
| 13 | 86 |
|
87 |
def articlesByTag(t: iTag): Seq[iArticle] = |
|
88 |
Article.values.filter(_.tags contains(t)) |
|
89 |
||
|
12
e7512f9dc903
Layout: categories, articles, primary view
Tomas Zeman <tzeman@volny.cz>
parents:
10
diff
changeset
|
90 |
def articlesByCategory(c: iCategory): Seq[iArticle] = |
|
e7512f9dc903
Layout: categories, articles, primary view
Tomas Zeman <tzeman@volny.cz>
parents:
10
diff
changeset
|
91 |
Article.values.filter(_.category contains(c)) |
| 13 | 92 |
|
93 |
def tags: Seq[iTag] = Tag.values |
|
94 |
||
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
95 |
def categories: Seq[iCategory] = Category.values |
| 13 | 96 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
97 |
def articleByPath(path: String): Option[iArticle] = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
98 |
Article.withNameOption(path) |
| 13 | 99 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
100 |
def categoryByPath(path: String): Option[iCategory] = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
101 |
Category.withNameOption(path) |
| 13 | 102 |
|
103 |
def tagByPath(path: String): Option[iTag] = Tag.withNameOption(path) |
|
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
104 |
} |