templates/homepage/detailVehicle.html.twig line 1

  1. {% extends 'base.html.twig' %}
  2. {% block title %}{{ vehicle_seo_title(vehicle) }}{% endblock %}
  3. {% block desc %}{{ vehicle_seo_description(vehicle) }}{% endblock %}
  4. {% block canonical %}<link rel="canonical" href="{{ vehicle_url(vehicle) }}">{% endblock %}
  5.         {% block stylesheets %}
  6.             {{ encore_entry_link_tags('app') }}
  7.                 <link rel="stylesheet" href="{{ asset('vehicle-gallery-v2/gallery.css') }}?v=21">
  8.         {% endblock %}
  9.         {% block javascripts %}
  10.             {{ encore_entry_script_tags('app') }}
  11.             <script src="https://www.google.com/recaptcha/api.js?render={{ google_recaptcha_site_key }}"></script>
  12.                 <script src="{{ asset('vehicle-gallery-v2/gallery.js') }}?v=21" defer></script>
  13.         {% endblock %}
  14.     {% block mobileBranding %} {% endblock %}
  15. {% block body %}
  16.     <br>
  17.     <section class="container">
  18.         <nav class="container__back">
  19.             {% if vehicle.kind %}
  20.                 <a class="container__back-link" href="{{ app.request.headers.get('referer') }}">Zpět na seznam
  21.                     inzerátů</a>
  22.             {% endif %}
  23.         </nav>
  24.         <section class="gallery js-vehicle-gallery-v2-trigger" data-vehicle-gallery-v2-trigger>
  25.             {% for img in vehicle.vehicleImages %}
  26.                 {% if loop.index < 2 %}
  27.                     <a class="gallery__item gallery__item--large" href="{{ asset(vehicle_image_url(img)) }}"
  28.                        title="{{ vehicle_image_alt(img) }}" data-gallery-index="{{ loop.index0 }}">
  29.                         <img src="{{ asset(vehicle_image_url(img)) }}"
  30.                              alt="{{ vehicle_image_alt(img) }}"
  31.                                 {{ stimulus_controller('symfony/ux-lazy-image/lazy-image', {
  32.                                     src: asset(vehicle_image_url(img))
  33.                                 }) }} width="400">
  34.                         {#
  35.                         <div class="gallery__favorite">
  36.                             <i class="icon icon-heart"></i>
  37.                         </div>
  38.                         #}
  39.                     </a>
  40.                 {% else %}
  41.                     <a {% if loop.index > 5 %}  style="display: none" {% endif %}
  42.                             class="gallery__item   {% if loop.index == 5 %}  gallery__item--hidden-sm  {% endif %} "
  43.                             href="{{ asset(vehicle_image_url(img)) }}" title="{{ vehicle_image_alt(img) }}" data-gallery-index="{{ loop.index0 }}">
  44.                         <img src="{{ asset(vehicle_image_url(img)) }}"
  45.                              alt="{{ vehicle_image_alt(img) }}"
  46.                                 {{ stimulus_controller('symfony/ux-lazy-image/lazy-image', {
  47.                                     src: asset(vehicle_image_url(img))
  48.                                 }) }} width="200"> </a>
  49.                 {% endif %}
  50.             {% endfor %}
  51.             {% if vehicle.vehicleImages|length > 5 %}
  52.                 <div class="gallery__show" data-gallery-open-all role="button" tabindex="0" aria-label="Zobrazit všechny fotografie">
  53.                     <i class="icon icon-camera"></i>
  54.                     +{{ vehicle.vehicleImages|length - 5 }}
  55.                 </div>
  56.             {% endif %}
  57.         </section>
  58.             <div class="vehicle-gallery-v2" data-vehicle-gallery-v2 aria-hidden="true">
  59.                 <div class="vehicle-gallery-v2__backdrop"></div>
  60.                 <div class="vehicle-gallery-v2__stage" role="dialog" aria-modal="true" aria-label="Fotogalerie vozidla">
  61.                     <div class="vehicle-gallery-v2__topbar">
  62.                         <div class="vehicle-gallery-v2__counter" data-gallery-counter aria-live="polite">1 / {{ vehicle.vehicleImages|length }}</div>
  63.                         <div class="vehicle-gallery-v2__actions">
  64.                             <button type="button" class="vehicle-gallery-v2__icon" data-gallery-fullscreen aria-label="Celá obrazovka" title="Celá obrazovka">
  65.                                 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M8 3H3v5M16 3h5v5M3 16v5h5M21 16v5h-5"/></svg>
  66.                             </button>
  67.                             <button type="button" class="vehicle-gallery-v2__icon" data-gallery-thumbnails aria-label="Zobrazit miniatury" title="Miniatury">
  68.                                 <svg viewBox="0 0 24 24" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>
  69.                             </button>
  70.                             <button type="button" class="vehicle-gallery-v2__icon vehicle-gallery-v2__zoom" data-gallery-zoom aria-label="Přiblížit fotografii" title="Zoom">
  71.                                 <svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="10.5" cy="10.5" r="6.5"/><path d="M15.5 15.5 21 21M10.5 7v7M7 10.5h7"/></svg>
  72.                             </button>
  73.                             <button type="button" class="vehicle-gallery-v2__icon" data-gallery-close aria-label="Zavřít fotogalerii" title="Zavřít">
  74.                                 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 5l14 14M19 5 5 19"/></svg>
  75.                             </button>
  76.                         </div>
  77.                     </div>
  78.                     <button type="button" class="vehicle-gallery-v2__arrow vehicle-gallery-v2__arrow--prev" data-gallery-prev aria-label="Předchozí fotografie">
  79.                         <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m15 4-8 8 8 8"/></svg>
  80.                     </button>
  81.                     <div class="vehicle-gallery-v2__image-wrap" data-gallery-image-wrap>
  82.                         <img class="vehicle-gallery-v2__image" data-gallery-image src="" alt="">
  83.                     </div>
  84.                     <button type="button" class="vehicle-gallery-v2__arrow vehicle-gallery-v2__arrow--next" data-gallery-next aria-label="Další fotografie">
  85.                         <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m9 4 8 8-8 8"/></svg>
  86.                     </button>
  87.                     <div class="vehicle-gallery-v2__hint">← → procházet · ESC zavřít</div>
  88.                     <aside class="vehicle-gallery-v2__thumbs" data-gallery-thumbs-panel aria-hidden="true">
  89.                         <div class="vehicle-gallery-v2__thumbs-head">
  90.                             <strong>Všechny fotografie</strong>
  91.                             <button type="button" class="vehicle-gallery-v2__thumbs-close" data-gallery-thumbs-close aria-label="Zavřít miniatury">×</button>
  92.                         </div>
  93.                         <div class="vehicle-gallery-v2__thumbs-grid" data-gallery-thumbs-grid>
  94.                             {% for img in vehicle.vehicleImages %}
  95.                                 <button type="button" class="vehicle-gallery-v2__thumb" data-gallery-thumb="{{ loop.index0 }}" aria-label="Zobrazit fotografii {{ loop.index }}">
  96.                                     <img src="{{ asset(vehicle_image_url(img)) }}" alt="{{ vehicle_image_alt(img) }}" loading="lazy">
  97.                                     <span>{{ loop.index }}</span>
  98.                                 </button>
  99.                             {% endfor %}
  100.                         </div>
  101.                     </aside>
  102.                     <div class="vehicle-gallery-v2__sources" hidden>
  103.                         {% for img in vehicle.vehicleImages %}
  104.                             <span data-gallery-source="{{ loop.index0 }}" data-src="{{ asset(vehicle_image_url(img)) }}" data-alt="{{ vehicle_image_alt(img)|e('html_attr') }}"></span>
  105.                         {% endfor %}
  106.                     </div>
  107.                 </div>
  108.             </div>
  109.     </section>
  110.     <div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" aria-label="image gallery"
  111.          aria-modal="true" role="dialog">
  112.         <div class="slides" aria-live="polite"></div>
  113.         <a class="prev" aria-controls="blueimp-gallery" aria-label="previous slide" aria-keyshortcuts="ArrowLeft"></a>
  114.         <a class="next" aria-controls="blueimp-gallery" aria-label="next slide" aria-keyshortcuts="ArrowRight"></a>
  115.         <a class="close" aria-controls="blueimp-gallery" aria-label="close" aria-keyshortcuts="Escape"></a>
  116.     </div>
  117.     <section class="grid grid--gap40 grid--row-gap20 grid--padding-top0">
  118.         <div>
  119.             <section class="detail">
  120.                 <h1 class="margin-bottom-0">{{ vehicle_seo_h1(vehicle) }}</h1>
  121.                 <div class="detail__price">
  122.                     {{ vehicle.price ? vehicle.price|number_format(0, null, ' ')~' Kč' : 'dohodou' }}
  123.                     {% if vehicle.vat %}
  124.                         <div class="detail__price-label">Odpočet DPH možný</div>
  125.                     {% endif %}
  126.                 </div>
  127.                 <div class="detail__info">
  128.                     <div class="detail__info-item">
  129.                         Rok výroby
  130.                         <strong class="detail__info-strong">
  131.                             <i class="icon icon-calendar"></i>
  132.                             {{ vehicle.madeDate ? vehicle.madeDate|slice(0,4) : 'neuvedeno' }}
  133.                         </strong>
  134.                     </div>
  135.                     <div class="detail__info-item">
  136.                         Tachometr
  137.                         <strong class="detail__info-strong">
  138.                             <i class="icon icon-tachometer"></i>
  139.                             {{ vehicle.mileage ? vehicle.mileage|number_format(null, ' ', ' ') ~' '~vehicle.mileageUnit  : 'neuvedeno' }}
  140.                         </strong>
  141.                     </div>
  142.                     <div class="detail__info-item">
  143.                         Palivo
  144.                         <strong class="detail__info-strong">
  145.                             <i class="icon icon-gas"></i>
  146.                             {{ vehicle.fuel ? vehicle.fuel.name : 'neuvedeno' }}
  147.                         </strong>
  148.                     </div>
  149.                     <div class="detail__info-item">
  150.                         Převodovka
  151.                         <strong class="detail__info-strong">
  152.                             <i class="icon icon-settings"></i>
  153.                             {{ vehicle.gearbox  ?  vehicle.gearbox|trans  : 'neuvedeno' }}
  154.                         </strong>
  155.                     </div>
  156.                     <div class="detail__info-item">
  157.                         Výkon
  158.                         <strong class="detail__info-strong">
  159.                             <i class="icon icon-power"></i>
  160.                             {{ vehicle.enginePower ? vehicle.enginePower ~' kW' : 'neuvedeno' }}
  161.                         </strong>
  162.                     </div>
  163.                     <div class="detail__info-item">
  164.                         Karoserie
  165.                         <strong class="detail__info-strong">
  166.                             <i class="icon icon-car"></i>
  167.                             {{ vehicle.body ? vehicle.body.name : 'neuvedeno' }}
  168.                         </strong>
  169.                     </div>
  170.                 </div>
  171.                 <h2>Popis</h2>
  172.                 <div class="detail__more js-detail__more">
  173.                     <div class="detail__more-content js-detail__more-content">
  174.                         <p> {{ vehicle.note }} </p>
  175.                     </div>
  176.                     <div class="detail__more-control">
  177.                         <button class="button detail__more-toggler js-detail__more-toggler" type="button">
  178.                             <span class="detail__more-toggler-show">Zobrazit více</span>
  179.                             <span class="detail__more-toggler-hide">Zobrazit méně</span>
  180.                         </button>
  181.                     </div>
  182.                 </div>
  183.                 <h2>Informace o vozu</h2>
  184.                 <div class="detail__columns detail__hidden--mobile">
  185.                     <table>
  186.                         <tbody>
  187.                         <tr>
  188.                             <th>Prodejní cena</th>
  189.                             <td> {{ vehicle.price ? vehicle.price|number_format(0, null, ' ')~' Kč' : 'dohodou' }}</td>
  190.                         </tr>
  191.                         {% if  vehicle.vat %}
  192.                             <tr>
  193.                                 <th> Cena bez DPH</th>
  194.                                 <td>
  195.                                     {% if  vehicle.price %}
  196.                                         {{ (vehicle.price / 1.21)|number_format(0, null, ' ') }}  Kč
  197.                                     {% else %}
  198.                                         neuvedeno
  199.                                     {% endif %} </td>
  200.                             </tr>
  201.                         {% endif %}
  202.                         <tr>
  203.                             <th>Odpočet DPH</th>
  204.                             <td>{{ vehicle.vat ? 'ano' : 'ne' }} </td>
  205.                         </tr>
  206.                         <tr>
  207.                             <th> VIN</th>
  208.                             <td> {{ vehicle.vin ? vehicle.vin : 'neuvedeno' }}</td>
  209.                         </tr>
  210.                         {% if vehicle.dealer.checkVin %}
  211.                             <tr>
  212.                                 <th>Historie</th>
  213.                                 <td>
  214.                                     {% if vehicle.vin %}
  215.                                         <a target="_blank"
  216.                                            href="https://cz.cebia.com/?utm_source=affilbox&utm_medium=affiliate&utm_campaign=Autanet_2013&a_box=j49grgww&vin={{ vehicle.vin|url_encode }}">
  217.                                             Zobrazit historii vozu
  218.                                         </a>
  219.                                     {% else %}
  220.                                         nelze ověřit bez VIN
  221.                                     {% endif %}
  222.                                 </td>
  223.                             </tr>
  224.                         {% endif %}
  225.                         <tr>
  226.                             <th>Tachometr</th>
  227.                             <td>  {{ vehicle.mileage ? vehicle.mileage~' '~vehicle.mileageUnit : 'neuvedeno' }}  </td>
  228.                         </tr>
  229.                         <tr>
  230.                             <th>Druh paliva</th>
  231.                             <td>          {{ vehicle.fuel ? vehicle.fuel.name : 'neuvedeno' }}</td>
  232.                         </tr>
  233.                         <tr>
  234.                             <th>Objem</th>
  235.                             <td>
  236.                                 {{ vehicle.engineVolume ? vehicle.engineVolume~' ccm'  : 'neuvedeno' }} </td>
  237.                         </tr>
  238.                         </tbody>
  239.                     </table>
  240.                     <table>
  241.                         <tbody>
  242.                         <tr>
  243.                             <th>Karoserie</th>
  244.                             <td>  {{ vehicle.body  ? vehicle.body.name   : 'neuvedeno' }}</td>
  245.                         </tr>
  246.                         <tr>
  247.                             <th>Počet dveří</th>
  248.                             <td> {{ vehicle.doors  ? vehicle.doors  : 'neuvedeno' }}</td>
  249.                         </tr>
  250.                         <tr>
  251.                             <th>Počet míst</th>
  252.                             <td>   {{ vehicle.places  ? vehicle.places  : 'neuvedeno' }} </td>
  253.                         </tr>
  254.                         <tr>
  255.                             <th>Barva</th>
  256.                             <td>{{ vehicle.color.name }}   </td>
  257.                         </tr>
  258.                         <tr>
  259.                             <th>STK {% if vehicle.stkTo != 1 %}{{ vehicle.stkTo }}{% endif %}</th>
  260.                             <td>{% if vehicle.stkTo == 1 %}neuvedeno{% else %}{{ vehicle.stkTo ? vehicle.stkTo|slice(4,6)~'/'~vehicle.stkTo|slice(0,4)  : 'neuvedeno' }}{% endif %}  </td>
  261.                         </tr>
  262.                         <tr>
  263.                             <th>Země původu</th>
  264.                             <td>{{ vehicle.state ? vehicle.state : 'neuvedeno' }}  </td>
  265.                         </tr>
  266.                         <tr>
  267.                             <th>První majitel</th>
  268.                             <td>{{ vehicle.firstOwner ? 'ano' : 'ne' }}</td>
  269.                         </tr>
  270.                         </tbody>
  271.                     </table>
  272.                 </div>
  273.                 <div class="detail__hidden--desktop">
  274.                     <table>
  275.                         <tbody>
  276.                         <tr>
  277.                             <th>Prodejní cena</th>
  278.                             <td> {{ vehicle.price ? vehicle.price|number_format(0, null, ' ')~' Kč' : 'neuvedeno' }}</td>
  279.                         </tr>
  280.                         {% if  vehicle.vat %}
  281.                             <tr>
  282.                                 <th> Cena bez DPH</th>
  283.                                 <td>
  284.                                     {% if  vehicle.price %}
  285.                                         {{ (vehicle.price / 1.21)|number_format(0, null, ' ') }}  Kč
  286.                                     {% else %}
  287.                                         neuvedeno
  288.                                     {% endif %} </td>
  289.                             </tr>
  290.                         {% endif %}
  291.                         <tr>
  292.                             <th>Odpočet DPH</th>
  293.                             <td>{{ vehicle.vat ? 'ano' : 'ne' }} </td>
  294.                         </tr>
  295.                         <tr>
  296.                             <th> VIN</th>
  297.                             <td> {{ vehicle.vin ? vehicle.vin : 'neuvedeno' }}</td>
  298.                         </tr>
  299.                         {% if vehicle.dealer.checkVin %}
  300.                             <tr>
  301.                                 <th>Historie</th>
  302.                                 <td>
  303.                                     {% if vehicle.vin %}
  304.                                         <a target="_blank"
  305.                                            href="https://cz.cebia.com/?utm_source=affilbox&utm_medium=affiliate&utm_campaign=Autanet_2013&a_box=j49grgww&vin={{ vehicle.vin|url_encode }}">
  306.                                             Zobrazit historii vozu
  307.                                         </a>
  308.                                     {% else %}
  309.                                         nelze ověřit bez VIN
  310.                                     {% endif %}
  311.                                 </td>
  312.                             </tr>
  313.                         {% endif %}
  314.                         <tr>
  315.                             <th>Tachometr</th>
  316.                             <td>  {{ vehicle.mileage ? vehicle.mileage~' '~vehicle.mileageUnit : 'neuvedeno' }}  </td>
  317.                         </tr>
  318.                         <tr>
  319.                             <th>Druh paliva</th>
  320.                             <td>          {{ vehicle.fuel ? vehicle.fuel.name : 'neuvedeno' }}</td>
  321.                         </tr>
  322.                         <tr>
  323.                             <th>Objem</th>
  324.                             <td>
  325.                                 {{ vehicle.engineVolume ? vehicle.engineVolume~' ccm'  : 'neuvedeno' }} </td>
  326.                         </tr>
  327.                         <tr>
  328.                             <th>Karoserie</th>
  329.                             <td>  {{ vehicle.body  ? vehicle.body.name   : 'neuvedeno' }}</td>
  330.                         </tr>
  331.                         <tr>
  332.                             <th>Počet dveří</th>
  333.                             <td> {{ vehicle.doors  ? vehicle.doors  : 'neuvedeno' }}</td>
  334.                         </tr>
  335.                         <tr>
  336.                             <th>Počet míst</th>
  337.                             <td>   {{ vehicle.places  ? vehicle.places  : 'neuvedeno' }} </td>
  338.                         </tr>
  339.                         <tr>
  340.                             <th>Barva</th>
  341.                             <td>{{ vehicle.color.name }}   </td>
  342.                         </tr>
  343.                         <tr>
  344.                             <th>STK {% if vehicle.stkTo != 1 %}{{ vehicle.stkTo }}{% endif %}</th>
  345.                             <td>{% if vehicle.stkTo == 1 %}neuvedeno{% else %}{{ vehicle.stkTo ? vehicle.stkTo|slice(4,6)~'/'~vehicle.stkTo|slice(0,4)  : 'neuvedeno' }}{% endif %}  </td>
  346.                         </tr>
  347.                         <tr>
  348.                             <th>Země původu</th>
  349.                             <td>{{ vehicle.state ? vehicle.state : 'neuvedeno' }}  </td>
  350.                         </tr>
  351.                         <tr>
  352.                             <th>První majitel</th>
  353.                             <td>{{ vehicle.firstOwner ? 'ano' : 'ne' }}</td>
  354.                         </tr>
  355.                         </tbody>
  356.                     </table>
  357.                 </div>
  358.                 <h2>Výbava vozu</h2>
  359.                 <div class="detail__more js-detail__more">
  360.                     <div class="detail__more-content js-detail__more-content">
  361.                         <div class="detail__columns">
  362.                             <ul>
  363.                                 {% for e in vehicle.equipments %}
  364.                                 <li>{{ e.name }}</li>
  365.                                 {% if (vehicle.equipments|length / 2)|round == loop.index %}
  366.                             </ul>
  367.                             <ul>
  368.                                 {% endif %}
  369.                                 {% endfor %}
  370.                             </ul>
  371.                         </div>
  372.                     </div>
  373.                     <div class="detail__more-control">
  374.                         <button class="button detail__more-toggler js-detail__more-toggler" type="button">
  375.                             <span class="detail__more-toggler-show">Zobrazit více</span>
  376.                             <span class="detail__more-toggler-hide">Zobrazit méně</span>
  377.                         </button>
  378.                     </div>
  379.                 </div>
  380.             </section>
  381.             <!-- Mobile contact section -->
  382.             <div class="dealer dealer--mobile" style="display: none;">
  383.                 <h2>Kontakt na prodejce</h2>
  384.                 {% if not vehicle.dealer.basicAdvertising %}
  385.                     <figure class="dealer__logo">
  386.                         {% if vehicle.dealer.logo and autanetPartner %}
  387.                             <img
  388.                                     src="{{ asset('img-dealer/')~vehicle.dealer.logo }}"
  389.                                     {{ stimulus_controller('symfony/ux-lazy-image/lazy-image', {
  390.                                         src: asset('img-dealer/')~vehicle.dealer.logo
  391.                                     }) }}
  392.                                     width="170"
  393.                                     data-autanet-partner-logo-l04
  394.                                     data-autanet-partner-id="{{ autanetPartner.id }}"
  395.                                     data-dealer-id="{{ vehicle.dealer.id }}"
  396.                             >
  397.                         {% endif %}
  398.                     </figure>
  399.                 {% endif %}
  400.                 <h3>{{ vehicle.dealer.name }}</h3>
  401.                 <p>{{ vehicle.dealer.street }}, {{ vehicle.dealer.city }}<br>
  402.                     {{ vehicle.dealer.district.name }}</p>
  403.                 <a class="dealer__link"
  404.                    href="https://www.google.com/maps/search/?api=1&query={{ vehicle.dealer.lat }},{{ vehicle.dealer.lng }}"
  405.                    target="_blank">
  406.                     <i class="icon icon-map"></i>
  407.                     Zobrazit na mapě</a>
  408.                 <div class="dealer__opening-hours">
  409.                     <h4 class="detail__opening-hours-heading">
  410.                         <i class="icon icon-hours"></i>
  411.                         Provozní doba
  412.                     </h4>
  413.                     <div class="dealer__opening">
  414.                         {% for t in  openTime %}
  415.                             <div>{{ t.day.value }}</div>
  416.                             <div>{{ t.description }}</div>
  417.                         {% endfor %}
  418.                     </div>
  419.                 </div>
  420.                 <a class="dealer__button dealer__button--green js-modal-show" href="#modal--call">
  421.                     <i class="icon icon-phone"></i>
  422.                     Zavolat prodejci</a>
  423.                 <a class="dealer__button js-modal-show" href="#modal--write">
  424.                     <i class="icon icon-email"></i>
  425.                     Napsat prodejci
  426.                 </a>
  427.             </div>
  428.             {% if vehicleOthers|length >  0 %}
  429.                 <h4 class="detail__dealer-vehicles-heading">Další inzeráty prodejce</h4>
  430.                 {% for v in vehicleOthers %}
  431.                     {% include 'vehicle/_vehicle.html.twig' with { vehicle: v } %}
  432.                     {% if loop.index == 1 %}
  433.                         <div id="banner-mobile-container" class="banner-mobile" data-autanet-partner-banner-placement="B06"></div>
  434.                     {% endif %}
  435.                     {% if loop.index == 2 %}
  436.                         <div id="adform_squarem"></div>
  437.                     {% endif %}
  438.                     {% if loop.index == 8 %}
  439.                         <div id="adform_squarem2"></div>
  440.                     {% endif %}
  441.                 {% endfor %}
  442.             {% endif %}
  443.             {% if not vehicle.dealer.basicAdvertising %}
  444.                 <footer class="grid__buttons">
  445.                     <a class="button" href="{{ path('page_dealer_vehicle', { url: vehicle.dealer.url }) }}">
  446.                         Zobrazit všechny inzeráty prodejce
  447.                         <i class="icon icon-chevron-right"></i>
  448.                     </a>
  449.                 </footer>
  450.             {% endif %}
  451.             <hr>
  452.         </div>
  453.         <div>
  454.             <div class="grid__buttons">
  455.                 {#
  456.                 <a class="button" href="">
  457.                     Přidat k oblíbeným
  458.                     <i class="icon icon-heart"></i>
  459.                 </a>
  460.                 #}
  461.                 <a class="button js-modal-show" href="#modal--share">
  462.                     Sdílet inzerát
  463.                     <i class="icon icon-forward"></i>
  464.                 </a>
  465.             </div>
  466.             <div class="dealer">
  467.                 <h2>Kontakt na prodejce</h2>
  468.                 {% if not vehicle.dealer.basicAdvertising %}
  469.                     <figure class="dealer__logo">
  470.                         {% if vehicle.dealer.logo and autanetPartner %}
  471.                             <img
  472.                                     src="{{ asset('img-dealer/')~vehicle.dealer.logo }}"
  473.                                     {{ stimulus_controller('symfony/ux-lazy-image/lazy-image', {
  474.                                         src: asset('img-dealer/')~vehicle.dealer.logo
  475.                                     }) }}
  476.                                     width="170"
  477.                                     data-autanet-partner-logo-l04
  478.                                     data-autanet-partner-id="{{ autanetPartner.id }}"
  479.                                     data-dealer-id="{{ vehicle.dealer.id }}"
  480.                             >
  481.                         {% endif %}
  482.                     </figure>
  483.                 {% endif %}
  484.                 <h3>{{ vehicle.dealer.name }}</h3>
  485.                 <p>{{ vehicle.dealer.street }}, {{ vehicle.dealer.city }}<br>
  486.                     {{ vehicle.dealer.district.name }}</p>
  487.                 <a class="dealer__link"
  488.                    href="https://www.google.com/maps/search/?api=1&query={{ vehicle.dealer.lat }},{{ vehicle.dealer.lng }}"
  489.                    target="_blank">
  490.                     <i class="icon icon-map"></i>
  491.                     Zobrazit na mapě</a>
  492.                 <div class="dealer__opening-hours">
  493.                     <h4 class="detail__opening-hours-heading">
  494.                         <i class="icon icon-hours"></i>
  495.                         Provozní doba
  496.                     </h4>
  497.                     <div class="dealer__opening">
  498.                         {% for t in  openTime %}
  499.                             <div>{{ t.day.value }}</div>
  500.                             <div>{{ t.description }}</div>
  501.                         {% endfor %}
  502.                     </div>
  503.                 </div>
  504.                 <a class="dealer__button dealer__button--green js-modal-show" href="#modal--call">
  505.                     <i class="icon icon-phone"></i>
  506.                     Zavolat prodejci</a>
  507.                 <a class="dealer__button js-modal-show" href="#modal--write">
  508.                     <i class="icon icon-email"></i>
  509.                     Napsat prodejci
  510.                 </a>
  511.             </div>
  512.             <div id="banner-container" class="banner" data-autanet-partner-banner-placement="B06"></div>
  513.             <div id="adform_halfpage"></div>
  514.         </div>
  515.     </section>
  516.     <div class="mobile-buttons">
  517.         <a class="mobile-buttons__item mobile-buttons__item--green js-modal-show" href="#modal--call">
  518.             <i class="icon icon-phone"></i>
  519.             Zavolat</a>
  520.         </a>
  521.         <a class="mobile-buttons__item js-modal-show" href="#modal--write">
  522.             <i class="icon icon-email"></i>
  523.             Napsat
  524.         </a>
  525.     </div>
  526.     <div class="modal" id="modal--share">
  527.         <div class="modal__overlay js-modal-close"></div>
  528.         <article class="modal__body">
  529.             <button class="modal__close js-modal-close" type="button"></button>
  530.             <div class="modal__header">
  531.                 <h2>Sdílet inzerci</h2>
  532.             </div>
  533.             <div class="share">
  534.                 <a target="_blank" class="share__item"
  535.                    href="https://www.facebook.com/sharer/sharer.php?u={{ app.request.uri }}">
  536.                     <img src="{{ asset('img/share__icon--facebook.svg') }}" alt="">
  537.                     Facebook
  538.                 </a>
  539.                 <a target="_blank" class="share__item" href="">
  540.                     <img src="{{ asset('img/share__icon--messenger.svg') }}"
  541.                          alt="fb-messenger://share/?link={{ app.request.uri }}">
  542.                     Messenger
  543.                 </a>
  544.                 <a target="_blank" class="share__item" href="whatsapp://send?text={{ app.request.uri }}">
  545.                     <img src="{{ asset('img/share__icon--whatsapp.svg') }}" alt="">
  546.                     Whatsapp
  547.                 </a>
  548.                 <a target="_blank" class="share__item"
  549.                    href="https://twitter.com/intent/tweet?url={{ app.request.uri }}&text={{ vehicle_clean_name(vehicle) }} - {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}">
  550.                     <img src="{{ asset('img/share__icon--twitter.svg') }}" alt="">
  551.                     Twitter
  552.                 </a>
  553.                 <a target="_blank" class="share__item"
  554.                    href="mailto:?subject={{ vehicle_clean_name(vehicle) }} - {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}&amp;body=Podívej se na {{ app.request.uri }}">
  555.                     <img src="{{ asset('img/share__icon--envelope.svg') }}" alt="">
  556.                     E-mail
  557.                 </a>
  558.             </div>
  559.             <footer class="modal__footer">
  560.                 <button class="modal__link js-modal-close" type="button">zavřít okno</button>
  561.             </footer>
  562.         </article>
  563.     </div>
  564.     <div class="modal" id="modal--call">
  565.         <div class="modal__overlay js-modal-close"></div>
  566.         <article class="modal__body">
  567.             <button class="modal__close js-modal-close" type="button"></button>
  568.             <div class="modal__header">
  569.                 <h2>Zavolat prodejci</h2>
  570.             </div>
  571.             <div class="share">
  572.                 {% for p in  vehicle.dealer.dealerPhones %}
  573.                     <a class="share__item" href="tel:{{ p.name }}">
  574.                         <img src="{{ asset('img/share__icon--phone.svg') }}" alt="telefon">
  575.                         {{ p.name }}
  576.                     </a>
  577.                 {% endfor %}
  578.             </div>
  579.             <footer class="modal__footer">
  580.                 <button class="modal__link js-modal-close" type="button">zavřít okno</button>
  581.             </footer>
  582.         </article>
  583.     </div>
  584.     <div class="modal" id="modal--write">
  585.         <div class="modal__overlay js-modal-close"></div>
  586.         <article class="modal__body modal__body--large">
  587.             <button class="modal__close js-modal-close" type="button"></button>
  588.             <div class="modal__header">
  589.                 <h2>Napsat prodejci</h2>
  590.             </div>
  591.             <section>
  592.                 <article>
  593.                     <form class="form">
  594.                         <input type="hidden" value="{{ vehicle.id }}" name="vehicleId">
  595.                         <div class="form__group form__group--strong">
  596.                             <input placeholder="Vaše jméno" name="name" required>
  597.                         </div>
  598.                         <div class="form__group form__group--strong">
  599.                             <input type="email" placeholder="Váš e-mail" name="email" required>
  600.                         </div>
  601.                         <div class="form__group form__group--strong">
  602.                             <input type="tel" placeholder="Vaše telefonní číslo" name="phone" required>
  603.                         </div>
  604.                         <div class="form__group form__group--strong">
  605.                 <textarea class="textarea_changer_target" placeholder="Vaše zpráva" rows="5" name="message"
  606.                           data-variants='{
  607.                           "1":"Dobrý den, mám zájem o vaši nabídku „{{ vehicle_clean_name(vehicle) }} - Rok {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}". Můžete mi prosím zavolat? Děkuji",
  608.                           "2":"Dobrý den, je vozidlo „{{ vehicle_clean_name(vehicle) }} - Rok {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}" stále k dispozici? Kontaktujte mě prosím. Děkuji.",
  609.                           "3":"Dobrý den, mám vážný zájem o vozidlo „{{ vehicle_clean_name(vehicle) }} - Rok {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}". Je možné jej zarezervovat? Děkuji.",
  610.                           "4":"Dobrý den, mám vážný zájem o vozidlo „{{ vehicle_clean_name(vehicle) }} - Rok {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}". Můžeme se dohodnout na nižší ceně? Je to reálné? Děkuji za odpověď."}'>
  611. Dobrý den, mám zájem o vaši nabídku „{{ vehicle_clean_name(vehicle) }} - Rok {{ vehicle.madeDate|slice(0,4) }}, {{ vehicle.mileage }} {{ vehicle.mileageUnit }}". Můžete mi prosím zavolat? Děkuji
  612.                 </textarea>
  613.                         </div>
  614.                         <p class="form__info">Kliknutím na tlačítko Odeslat zprávu vyjadřujete svůj souhlas se zásadami
  615.                             <a target="_blank" href="/ochrana-osobnich-udaju">Ochrany osobních údajů</a>.</p>
  616.                         <button class="form__submit form__submit--block" type="submit">
  617.                             <i class="icon icon-email"></i>
  618.                             Odeslat zprávu
  619.                         </button>
  620.                     </form>
  621.                 </article>
  622.             </section>
  623.         </article>
  624.     </div>
  625.     <script>
  626.         const forms = document.querySelectorAll('form')
  627.         forms.forEach((form) => {
  628.             form.addEventListener('submit', (e) => {
  629.                 e.preventDefault()
  630.                 let formData = new FormData(form);
  631.                 grecaptcha.ready(function () {
  632.                     grecaptcha.execute('{{ google_recaptcha_site_key }}', {action: 'submit'}).then(function (token) {
  633.                         formData.append('token', token)
  634.                         // Připojit anonymní analytickou identitu, pokud je již dostupná.
  635.                         // Odeslání skutečné poptávky na Analytics nikdy nečeká.
  636.                         if (window.AutanetAnalytics && typeof window.AutanetAnalytics.getIdentity === 'function') {
  637.                             const analyticsIdentity = window.AutanetAnalytics.getIdentity();
  638.                             if (analyticsIdentity && analyticsIdentity.visitorKey && analyticsIdentity.sessionKey && analyticsIdentity.pageviewKey) {
  639.                                 formData.append('visitor_key', analyticsIdentity.visitorKey);
  640.                                 formData.append('session_key', analyticsIdentity.sessionKey);
  641.                                 formData.append('pageview_key', analyticsIdentity.pageviewKey);
  642.                             }
  643.                         }
  644.                         const data = new URLSearchParams(formData);
  645.                         (async () => {
  646.                             const rawResponse = await fetch('{{ path('app_vehicle_form_new') }}', {
  647.                                 method: 'POST',
  648.                                 body: data
  649.                             });
  650.                             const content = await rawResponse.json();
  651.                             const button = form.querySelector('button')
  652.                             if (content.error === false) {
  653.                                 form.reset()
  654.                                 button.innerText = 'Odesláno, děkujeme za poptávku.'
  655.                                 button.classList.add("back-green")
  656.                             } else {
  657.                                 button.innerText = content.error
  658.                                 button.classList.add("back-red")
  659.                             }
  660.                         })();
  661.                     });
  662.                 });
  663.             })
  664.         })
  665.     </script>
  666.     {#
  667.     <div class="modal" id="modal--map">
  668.         <div class="modal__overlay js-modal-close"></div>
  669.         <article class="modal__body" style="padding: 5px; max-width: none; height: 75%;">
  670.             <iframe
  671.                     src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1318529.0090685813!2d14.353945871812089!3d49.80013041918973!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x470b948fd7dd8243%3A0xf8661c75d3db586f!2sCzechia!5e0!3m2!1sen!2ses!4v1677857037662!5m2!1sen!2ses"
  672.                     style="border:0; width: 100%; height: 100%;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
  673.         </article>
  674.     </div>
  675.     #}
  676.     <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  677.     <script>
  678.         $(".js-select2").select2({
  679.             language: "cs",
  680.             minimumResultsForSearch: -1,
  681.             width: "100%",
  682.         });
  683.         function handleMobileContact() {
  684.             const isMobile = window.innerWidth <= 768;
  685.             const mobileContact = document.querySelector('.dealer--mobile');
  686.             const desktopContact = document.querySelector('.dealer:not(.dealer--mobile)');
  687.             if (isMobile) {
  688.                 mobileContact.style.display = 'block';
  689.                 desktopContact.style.display = 'none';
  690.             } else {
  691.                 mobileContact.style.display = 'none';
  692.                 desktopContact.style.display = 'block';
  693.             }
  694.         }
  695.         handleMobileContact();
  696.         window.addEventListener('resize', handleMobileContact);
  697.         // === AUTANET PARTNER L04 LOGO IMPRESSION ===
  698.         const autanetPartnerL04Logos = document.querySelectorAll('[data-autanet-partner-logo-l04]');
  699.         if (
  700.             autanetPartnerL04Logos.length > 0
  701.             && window.AutanetAnalytics
  702.             && typeof window.AutanetAnalytics.withIdentity === 'function'
  703.             && 'IntersectionObserver' in window
  704.         ) {
  705.             const autanetPartnerL04Tracked = new Set();
  706.             const autanetPartnerL04Timers = new Map();
  707.             const clearAutanetPartnerL04Timer = logo => {
  708.                 const timer = autanetPartnerL04Timers.get(logo);
  709.                 if (timer) {
  710.                     clearTimeout(timer);
  711.                     autanetPartnerL04Timers.delete(logo);
  712.                 }
  713.             };
  714.             const autanetPartnerL04Observer = new IntersectionObserver(entries => {
  715.                 entries.forEach(entry => {
  716.                     const logo = entry.target;
  717.                     const partnerId = logo.dataset.autanetPartnerId;
  718.                     const dealerId = logo.dataset.dealerId;
  719.                     if (!partnerId || autanetPartnerL04Tracked.has(partnerId)) {
  720.                         clearAutanetPartnerL04Timer(logo);
  721.                         return;
  722.                     }
  723.                     if (entry.isIntersecting && entry.intersectionRatio >= 0.5) {
  724.                         if (autanetPartnerL04Timers.has(logo)) {
  725.                             return;
  726.                         }
  727.                         const timer = setTimeout(() => {
  728.                             autanetPartnerL04Timers.delete(logo);
  729.                             if (autanetPartnerL04Tracked.has(partnerId)) {
  730.                                 return;
  731.                             }
  732.                             autanetPartnerL04Tracked.add(partnerId);
  733.                             window.AutanetAnalytics.withIdentity(identity => {
  734.                                 if (!identity) {
  735.                                     autanetPartnerL04Tracked.delete(partnerId);
  736.                                     return;
  737.                                 }
  738.                                 const data = new URLSearchParams();
  739.                                 data.append('event_type', 'logo_impression');
  740.                                 data.append('placement', 'L04');
  741.                                 data.append('partner_id', partnerId);
  742.                                 data.append('dealer_id', dealerId);
  743.                                 data.append('vehicle_id', '{{ vehicle.id }}');
  744.                                 data.append('device', window.matchMedia('(max-width: 767px)').matches ? 'mobile' : 'desktop');
  745.                                 data.append('visitor_key', identity.visitorKey);
  746.                                 data.append('session_key', identity.sessionKey);
  747.                                 data.append('pageview_key', identity.pageviewKey);
  748.                                 fetch('{{ path('app_analytics_event') }}', {
  749.                                     method: 'POST',
  750.                                     headers: {
  751.                                         'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
  752.                                     },
  753.                                     body: data,
  754.                                     keepalive: true
  755.                                 }).catch(() => {
  756.                                     autanetPartnerL04Tracked.delete(partnerId);
  757.                                 });
  758.                             }, 5000);
  759.                         }, 1000);
  760.                         autanetPartnerL04Timers.set(logo, timer);
  761.                     } else {
  762.                         clearAutanetPartnerL04Timer(logo);
  763.                     }
  764.                 });
  765.             }, {
  766.                 threshold: [0.5]
  767.             });
  768.             autanetPartnerL04Logos.forEach(logo => autanetPartnerL04Observer.observe(logo));
  769.         }
  770.         // === VEHICLE STATISTICS TRACKING ===
  771.         let autanetInitialViewTracked = false;
  772.         // Trackování zobrazení stránky čeká na globální consent/identitu.
  773.         // Pokud identita není do 5 sekund dostupná, původní tracking proběhne bez identity.
  774.         if (window.AutanetAnalytics && typeof window.AutanetAnalytics.withIdentity === 'function') {
  775.             window.AutanetAnalytics.withIdentity(() => {
  776.                 trackInitialVehicleView();
  777.             }, 5000);
  778.         } else {
  779.             trackInitialVehicleView();
  780.         }
  781.         // Trackování "Zavolat prodejci" tlačítek
  782.         document.querySelectorAll('.js-modal-show[href="#modal--call"]').forEach(button => {
  783.             button.addEventListener('click', () => {
  784.                 trackVehicleAction('call_dealer');
  785.             });
  786.         });
  787.         // Trackování "Napsat prodejci" tlačítek
  788.         document.querySelectorAll('.js-modal-show[href="#modal--write"]').forEach(button => {
  789.             button.addEventListener('click', () => {
  790.                 trackVehicleAction('message_dealer');
  791.             });
  792.         });
  793.         // Trackování kliků na tel. čísla
  794.         setTimeout(() => {
  795.             document.querySelectorAll('a[href^="tel:"]').forEach(link => {
  796.                 link.addEventListener('click', () => {
  797.                     trackVehicleAction('phone_click');
  798.                 });
  799.             });
  800.         }, 100);
  801.         function trackInitialVehicleView() {
  802.             if (autanetInitialViewTracked) {
  803.                 return;
  804.             }
  805.             autanetInitialViewTracked = true;
  806.             trackVehicleAction('view');
  807.         }
  808.         function trackVehicleAction(action) {
  809.             const sendTracking = analyticsIdentity => {
  810.                 const formData = new FormData();
  811.                 formData.append('vehicle_id', '{{ vehicle.id }}');
  812.                 formData.append('action', action);
  813.                 if (analyticsIdentity) {
  814.                     formData.append('visitor_key', analyticsIdentity.visitorKey);
  815.                     if (analyticsIdentity.sessionKey) {
  816.                         formData.append('session_key', analyticsIdentity.sessionKey);
  817.                     }
  818.                     formData.append('pageview_key', analyticsIdentity.pageviewKey);
  819.                 }
  820.                 fetch('{{ path('app_vehicle_statistics_track') }}', {
  821.                     method: 'POST',
  822.                     body: formData
  823.                 }).catch(error => {
  824.                     console.log('Tracking error:', error);
  825.                 });
  826.             };
  827.             if (window.AutanetAnalytics && typeof window.AutanetAnalytics.withIdentity === 'function') {
  828.                 window.AutanetAnalytics.withIdentity(sendTracking, 5000);
  829.                 return;
  830.             }
  831.             sendTracking(null);
  832.         }
  833.     </script>
  834. {% endblock %}