example/src/sqwl/cms/Content.scala
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--
Import cleanup
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
17
0ebcd5464503 Import cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 16
diff changeset
     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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    26
sealed abstract class Tag(val name: String) extends EnumEntry with iTag
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    27
  with Hyphencase {
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    28
  override def pathSegment: String = entryName
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    29
}
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    30
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    31
object Tag extends Enum[Tag] {
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    32
  val values = findValues
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    33
  case object Tag1 extends Tag("Tag 1")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    34
  case object Tag2 extends Tag("Tag 2")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    35
  case object Tag3 extends Tag("Tag 3")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    36
  case object Tag4 extends Tag("Tag 4")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    37
  case object Tag5 extends Tag("Tag 5")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    38
  case object Tag6 extends Tag("Tag 6")
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    39
}
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    61
  case object A1 extends Article("Article 1", Some(Cat1),
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    64
  case object A3 extends Article("Article 3", Some(Cat1),
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    65
    Seq(Tag4, Tag5))
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    66
  case object A4 extends Article("Article 4", Some(Cat2), Seq(Tag4))
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    74
9
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    75
  def appTitle: String = "Content management system example"
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    76
9
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    77
  def appTitleShort: String = "CMS"
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    81
7
50a354e5bda4 Content parametrizing
Tomas Zeman <tzeman@volny.cz>
parents: 4
diff changeset
    82
  def publicAssets: Path = Paths.get("example/content/public")
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    86
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    87
  def articlesByTag(t: iTag): Seq[iArticle] =
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    88
    Article.values.filter(_.tags contains(t))
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    92
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    93
  def tags: Seq[iTag] = Tag.values
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    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
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
   102
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
   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
}