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