example/src/sqwl/cms/Content.scala
author Tomas Zeman <tomas@functionals.cz>
Tue, 29 Dec 2020 16:46:47 +0100
changeset 33 fa0f19a74283
parent 27 8529ce302f7c
permissions -rw-r--r--
CMS API update
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
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
     4
import java.nio.file.Path
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._
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
     8
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
     9
import scala.collection.immutable
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] {
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    17
  val values: immutable.IndexedSeq[Category] = findValues
4
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] {
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    32
  val values: immutable.IndexedSeq[Tag] = findValues
13
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
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    41
class Content(val root: Path) extends iContent {
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents: 17
diff changeset
    42
  InitializeContent()
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    43
9
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    44
  def appTitle: String = "Content management system example"
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    45
9
7d5ed4c927ce Content cleanup
Tomas Zeman <tzeman@volny.cz>
parents: 7
diff changeset
    46
  def appTitleShort: String = "CMS"
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    47
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    48
  def icon: (String, Path) =
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    49
    ("icon.png", root.resolve("public/images/icon.png"))
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    50
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    51
  def publicAssets: Path = root.resolve("public")
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    52
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    53
  def styleSheet: (String, Path) =
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    54
    ("site.css", root.resolve("public/css/site.css"))
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    55
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    56
  def articlesByTag(t: iTag): Seq[iArticle] =
27
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    57
    Articles.values filter(_.tags contains t) sortBy(_.rank)
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    58
12
e7512f9dc903 Layout: categories, articles, primary view
Tomas Zeman <tzeman@volny.cz>
parents: 10
diff changeset
    59
  def articlesByCategory(c: iCategory): Seq[iArticle] =
27
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    60
    Articles.values filter(_.category contains c) sortBy(_.rank)
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    61
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    62
  def tags: Seq[iTag] = Tag.values
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    63
4
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    64
  def categories: Seq[iCategory] = Category.values
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    65
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    66
  def articleByPath(path: String): Option[iArticle] =
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents: 17
diff changeset
    67
    Articles.values.find(_.pathSegment == path)
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    68
10
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    69
  def categoryByPath(path: String): Option[iCategory] =
4b5313097a4d Added example content articles, categories
Tomas Zeman <tzeman@volny.cz>
parents: 9
diff changeset
    70
    Category.withNameOption(path)
13
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    71
216da61215db Implemented tags
Tomas Zeman <tzeman@volny.cz>
parents: 12
diff changeset
    72
  def tagByPath(path: String): Option[iTag] = Tag.withNameOption(path)
33
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    73
fa0f19a74283 CMS API update
Tomas Zeman <tomas@functionals.cz>
parents: 27
diff changeset
    74
  def articleAssets(a: iArticle): Path = root.resolve(a.pathSegment)
4
1a1347e8c5be Build modules: base, content, app; example content, minimal layout
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    75
}