app/models/BakeLog.scala (24 lines of code) (raw):

package models import org.joda.time.DateTime import play.twirl.api.Html case class MessagePart(text: String, colour: String) { def toHtml = { val htmlColour = MessagePart.HtmlColours.getOrElse(colour, colour) s"""<span style="color: $htmlColour">${text.replace("\n", "<br>")}</span>""" } } object MessagePart { val defaultColour = "#DCDCDC" /* iTerm2's default theme */ val HtmlColours = Map( "yellow" -> "#ECE100" /* iTerm2's default theme */ ) } case class BakeLog( bakeId: BakeId, logNumber: Int, timestamp: DateTime, logLevel: String, messageParts: List[MessagePart] ) { def messageHtml = Html(messageParts.map(_.toHtml).mkString) }