templates/web/videos.html.twig line 1

Open in your IDE?
  1. {% extends 'web/base.html.twig' %}
  2. {% block title %}Videoteka – 2sweet Slastičarnica Zagreb{% endblock %}
  3. {% block seo %}
  4. <meta name="description" content="Pogledajte video savjete i inspiraciju za svadbene torte i kolače od 2sweet slastičarnice Zagreb. Edukativni i inspirativni sadržaj.">
  5. <meta property="og:title" content="Videoteka – 2sweet Slastičarnica Zagreb">
  6. <meta property="og:description" content="Video savjeti i inspiracija za svadbene torte i kolače.">
  7. {% endblock %}
  8. {% block body %}
  9.     {{ include('web/components/inner/breadcrumb.html.twig') }}
  10.     <div class="bgWhite">
  11.         <div class="container">
  12.             <div class="emptySpace-xs60 emptySpace120"></div>
  13.             <div class="row">
  14.                 <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
  15.                     <div class="big titleShortcode">
  16.                         <div class="emptySpace20 emptySpace-xs5"></div>
  17.                         <h2 class="h2 bottomLine">Videoteka</h2>
  18.                         <div class="emptySpace30"></div>
  19.                     </div>
  20.                 </div>
  21.             </div>
  22.             <div class="emptySpace75 emptySpace-xs30"></div>
  23.             <div class="row">
  24.                 {% for video in videos %}
  25.                 <div class="col-sm-6 col-md-4" style="margin-bottom:40px;">
  26.                     <div class="normall contentShortcode" style="cursor:pointer;" onclick="openVideoModal('{{ video.id }}')">
  27.                         {# Thumbnail #}
  28.                         <div style="position:relative; overflow:hidden; border-radius:6px;">
  29.                             {% if video.type == 'youtube' and video.youtubeId %}
  30.                                 <img src="https://img.youtube.com/vi/{{ video.youtubeId }}/hqdefault.jpg"
  31.                                      class="imgShortcode"
  32.                                      style="width:100%; height:220px; object-fit:cover; display:block;"
  33.                                      alt="{{ video.title }}">
  34.                             {% elseif video.thumbnail %}
  35.                                 <img src="{{ asset('uploads/' ~ video.thumbnail) }}"
  36.                                      class="imgShortcode"
  37.                                      style="width:100%; height:220px; object-fit:cover; display:block;"
  38.                                      alt="{{ video.title }}">
  39.                             {% else %}
  40.                                 <div style="width:100%; height:220px; background:#f0ebe8; display:flex; align-items:center; justify-content:center; border-radius:6px;">
  41.                                     <span style="font-size:48px; opacity:0.4;">🎬</span>
  42.                                 </div>
  43.                             {% endif %}
  44.                             {# Play button overlay #}
  45.                             <div style="position:absolute; inset:0; display:flex; align-items:center; justify-content:center; background:rgba(0,0,0,0.25); transition:background 0.2s;"
  46.                                  onmouseover="this.style.background='rgba(0,0,0,0.4)'"
  47.                                  onmouseout="this.style.background='rgba(0,0,0,0.25)'">
  48.                                 <div style="width:56px; height:56px; background:#b85b63; border-radius:50%; display:flex; align-items:center; justify-content:center; box-shadow:0 4px 16px rgba(0,0,0,0.3);">
  49.                                     <span style="color:#fff; font-size:22px; margin-left:4px;">&#9654;</span>
  50.                                 </div>
  51.                             </div>
  52.                             {# Tip badge #}
  53.                             <div style="position:absolute; top:10px; right:10px;">
  54.                                 {% if video.type == 'youtube' %}
  55.                                     <span style="background:#ff0000; color:#fff; font-size:11px; padding:2px 8px; border-radius:3px; font-weight:bold;">YouTube</span>
  56.                                 {% elseif video.type == 'vimeo' %}
  57.                                     <span style="background:#1ab7ea; color:#fff; font-size:11px; padding:2px 8px; border-radius:3px; font-weight:bold;">Vimeo</span>
  58.                                 {% endif %}
  59.                             </div>
  60.                         </div>
  61.                         <div class="emptySpace15"></div>
  62.                         <h4 class="h4" style="margin-bottom:8px;">{{ video.title }}</h4>
  63.                         {% if video.description %}
  64.                             <p style="color:#888; font-size:14px; line-height:1.6;">{{ video.description }}</p>
  65.                         {% endif %}
  66.                     </div>
  67.                 </div>
  68.                 {% else %}
  69.                 <div class="col-12 text-center">
  70.                     <p class="normall" style="color:#aaa;">Videoteka je trenutno prazna.</p>
  71.                 </div>
  72.                 {% endfor %}
  73.             </div>
  74.             <div class="emptySpace-xs60 emptySpace120"></div>
  75.         </div>
  76.     </div>
  77.     {# Modal za reprodukciju #}
  78.     <div id="video-modal" style="display:none; position:fixed; inset:0; background:rgba(0,0,0,0.88); z-index:9998; align-items:center; justify-content:center;"
  79.          onclick="closeVideoModal()">
  80.         <button onclick="closeVideoModal()" style="position:absolute; top:20px; right:30px; background:none; border:none; color:#fff; font-size:36px; cursor:pointer; z-index:1;">&times;</button>
  81.         <div onclick="event.stopPropagation();" style="width:90vw; max-width:900px;">
  82.             <div id="video-modal-inner" style="position:relative; padding-bottom:56.25%; height:0;">
  83.             </div>
  84.         </div>
  85.     </div>
  86.     {# Podaci videa u JS #}
  87.     <script>
  88.     var videoData = {
  89.         {% for video in videos %}
  90.         '{{ video.id }}': {
  91.             type: '{{ video.type }}',
  92.             {% if video.type == 'youtube' %}
  93.             embedUrl: '{{ video.embedUrl }}',
  94.             {% elseif video.type == 'vimeo' %}
  95.             embedUrl: '{{ video.embedUrl }}',
  96.             {% elseif video.type == 'upload' %}
  97.             src: '{{ asset('uploads/' ~ video.videoSource) }}',
  98.             {% elseif video.type == 'link' %}
  99.             embedUrl: '{{ video.embedUrl }}',
  100.             {% endif %}
  101.         },
  102.         {% endfor %}
  103.     };
  104.     function openVideoModal(id) {
  105.         var v = videoData[id];
  106.         if (!v) return;
  107.         var inner = document.getElementById('video-modal-inner');
  108.         inner.innerHTML = '';
  109.         if (v.type === 'upload') {
  110.             inner.innerHTML = '<video controls autoplay style="position:absolute;top:0;left:0;width:100%;height:100%;background:#000;">' +
  111.                 '<source src="' + v.src + '"></video>';
  112.         } else if (v.embedUrl) {
  113.             inner.innerHTML = '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;" src="' + v.embedUrl + '" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>';
  114.         }
  115.         var modal = document.getElementById('video-modal');
  116.         modal.style.display = 'flex';
  117.         document.body.style.overflow = 'hidden';
  118.     }
  119.     function closeVideoModal() {
  120.         document.getElementById('video-modal').style.display = 'none';
  121.         document.getElementById('video-modal-inner').innerHTML = '';
  122.         document.body.style.overflow = '';
  123.     }
  124.     document.addEventListener('keydown', function(e) {
  125.         if (e.key === 'Escape') closeVideoModal();
  126.     });
  127.     </script>
  128.     <div class="footerSeparator"></div>
  129.     <div class="emptySpace50 emptySpace-xs30"></div>
  130. {% endblock %}