example/src/sqwl/cms/Articles.scala
author Tomas Zeman <tzeman@volny.cz>
Tue, 15 Jan 2019 12:25:19 +0100
changeset 27 8529ce302f7c
parent 21 1fa630ed9b8a
child 33 fa0f19a74283
permissions -rw-r--r--
Article.rank: sort articles by category/tag w.r.t. rank
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
package sqwl.cms
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
import java.nio.file.{Path, Paths}
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
import scala.collection.mutable
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
import scalatags.Text.all._
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
object Articles {
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
     8
  case class Id(v: String)
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
  case class Article(
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    10
    id: Id,
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    11
    title: String,
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    12
    category: Option[iCategory],
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    13
    tags: Seq[iTag] = Seq(),
27
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    14
    htmlContent: String,
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    15
    rank: Int = 0
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
  ) extends iArticle {
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
    override def assets: Path = Paths.get(s"example/content/${id.v}")
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
    override def pathSegment: String = id.v
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
  }
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
  private val all = mutable.ArrayBuffer[iArticle]()
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
21
1fa630ed9b8a Content: type annotations
Tomas Zeman <tzeman@volny.cz>
parents: 18
diff changeset
    22
  def values: Seq[iArticle] = all.toIndexedSeq
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
27
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    24
  def article(title: String, cat: iCategory, tags: Seq[iTag] = Seq(),
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    25
    rank: Int = 0)(body: Frag*)(implicit articleId: Id): SeqFrag[Frag] = {
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
27
8529ce302f7c Article.rank: sort articles by category/tag w.r.t. rank
Tomas Zeman <tzeman@volny.cz>
parents: 21
diff changeset
    27
    all += Article(articleId, title, Option(cat), tags, body.render, rank)
18
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
    body
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
  }
8cfd67425811 Scalatex article as primary format
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
}