def make()

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,
    )
  }