-
Notifications
You must be signed in to change notification settings - Fork 3
/
Application.scala
84 lines (67 loc) · 2.31 KB
/
Application.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package controllers
import play.api._
import play.api.mvc._
import org.joda.time.DateTime
import lib.{HitReport, Backend}
import com.gu.openplatform.contentapi.model.{MediaAsset, Tag, Content => ApiContent}
object Application extends Controller {
def index = Action { Ok(views.html.index()) }
def top10 = Action { Ok(views.html.top10(Backend.currentLists.all)) }
def top10chart = Action { Ok(views.html.snippets.top10chart(Backend.currentLists.all)) }
def top20 = Action { Ok(views.html.top20(Backend.currentLists))}
def top20chart = Action { Ok(views.html.snippets.top20chart(Backend.currentLists)) }
def details = Action { Ok(views.html.details(Backend.currentLists.everything)) }
def search = Action { Ok(views.html.search()) }
private def publishedContent = {
def altTextOfMainImageFor(c: ApiContent): Option[String] = {
val mainPic = c.mediaAssets.find(m => m.rel == "body" && m.index == 1) orElse
c.mediaAssets.find(m => m.rel == "gallery" && m.index == 1)
mainPic flatMap { m => m.fields.getOrElse(Map()).get("altText") }
}
val currentHits = Api.fullData
val ukFrontLinks = Backend.ukFrontLinkTracker.links()
val usFrontLinks = Backend.usFrontLinkTracker.links()
Backend.publishedContent.map { c =>
PublishedContent(
c.webPublicationDate, c.webUrl, c.webTitle,
currentHits.get(c.webUrl).map(_.tidyHitsPerSec).getOrElse("0"),
c.sectionName.getOrElse(""),
c.safeFields.get("trailText"),
c.tags,
currentHits.get(c.webUrl),
altTextOfMainImageFor(c),
c.isLead.getOrElse(false),
ukFrontLinks.contains(c.id),
usFrontLinks.contains(c.id)
)
}
}
def content = Action {
Ok(views.html.content(publishedContent))
}
def contentChart = Action {
Ok(views.html.snippets.contentChart(publishedContent))
}
}
case class PublishedContent(
publicationDate: DateTime,
url: String,
title: String,
hitsPerSec: String,
section: String,
trailText: Option[String],
tags: List[Tag],
hitReport: Option[HitReport],
altText: Option[String],
isLead: Boolean,
onUkFront: Boolean,
onUsFront: Boolean
) {
lazy val cpsCssClass = hitsPerSec match {
case "0" => "zero"
case s if s.startsWith("0") => ""
case "<0.1" => ""
case "trace" => ""
case _ => "high"
}
}