def make()

in common/app/model/liveblog/BlockElement.scala [100:186]


  def make(element: ApiBlockElement): Option[BlockElement] = {

    element.`type` match {

      case Text => Some(TextBlockElement(element.textTypeData.flatMap(_.html)))

      case Tweet => Some(TweetBlockElement(element.tweetTypeData.flatMap(_.html)))

      case RichLink =>
        Some(
          RichLinkBlockElement(
            element.richLinkTypeData.flatMap(_.originalUrl),
            element.richLinkTypeData.flatMap(_.linkText),
            element.richLinkTypeData.flatMap(_.linkPrefix),
            element.richLinkTypeData.flatMap(_.sponsorship).map(Sponsorship(_)),
          ),
        )

      case Image =>
        Some(
          ImageBlockElement(
            ImageMedia(element.assets.zipWithIndex.map { case (a, i) => ImageAsset.make(a, i) }.toSeq),
            imageDataFor(element),
            element.imageTypeData.flatMap(_.displayCredit),
          ),
        )

      case Audio => Some(AudioBlockElement(element, element.assets.map(asset => AudioAsset.make(asset)).toSeq))

      case Video =>
        if (element.assets.nonEmpty) {
          Some(
            GuVideoBlockElement(
              element.assets.map(VideoAsset.make).toSeq,
              ImageMedia(
                element.assets
                  .filter(_.mimeType.exists(_.startsWith("image")))
                  .zipWithIndex
                  .map { case (a, i) =>
                    ImageAsset.make(a, i)
                  }
                  .toSeq,
              ),
              videoDataFor(element),
            ),
          )
        } else Some(VideoBlockElement(videoDataFor(element)))

      case Membership =>
        element.membershipTypeData.map(m =>
          MembershipBlockElement(
            m.originalUrl,
            m.linkText,
            m.linkPrefix,
            m.title,
            m.venue,
            m.location,
            m.identifier,
            m.image,
            m.price,
          ),
        )

      case Embed => element.embedTypeData.map(d => EmbedBlockElement(d.html, d.safeEmbedCode, d.alt, d.caption))

      case Contentatom => element.contentAtomTypeData.map(d => ContentAtomBlockElement(d.atomId, d.atomType, d.role))

      case Pullquote       => element.pullquoteTypeData.map(d => PullquoteBlockElement(d.html))
      case Interactive     => element.interactiveTypeData.map(d => InteractiveBlockElement(d.html, d.scriptUrl))
      case Comment         => element.commentTypeData.map(d => CommentBlockElement(d.html))
      case Table           => element.tableTypeData.map(d => TableBlockElement(d.html))
      case Witness         => element.witnessTypeData.map(d => WitnessBlockElement(d.html))
      case Document        => element.documentTypeData.map(d => DocumentBlockElement(d.html))
      case Instagram       => element.instagramTypeData.map(d => InstagramBlockElement(d.html))
      case Vine            => element.vineTypeData.map(d => VineBlockElement(d.html))
      case ElementType.Map => element.mapTypeData.map(d => MapBlockElement(d.html))
      case Code            => Some(CodeBlockElement(None))
      case Form            => Some(FormBlockElement(None))

      case EnumUnknownElementType(f) => Some(UnknownBlockElement(None))
      case Callout                   => Some(UnsupportedBlockElement(None))
      case Cartoon                   => Some(UnsupportedBlockElement(None))
      case Recipe                    => Some(UnsupportedBlockElement(None))
      case ElementType.List          => Some(UnsupportedBlockElement(None))
      case Timeline                  => Some(UnsupportedBlockElement(None))
    }
  }