article/app/views/package.scala (86 lines of code) (raw):
package views
import common.Edition
import layout.ContentWidths
import layout.ContentWidths.{Inline, LiveBlogMedia, MainMedia, Showcase}
import model.content.MediaWrapper
import model.{ApplicationContext, Article}
import play.api.mvc.RequestHeader
import play.twirl.api.Html
import views.support._
import views.support.cleaner._
object MainMediaWidths {
def apply(article: Article): layout.WidthsByBreakpoint = {
if (article.elements.hasShowcaseMainElement && article.tags.isFeature) {
MainMedia.featureShowcase
} else {
val hinting = if (article.elements.hasShowcaseMainElement) { Showcase }
else { Inline }
val relation = if (article.isLiveBlog) { LiveBlogMedia }
else { MainMedia }
ContentWidths.getWidthsFromContentElement(hinting, relation)
}
}
}
object MainCleaner {
def apply(article: Article)(implicit request: RequestHeader, context: ApplicationContext): Html = {
implicit val edition: Edition = Edition(request)
withJsoup(BulletCleaner(article.fields.main))(
VideoEmbedCleaner(article),
PictureCleaner(article),
MainFigCaptionCleaner,
AtomsCleaner(
atoms = article.content.atoms,
mediaWrapper = Some(MediaWrapper.MainMedia),
posterImageOverride = article.elements.thumbnail.map(_.images),
),
)
}
}
object BodyProcessor {
def cleaners(article: Article)(implicit request: RequestHeader, context: ApplicationContext): List[HtmlCleaner] = {
implicit val edition: Edition = Edition(request)
def ListIf[T](condition: Boolean)(value: => T): List[T] = if (condition) List(value) else Nil
List(
InBodyElementCleaner,
AtomsCleaner(atoms = article.content.atoms),
InBodyLinkCleaner("in body link"),
BlockNumberCleaner,
new TweetCleaner(article.content),
WitnessCleaner,
TableEmbedComplimentaryToP,
R2VideoCleaner,
PictureCleaner(article),
DropCaps(article.tags.isComment || article.tags.isFeature, article.isImmersive),
TagLinker(article),
ImmersiveHeaders(article.isImmersive),
FigCaptionCleaner,
RichLinkCleaner(),
MembershipEventCleaner,
BlockquoteCleaner,
PullquoteCleaner,
CmpParamCleaner,
PhotoEssayImages(article.isPhotoEssay),
PhotoEssayQuotes(article.isPhotoEssay),
PhotoEssayHalfWidth(article.isPhotoEssay),
PhotoEssayBlockQuote(article.isPhotoEssay),
PhotoEssayCaptions(article.isPhotoEssay),
ImmersiveLinks(article.isImmersive),
NumberedListFurniture(article.isNumberedList),
TimestampCleaner(article),
MinuteCleaner(article),
GarnettQuoteCleaner,
AffiliateLinksCleaner(
pageUrl = request.uri,
showAffiliateLinks = article.content.fields.showAffiliateLinks,
tags = article.content.tags.tags.map(_.id),
),
) ++
ListIf(true)(VideoEmbedCleaner(article))
}
def apply(article: Article)(implicit request: RequestHeader, context: ApplicationContext): Html = {
withJsoup(BulletCleaner(article.fields.body))(cleaners(article): _*)
}
def apply(article: Article, html: String)(implicit request: RequestHeader, context: ApplicationContext): Html = {
withJsoup(BulletCleaner(html))(cleaners(article): _*)
}
}