122 lines
3.9 KiB
HTML
122 lines
3.9 KiB
HTML
{{ if $.Param "enablePhotoSwipe" }}
|
|
|
|
<!-- Root element of PhotoSwipe. Must have class pswp. -->
|
|
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
|
|
|
|
<!-- Background of PhotoSwipe.
|
|
It's a separate element as animating opacity is faster than rgba(). -->
|
|
<div class="pswp__bg"></div>
|
|
|
|
<!-- Slides wrapper with overflow:hidden. -->
|
|
<div class="pswp__scroll-wrap">
|
|
|
|
<!-- Container that holds slides.
|
|
PhotoSwipe keeps only 3 of them in the DOM to save memory.
|
|
Don't modify these 3 pswp__item elements, data is added later on. -->
|
|
<div class="pswp__container">
|
|
<div class="pswp__item"></div>
|
|
<div class="pswp__item"></div>
|
|
<div class="pswp__item"></div>
|
|
</div>
|
|
|
|
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
|
|
<div class="pswp__ui pswp__ui--hidden">
|
|
|
|
<div class="pswp__top-bar">
|
|
|
|
<!-- Controls are self-explanatory. Order can be changed. -->
|
|
|
|
<div class="pswp__counter"></div>
|
|
|
|
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
|
|
|
|
<button class="pswp__button pswp__button--share" title="Share"></button>
|
|
|
|
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
|
|
|
|
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
|
|
|
|
<!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
|
|
<!-- element will get class pswp__preloader--active when preloader is running -->
|
|
<div class="pswp__preloader">
|
|
<div class="pswp__preloader__icn">
|
|
<div class="pswp__preloader__cut">
|
|
<div class="pswp__preloader__donut"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
|
|
<div class="pswp__share-tooltip"></div>
|
|
</div>
|
|
|
|
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
|
|
</button>
|
|
|
|
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
|
|
</button>
|
|
|
|
<div class="pswp__caption">
|
|
<div class="pswp__caption__center"></div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{{ $photoSwipe := resources.Get `js/photoswipe.min.js` | resources.Fingerprint }}
|
|
<script defer src="{{ $photoSwipe.RelPermalink }}"></script>
|
|
{{ $photoSwipeUi := resources.Get `js/photoswipe-ui-default.min.js` | resources.Fingerprint }}
|
|
<script defer src="{{ $photoSwipeUi.RelPermalink }}"></script>
|
|
{{ $photoSwipeStyle := resources.Get "css/photoswipe/photoswipe.css" | resources.Fingerprint }}
|
|
<script defer src="{{ $photoSwipeStyle.RelPermalink }}"></script>
|
|
{{ $photoSwipeSkin := resources.Get "css/photoswipe/custom-skin.css" | resources.Fingerprint }}
|
|
<script defer src="{{ $photoSwipeSkin.RelPermalink }}"></script>
|
|
|
|
<script defer>
|
|
var pswpElement = $('.pswp')[0];
|
|
var imgElements = $('.single__contents').find('img');
|
|
var items = [];
|
|
|
|
imgElements.each(function (i, v) {
|
|
$(this).click(function (e) {
|
|
initGallery(i);
|
|
});
|
|
$(this).css('cursor', 'pointer');
|
|
items.push({
|
|
src: v.src,
|
|
w: 0,
|
|
h: 0,
|
|
title: filename(v.src),
|
|
});
|
|
});
|
|
|
|
function filename(str) {
|
|
var s = str.replace(/\\/g, '/');
|
|
s = s.substring(s.lastIndexOf('/') + 1);
|
|
return str ? s.replace(/[?#].+$/, '') : s.split('.')[0];
|
|
}
|
|
|
|
function initGallery(index) {
|
|
var options = { index: index };
|
|
var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
|
|
gallery.listen('imageLoadComplete', function (index, item) {
|
|
if (item.h < 1 || item.w < 1) {
|
|
let img = new Image();
|
|
img.onload = () => {
|
|
item.w = img.width;
|
|
item.h = img.height;
|
|
gallery.invalidateCurrItems();
|
|
gallery.updateSize(true);
|
|
}
|
|
img.src = item.src;
|
|
}
|
|
})
|
|
gallery.init();
|
|
}
|
|
</script>
|
|
|
|
{{ end }} |