in common/app/model/content.scala [428:488]
def make(apiContent: contentapi.Content): Content = {
val fields = Fields.make(apiContent)
val metadata = MetaData.make(fields, apiContent)
val elements = Elements.make(apiContent)
val tags = Tags.make(apiContent)
val commercial = model.Commercial.make(tags, apiContent)
val trail = Trail.make(tags, fields, commercial, elements, metadata, apiContent)
val sharelinks = ShareLinks(tags, fields, metadata)
val atoms = Atoms.make(apiContent, sharelinks.pageShares)
val apifields = apiContent.fields
val references: Map[String, String] =
apiContent.references.map(ref => (ref.`type`, Reference.split(ref.id)._2)).toMap
val cardStyle: fapiutils.CardStyle = CardStylePicker(apiContent)
val schemaOrg = apiContent.schemaOrg
Content(
trail = trail,
metadata = metadata,
tags = tags,
commercial = commercial,
elements = elements,
fields = fields,
sharelinks = sharelinks,
atoms = atoms,
publication = apifields.flatMap(_.publication).getOrElse(""),
internalPageCode = apifields.flatMap(_.internalPageCode).map(_.toString).getOrElse(""),
contributorBio = apifields.flatMap(_.contributorBio),
starRating = apifields.flatMap(_.starRating),
allowUserGeneratedContent = apifields.flatMap(_.allowUgc).getOrElse(false),
isExpired = apiContent.isExpired.getOrElse(false),
productionOffice = apifields.flatMap(_.productionOffice.map(_.name)),
tweets = apiContent.elements.getOrElse(Nil).filter(_.`type`.name == "Tweet").toSeq.map { tweet =>
val images = tweet.assets
.filter(_.`type`.name == "Image")
.flatMap(asset => asset.typeData.flatMap(_.secureFile).orElse(asset.file))
.toSeq
Tweet(tweet.id, images)
},
showInRelated = apifields.flatMap(_.showInRelatedContent).getOrElse(false),
cardStyle = CardStyle.make(cardStyle),
shouldHideAdverts = apifields.flatMap(_.shouldHideAdverts).getOrElse(false),
witnessAssignment = references.get("witness-assignment"),
isbn = references.get("isbn"),
imdb = references.get("imdb"),
paFootballTeams = apiContent.references
.filter(ref => ref.id.contains("pa-football-team"))
.map(ref => ref.id.split("/").last)
.toSeq
.distinct,
javascriptReferences = apiContent.references.toSeq.map(ref => Reference.toJavaScript(ref.id)),
wordCount = Jsoup.clean(fields.body, Safelist.none()).split("\\s+").length,
showByline =
fapiutils.ResolvedMetaData.fromContentAndTrailMetaData(apiContent, TrailMetaData.empty, cardStyle).showByline,
rawOpenGraphImage = FacebookShareUseTrailPicFirstSwitch.isSwitchedOn
.toOption(trail.trailPicture.flatMap(_.largestImage))
.flatten
.orElse(elements.mainPicture.flatMap(_.images.largestImage))
.orElse(trail.trailPicture.flatMap(_.largestImage)),
schemaOrg = schemaOrg,
)
}