applications/app/views/fragments/galleryBody.scala.html (122 lines of code) (raw):
@import common.LinkTo
@import layout.ContentWidths.GalleryMedia
@import model.{GalleryPage, ImageAsset, ImageElement}
@import views.support.Commercial.isPaidContent
@import views.support.TrailCssClasses.toneClass
@import views.support.`package`.Seq2zipWithRowInfo
@import views.support.{RenderClasses, RowInfo}
@import views.GalleryCaptionCleaners
@import views.support.AffiliateLinksCleaner
@import conf.switches.Switches
@import conf.Configuration
@import model.DotcomContentType
@(page: GalleryPage)(implicit request: RequestHeader, context: model.ApplicationContext)
<div class="gallery__main-content">
@* Manually placing tonal--tone-media as temporary fix to ensute special report tones have it *@
<article id="article" class="@RenderClasses(
Map("content--paidgallery" -> isPaidContent(page)),
"content", "content--media", "content--gallery", s"content--pillar-${page.metadata.pillar.nameOrDefault}", "tonal", "content--immersive", "tonal--tone-media", s"tonal--${toneClass(page.item)}"
)"
itemscope itemtype="@page.item.metadata.schemaType" role="main">
@fragments.galleryHeader(
page,
page.item.lightbox.containsAffiliateableLinks && AffiliateLinksCleaner.shouldAddAffiliateLinks(
switchedOn = Switches.AffiliateLinks.isSwitchedOn,
showAffiliateLinks = page.gallery.content.fields.showAffiliateLinks,
alwaysOffTags = Configuration.affiliateLinks.alwaysOffTags,
tagPaths = page.gallery.content.tags.tags.map(_.id),
)
)
<div class="@RenderClasses(
"l-side-margins", "l-side-margins--media", "l-side-margins--gallery"
)">
<div class="content__main tonal__main tonal__main--@toneClass(page.item)">
<div class="gs-container gallery__divider">
<div class="content__main-column content__main-column--gallery">
<ul class="gallery">
@page.item.lightbox.largestCrops.zipWithRowInfo.map { case (image, row) =>
@galleryItem(4, image, row, page.item.lightbox.imageContainer(row.rowNum - 1))
}
</ul>
@fragments.submeta(page.item)
</div>
</div>
</div>
</div>
</article>
@if(page.item.content.showInRelated && !isPaidContent(page)) {
<div class="@RenderClasses(
Map("l-side-margins--paidgallery" -> isPaidContent(page)),
"l-side-margins", "l-side-margins--media", "l-side-margins--gallery"
)">
<div class="gallery__most-popular facia-container fc-container fc-container--media hide-on-childrens-books-site js-gallery-most-popular tonal--@toneClass(page.item)">
<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{/inpictures/all}" data-link-name="Most viewed galleries">More galleries</a>
</h2>
</div>
</div>
</div>
</div>
}
</div>
<div class="l-side-margins">
@fragments.contentFooter(page.item, page.related, "media", isPaidContent(page))
</div>
@galleryItem(adInterval: Int, image: ImageAsset, rowInfo: RowInfo, imageElement: ImageElement) = {
<li id="img-@rowInfo.rowNum" class="gallery__item js-gallery-item" data-link-name="Gallery item | @rowInfo.rowNum">
<figure itemscope itemtype="http://schema.org/ImageObject">
<div class="gallery__figcaption">
@image.caption.map { caption =>
<div class="gallery__caption" itemprop="caption">@GalleryCaptionCleaners(page, caption, rowInfo.rowNum == 1)</div>
}
@if(image.displayCredit) {
@image.credit.map { credit =>
<p class="gallery__credit" itemprop="author">@credit</p>
}
}
@fragments.share.blockLevelSharing(
"img-" + rowInfo.rowNum.toString,
page.item.sharelinks.elementShares("img-" + rowInfo.rowNum.toString, image.path),
page.item.metadata.contentType.getOrElse(DotcomContentType.Unknown),
isNewGallery = true
)
</div>
@defining(
if(image.width >= image.height) {"--landscape"} else {"--portrait"}
) { orientation =>
<div class="gallery__img-container gallery__img-container@orientation"
@*
* This ensures that the image height never goes above 96vh
*@
style="max-width: calc(@image.ratioDouble * 96vh)">
@fragments.image(
imageElement.images,
Seq("gallery__img", s"gallery__img$orientation"),
GalleryMedia.inline,
image.altText.getOrElse("")
)
<a href="@LinkTo{@page.item.metadata.url#img-@rowInfo.rowNum}"
class="js-gallerythumbs gallery__fullscreen-container"
tabindex="0"
data-link-name="Launch Gallery Lightbox" data-is-ajax
aria-label="Expand image to fullscreen"
>
@fragments.inlineSvg("expand-image", "icon", List("centered-icon", "rounded-icon", "gallery__fullscreen", "modern-visible", "gallery-expand"))
</a>
</div>
}
</figure>
</li>
@if(!page.item.content.shouldHideAdverts && rowInfo.rowNum % adInterval == 0) {
<li class="gallery__item gallery__item--advert">
<div class="gallery__img-container">
@defining(rowInfo.rowNum / adInterval) { inlineId =>
@gallerySlot(inlineId)
@gallerySlot(inlineId - 1, isMobile = true)
}
</div>
</li>
}
}