applications/app/views/fragments/mediaBody.scala.html (148 lines of code) (raw):

@import common.LinkTo @import model.{MediaPage, Video, VideoPlayer} @import views.support.Commercial.{isAdFree, isPaidContent} @import views.support.TrailCssClasses.toneClass @import views.support.{RenderClasses, SeoOptimisedContentImage, StripHtmlTags, Video640} @(page: MediaPage, displayCaption: Boolean)(implicit request: RequestHeader, context: model.ApplicationContext) @defining(page.media, "video") { case (media, mediaType) => @defining(isPaidContent(page), isAdFree(request)) { case (isPaidContent, isAdFree) => <div class="l-side-margins @if(!isPaidContent) {l-side-margins--media} @if(isPaidContent) {l-side-margins--paidfor}"> <article id="article" class="@RenderClasses( Map( "content--has-body" -> media.fields.body.nonEmpty, "content--paid-content paid-content" -> isPaidContent, "content--pillar-special-report" -> (toneClass(media) == "tone-special-report"), "vertical-video" -> page.media.tags.isVerticalVideo ), "content", "content--media", s"content--pillar-${media.metadata.pillar.nameOrDefault}", s"content--media--$mediaType", "tonal", "tonal--tone-media", s"tonal--${toneClass(media)}" )" itemscope itemtype="@media.metadata.schemaType" role="main"> @if(!page.metadata.isFront && page.metadata.hasSurveyAd(request)) { @fragments.commercial.survey() } @if(isPaidContent) { @fragments.guBand() } @fragments.headTonal(media, page) <div class="content__main tonal__main tonal__main--@toneClass(media)"> <div class="gs-container"> <div class="content__main-column content__main-column--media content__main-column--@mediaType"> <div class="media-body"> <div class="media-primary player"> @media match { case video: Video => { <figure data-component="main video"> <meta itemprop="name" content="@Html(video.trail.headline)"/> <meta itemprop="headline" content="@Html(video.trail.headline)"/> <meta itemprop="url" content="@LinkTo(video.metadata.url)"/> @video.fields.trailText.map { t => <meta itemprop="description" content="@StripHtmlTags(t)" /> <meta itemprop="about" content="@StripHtmlTags(t)" /> } <meta itemprop="datePublished" content="@video.trail.webPublicationDate.toString("yyyy-MM-dd")" /> <meta itemprop="name" content="@video.metadata.webTitle" /> <meta itemprop="uploadDate" content="@video.trail.webPublicationDate.toString("yyyy-MM-dd")" /> @video.mediaAtom.map { ma => @ma.duration.map { duration => <meta itemprop="duration" content="@ma.isoDuration" /> } } @video.elements.mainVideo.map { mv => <meta itemprop="duration" content="@mv.videos.ISOduration" /> <meta itemprop="height" content="@mv.videos.height" /> <meta itemprop="width" content="@mv.videos.width" /> } <meta itemprop="requiresSubscription" content="false" /> @video.sixteenByNineMetaImage.map{ i => <meta itemprop="image" content="@i" /> } @defining(video.elements.thumbnail.map(_.images) orElse video.mediaAtom.flatMap(_.posterImage)) {bestThumbnail => @bestThumbnail.map { thumbnail => <meta itemprop="thumbnail" content="@SeoOptimisedContentImage.bestSrcFor(thumbnail)" /> <meta itemprop="thumbnailUrl" content="@SeoOptimisedContentImage.bestSrcFor(thumbnail)" /> } } @video.mediaAtom.map { mediaAtom => @fragments.atoms.media(mediaAtom, displayCaption = displayCaption, mediaWrapper = None, posterImageOverride = None, isVerticalVideo=page.media.tags.isVerticalVideo) } @video.elements.mainVideo.map { videoElement => @fragments.media.video( VideoPlayer( videoElement, Video640, video.trail.headline, autoPlay = true, showControlsAtStart = true, path = Some(video.metadata.id), overrideIsRatioHd = None ), enhance = true ) } </figure> } case _ => {} } </div> @if(!page.media.tags.isVerticalVideo) { <div class="content__main-column__body" data-component="body"> @media match { case v: Video => { <div class="tonal__standfirst"> @fragments.standfirst(v) </div> } case _ => {} } @fragments.contentMeta(media, page) @fragments.submeta(media) </div> } else { @media match { case v: Video => { <div class="content__main-column__body" data-component="body"> <div class="tonal__standfirst"> @fragments.standfirst(v) </div> </div> } case _ => {} } @fragments.contentMeta(media, page) @fragments.submeta(media) } </div> </div> @media match { case v: Video if !isPaidContent => { <div class="content__secondary-column content__secondary-column--media content__secondary-column--video hide-on-childrens-books-site" aria-hidden="true"> <div class="js-video-components-container"></div> </div> } case _ => {} } </div> </div> </article> @if(mediaType != "video" && mediaType != "audio" && isPaidContent) { <div class="fc-container fc-container--media"> <div class="js-media-popular tonal--@toneClass(media)"> <div class="fc-container fc-container--popular"> <div class="fc-container__inner"> <div class="fc-container__header"> <h2 class="fc-container__header__title"> <a class="most-viewed-no-js tone-colour" href="@LinkTo {/@mediaType/most-viewed}" data-link-name="Most viewed @mediaType"> More @mediaType</a> </h2> </div> </div> </div> </div> </div> } </div> <div class="l-side-margins"> @fragments.contentFooter(media, page.related, "media", isPaidContent) </div> } }