# HG changeset patch # User Tomas Zeman # Date 1544560400 -3600 # Node ID 4556852613a901f88c20b81b9001cd66853497d8 # Parent 1e1b0a1a4d63460c2d3b0b4a197ab72ec0e7477b Scalatex based article implementation diff -r 1e1b0a1a4d63 -r 4556852613a9 base/src/sqwl/cms/FsArticle.scala --- a/base/src/sqwl/cms/FsArticle.scala Tue Dec 11 15:03:57 2018 +0100 +++ b/base/src/sqwl/cms/FsArticle.scala Tue Dec 11 21:33:20 2018 +0100 @@ -2,21 +2,11 @@ import java.nio.file.Path -import scala.io.Source - trait FsArticle extends iArticle { protected def contentPath: Path protected def encoding: String = "UTF-8" - override def htmlContent: String = { - val src = Source.fromFile(contentPath.toFile, encoding) - try { - src.getLines.mkString - } catch { - case _: Throwable => "" - } finally { - src.close() - } - } + override def htmlContent: String = + readFile(contentPath, encoding) getOrElse "" } diff -r 1e1b0a1a4d63 -r 4556852613a9 base/src/sqwl/cms/ScalatexOrFsArticle.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/base/src/sqwl/cms/ScalatexOrFsArticle.scala Tue Dec 11 21:33:20 2018 +0100 @@ -0,0 +1,11 @@ +package sqwl.cms + +import java.nio.file.Path + +import scalatags.Text.all._ + +trait ScalatexOrFsArticle extends iArticle { + protected def content: Either[Path, SeqFrag[Frag]] + override def htmlContent: String = + content.fold(readFile(_).getOrElse(""), _.render) +} diff -r 1e1b0a1a4d63 -r 4556852613a9 base/src/sqwl/cms/package.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/base/src/sqwl/cms/package.scala Tue Dec 11 21:33:20 2018 +0100 @@ -0,0 +1,20 @@ +package sqwl + +import java.nio.file.Path + +import scala.io.Source +import scala.util.{Failure, Success, Try} + +package object cms { + + def readFile(f: Path, enc: String = "UTF-8"): Try[String] = { + val src = Source.fromFile(f.toFile, enc) + try { + Success(src.getLines.mkString) + } catch { + case t: Throwable => Failure(t) + } finally { + src.close() + } + } +} diff -r 1e1b0a1a4d63 -r 4556852613a9 build.sc --- a/build.sc Tue Dec 11 15:03:57 2018 +0100 +++ b/build.sc Tue Dec 11 21:33:20 2018 +0100 @@ -80,7 +80,8 @@ ivy"com.lihaoyi::scalatags:0.6.7", ivy"org.webjars:bootstrap:$bootstrap", ivy"org.webjars:font-awesome:$fontAwesome", - ivy"org.webjars:jquery:$jquery" + ivy"org.webjars:jquery:$jquery", + ivy"com.lihaoyi::scalatex-api:0.3.12" ) override def scalacOptions = T{super.scalacOptions.map(_ :+ diff -r 1e1b0a1a4d63 -r 4556852613a9 example/content/a6.scalatex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/content/a6.scalatex Tue Dec 11 21:33:20 2018 +0100 @@ -0,0 +1,20 @@ +@h1 + Lorem ipsum + +@p + Foo bar + +@p + Lorem ipsum dolor sit amet, vel etiam sensibus cu. Ne pri ridens evertitur, + qui eu sint porro reprehendunt. An graeco omittantur vis, audire aliquip cu + usu. Nulla inciderint mei cu, iusto rationibus id quo, invidunt apeirian est + ut. At nullam explicari signiferumque pro, duo eu quot fastidii. Cum munere + dignissim et, id his erat ridens. No nobis persecuti mnesarchum has, usu + ligendi mandamus ne, ne sed feugiat volutpat persecuti. + +@p + Vis ad viris lobortis, mutat dolore nec cu. Id elit detraxit cum, zril + imperdiet vix an. Odio magna consulatu ex eam. Causae ornatus euripidis ne + nec. Te sed graeco facilisis cotidieque. Vim habeo tantas ei, vix an eius + veritus habemus. + diff -r 1e1b0a1a4d63 -r 4556852613a9 example/src/sqwl/cms/Content.scala --- a/example/src/sqwl/cms/Content.scala Tue Dec 11 15:03:57 2018 +0100 +++ b/example/src/sqwl/cms/Content.scala Tue Dec 11 21:33:20 2018 +0100 @@ -6,8 +6,8 @@ import akka.stream.scaladsl.FileIO import enumeratum.EnumEntry.Hyphencase import enumeratum._ - import scala.io.Source +import scalatags.Text.all._ sealed abstract class Category(val name: String) extends EnumEntry with iCategory with Hyphencase { @@ -41,12 +41,16 @@ sealed abstract class Article(val title: String, val category: Option[iCategory], - val tags: Seq[iTag], + val tags: Seq[iTag] = Seq(), + val tex: Option[SeqFrag[Frag]] = None +) extends EnumEntry with ScalatexOrFsArticle with Hyphencase { -) extends EnumEntry with FsArticle with Hyphencase { + override protected def content: Either[Path, SeqFrag[Frag]] = tex match { + case Some(v) => Right(v) + case _ => + Left(Paths.get(s"example/content/${entryName}.html")) + } - override protected def contentPath: Path = Paths.get( - s"example/content/${entryName}.html") override def assets: Path = Paths.get(s"example/content/${entryName}") override def pathSegment: String = entryName } @@ -57,11 +61,14 @@ val values = findValues case object A1 extends Article("Article 1", Some(Cat1), Seq(Tag1, Tag2, Tag3)) - case object A2 extends Article("Article 2", Some(Cat1), Seq()) + case object A2 extends Article("Article 2", Some(Cat1)) case object A3 extends Article("Article 3", Some(Cat1), Seq(Tag4, Tag5)) case object A4 extends Article("Article 4", Some(Cat2), Seq(Tag4)) case object A5 extends Article("Article 5", Some(Cat2), Seq(Tag5)) + import scalatex._ + case object A6 extends Article("Article 6", Some(Cat1), + Seq(Tag1), Some(twf("example/content/a6.scalatex"))) } object Content extends iContent {