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