| author | Tomas Zeman <tzeman@volny.cz> |
| Thu, 06 Dec 2018 16:18:26 +0100 | |
| changeset 13 | 216da61215db |
| parent 12 | e7512f9dc903 |
| child 15 | 1e1b0a1a4d63 |
| 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 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
46 |
) extends EnumEntry with iArticle with Hyphencase {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
47 |
override def htmlContent: String = {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
48 |
val src = Source.fromFile(s"example/content/${entryName}.html", "UTF-8")
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
49 |
try {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
50 |
src.getLines.mkString |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
51 |
} catch {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
52 |
case _: Throwable => "" |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
53 |
} finally {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
54 |
src.close() |
|
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 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
58 |
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
|
59 |
override def pathSegment: String = entryName |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
60 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
61 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
62 |
object Article extends Enum[Article] {
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
63 |
import Category._ |
| 13 | 64 |
import Tag._ |
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
65 |
val values = findValues |
| 13 | 66 |
case object A1 extends Article("Article 1", Some(Cat1),
|
67 |
Seq(Tag1, Tag2, Tag3)) |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
68 |
case object A2 extends Article("Article 2", Some(Cat1), Seq())
|
| 13 | 69 |
case object A3 extends Article("Article 3", Some(Cat1),
|
70 |
Seq(Tag4, Tag5)) |
|
71 |
case object A4 extends Article("Article 4", Some(Cat2), Seq(Tag4))
|
|
72 |
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
|
73 |
} |
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
74 |
|
|
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
75 |
object Content extends iContent {
|
| 13 | 76 |
|
| 9 | 77 |
def appTitle: String = "Content management system example" |
| 13 | 78 |
|
| 9 | 79 |
def appTitleShort: String = "CMS" |
| 13 | 80 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
81 |
def icon = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
82 |
("icon.png", Paths.get("example/content/public/images/icon.png"))
|
| 13 | 83 |
|
| 7 | 84 |
def publicAssets: Path = Paths.get("example/content/public")
|
| 13 | 85 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
86 |
def styleSheet = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
87 |
("site.css", Paths.get("example/content/public/css/site.css"))
|
| 13 | 88 |
|
89 |
def articlesByTag(t: iTag): Seq[iArticle] = |
|
90 |
Article.values.filter(_.tags contains(t)) |
|
91 |
||
|
12
e7512f9dc903
Layout: categories, articles, primary view
Tomas Zeman <tzeman@volny.cz>
parents:
10
diff
changeset
|
92 |
def articlesByCategory(c: iCategory): Seq[iArticle] = |
|
e7512f9dc903
Layout: categories, articles, primary view
Tomas Zeman <tzeman@volny.cz>
parents:
10
diff
changeset
|
93 |
Article.values.filter(_.category contains(c)) |
| 13 | 94 |
|
95 |
def tags: Seq[iTag] = Tag.values |
|
96 |
||
|
4
1a1347e8c5be
Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
97 |
def categories: Seq[iCategory] = Category.values |
| 13 | 98 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
99 |
def articleByPath(path: String): Option[iArticle] = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
100 |
Article.withNameOption(path) |
| 13 | 101 |
|
|
10
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
102 |
def categoryByPath(path: String): Option[iCategory] = |
|
4b5313097a4d
Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents:
9
diff
changeset
|
103 |
Category.withNameOption(path) |
| 13 | 104 |
|
105 |
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
|
106 |
} |