example/src/sqwl/cms/Content.scala
author Tomas Zeman <tzeman@volny.cz>
Thu, 29 Nov 2018 12:20:20 +0100
changeset 4 1a1347e8c5be
child 7 50a354e5bda4
permissions -rw-r--r--
Build modules: base, content, app; example content, minimal layout


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")
}

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())
}

object Content extends iContent {
  def articlesByTag(t: iTag): Seq[iArticle] = Seq()
  def articlesByCategory(c: iCategory): Seq[iArticle] = Seq()
  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
}