Rework dates- and price-tables on product detail page

This commit is contained in:
Björn Fromme
2021-11-23 11:53:08 +01:00
parent c7e87d7c42
commit b3195bea89
10 changed files with 1012 additions and 1038 deletions
+735 -795
View File
File diff suppressed because it is too large Load Diff
@@ -6,7 +6,6 @@ require.context('../images', true, /\.(png|gif|svg|ico)$/);
// Require vendor styles
require('normalize.css/normalize.css');
require('slick-carousel/slick/slick.css');
require('cookieconsent/build/cookieconsent.min.css');
require('flatpickr/dist/flatpickr.css');
// Require main app
@@ -6,13 +6,18 @@
<f:link.typolink parameter="{concept.detailPage}"
title="{concept.name}"
class="flex flex-col">
<f:render partial="TeaserImage" arguments="{image: concept.teaserImage}"/>
<div class="flex-1 py-4 px-2 bg-white border-l border-r border-gray-200">
<div class="relative">
<f:render partial="TeaserImage" arguments="{image: concept.teaserImage}"/>
<div class="absolute top-0 left-0 inset-0 bg-concept-{concept.code}-overlay">
<div class="flex h-full w-full p-4 items-end headline--3 text-white">
{concept.name}
</div>
</div>
</div>
<div class="p-4 flex-1">
{concept.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()}
</div>
<div class="bg-concept-{concept.code} text-white uppercase leading-none p-2">
{concept.name}
</div>
<div class="bg-concept-{concept.code} h-1 w-20"></div>
</f:link.typolink>
</f:section>
@@ -6,9 +6,10 @@
<symbol id="icon-chevron-right" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></symbol>
<symbol id="icon-chevron-left" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></symbol>
<symbol id="icon-arrow-right" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path></symbol>
<symbol id="icon-arrow-circle-right" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 9l3 3m0 0l-3 3m3-3H8m13 0a9 9 0 11-18 0 9 9 0 0118 0z"></path></symbol>
<symbol id="icon-arrow-circle-right" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-8.707l-3-3a1 1 0 00-1.414 1.414L10.586 9H7a1 1 0 100 2h3.586l-1.293 1.293a1 1 0 101.414 1.414l3-3a1 1 0 000-1.414z" clip-rule="evenodd"></path></symbol>
<symbol id="icon-arrow-circle-left" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm.707-10.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L9.414 11H13a1 1 0 100-2H9.414l1.293-1.293z" clip-rule="evenodd"></path></symbol>
<symbol id="icon-minus-circle" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z"></path></symbol>
<symbol id="icon-plus-circle" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z"></path></symbol>
<symbol id="icon-plus-circle" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v2H7a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V7z" clip-rule="evenodd"></path></symbol>
<symbol id="icon-info-circle" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></symbol>
<symbol id="icon-home" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path></symbol>
<symbol id="icon-user" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path></symbol>
@@ -22,7 +23,7 @@
<symbol id="icon-calendar" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></symbol>
<symbol id="icon-phone" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path></symbol>
<symbol id="icon-email" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></symbol>
<symbol id="icon-tag" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"></path></symbol>
<symbol id="icon-tag" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M17.707 9.293a1 1 0 010 1.414l-7 7a1 1 0 01-1.414 0l-7-7A.997.997 0 012 10V5a3 3 0 013-3h5c.256 0 .512.098.707.293l7 7zM5 6a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"></path></symbol>
<symbol id="icon-faq" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></symbol>
<symbol id="icon-bed" fill="currentColor" stroke="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!-- Font Awesome Pro 5.15.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"/></symbol>
<symbol id="icon-bus" fill="currentColor" stroke="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Pro 5.15.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"/></symbol>
@@ -51,6 +52,7 @@
</clipPath>
<g clip-path="url(#_clip1)"><rect width="100" height="100"></rect></g>
</symbol>
<symbol id="icon-virus" fill="currentColor" stroke="none" viewBox="0 0 512 512"><!-- Font Awesome Pro 5.15.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z"/></symbol>
<!-- Flags -->
<symbol id="icon-flag-at" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd"><path fill="#fff" d="M640 480H0V0h640z"/><path fill="#ed2939" d="M640 480H0V320h640zm0-319.9H0V.1h640z"/></g></symbol>
<symbol id="icon-flag-ch" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 480"><g fill-rule="evenodd" stroke-width="1pt"><path fill="#d52b1e" d="M0 0h640v480H0z"/><g fill="#fff"><path d="M170 195h300v90H170z"/><path d="M275 90h90v300h-90z"/></g></g></symbol>

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

@@ -1,44 +1,46 @@
<div class="headerbar">
Konzept
<div class="space-y-2">
<div class="odd:bg-ep-primary-bg p-4" data-rte-content>
<div class="headline--3 headline--underlined">
Konzept
</div>
{product.conceptDescription -> f:format.html()}
</div>
<f:if condition="{product.calendarHotel} && {hotel.groupsPriceConfigs}">
<button type="button"
class="button w-full"
data-controller="lightbox"
data-lightbox-url-value="{f:uri.action(action: 'index', controller: 'GroupsPrice', arguments: '{hotel: hotel}', pageUid: settings.groupsPricePopupPageUid)}">
Preisberechnung
</button>
</f:if>
<div class="odd:bg-ep-primary-bg p-4" data-rte-content>
<div class="headline--3 headline--underlined" data-rte-content>
Verpflegung
</div>
{product.boardDescription -> f:format.html()}
</div>
<f:if condition="{product.additionalServices}">
<div class="odd:bg-ep-primary-bg p-4" data-rte-content>
<div class="headline--3 headline--underlined">
Zusatzleistungen
</div>
{product.additionalServices -> f:format.html()}
</div>
</f:if>
<f:if condition="{product.programmeDescription}">
<div class="odd:bg-ep-primary-bg p-4" data-rte-content>
<div class="headline--3 headline--underlined">
Programm
</div>
{product.programmeDescription -> f:format.html()}
</div>
</f:if>
<f:if condition="{product.skiPassDescription}">
<div class="odd:bg-ep-primary-bg p-4" data-rte-content>
<div class="headline--3 headline--underlined">
Skipass, Kurse, Leihmaterial
</div>
{product.skiPassDescription -> f:format.html()}
</div>
</f:if>
</div>
<div class="product-details product-details--concept" data-rte-content>
{product.conceptDescription -> f:format.html()}
</div>
<f:if condition="{product.calendarHotel} && {hotel.groupsPriceConfigs}">
<button type="button"
class="button w-full"
data-controller="lightbox"
data-lightbox-url-value="{f:uri.action(action: 'index', controller: 'GroupsPrice', arguments: '{hotel: hotel}', pageUid: settings.groupsPricePopupPageUid)}">
Preisberechnung
</button>
</f:if>
<div class="headerbar">
Verpflegung
</div>
<div class="product-details product-details--board" data-rte-content>
{product.boardDescription -> f:format.html()}
</div>
<f:if condition="{product.additionalServices}">
<div class="headerbar">
Zusatzleistungen
</div>
<div class="product-details product-details--services" data-rte-content>
{product.additionalServices -> f:format.html()}
</div>
</f:if>
<f:if condition="{product.programmeDescription}">
<div class="headerbar">
Programm
</div>
<div class="product-details product-details--programme" data-rte-content>
{product.programmeDescription -> f:format.html()}
</div>
</f:if>
<f:if condition="{product.skiPassDescription}">
<div class="headerbar">
Skipass, Kurse, Leihmaterial
</div>
<div class="product-details product-details--skipass" data-rte-content>
{product.skiPassDescription -> f:format.html()}
</div>
</f:if>
@@ -19,7 +19,7 @@
alt="{product.name}"
width="640" height="480" />
</a>
<div class="absolute top-0 left-0 z-10 inset-x-0 p-2 flex justify-between items-center {f:if(condition: concept, then: 'bg-concept-{concept.code}-80', else: 'bg-ep-primary-80')}">
<div class="absolute top-0 left-0 z-10 inset-x-0 p-2 flex justify-between items-center {f:if(condition: concept, then: 'bg-concept-{concept.code}-overlay', else: 'bg-ep-primary-80')}">
<div class="flex items-center space-x-2">
<f:if condition="{country.code}">
<svg class="product-teaser__flag">
@@ -5,66 +5,35 @@
<f:layout name="Default"/>
<f:section name="Main">
<div class="headerbar">
<div class="headline--3 headline--underlined">
Buchungsoptionen {hotel.name}
</div>
<div data-controller="pricetable">
<div class="mb-4" data-controller="pricetable">
<f:if condition="{hasSurcharge} || {hasDiscount}">
<f:if condition="{hasSurcharge}">
<button type="button"
data-action="pricetable#toggleSurcharge"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light mb-2">
<svg class="w-4 h-4">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="surchargeToggleLabel"
data-label-default="Preise für Eigenanreise anzeigen"
data-label-alt="Preise für Busanreise anzeigen">
Preise für Eigenanreise anzeigen
</span>
</button>
</f:if>
<f:if condition="{hasDiscount}">
<button type="button"
data-action="pricetable#toggleDiscount"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light mb-2">
<svg class="w-4 h-4">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="discountToggleLabel"
data-label-default="Preise für Busanreise anzeigen"
data-label-alt="Preise für Eigenanreise anzeigen">
Preise für Busanreise anzeigen
</span>
</button>
</f:if>
</f:if>
<table class="w-full border border-gray-300 border-collapse mb-4">
<table class="w-full mb-4">
<thead>
<tr class="bg-gray-100">
<th class="border border-gray-300 px-2 py-1 md:p-2 text-left text-sm md:text-base">
Termin
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
Nächte
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
inklusive
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
ab
</th>
<th></th>
</tr>
<tr class="bg-ep-primary-dark text-white">
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-left text-sm md:text-base">
Termin
</th>
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-sm md:text-base">
Nächte
</th>
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-sm md:text-base">
inklusive
</th>
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-sm md:text-base">
ab
</th>
<th></th>
</tr>
</thead>
<tbody>
<f:for each="{dates}" as="row" iteration="iteration">
<tr class="hover:bg-gray-100{f:if(condition: '{iteration.cycle} > 5', then: ' hidden')}"
<tr class="odd:bg-ep-primary-bg hover:bg-gray-100 odd:hover:bg-gray-100{f:if(condition: '{iteration.cycle} > 5', then: ' hidden')}"
data-pricetable-target="row">
<td class="border border-gray-300 px-2 py-1 md:p-2">
<td class="border-r border-gray-200 px-2 py-1 md:p-2">
<f:if condition="{bookable} && {row.available} && {row.showBookingButton}">
<f:then>
<button type="button"
@@ -81,12 +50,12 @@
</f:else>
</f:if>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2 text-center">
<td class="border-r border-gray-200 px-2 py-1 md:p-2 text-center">
<span class="block text-sm md:text-base">
{row.nights}
</span>
</td>
<td class="border border-gray-300 px-2 p-1">
<td class="border-r border-gray-200 px-2 p-1">
<div class="flex flex-wrap items-center">
<f:if condition="{row.busIncluded}">
<span class="block p-1"
@@ -122,7 +91,7 @@
</button>
</div>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2 text-center">
<td class="border-r border-gray-200 px-2 py-1 md:p-2 text-center">
<f:if condition="{row.pseudoPrice}">
<span class="block text-sm line-through">
{row.pseudoPrice} €
@@ -136,21 +105,31 @@
{row.minPrice}
</span>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2 text-center">
<td class="px-2 py-1 md:p-2 text-center">
<f:if condition="{row.showBookingButton}">
<f:then>
<button type="button"
class="button button--small{f:if(condition: row.available, then: '', else: ' button--muted')}"
class="flex space-x-1 items-center {f:if(condition: row.available, then: 'text-ep-primary-light', else: 'text-gray-300')}"
data-action="product-details#loadPrices"
data-date-uid="{row.dateUid}">
Infos &amp; buchen
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span class="font-bold text-sm uppercase">
Infos &amp; buchen
</span>
</button>
</f:then>
<f:else>
<a href="{f:uri.typolink(parameter: settings.travelAlertPageUid)}"
title="Reisen-Alert"
class="button button--small button--muted">
Reisen-Alert
class="flex space-x-1 items-center text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span class="font-bold text-sm uppercase">
Reisen-Alert
</span>
</a>
</f:else>
</f:if>
@@ -160,36 +139,69 @@
</tbody>
</table>
<f:if condition="{dates -> f:count()} > 5 || {altProductLink}">
<div class="grid grid-cols-1 md:grid-cols-2 gap-2 pb-4">
<f:if condition="{dates -> f:count()} > 5">
<button type="button"
class="flex items-center space-x-1 focus:outline-none text-ep-primary"
data-action="pricetable#toggleRows">
<svg class="w-4 h-4">
<use href="#icon-plus-circle"
data-pricetable-target="rowToggleIcon"></use>
</svg>
<span data-pricetable-target="rowToggleLabel">
Alle Termine anzeigen
</span>
</button>
</f:if>
<f:if condition="{altProductLink}">
<a href="{altProductLink}"
title="{altLabel}"
class="flex items-center space-x-1 focus:outline-none text-ep-primary">
<svg class="w-4 h-4">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span>
{altLabel}
</span>
</a>
</f:if>
</div>
</f:if>
<ul class="divide-y divide-gray-200">
<f:if condition="{hasSurcharge}">
<li class="py-2">
<button type="button"
data-action="pricetable#toggleSurcharge"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="surchargeToggleLabel"
data-label-default="Preise für Eigenanreise anzeigen"
data-label-alt="Preise für Busanreise anzeigen">
Preise für Eigenanreise anzeigen
</span>
</button>
</li>
</f:if>
<f:if condition="{hasDiscount}">
<li class="py-2">
<button type="button"
data-action="pricetable#toggleDiscount"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="discountToggleLabel"
data-label-default="Preise für Busanreise anzeigen"
data-label-alt="Preise für Eigenanreise anzeigen">
Preise für Busanreise anzeigen
</span>
</button>
</li>
</f:if>
<f:if condition="{dates -> f:count()} > 5">
<li class="py-2">
<button type="button"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light"
data-action="pricetable#toggleRows">
<svg class="w-6 h-6">
<use href="#icon-plus-circle"
data-pricetable-target="rowToggleIcon"></use>
</svg>
<span data-pricetable-target="rowToggleLabel">
Alle Termine anzeigen
</span>
</button>
</li>
</f:if>
<f:if condition="{altProductLink}">
<li class="py-2">
<a href="{altProductLink}"
title="{altLabel}"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span>
{altLabel}
</span>
</a>
</li>
</f:if>
</ul>
</div>
<div class="hidden fixed inset-0 w-full h-full z-50"
@@ -5,72 +5,40 @@
<f:layout name="Default"/>
<f:section name="Main">
<div class="headerbar md:flex md:items-center md:justify-between">
<span class="block">Buchungsoptionen</span>
<span class="block">{hotel.name} {dateRange}</span>
<div class="headline--3 headline--underlined">
Buchungsoptionen {hotel.name} {dateRange}
</div>
<div data-controller="pricetable"
<div class="mb-4" data-controller="pricetable"
data-pricetable-show-all-rows-value="true">
<f:if condition="{hasSurcharge} || {hasDiscount}">
<f:if condition="{hasSurcharge}">
<button type="button"
data-action="pricetable#toggleSurcharge"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light mb-2">
<svg class="w-4 h-4">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="surchargeToggleLabel"
data-label-default="Preise für Eigenanreise anzeigen"
data-label-alt="Preise für Busanreise anzeigen">
Preise für Eigenanreise anzeigen
</span>
</button>
</f:if>
<f:if condition="{hasDiscount}">
<button type="button"
data-action="pricetable#toggleDiscount"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light mb-2">
<svg class="w-4 h-4">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="discountToggleLabel"
data-label-default="Preise für Busanreise anzeigen"
data-label-alt="Preise für Eigenanreise anzeigen">
Preise für Busanreise anzeigen
</span>
</button>
</f:if>
</f:if>
<table class="w-full border border-gray-300 border-collapse mb-4">
<table class="w-full mb-4">
<thead>
<tr class="bg-gray-100">
<th class="border border-gray-300 px-2 py-1 md:p-2 text-left text-sm md:text-base">
Zimmertyp
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
<span class="lg:hidden">
inkl.
</span>
<span class="hidden lg:block">
inklusive
</span>
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
optional
</th>
<th class="border border-gray-300 px-2 py-1 md:p-2 text-sm md:text-base">
Preis/Buchen
</th>
</tr>
<tr class="bg-ep-primary-dark text-white">
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-left text-sm md:text-base">
Zimmertyp
</th>
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-sm md:text-base">
<span class="lg:hidden">
inkl.
</span>
<span class="hidden lg:block">
inklusive
</span>
</th>
<th class="border-r border-overlay-white-50 px-2 py-1 md:p-2 text-sm md:text-base">
optional
</th>
<th class="px-2 py-1 md:p-2 text-sm md:text-base">
Preis/Buchen
</th>
</tr>
</thead>
<tbody>
<f:for each="{prices}" as="row">
<tr class="hover:bg-gray-100"
<tr class="odd:bg-ep-primary-bg hover:bg-gray-100 odd:hover:bg-gray-100"
data-pricetable-target="row">
<td class="border border-gray-300 px-2 py-1 md:p-2">
<td class="border-r border-gray-200 px-2 py-1 md:p-2">
<f:if condition="{row.showBookingButton} && {row.available}">
<f:then>
<a class="inline-block text-ep-primary-light text-xs sm:text-sm md:text-base leading-tight"
@@ -92,7 +60,7 @@
</f:else>
</f:if>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2">
<td class="border-r border-gray-200 px-2 py-1 md:p-2">
<div class="flex items-center justify-around space-x-1">
<f:if condition="{row.busIncluded}">
<span data-cooltipz-dir="top"
@@ -117,7 +85,7 @@
</f:if>
</div>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2 text-center">
<td class="border-r border-gray-200 px-2 py-1 md:p-2 text-center">
<f:if condition="{row.hasOptionalServices} && {row.available}">
<button type="button"
class="text-ep-primary-light text-sm md:text-base text-left leading-none whitespace-nowrap p-1"
@@ -131,7 +99,7 @@
</button>
</f:if>
</td>
<td class="border border-gray-300 px-2 py-1 md:p-2 whitespace-nowrap">
<td class="px-2 py-1 md:p-2 whitespace-nowrap">
<f:if condition="{row.isHideBookingButton}">
<f:then>
<f:link.typolink parameter="{settings.travelAlertPageUid}"
@@ -175,19 +143,58 @@
</f:for>
</tbody>
</table>
<f:if condition="{isSingleDate}">
<f:else>
<button type="button"
class="button button--small mb-4"
data-action="product-details#showDates">
<svg class="w-4 h-4 text-white">
<use href="#icon-chevron-left"></use>
</svg>
<span>zurück zur Terminübersicht</span>
</button>
</f:else>
</f:if>
<div class="headerbar">
<ul class="divide-y divide-gray-200 mb-4">
<f:if condition="{hasSurcharge}">
<li class="py-2">
<button type="button"
data-action="pricetable#toggleSurcharge"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="surchargeToggleLabel"
data-label-default="Preise für Eigenanreise anzeigen"
data-label-alt="Preise für Busanreise anzeigen">
Preise für Eigenanreise anzeigen
</span>
</button>
</li>
</f:if>
<f:if condition="{hasDiscount}">
<li class="py-2">
<button type="button"
data-action="pricetable#toggleDiscount"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-right"></use>
</svg>
<span data-pricetable-target="discountToggleLabel"
data-label-default="Preise für Busanreise anzeigen"
data-label-alt="Preise für Eigenanreise anzeigen">
Preise für Busanreise anzeigen
</span>
</button>
</li>
</f:if>
<f:if condition="{isSingleDate}">
<f:else>
<li class="py-2">
<button type="button"
class="flex items-center space-x-1 focus:outline-none text-ep-primary-light"
data-action="product-details#showDates">
<svg class="w-6 h-6">
<use href="#icon-arrow-circle-left"></use>
</svg>
<span>
zurück zur Terminübersicht
</span>
</button>
</li>
</f:else>
</f:if>
</ul>
<div class="headline--3 headline--underlined">
Inklusivleistungen
</div>
<div class="bg-gray-50 p-4 mb-8">
@@ -102,9 +102,14 @@
</p>
<p class="mb-4">
<a href="{f:uri.typolink(parameter: settings.coronaUpdatesPageUid)}"
class="block w-full py-2 border-2 border-red-500 rounded text-red-500 text-center uppercase hover:bg-red-500 hover:text-white transition-colors duration-200 ease-in-out"
class="block w-full px-4 py-2 bg-red-500 text-white flex items-center space-x-2"
title="Corona Updates">
Corona Updates
<svg class="w-4 h-4">
<use href="#icon-virus"></use>
</svg>
<span>
Corona Updates
</span>
</a>
</p>
</div>
+28 -26
View File
@@ -14,17 +14,17 @@ module.exports = {
safelist: [
'bg-header-season-w',
'bg-header-season-s',
'bg-concept-bdg', 'bg-concept-bdg-80',
'bg-concept-skr', 'bg-concept-skr-80',
'bg-concept-evt', 'bg-concept-evt-80',
'bg-concept-fam', 'bg-concept-fam-80',
'bg-concept-grp', 'bg-concept-grp-80',
'bg-concept-prg', 'bg-concept-prg-80',
'bg-concept-ind', 'bg-concept-ind-80',
'bg-concept-wkd', 'bg-concept-wkd-80',
'bg-concept-spz', 'bg-concept-spz-80',
'bg-concept-epe', 'bg-concept-epe-',
'bg-concept-sfl', 'bg-concept-sfl-80',
'bg-concept-bdg', 'bg-concept-bdg-overlay',
'bg-concept-skr', 'bg-concept-skr-overlay',
'bg-concept-evt', 'bg-concept-evt-overlay',
'bg-concept-fam', 'bg-concept-fam-overlay',
'bg-concept-grp', 'bg-concept-grp-overlay',
'bg-concept-prg', 'bg-concept-prg-overlay',
'bg-concept-ind', 'bg-concept-ind-overlay',
'bg-concept-wkd', 'bg-concept-wkd-overlay',
'bg-concept-spz', 'bg-concept-spz-overlay',
'bg-concept-epe', 'bg-concept-epe-overlay',
'bg-concept-sfl', 'bg-concept-sfl-overlay',
/^flatpickr-.*/,
],
},
@@ -53,24 +53,26 @@ module.exports = {
'white-50': tinycolor('#ffffff').setAlpha(0.5).toRgbString(),
},
concept: {
default: '#3d8ccb',
bdg: '#3d8ccb',
skr: '#3d8ccb',
evt: '#ed5454',
'evt-80': tinycolor('#ed5454').setAlpha(0.80).toRgbString(),
default: '#0173A5',
bdg: '#0173A5',
skr: '#0173A5',
'skr-overlay': tinycolor('#0173A5').setAlpha(0.70).toRgbString(),
evt: '#BA034F',
'evt-overlay': tinycolor('#BA034F').setAlpha(0.70).toRgbString(),
fam: '#7ca7d5',
'fam-80': tinycolor('#7ca7d5').setAlpha(0.80).toRgbString(),
grp: '#ffa300',
prg: '#3d8ccb',
'prg-80': tinycolor('#3d8ccb').setAlpha(0.80).toRgbString(),
ind: '#009fe3',
'ind-80': tinycolor('#009fe3').setAlpha(0.80).toRgbString(),
wkd: '#44d04e',
'wkd-80': tinycolor('#44d04e').setAlpha(0.80).toRgbString(),
'fam-overlay': tinycolor('#7ca7d5').setAlpha(0.70).toRgbString(),
grp: '#576D02',
'grp-overlay': tinycolor('#576D02').setAlpha(0.70).toRgbString(),
prg: '#0173A5',
'prg-overlay': tinycolor('#0173A5').setAlpha(0.70).toRgbString(),
ind: '#1684DD',
'ind-overlay': tinycolor('#1684DD').setAlpha(0.70).toRgbString(),
wkd: '#96BB05',
'wkd-overlay': tinycolor('#96BB05').setAlpha(0.70).toRgbString(),
spz: '#436a8a',
epe: '#436a8a',
sfl: '#999',
'sfl-80': tinycolor('#999999').setAlpha(0.80).toRgbString(),
sfl: '#4E4E51',
'sfl-overlay': tinycolor('#4E4E51').setAlpha(0.70).toRgbString(),
},
ep: {
primary: '#3d8ccb',