aboutsummaryrefslogtreecommitdiff
path: root/shared/Templates.scala
diff options
context:
space:
mode:
Diffstat (limited to 'shared/Templates.scala')
-rw-r--r--shared/Templates.scala54
1 files changed, 54 insertions, 0 deletions
diff --git a/shared/Templates.scala b/shared/Templates.scala
new file mode 100644
index 0000000..10ee116
--- /dev/null
+++ b/shared/Templates.scala
@@ -0,0 +1,54 @@
+package triad
+
+class Templates[Builder, Output <: FragT, FragT](
+ val bundle: scalatags.generic.Bundle[Builder, Output, FragT]) {
+ import bundle.all._
+
+ val colorStyles = List(
+ "bg-primary",
+ "bg-secondary",
+ "bg-success",
+ "bg-danger",
+ "bg-warning",
+ "bg-info",
+ "bg-dark"
+ )
+ // pick a "random" style by computing a hash of arbitrary data
+ def dataStyle(data: String) = {
+ val dataHash = data.foldLeft(7) {
+ case (hash, char) =>
+ (hash * 31 + char.toInt)
+ }
+ colorStyles(
+ ((dataHash % colorStyles.length) + colorStyles.length) % colorStyles.length)
+ }
+
+ def message(msg: Message) = {
+ val tags = msg.hashTags.map(
+ hashTag =>
+ span(`class` := "badge badge-light float-right ml-1")(
+ hashTag
+ ))
+ div(`class` := "col-xs-12 col-sm-6 col-md-3 col-lg-2")(
+ div(`class` := s"card text-white mb-3 ${dataStyle(msg.author)}")(
+ div(`class` := "card-header")(
+ msg.author,
+ tags
+ ),
+ div(`class` := "card-body")(
+ div(`class` := "card-text")(
+ msg.content
+ )
+ )
+ )
+ )
+ }
+
+ def conversation(messages: Seq[Message]): Tag =
+ div(`class` := "container-fluid")(
+ div(id := "conversation", `class` := "row")(
+ for (msg <- messages.sortBy(_.timestamp)) yield message(msg)
+ )
+ )
+
+}