example/src/sqwl/cms/Content.scala
author Tomas Zeman <tzeman@volny.cz>
Thu, 06 Dec 2018 14:02:53 +0100
changeset 10 4b5313097a4d
parent 9 7d5ed4c927ce
child 12 e7512f9dc903
permissions -rw-r--r--
Added example content articles, categories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
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
    28
  val category: Option[iCategory],
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
  val tags: Seq[iTag],
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
) extends EnumEntry with iArticle with Hyphencase {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
  override def htmlContent: String = {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
    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
    34
    try {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    35
      src.getLines.mkString
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
    } catch {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
      case _: Throwable => ""
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    38
    } finally {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    39
      src.close()
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    40
    }
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
  }
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
  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
    44
  override def pathSegment: String = entryName
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
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    47
object Article extends Enum[Article] {
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    48
  import Category._
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    49
  val values = findValues
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
  case object A1 extends Article("Article 1", Some(Cat1), Seq())
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    51
  case object A2 extends Article("Article 2", Some(Cat1), Seq())
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    52
  case object A3 extends Article("Article 3", Some(Cat1), Seq())
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    53
  case object A4 extends Article("Article 4", Some(Cat2), Seq())
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    54
  case object A5 extends Article("Article 5", Some(Cat2), Seq())
4
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 Content extends iContent {
9
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    58
  def appTitle: String = "Content management system example"
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    59
  def appTitleShort: String = "CMS"
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    60
  def icon =
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    61
    ("icon.png", Paths.get("example/content/public/images/icon.png"))
7
50a354e5bda4 Content parametrizing
Tomas Zeman <tzeman@volny.cz>
parents: 4
diff changeset
    62
  def publicAssets: Path = Paths.get("example/content/public")
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    63
  def styleSheet =
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    64
    ("site.css", Paths.get("example/content/public/css/site.css"))
4
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    65
  def articlesByTag(t: iTag): Seq[iArticle] = Seq()
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    66
  def articlesByCategory(c: iCategory): Seq[iArticle] = Seq()
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    67
  def tags: Seq[iTag] = Seq()
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    68
  def categories: Seq[iCategory] = Category.values
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    69
  def articleByPath(path: String): Option[iArticle] =
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    70
    Article.withNameOption(path)
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    71
  def categoryByPath(path: String): Option[iCategory] =
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    72
    Category.withNameOption(path)
4
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    73
  def tagByPath(path: String): Option[iTag] = None
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    74
}