def clean()

in common/app/views/support/HtmlCleaner.scala [115:180]


  def clean(body: Document): Document = {
    for {
      figure <- body.getElementsByTag("figure").asScala
      image <- figure.getElementsByTag("img").asScala.headOption
      if !(figure.hasClass("element-comment") ||
        figure.hasClass("element-witness") ||
        figure.hasClass("element-atom"))
      container <- findContainerFromId(figure.attr("data-media-id"), image.attr("src"))
      image <- container.images.largestImage
    } {
      val hinting = findBreakpointWidths(figure)

      val relation = {
        if (article.isLiveBlog) LiveBlogMedia
        else if (article.isTheMinute) MinuteMedia
        else if (article.isImmersive) ImmersiveMedia
        else BodyMedia
      }

      val widths = ContentWidths.getWidthsFromContentElement(hinting, relation)

      val orientationClass = image.orientation match {
        case Portrait => Some("img--portrait")
        case _        => Some("img--landscape")
      }

      val smallImageClass = hinting match {
        case Thumbnail               => None
        case _ if image.width <= 220 => Some("img--inline")
        case _                       => None
      }

      val inlineClass =
        if (article.isTheMinute && !figure.hasClass("element--thumbnail")) Some("element--inline") else None

      val figureClasses = List(orientationClass, smallImageClass, hinting.className, inlineClass).flatten.mkString(" ")

      // lightbox uses the images in the order mentioned in the header array
      val lightboxInfo: Option[(Int, ImageAsset)] = for {
        index <- Some(article.lightbox.lightboxImages.indexOf(container)).flatMap(index =>
          if (index == -1) None else Some(index + 1),
        )
        crop <- container.images.largestEditorialCrop
        if !article.isLiveBlog
      } yield (index, crop)

      val html = views.html.fragments
        .imageFigure(
          container.images,
          lightboxIndex = lightboxInfo.map(_._1),
          widthsByBreakpoint = widths,
          image_figureClasses = Some(image, figureClasses),
          shareInfo = lightboxInfo.map { case (index, crop) =>
            (
              article.sharelinks.elementShares(s"img-$index", crop.url),
              article.metadata.contentType.getOrElse(DotcomContentType.Unknown),
            )
          },
        )
        .toString()

      figure.replaceWith(Jsoup.parseBodyFragment(html).body().child(0))
    }

    body
  }