in common/app/model/dotcomrendering/DotcomRenderingDataModel.scala [367:432]
def forLiveblog(
page: LiveBlogPage,
blocks: APIBlocks,
request: RequestHeader,
pageType: PageType,
filterKeyEvents: Boolean,
forceLive: Boolean,
newsletter: Option[NewsletterData],
): DotcomRenderingDataModel = {
val pagination = page.currentPage.pagination.map(paginationInfo => {
Pagination(
currentPage = page.currentPage.currentPage.pageNumber,
totalPages = paginationInfo.numberOfPages,
newest = paginationInfo.newest.map(_.suffix),
newer = paginationInfo.newer.map(_.suffix),
oldest = paginationInfo.oldest.map(_.suffix),
older = paginationInfo.older.map(_.suffix),
)
})
val bodyBlocks = blocksForLiveblogPage(page, blocks, filterKeyEvents).map(ensureSummaryTitle)
val allTimelineBlocks = blocks.body match {
case Some(allBlocks) if allBlocks.nonEmpty =>
allBlocks.filter(block => block.attributes.keyEvent.contains(true) || block.attributes.summary.contains(true))
case _ => keyEventsFallback(blocks)
}
val timelineBlocks =
orderBlocks(allTimelineBlocks.toSeq).map(ensureSummaryTitle)
val baseUrl = if (request.isAmp) Configuration.amp.baseUrl else Configuration.dotcom.baseUrl
val linkedData = LinkedData.forLiveblog(
liveblog = page,
blocks = bodyBlocks,
baseURL = baseUrl,
fallbackLogo = Configuration.images.fallbackLogo,
)
val pinnedPost =
blocks.requestedBodyBlocks
.flatMap(_.get("body:pinned"))
.getOrElse(blocks.body.fold(Seq.empty[APIBlock])(_.filter(_.attributes.pinned.contains(true)).toSeq))
.headOption
.map(ensureSummaryTitle)
val mostRecentBlockId = getMostRecentBlockId(blocks)
apply(
page = page,
request = request,
pagination = pagination,
linkedData = linkedData,
mainBlock = blocks.main,
bodyBlocks = bodyBlocks,
pageType = pageType,
hasStoryPackage = page.related.hasStoryPackage,
storyPackage = getStoryPackage(page.related.faciaItems, request), // todo
pinnedPost = pinnedPost,
keyEvents = timelineBlocks,
filterKeyEvents = filterKeyEvents,
mostRecentBlockId = mostRecentBlockId,
forceLive = forceLive,
newsletter = newsletter,
)
}