src/Elements/Bundle/DemiFrontendBundle/Resources/views/Includes/teaser/acco-teaser.html.twig line 1

Open in your IDE?
  1. {% if freeCancellationInList %}
  2.     {% set freeCancellationInList = accommodationItem.getHasFreeCancellation(searchParam.getDateFrom(), searchParam.getDateTo()) %}
  3. {% endif %}
  4. {% set isWhiteLabel =  demi_core_configuration("getIsWhitelabel",[]) %}
  5. {% set isFused = isFused is defined ? isFused : false %}
  6. {% set detailUrl = '' %}
  7. {% set isPackageSearch = isPackageSearch is defined ? isPackageSearch : false %}
  8. {% if noDate %}
  9.     {% set fromDate = null %}
  10. {% else %}
  11.     {% set fromDate = demi_getSearchFrom().getTimeStamp() %}
  12. {% endif %}
  13. {% if accommodationItem %}
  14.     {% set accommodation = pimcore_object(accommodationItem.getAccommodationId()) %}
  15.     {% set minPriceProducts = accommodationItem.getMinPriceProductSets() %}
  16.     {% set totalVacancies = accommodationItem.getTotalVacanciesAndOffers().getTotalVacancies() %}
  17.     {% set totalOffers = accommodationItem.getTotalVacanciesAndOffers().getTotalOffers() %}
  18.     {% set actualBookable = accommodationItem.getActualBookable() %}
  19.     {% set price = noDate ? accommodationItem.getMinPriceBase() : accommodationItem.getMinPrice() %}
  20.     {% set priceBeforeSpecial = null %}
  21.     {% set hasMinprice = null %}
  22.     {% set minPriceMeal = null %}
  23.     {% if tvbPackage is defined and minPriceProducts | length > 0 %}
  24.         {% set mealCode = minPriceProducts.0.getMealCode() %}
  25.     {% endif %}
  26. {% endif %}
  27. {% if tvbPackage is defined and tvbPackage is not null %}
  28.     {% set detailUrl = demi_demiUrl({"accommodation" : accommodation, "package" : tvbPackage, "locale" : app.request.locale},
  29.     'demi_acco_detail_tvbpackage_page', noDate and app.request().get('nearbySearchId') is not defined) %}
  30.     {% set imageGalleryId = "id_" ~ accommodation.getId() %}
  31. {% elseif isPackageSearch %}
  32.     {% set housePackageMaster = pimcore_object(accommodationItem.getHousePackageMasterId()) %}
  33.     {% set detailUrl = demi_demiUrl({'accommodation' : accommodation, 'package' : housePackageMaster, "locale" : app.request.locale},
  34.     'demi_acco_detail_package_page', noDate and app.request().get('nearbySearchId') is not defined) %}
  35.     {% set imageGalleryId = "id_" ~ housePackageMaster.getId() %}
  36. {% else %}
  37.     {% set detailUrl = pimcore_url({'object' : accommodation, "language": app.request.locale},
  38.     'demi_acco_detail_page', noDate and app.request().get('nearbySearchId') is not defined) %}
  39.     {% set imageGalleryId = "id_" ~ accommodation.getId() %}
  40. {% endif %}
  41. {% set lightboxTopBarUrl = url('demi_lightbox_topbar_content', {
  42.     'path' : document.getFullPath | trim('/', 'right')
  43. }) %}
  44. {% set maxRatingValue = demi_core_configuration("getMaxRatingValue", {}) ?: 5 %}
  45. {% set maxRatingNormalized = demi_core_configuration("getMaxRatingNormalized", {}) ?: 5 %}
  46. {% if noDate and isPackageSearch %}
  47.     {% set myMinPrice = 0 %}
  48.     {% for accommodationProduct in accommodationItem.getProducts() %}
  49.         {% if accommodationProduct.getBasePrice() is not null and (myMinPrice == 0 or myMinPrice > accommodationProduct.getBasePrice()) %}
  50.             {% set myMinPrice = accommodationProduct.getBasePrice() %}
  51.         {% endif %}
  52.     {% endfor %}
  53.     {% set price = myMinPrice %}
  54. {% endif %}
  55. {% set targetBlank = '' %}
  56. {% if not isWhiteLabel and not pimcore_device().isPhone() %}
  57.     {% set targetBlank = 'target="_blank"' %}
  58. {% endif %}
  59. {% set isMapAllowed = not pimcore_checkbox('noMapAllowed').isChecked() %}
  60. {% set accoPosition = accommodation.getPosition() %}
  61. <section
  62.     class="teaser {{ bodyPadding is defined and bodyPadding ? 'teaser--body-padding' : '' }} isClickable {{ styleModifier }} js-tracking js-tracking--impression"
  63.     data-acco-id="{{ accommodation.getId() }}"
  64.     {% if accoPosition is not null and (searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and searchParam.getIsAlternative()) %}
  65.         data-acco-lat="{{ accoPosition.getLatitude() }}"
  66.         data-acco-lon="{{ accoPosition.getLongitude() }}"
  67.     {% endif %}
  68.     data-tracking-name="{{ demi_impressionName(accommodation) }}"
  69.     data-tracking-id="{{ accommodation.getId() }}"
  70.     data-tracking-category="{{ demi_impressionCategory(accommodation,housePackageMaster is defined ? housePackageMaster : null ,searchParam,tvbPackage is defined ? tvbPackage : null) }}"
  71.     data-tracking-position="{{ position }}"
  72.     data-tracking-brand="{{ demi_impressionBrand(accommodation) }}"
  73.     data-tracking-list="{{ demi_impressionListType(searchParam) }}"
  74.     data-tracking-price="{{ price is defined ? (price | number_format(2, '.', '')) : '' }}"
  75. >
  76.     <div class="row {{ pimcore_device().isPhone() ? 'row--gutter-width-10' : 'row--gutter-width-20' }}">
  77.         {# Image Column (left) #}
  78.         <div class="col-4 col-md-3 d-flex flex-column">
  79.             {% set gallerySrcUrl = demi_demiUrl({
  80.                 'path' : 'demi',
  81.                 'objectId' : isPackageSearch ? housePackageMaster.getId() : accommodation.getId(),
  82.                 'fallbackId' : isPackageSearch ? accommodation.getId() : '',
  83.                 'thumbnail' : 'demi-desktop-gallery',
  84.                 'thumbSmall' : 'demi-desktop-gallery-small',
  85.                 'dateFrom' : fromDate ?: ''
  86.             }, 'demi_images') %}
  87.             {% set useHpmImage = (tvbPackage is not defined or tvbPackage is null) and housePackageMaster is defined and housePackageMaster is not null and housePackageMaster.getPackagetype()!='HousePackageMasterSelfAssign' %}
  88.             {% set firstImageUrl = demi_demiUrl({
  89.                 'path' : 'demi',
  90.                 'objectId' : useHpmImage ? housePackageMaster.getId() : accommodation.getId(),
  91.                 'fallbackId' : isPackageSearch ? accommodation.getId() : '',
  92.                 'thumbnail' : 'demi-hotel-list-teaser',
  93.                 'dateFrom' : fromDate ?: ''
  94.             }, 'demi_image') %}
  95.             <script type="text/javascript" data-cookieconsent="ignore">
  96.                 _config.lightbox = true
  97.                 _config.lazyImg = true
  98.             </script>
  99.             <div class="teaser__img btn-show-gallery-container js-lazy-img js-lazy-img--bg"
  100.                  data-img-url="{{ firstImageUrl }}"
  101.                  role="img"
  102.                  aria-label="{{ accommodation.getName() | replace({"*" : ""}) }}">
  103.                 {% if not pimcore_device().isPhone() %}
  104.                     <button type="button"
  105.                             class="btn-show-gallery btn-no-styling js-lightbox-group-dyn js-tracking--click-piwik"
  106.                             aria-label="{{ 'demi.detail.open-gallery' | trans }}"
  107.                             title="{{ 'demi.detail.open-gallery' | trans }}"
  108.                             data-lightbox-id="{{ imageGalleryId }}"
  109.                             data-lightbox-src-url="{{ gallerySrcUrl }}"
  110.                             data-lightbox-topbar-content-url="{{ lightboxTopBarUrl }}?ajax=1&id={{ accommodation.getId() }}{{ housePackageMaster ? '&pid='~housePackageMaster.getId() : '' }}{{ tvbPackage ? '&tid='~tvbPackage.getId():'' }}"
  111.                             data-lightbox-topbar-wrapper="#lightboxTopBar"
  112.                             data-tracking-category="{{ isPackageSearch ? 'Package list': 'Accommodation list' }}"
  113.                             data-tracking-action="open gallery">
  114.                         <span class="js-lightbox-group-dyn__icon demi-icon demi-icon-search btn-show-gallery__icon"
  115.                               aria-hidden="true"></span>
  116.                         <span class="js-lightbox-group-dyn__loading" hidden>
  117.                             <span class="text-center d-block">
  118.                             <span class="circle-spinner circle-spinner--white"
  119.                                   aria-label="{{ 'demi.content-loading' | trans }}"
  120.                                   title="{{ 'demi.content-loading' | trans }}"></span>
  121.                             </span>
  122.                         </span>
  123.                     </button>
  124.                 {% endif %}
  125.             </div>
  126.             {# // Min Price #}
  127.             {% if hasMinPrice is defined and hasMinPrice %}
  128.                 {% for special in demiAccommodationResultSetHelper.getMinPriceProductSpecials(accommodationItem) %}
  129.                     <div class="teaser__label bg-warning text-center p-1 small text-white strong">
  130.                         {{ special }}
  131.                     </div>
  132.                 {% endfor %}
  133.             {% endif %}
  134.         </div>
  135.         {#
  136.         // Desktop Center Column / Mobile right col
  137.         #}
  138.         <div class="{{ pimcore_device().isPhone() ? "col-8" : "col" }} teaser__body">
  139.             <div class="teaser__main-body">
  140.                 {% if accommodation.getIsTesthotel() %}
  141.                     <div class="demi-test-acco-notice text-danger"><strong>Testbetrieb</strong> nur für Debug/aktive
  142.                         Pimcore User sichtbar
  143.                     </div>
  144.                 {% endif %}
  145.                 {% if isPackageSearch %}
  146.                     <h3 class="mb-1 text-primary teaser__acco-title">
  147.                         <a href="{{ detailUrl }}" {{ targetBlank|raw }}>{{ housePackageMaster.getName() }} </a>
  148.                     </h3>
  149.                 {% endif %}
  150.                 <h3 class="mb-1{{ isPackageSearch ? '' : ' text-primary teaser__acco-title' }}">
  151.                     {% if not isPackageSearch %}
  152.                         <a href="{{ detailUrl }}" {{ targetBlank|raw }}>{{ demi_getAccoNameWithStars(accommodation)|raw }}</a>
  153.                     {% else %}
  154.                         {{ demi_getAccoNameWithStars(accommodation) }}
  155.                     {% endif %}
  156.                 </h3>
  157.                 {% if accommodation.getRatingSystem() is same as "TrustYou" %}
  158.                     {% set normalizedRating = demi_ratingGetNormalized(accommodation, maxRatingValue, maxRatingNormalized) %}
  159.                     {% if pimcore_device().isPhone() and normalizedRating %}
  160.                         {{ include('@ElementsDemiFrontend/Includes/rating.html.twig', {
  161.                             "score" : normalizedRating,
  162.                             "text" : accommodation.getRatingScoreDescription(),
  163.                             "styleModifier" : "mb-1 text-success",
  164.                             "isTextWhite" : false
  165.                         }) }}
  166.                     {% endif %}
  167.                 {% endif %}
  168.                 <div class="mb-1">
  169.                     {{ accommodation.getCategoryNames() }}
  170.                 </div>
  171.                 <div class="mb-1">
  172.                     {{ include('@ElementsDemiFrontend/Includes/accoClassifications.html.twig', {
  173.                         'classifications' : accommodation.getClassifications()
  174.                     }) }}
  175.                 </div>
  176.                 <div class="mb-1 small text-muted">
  177.                     {% if accommodation.getTown() and accommodation.getTown().getName() %}
  178.                         <div class="media">
  179.                             <div class="demi-icon demi-icon-marker mr-1 icon-in-text"
  180.                                  title="{{ 'demi.list.town' | trans }}"
  181.                                  aria-label="{{ 'demi.list.town' | trans }}"></div>
  182.                             <div class="media-body">
  183.                                 {{ accommodation.getTown().getName() }}
  184.                             </div>
  185.                         </div>
  186.                     {% elseif accommodation.getDistrict() and (accommodation.getDistrict().getNameLocalized(app.request.locale) or accommodation.getDistrict().getName()) %}
  187.                         <div class="media">
  188.                             <div class="demi-icon demi-icon-marker mr-1 icon-in-text"
  189.                                  title="{{ 'demi.list.town' | trans }}"
  190.                                  aria-label="{{ 'demi.list.town' | trans }}"></div>
  191.                             <div class="media-body">
  192.                                 {{ accommodation.getDistrict().getNameLocalized(app.request.locale) ?? accommodation.getDistrict().getName() }}
  193.                             </div>
  194.                         </div>
  195.                     {% endif %}
  196.                 </div>
  197.                 {% if searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and searchParam.getIsAlternative() %}
  198.                     <div class="text-primary small font-medium">
  199.                         {% set nights = searchParam.getNights() %}
  200.                         {% set array = {"[FROM-TO]" : min(nights) ~ '-' ~ max(nights),
  201.                             "[FROM-DATE]" : elements_dateFormat(searchParam.getDateFrom().getTimestamp(), 'date-long'),
  202.                             "[TO-DATE]" : elements_dateFormat(searchParam.getDateTo().getTimestamp(), 'date-long')} %}
  203.                         {{ demi_fillTranslation(array, "demi.detail.alternative-search-suggestion", app.request.locale) }}
  204.                     </div>
  205.                 {% endif %}
  206.                 {% if nearbySearchName is defined and nearbySearchName is not null and accoPosition is not null %}
  207.                     {% set latAcco = accoPosition.getLatitude() %}
  208.                     {% set longAcco = accoPosition.getLongitude() %}
  209.                     {% set latNbSO = app.request().get("nearbySearchLat") %}
  210.                     {% set longNbSO = app.request().get("nearbySearchLong") %}
  211.                     {% set distanceValue = demi_calcDistance(latAcco,longAcco,latNbSO,longNbSO) %}
  212.                     {% set distance = {
  213.                         'value' : demi_fillTranslation({"[DISTANCE]" : distanceValue | round(1)}, "demi.list.nearby-search.text"),
  214.                         'from' : 'demi.list.nearby-search.from' | trans ~ ' ' ~ nearbySearchName
  215.                     } %}
  216.                     {% if distanceValue %}
  217.                         <div class="mb-1 distance-info small">
  218.                             <span class="badge distance-info__badge">{{ distance.value }}</span>
  219.                             {% if accommodationItem.getDistanceMinutesToPoi() %}
  220.                                 <span>{{ demi_fillTranslation({"[MIN]" : accommodationItem.getDistanceMinutesToPoi() | round(1)}, "demi.list.nearby-search.distance-in-min") }}</span>
  221.                             {% endif %}
  222.                             <br>
  223.                             <span>{{ distance.from }}</span>
  224.                         </div>
  225.                     {% endif %}
  226.                 {% endif %}
  227.                 {% if accommodationItem %}
  228.                     {{ include('@ElementsDemiFrontend/Includes/teaser/badges.html.twig', {
  229.                         'accommodation' : accommodation,
  230.                         'accommodationItem' : accommodationItem
  231.                     }) }}
  232.                 {% endif %}
  233.                 {% set accoTopFacilities = demi_getTopFacilitiesForAccommodation(accommodation,demi_core_configuration("getTopFacilities", {})) %}
  234.                 {% if not pimcore_device().isPhone() and accoTopFacilities | length > 0 or freeCancellationInList %}
  235.                     <ul class="list-inline list-inline--dots mb-1 small">
  236.                         {% if freeCancellationInList %}
  237.                             <li class="list-inline-item  free-cancellation">
  238.                                 {{ searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and searchParam.getFreeCancellation() ? "demi.list.free-cancellation-filtered" : "demi.list.free-cancellation" | trans }}
  239.                             </li>
  240.                         {% endif %}
  241.                         {% if accoTopFacilities | length > 0 %}
  242.                             {% for topFacility in accoTopFacilities %}
  243.                                 <li class="list-inline-item">
  244.                                     {{ topFacility.getName() }}
  245.                                 </li>
  246.                             {% endfor %}
  247.                         {% endif %}
  248.                     </ul>
  249.                 {% elseif freeCancellationInList %}
  250.                     <ul class="list-inline list-inline--dots mb-1 small">
  251.                         <li class="list-inline-item free-cancellation">
  252.                             {{ searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and searchParam.getFreeCancellation() ? "demi.list.free-cancellation-filtered" : "demi.list.free-cancellation" | trans }}
  253.                         </li>
  254.                     </ul>
  255.                 {% endif %}
  256.                 {% set tvbListNoDate = searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and not searchParam.getDateFrom() %}
  257.                 {% if pimcore_device().isPhone() and actualBookable and not tvbListNoDate %}
  258.                     {{ include('@ElementsDemiFrontend/Accommodation/includes/acco-teaser-vacancy-info.html.twig', {
  259.                         'totalVacancies':totalVacancies,
  260.                         'totalOffers':totalOffers
  261.                     }) }}
  262.                 {% endif %}
  263.             </div>
  264.             <hr class="my-1 d-md-none">
  265.             <div class="teaser__price-body d-md-none">
  266.                 <div class="mb-1 small text-muted">
  267.                     <div class="media">
  268.                         {% if minPriceMeal %}
  269.                             <div class="demi-icon demi-icon-restaurant mr-1"
  270.                                  aria-label="{{ 'demi.list.meals' | trans }}"
  271.                                  title="{{ 'demi.list.meals' | trans }}"></div>
  272.                             <div class="media-body">
  273.                                 {{ minPriceMeal }}
  274.                             </div>
  275.                         {% elseif searchParam.getIsCorridor() %}
  276.                             <div class="media-body">{{ 'demi.detail.priceinfo.per-person-per-night' | trans }}</div>
  277.                         {% elseif accommodationItem and accommodationItem.getPriceInfo() %}
  278.                             <div
  279.                                 class="media-body">{{ include('@ElementsDemiFrontend/Includes/priceInfoStr.html.twig', {'type' : accommodationItem.getPriceInfo().type, 'nights' : accommodationItem.getPriceInfo().nights}) }}</div>
  280.                         {% elseif accommodationItem and accommodationItem.getMinPriceProductSets()  is not empty and accommodationItem.getMinPriceProductSets()[0].getPriceInfo() is iterable and accommodationItem and accommodationItem.getMinPriceProductSets() %}
  281.                             {% set productToUse = accommodationItem.getMinPriceProductSets()[0] %}
  282.                             {%  if productToUse.getPriceInfo() is not empty %}
  283.                             <div
  284.                                 class="media-body">{{ include('@ElementsDemiFrontend/Includes/priceInfoStr.html.twig', {'type' : productToUse.getPriceInfo().rule, 'nights' : productToUse.getPriceInfo().nights }) }}</div>
  285.                             {% endif %}
  286.                         {% elseif not noDate and useLtsAndFusedMapTranslation is defined and accommodationItem is not defined %}
  287.                             {{ 'demi.list.map.not-available-for-filters' | trans }}
  288.                         {% endif %}
  289.                     </div>
  290.                 </div>
  291.                 {# Column right #}
  292.                 <div class="row align-items-baseline">
  293.                     <div class="col">
  294.                         {% if priceBeforeSpecial > price %}
  295.                             <span class="sr-only">{{ 'demi.instead-of' | trans }}</span>
  296.                             <span class="col text-muted">
  297.                                 {{ demi_paymentGetPriceObject(priceBeforeSpecial, accommodation) }}
  298.                             </span>
  299.                         {% endif %}
  300.                     </div>
  301.                     {% if price > 0 %}
  302.                         <strong class="col col-auto mr-auto text-success">
  303.                             {{ "demi.price-from-short" | trans }} <span
  304.                                 class="acco-teaser__price">{{ demi_paymentGetPriceObject(price, accommodation) }}</span>
  305.                         </strong>
  306.                     {% endif %}
  307.                 </div>
  308.             </div>
  309.             <a href="{{ detailUrl }}" class="teaser__arrow demi-icon demi-icon-chevron-right d-md-none"
  310.                title="{{ 'demi.list.detailsite' | trans }}" aria-label="{{ 'demi.list.detailsite' | trans }}"></a>
  311.         </div>
  312.         <div class="d-none d-md-block col teaser__price-body--big">
  313.             <div class="row h-100">
  314.                 <div class="col">
  315.                     {% if accommodation.getRatingSystem() is same as "TrustYou" %}
  316.                         {% set normalizedRating = demi_ratingGetNormalized(accommodation, maxRatingValue, maxRatingNormalized) %}
  317.                         {% if not pimcore_device().isPhone() and normalizedRating %}
  318.                             <div class="trustyou-logo mb-1"><span class="sr-only">TrustYou Rating</span></div>
  319.                             {{ include('@ElementsDemiFrontend/Includes/rating.html.twig', {
  320.                                 "score" : normalizedRating,
  321.                                 "text" : accommodation.getRatingScoreDescription(),
  322.                                 "styleModifier" : "mb-2 text-success",
  323.                                 "showReviewCount" : false,
  324.                                 "isTextWhite" : false
  325.                             }) }}
  326.                         {% endif %}
  327.                     {% endif %}
  328.                     <div class="mb-1 small text-muted">
  329.                         <div class="media">
  330.                             {% if minPriceMeal %}
  331.                                 <div class="demi-icon demi-icon-restaurant mr-1"
  332.                                      aria-label="{{ 'demi.list.meals' | trans }}"
  333.                                      title="{{ 'demi.list.meals' | trans }}"></div>
  334.                                 <div class="media-body">
  335.                                     {{ minPriceMeal }}
  336.                                 </div>
  337.                             {% elseif searchParam.getIsCorridor() %}
  338.                                 <div class="media-body">{{ 'demi.detail.priceinfo.per-person-per-night' | trans }}</div>
  339.                             {% elseif accommodationItem and accommodationItem.getPriceInfo() %}
  340.                                 <div
  341.                                     class="media-body">{{ include('@ElementsDemiFrontend/Includes/priceInfoStr.html.twig', {'type' : accommodationItem.getPriceInfo().type, 'nights' : accommodationItem.getPriceInfo().nights }) }}</div>
  342.                             {% elseif accommodationItem and accommodationItem.getMinPriceProductSets() is not empty and accommodationItem.getMinPriceProductSets()[0] and accommodationItem.getMinPriceProductSets()[0].getPriceInfo() is iterable %}
  343.                                 {% set productToUse = accommodationItem.getMinPriceProductSets()[0] %}
  344.                                 {% if productToUse.getPriceInfo() is not empty %}
  345.                                 <div
  346.                                     class="media-body">{{ include('@ElementsDemiFrontend/Includes/priceInfoStr.html.twig', {'type' : productToUse.getPriceInfo().rule, 'nights' : productToUse.getPriceInfo().nights}) }}</div>
  347.                                 {% endif %}
  348.                             {% endif %}
  349.                         </div>
  350.                     </div>
  351.                     <div class="row align-items-baseline mb-1">
  352.                         <div class="{{ priceBeforeSpecial > price ? 'col ': '' }}col-lg-12">
  353.                             {% if (priceBeforeSpecial > price) %}
  354.                                 <span class="sr-only">{{ 'demi.instead-of' | trans }}</span>
  355.                                 <s class="text-muted">{{ demi_paymentGetPriceObject(priceBeforeSpecial, accommodation) }}</s>
  356.                             {% endif %}
  357.                         </div>
  358.                         {% if price > 0 %}
  359.                             <strong class="col col-auto mr-auto text-success">
  360.                                 {{ "demi.price-from-short" | trans }} <span
  361.                                     class="teaser__price">{{ demi_paymentGetPriceObject(price,accommodation) }}</span>
  362.                             </strong>
  363.                         {% endif %}
  364.                     </div>
  365.                     {% set tvbListNoDate = searchParam is instanceof("\\Elements\\Demi\\Accommodation\\Search\\Parameter") and not searchParam.getDateFrom() %}
  366.                     {% if actualBookable and not tvbListNoDate %}
  367.                         {{ include('@ElementsDemiFrontend/Accommodation/includes/acco-teaser-vacancy-info.html.twig', {
  368.                             'totalVacancies' : totalVacancies,
  369.                             'totalOffers' : totalOffers,
  370.                             'styleModifier' : ''
  371.                         }) }}
  372.                     {% endif %}
  373.                     {% if isMapAllowed and accoPosition is not null and accoPosition.getLatitude() and accoPosition.getLongitude() %}
  374.                         <button type="button"
  375.                                 class="btn-no-styling js-accommodation-map__show-on-map teaser__show-on-map mt-2">
  376.                             <span class="demi-icon demi-icon-marker icon-in-text" aria-hidden="true"></span>
  377.                             <span>
  378.                                 {{ 'demi.list.show-on-map' | trans }}
  379.                             </span>
  380.                         </button>
  381.                     {% endif %}
  382.                 </div>
  383.                 <div class="col col-auto align-self-center">
  384.                     <a href="{{ detailUrl }}" class="btn btn-default teaser__detail-btn" {{ isWhiteLabel ? 'target="_blank"' : '' }}
  385.                        title="{{ 'demi.list.detailsite' | trans }}" aria-label="{{ 'demi.list.detailsite' | trans }}">
  386.                         <span class="demi-icon demi-icon-arrow-right" aria-hidden="true"></span>
  387.                     </a>
  388.                 </div>
  389.             </div>
  390.         </div>
  391.     </div>
  392. </section>