example/src/sqwl/cms/Content.scala
author Tomas Zeman <tzeman@volny.cz>
Thu, 06 Dec 2018 15:19:41 +0100
changeset 12 e7512f9dc903
parent 10 4b5313097a4d
child 13 216da61215db
permissions -rw-r--r--
Layout: categories, articles, primary view


package sqwl.cms

import java.nio.file.{FileSystems, Path, Paths}

import akka.stream.scaladsl.FileIO
import enumeratum.EnumEntry.Hyphencase
import enumeratum._

import scala.io.Source

sealed abstract class Category(val name: String) extends EnumEntry with
  iCategory with Hyphencase {
  override def pathSegment: String = entryName
}

object Category extends Enum[Category] {
  val values = findValues
  case object Cat1 extends Category("Category 1")
  case object Cat2 extends Category("Category 2")
  case object Cat3 extends Category("Category 3")
  case object Cat4 extends Category("Category 4")
  case object Cat5 extends Category("Category 5")
  case object Cat6 extends Category("Category 6")
}

sealed abstract class Article(val title: String,
  val category: Option[iCategory],
  val tags: Seq[iTag],

) extends EnumEntry with iArticle with Hyphencase {
  override def htmlContent: String = {
    val src = Source.fromFile(s"example/content/${entryName}.html", "UTF-8")
    try {
      src.getLines.mkString
    } catch {
      case _: Throwable => ""
    } finally {
      src.close()
    }
  }

  override def assets: Path = Paths.get(s"example/content/${entryName}")
  override def pathSegment: String = entryName
}

object Article extends Enum[Article] {
  import Category._
  val values = findValues
  case object A1 extends Article("Article 1", Some(Cat1), Seq())
  case object A2 extends Article("Article 2", Some(Cat1), Seq())
  case object A3 extends Article("Article 3", Some(Cat1), Seq())
  case object A4 extends Article("Article 4", Some(Cat2), Seq())
  case object A5 extends Article("Article 5", Some(Cat2), Seq())
}

object Content extends iContent {
  def appTitle: String = "Content management system example"
  def appTitleShort: String = "CMS"
  def icon =
    ("icon.png", Paths.get("example/content/public/images/icon.png"))
  def publicAssets: Path = Paths.get("example/content/public")
  def styleSheet =
    ("site.css", Paths.get("example/content/public/css/site.css"))
  def articlesByTag(t: iTag): Seq[iArticle] = Seq()
  def articlesByCategory(c: iCategory): Seq[iArticle] =
    Article.values.filter(_.category contains(c))
  def tags: Seq[iTag] = Seq()
  def categories: Seq[iCategory] = Category.values
  def articleByPath(path: String): Option[iArticle] =
    Article.withNameOption(path)
  def categoryByPath(path: String): Option[iCategory] =
    Category.withNameOption(path)
  def tagByPath(path: String): Option[iTag] = None
}