templates/web/gallery-detail.html.twig line 1

Open in your IDE?
  1. {% extends 'web/base.html.twig' %}
  2. {% block title %}{{ album.title }} - Galerija - 2sweet.eu{% endblock %}
  3. {% block body %}
  4.     {{ include('web/components/inner/breadcrumb.html.twig') }}
  5.     <div class="bgWhite">
  6.         <div class="container">
  7.             <div class="emptySpace-xs60 emptySpace110"></div>
  8.             <div class="row">
  9.                 <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
  10.                     <div class="big subTitleShortcode" style="text-align:center;">
  11.                         <h2 class="h2">{{ album.title }}</h2>
  12.                         {% if album.description %}
  13.                             <div class="emptySpace20"></div>
  14.                             <p>{{ album.description }}</p>
  15.                         {% endif %}
  16.                     </div>
  17.                 </div>
  18.             </div>
  19.             <div class="emptySpace-xs30 emptySpace60"></div>
  20.             <div class="row" id="gallery-grid">
  21.                 {% for photo in album.photos %}
  22.                 <div class="col-xs-6 col-sm-4 col-md-3" style="margin-bottom:15px;">
  23.                     <a href="{{ asset('uploads/' ~ photo.image) }}" class="gallery-lightbox" data-group="album">
  24.                         <img src="{{ asset('uploads/' ~ photo.image) }}"
  25.                              class="img-responsive"
  26.                              style="width:100%; height:200px; object-fit:cover; border-radius:4px; cursor:pointer; transition: opacity 0.2s;"
  27.                              onmouseover="this.style.opacity='0.85'"
  28.                              onmouseout="this.style.opacity='1'"
  29.                              alt="{{ album.title }}">
  30.                     </a>
  31.                 </div>
  32.                 {% else %}
  33.                 <div class="col-12 text-center">
  34.                     <p>Nema fotografija u ovom albumu.</p>
  35.                 </div>
  36.                 {% endfor %}
  37.             </div>
  38.             <div class="emptySpace30"></div>
  39.             <div class="row">
  40.                 <div class="col-sm-12 text-center">
  41.                     <a href="{{ path('web_gallery') }}" class="btn" style="background:#c9a96e; color:#fff; border-radius:2px; padding:10px 30px; text-transform:uppercase; letter-spacing:1px; font-size:13px;">
  42.                         &larr; Natrag na galeriju
  43.                     </a>
  44.                 </div>
  45.             </div>
  46.             <div class="emptySpace-xs60 emptySpace110"></div>
  47.         </div>
  48.     </div>
  49.     <!-- Lightbox overlay -->
  50.     <div id="lightbox-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.92); z-index:9999; cursor:pointer;" onclick="closeLightbox()">
  51.         <div style="position:absolute; top:20px; right:30px; color:#fff; font-size:32px; cursor:pointer;" onclick="closeLightbox()">&times;</div>
  52.         <div style="display:flex; align-items:center; justify-content:center; height:100%;">
  53.             <div onclick="event.stopPropagation();" style="position:relative; max-width:90vw; max-height:90vh; display:flex; align-items:center;">
  54.                 <span id="lb-prev" onclick="lbNav(-1)" style="position:absolute; left:-50px; color:#fff; font-size:40px; cursor:pointer; user-select:none;">&#8249;</span>
  55.                 <img id="lightbox-img" src="" style="max-width:88vw; max-height:88vh; object-fit:contain; border-radius:4px;">
  56.                 <span id="lb-next" onclick="lbNav(1)" style="position:absolute; right:-50px; color:#fff; font-size:40px; cursor:pointer; user-select:none;">&#8250;</span>
  57.             </div>
  58.         </div>
  59.         <div id="lb-counter" style="position:absolute; bottom:20px; left:50%; transform:translateX(-50%); color:#fff; font-size:13px; opacity:0.7;"></div>
  60.     </div>
  61. {% endblock %}
  62. {% block javascripts %}
  63.     {{ parent() }}
  64. <script>
  65.     var lbImages = [];
  66.     var lbCurrent = 0;
  67.     document.querySelectorAll('.gallery-lightbox').forEach(function(el, i) {
  68.         lbImages.push(el.getAttribute('href'));
  69.         el.addEventListener('click', function(e) {
  70.             e.preventDefault();
  71.             lbCurrent = i;
  72.             openLightbox();
  73.         });
  74.     });
  75.     function openLightbox() {
  76.         document.getElementById('lightbox-img').src = lbImages[lbCurrent];
  77.         document.getElementById('lb-counter').textContent = (lbCurrent + 1) + ' / ' + lbImages.length;
  78.         document.getElementById('lightbox-overlay').style.display = 'block';
  79.         document.body.style.overflow = 'hidden';
  80.     }
  81.     function closeLightbox() {
  82.         document.getElementById('lightbox-overlay').style.display = 'none';
  83.         document.body.style.overflow = '';
  84.     }
  85.     function lbNav(dir) {
  86.         lbCurrent = (lbCurrent + dir + lbImages.length) % lbImages.length;
  87.         document.getElementById('lightbox-img').src = lbImages[lbCurrent];
  88.         document.getElementById('lb-counter').textContent = (lbCurrent + 1) + ' / ' + lbImages.length;
  89.     }
  90.     document.addEventListener('keydown', function(e) {
  91.         if (document.getElementById('lightbox-overlay').style.display === 'block') {
  92.             if (e.key === 'ArrowRight') lbNav(1);
  93.             if (e.key === 'ArrowLeft') lbNav(-1);
  94.             if (e.key === 'Escape') closeLightbox();
  95.         }
  96.     });
  97. </script>
  98. {% endblock %}