WIP Evaluate alpinejs
This commit is contained in:
Generated
+21
@@ -1547,6 +1547,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@vue/reactivity": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-glJzJoN2xE7I2lRvwKM5u1BHRPTd1yc8iaf//Lai/78/uYAvE5DXp5HzWRFOwMlbRvMGJHIQjOqoxj87cDAaag==",
|
||||||
|
"requires": {
|
||||||
|
"@vue/shared": "3.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/shared": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-EmH/poaDWBPJaPILXNI/1fvUbArJQmmTyVCwvvyDYDFnkPoTclAbHRAtyIvqfez7jybTDn077HTNILpxlsoWhg=="
|
||||||
|
},
|
||||||
"@webassemblyjs/ast": {
|
"@webassemblyjs/ast": {
|
||||||
"version": "1.11.0",
|
"version": "1.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
|
||||||
@@ -1806,6 +1819,14 @@
|
|||||||
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
|
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"alpinejs": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-svEX82laPua+oqbYlUgX1H7Q+R0GD0V7fOnjZocPBqABmpQGkofPtPV9dGFkgZy7G6q60KFSzkiSwKMw33EFYw==",
|
||||||
|
"requires": {
|
||||||
|
"@vue/reactivity": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"amdefine": {
|
"amdefine": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"@fancyapps/fancybox": "^3.5.7",
|
"@fancyapps/fancybox": "^3.5.7",
|
||||||
"@splidejs/splide": "^2.4.21",
|
"@splidejs/splide": "^2.4.21",
|
||||||
"@tailwindcss/custom-forms": "^0.2.1",
|
"@tailwindcss/custom-forms": "^0.2.1",
|
||||||
|
"alpinejs": "^3.1.1",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"axios-auth-refresh": "^1.0.7",
|
"axios-auth-refresh": "^1.0.7",
|
||||||
"bootstrap-sass": "^3.4.1",
|
"bootstrap-sass": "^3.4.1",
|
||||||
|
|||||||
@@ -5,62 +5,37 @@ require('lazysizes/plugins/unveilhooks/ls.unveilhooks')
|
|||||||
require('picturefill')
|
require('picturefill')
|
||||||
require('leaflet')
|
require('leaflet')
|
||||||
|
|
||||||
// Enable resolution of stimulus controllers
|
|
||||||
import { Application } from 'stimulus'
|
|
||||||
import { definitionsFromContext } from 'stimulus/webpack-helpers'
|
|
||||||
|
|
||||||
const application = Application.start()
|
|
||||||
const context = require.context('./controllers', true, /\.js$/)
|
|
||||||
application.load(definitionsFromContext(context))
|
|
||||||
|
|
||||||
// Polyfills
|
// Polyfills
|
||||||
import smoothscroll from 'smoothscroll-polyfill'
|
import smoothscroll from 'smoothscroll-polyfill'
|
||||||
smoothscroll.polyfill()
|
smoothscroll.polyfill()
|
||||||
|
|
||||||
// Function to parse config values from JSON data in HTML source
|
import Alpine from 'alpinejs'
|
||||||
const parseAppConfig = () => {
|
import parseAppConfig from './components/appconfig'
|
||||||
const configElement = document.getElementById('appconfig');
|
import initSliders from './components/sliders'
|
||||||
if (null === configElement) {
|
import appendPaCode from './components/pacode'
|
||||||
return {}
|
import scrollTop from './components/scoll-top'
|
||||||
}
|
import sticky from './components/sticky'
|
||||||
return JSON.parse(configElement.innerHTML);
|
import watchlistToggle from './components/watchlist-toggle'
|
||||||
}
|
|
||||||
|
|
||||||
// Function to append pacode parameter to urls specified in config by domain
|
|
||||||
const appendPaCode = appConfig => {
|
|
||||||
const paCode = appConfig.paCode
|
|
||||||
const externalDomains = appConfig.externalDomains
|
|
||||||
if (!paCode) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
document.querySelectorAll('a').forEach(element => {
|
|
||||||
if (element.hostname === location.hostname) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (externalDomains.indexOf(element.hostname) === -1) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let url = element.href
|
|
||||||
if (!url) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (url.indexOf('agenturcode=') !== -1) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const separator = url.indexOf('?') === -1 ? '?' : '&'
|
|
||||||
url += separator + 'agenturcode=' + paCode
|
|
||||||
element.href = url
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Executed on document ready
|
// Executed on document ready
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
const appConfig = parseAppConfig()
|
const appConfig = parseAppConfig()
|
||||||
|
const storedWatchlist = JSON.parse(sessionStorage.getItem('myep-watchlist'))
|
||||||
appendPaCode(appConfig)
|
appendPaCode(appConfig)
|
||||||
|
initSliders()
|
||||||
|
Alpine.store('appconfig', appConfig)
|
||||||
|
Alpine.store('show', {
|
||||||
|
searchBox: false,
|
||||||
|
mobileNav: false,
|
||||||
|
})
|
||||||
|
Alpine.store('watchlist', storedWatchlist ? storedWatchlist : [])
|
||||||
|
Alpine.data('scrollTop', scrollTop)
|
||||||
|
Alpine.data('sticky', sticky)
|
||||||
|
Alpine.data('watchlistToggle', watchlistToggle)
|
||||||
|
Alpine.start()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// LEGACY CODE FROM HERE ///
|
/// LEGACY CODE FROM HERE ///
|
||||||
|
|
||||||
// Import dependencies
|
// Import dependencies
|
||||||
|
|||||||
+3
-6
@@ -61,12 +61,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<a href="#" x-data="watchlistToggle" :data-uid="item.key" x-on:click.prevent="toggle()">
|
||||||
data-controller="watchlist-toggle"
|
<span data-microtip-position="top" x-bind:aria-label="label()" role="tooltip">
|
||||||
:data-watchlist-toggle-uid-value="item.key"
|
<i class="fa fa-plus-circle" x-bind:class="icon()"></i>
|
||||||
data-action="watchlist-toggle#toggle">
|
|
||||||
<span data-microtip-position="top" data-watchlist-toggle-target="tooltip" role="tooltip">
|
|
||||||
<i class="fa" data-watchlist-toggle-target="icon"></i>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
const parseAppConfig = () => {
|
||||||
|
const configElement = document.getElementById('appconfig');
|
||||||
|
if (null === configElement) {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
return JSON.parse(configElement.innerHTML);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default parseAppConfig
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
export default (callback, interval) => {
|
||||||
|
let debounceId
|
||||||
|
return (...args) => {
|
||||||
|
clearTimeout(debounceId)
|
||||||
|
debounceId = setTimeout(() => callback.apply(this, args), interval)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
const appendPaCode = appConfig => {
|
||||||
|
const paCode = appConfig.paCode
|
||||||
|
const externalDomains = appConfig.externalDomains
|
||||||
|
if (!paCode) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
document.querySelectorAll('a').forEach(element => {
|
||||||
|
if (element.hostname === location.hostname) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (externalDomains.indexOf(element.hostname) === -1) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let url = element.href
|
||||||
|
if (!url) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (url.indexOf('agenturcode=') !== -1) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const separator = url.indexOf('?') === -1 ? '?' : '&'
|
||||||
|
url += separator + 'agenturcode=' + paCode
|
||||||
|
element.href = url
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default appendPaCode
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import debounce from './debounce'
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
return {
|
||||||
|
show: false,
|
||||||
|
init() {
|
||||||
|
window.addEventListener('scroll', debounce(() => {
|
||||||
|
this.show = window.scrollY > window.innerHeight/3
|
||||||
|
}, 250))
|
||||||
|
},
|
||||||
|
scroll() {
|
||||||
|
window.scroll({ top: 0, left: 0, behavior: 'smooth' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
import Splide from '@splidejs/splide'
|
||||||
|
|
||||||
|
const defaultOptions = {
|
||||||
|
arrows: false,
|
||||||
|
pagination: false,
|
||||||
|
perMove: 1,
|
||||||
|
gap: '1rem',
|
||||||
|
pauseOnHover: false,
|
||||||
|
pauseOnFocus: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
const presets = {
|
||||||
|
header: {
|
||||||
|
...defaultOptions,
|
||||||
|
autoplay: true,
|
||||||
|
type: 'fade',
|
||||||
|
perPage: 1,
|
||||||
|
gap: 0,
|
||||||
|
rewind: true,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
...defaultOptions,
|
||||||
|
rewind: true,
|
||||||
|
pagination: true,
|
||||||
|
gap: 0,
|
||||||
|
classes: {
|
||||||
|
pagination: 'slider-pagination',
|
||||||
|
page: 'slider-pagination__dot',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
teasers: {
|
||||||
|
...defaultOptions,
|
||||||
|
perPage: 4,
|
||||||
|
padding: {
|
||||||
|
right: '2rem',
|
||||||
|
},
|
||||||
|
breakpoints: {
|
||||||
|
1200: {
|
||||||
|
perPage: 4,
|
||||||
|
padding: {
|
||||||
|
right: '2rem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
1024: {
|
||||||
|
perPage: 3,
|
||||||
|
padding: {
|
||||||
|
right: '2rem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
960: {
|
||||||
|
perPage: 2,
|
||||||
|
padding: {
|
||||||
|
right: '2rem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
640: {
|
||||||
|
perPage: 1,
|
||||||
|
padding: {
|
||||||
|
right: '2rem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
teasersEmbedded: {
|
||||||
|
...defaultOptions,
|
||||||
|
perPage: 2,
|
||||||
|
padding: {
|
||||||
|
right: '25%',
|
||||||
|
},
|
||||||
|
breakpoints: {
|
||||||
|
960: {
|
||||||
|
perPage: 3,
|
||||||
|
padding: {
|
||||||
|
right: '10%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
768: {
|
||||||
|
perPage: 2,
|
||||||
|
padding: {
|
||||||
|
right: '25%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
640: {
|
||||||
|
perPage: 2,
|
||||||
|
padding: {
|
||||||
|
right: '10%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
512: {
|
||||||
|
perPage: 1,
|
||||||
|
padding: {
|
||||||
|
right: '10%',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const initSliders = () => {
|
||||||
|
document.querySelectorAll( '[data-slider]').forEach(element => {
|
||||||
|
let options = {}
|
||||||
|
const preset = element.dataset.slider
|
||||||
|
if (preset in presets) {
|
||||||
|
options = presets[preset]
|
||||||
|
}
|
||||||
|
new Splide(element, options).mount()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default initSliders
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import debounce from './debounce'
|
||||||
|
|
||||||
|
export default function () {
|
||||||
|
return {
|
||||||
|
sticky: false,
|
||||||
|
offset: 0,
|
||||||
|
init() {
|
||||||
|
if (this.$el.dataset.offset) {
|
||||||
|
this.offset = this.$el.dataset.offset
|
||||||
|
}
|
||||||
|
window.addEventListener('scroll', debounce(() => {
|
||||||
|
this.sticky = window.scrollY > this.offset
|
||||||
|
}, 250))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
export default function () {
|
||||||
|
return {
|
||||||
|
uid: null,
|
||||||
|
init() {
|
||||||
|
this.uid = this.$el.dataset.uid
|
||||||
|
},
|
||||||
|
onList() {
|
||||||
|
return -1 !== this.$store.watchlist.indexOf(this.uid)
|
||||||
|
},
|
||||||
|
label() {
|
||||||
|
return this.onList() ? 'von der Merkliste entfernen' : 'auf die Merkliste setzen'
|
||||||
|
},
|
||||||
|
icon() {
|
||||||
|
return this.onList() ? 'fa-minus-circle' : 'fa-plus-circle'
|
||||||
|
},
|
||||||
|
toggle() {
|
||||||
|
const watchlistIndex = this.$store.watchlist.indexOf(this.uid)
|
||||||
|
if (-1 !== watchlistIndex) {
|
||||||
|
this.$store.watchlist.splice(watchlistIndex, 1)
|
||||||
|
} else {
|
||||||
|
this.$store.watchlist.push(this.uid)
|
||||||
|
}
|
||||||
|
sessionStorage.setItem('myep-watchlist', JSON.stringify(this.$store.watchlist))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
import { Controller } from 'stimulus'
|
|
||||||
import {useDebounce} from '../mixins/useDebounce'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
|
|
||||||
static values = { show: Boolean }
|
|
||||||
|
|
||||||
connect() {
|
|
||||||
useDebounce(this)
|
|
||||||
window.addEventListener('scroll', this.debounce(() => {
|
|
||||||
this.showValue = window.scrollY > window.innerHeight/3
|
|
||||||
}, 250))
|
|
||||||
}
|
|
||||||
|
|
||||||
scroll(e) {
|
|
||||||
e.preventDefault()
|
|
||||||
window.scroll({ top: 0, left: 0, behavior: 'smooth' })
|
|
||||||
}
|
|
||||||
|
|
||||||
showValueChanged() {
|
|
||||||
this.element.classList.toggle('hidden', false === this.showValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-110
@@ -1,110 +0,0 @@
|
|||||||
import { Controller } from 'stimulus'
|
|
||||||
import Splide from '@splidejs/splide'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
|
|
||||||
static classes = [ 'pagination' ]
|
|
||||||
static values = { preset: String, arrows: Boolean, dots: Boolean }
|
|
||||||
|
|
||||||
connect() {
|
|
||||||
const classes = {
|
|
||||||
page: 'slider-pagination__dot',
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.hasPaginationClass) {
|
|
||||||
classes.pagination = this.paginationClass
|
|
||||||
}
|
|
||||||
|
|
||||||
let options = {
|
|
||||||
perMove: 1,
|
|
||||||
gap: '1rem',
|
|
||||||
pauseOnHover: false,
|
|
||||||
pauseOnFocus: false,
|
|
||||||
pagination: this.dotsValue,
|
|
||||||
arrows: this.arrowsValue,
|
|
||||||
classes
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (this.presetValue) {
|
|
||||||
case 'header-detail':
|
|
||||||
options = {
|
|
||||||
...options,
|
|
||||||
rewind: true,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'teasers':
|
|
||||||
options = {
|
|
||||||
...options,
|
|
||||||
perPage: 4,
|
|
||||||
padding: {
|
|
||||||
right: '2rem',
|
|
||||||
},
|
|
||||||
breakpoints: {
|
|
||||||
1200: {
|
|
||||||
perPage: 4,
|
|
||||||
padding: {
|
|
||||||
right: '2rem',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
1024: {
|
|
||||||
perPage: 3,
|
|
||||||
padding: {
|
|
||||||
right: '2rem',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
960: {
|
|
||||||
perPage: 2,
|
|
||||||
padding: {
|
|
||||||
right: '2rem',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
640: {
|
|
||||||
perPage: 1,
|
|
||||||
padding: {
|
|
||||||
right: '2rem',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'teasers_embedded':
|
|
||||||
options = {
|
|
||||||
...options,
|
|
||||||
perPage: 2,
|
|
||||||
padding: {
|
|
||||||
right: '25%',
|
|
||||||
},
|
|
||||||
breakpoints: {
|
|
||||||
960: {
|
|
||||||
perPage: 3,
|
|
||||||
padding: {
|
|
||||||
right: '10%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
768: {
|
|
||||||
perPage: 2,
|
|
||||||
padding: {
|
|
||||||
right: '25%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
640: {
|
|
||||||
perPage: 2,
|
|
||||||
padding: {
|
|
||||||
right: '10%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
512: {
|
|
||||||
perPage: 1,
|
|
||||||
padding: {
|
|
||||||
right: '10%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
|
|
||||||
new Splide(this.element, options).mount()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
import { Controller } from 'stimulus'
|
|
||||||
import {useDebounce} from '../mixins/useDebounce'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
|
|
||||||
static classes = [ 'sticky' ]
|
|
||||||
static values = { offset: Number }
|
|
||||||
|
|
||||||
connect() {
|
|
||||||
useDebounce(this)
|
|
||||||
window.addEventListener('scroll', this.debounce(() => {
|
|
||||||
this.element.classList.toggle(this.stickyClass, window.scrollY > this.offsetValue)
|
|
||||||
}, 250))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
import { Controller } from 'stimulus'
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
|
|
||||||
static targets = [ 'tooltip', 'label', 'icon' ]
|
|
||||||
static values = { uid: String, onList: Boolean }
|
|
||||||
|
|
||||||
connect() {
|
|
||||||
const list = this.getCurrentList()
|
|
||||||
this.onListValue = -1 !== list.indexOf(this.uidValue)
|
|
||||||
}
|
|
||||||
|
|
||||||
toggle(e) {
|
|
||||||
e.preventDefault()
|
|
||||||
this.onListValue = !this.onListValue
|
|
||||||
window.dispatchEvent(new CustomEvent('watchlist-toggle', {
|
|
||||||
detail: this.uidValue
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
onListValueChanged() {
|
|
||||||
const label = this.onListValue ? 'von der Merkliste entfernen' : 'auf die Merkliste setzen'
|
|
||||||
if (this.hasTooltipTarget) {
|
|
||||||
this.tooltipTarget.setAttribute('aria-label', label)
|
|
||||||
}
|
|
||||||
if (this.hasLabelTarget) {
|
|
||||||
this.labelTarget.textContent = label
|
|
||||||
}
|
|
||||||
if (this.hasIconTarget) {
|
|
||||||
this.iconTarget.classList.toggle('fa-minus-circle', this.onListValue)
|
|
||||||
this.iconTarget.classList.toggle('fa-plus-circle', !this.onListValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getCurrentList() {
|
|
||||||
const initialList = JSON.parse(sessionStorage.getItem('myep-watchlist'))
|
|
||||||
return initialList ? initialList : []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,6 +3,10 @@
|
|||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
|
[x-cloak] {
|
||||||
|
@apply hidden;
|
||||||
|
}
|
||||||
|
|
||||||
@import "variables";
|
@import "variables";
|
||||||
@import "color";
|
@import "color";
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button data-controller="scroll-top" data-action="scroll-top#scroll" class="arrowtop hidden">
|
<button x-data="scrollTop" x-on:click.prevent="scroll()" x-show="show" class="arrowtop " x-cloak>
|
||||||
<i class="fa fa-angle-up"></i>
|
<i class="fa fa-angle-up"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -3,10 +3,7 @@
|
|||||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
||||||
|
|
||||||
<div class="pagehead">
|
<div class="pagehead">
|
||||||
<div data-controller="splide slider"
|
<div class="splide slider slider--header" data-slider="header">
|
||||||
data-splide='{"arrows": false, "autoplay": true, "type": "fade", "perPage": 1, "rewind": true}'
|
|
||||||
data-slider-pagination-class="slider-pagination slider-pagination--header"
|
|
||||||
class="slider slider--header">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{slides}" as="slide" iteration="iteration">
|
<f:for each="{slides}" as="slide" iteration="iteration">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<f:if condition="{teasers}">
|
<f:if condition="{teasers}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<a id="teasers" class="anchor"></a>
|
<a id="teasers" class="anchor"></a>
|
||||||
<div class="splide" data-controller="slider" data-slider-preset-value="teasers">
|
<div class="splide" data-slider="teasers">
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="teaser">
|
<f:for each="{teasers}" as="teaser">
|
||||||
|
|||||||
@@ -117,11 +117,10 @@
|
|||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<a href="#" class="teaserbox-watchlist" x-data="watchlistToggle" :data-uid="item.key" x-on:click.prevent="toggle()">
|
||||||
class="teaserbox-watchlist"
|
<span data-microtip-position="top" x-bind:aria-label="label()" role="tooltip">
|
||||||
data-controller="watchlist-toggle"
|
<i class="fa fa-plus-circle" x-bind:class="icon()"></i>
|
||||||
data-watchlist-toggle-uid-value="{item.hotel.uid}:{product.uid}"
|
</span>
|
||||||
data-action="watchlist-toggle#toggle">
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</f:section>
|
</f:section>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers" >
|
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers" >
|
||||||
|
|
||||||
<f:section name="Mainnav">
|
<f:section name="Mainnav">
|
||||||
<div class="navbar-main-wrapper" :class="{ 'searchbar-fixed': searchbarFixed }">
|
<div class="navbar-main-wrapper" :class="{ 'searchbar-fixed': searchbarFixed }" x-data>
|
||||||
<nav class="container navbar navbar-default navbar-main{f:if(condition: data.tx_eptheme_hide_searchbar, then: ' navbar-main--no-searchbar')}">
|
<nav class="container navbar navbar-default navbar-main{f:if(condition: data.tx_eptheme_hide_searchbar, then: ' navbar-main--no-searchbar')}">
|
||||||
<f:render section="NavbarHeader" arguments="{_all}"/>
|
<f:render section="NavbarHeader" arguments="{_all}"/>
|
||||||
<div class="hidden-xs hidden-sm">
|
<div class="hidden-xs hidden-sm">
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<f:section name="NavbarHeader">
|
<f:section name="NavbarHeader">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<a @click.prevent="toggleMobileNavigation()" href="#" class="navbar-toggle collapsed" id="navtoggle">
|
<a x-on:click.prevent="$store.show.mobileNav = !$store.show.mobileNav" href="#" class="navbar-toggle collapsed" id="navtoggle">
|
||||||
<span class="sr-only">Toggle navigation</span>
|
<span class="sr-only">Toggle navigation</span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<f:if condition="{data.tx_eptheme_hide_searchbar}">
|
<f:if condition="{data.tx_eptheme_hide_searchbar}">
|
||||||
<f:else>
|
<f:else>
|
||||||
<a @click.prevent="toggleSearchbox()" class="search hidden-md hidden-lg" href="#" id="searchboxtoggle">
|
<a x-on:click.prevent="$store.show.searchBox = !$store.show.searchBox" class="search hidden-md hidden-lg" href="#" id="searchboxtoggle">
|
||||||
<i class="fa fa-search" aria-hidden="true"></i>
|
<i class="fa fa-search" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
</f:else>
|
</f:else>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</f:section>
|
</f:section>
|
||||||
|
|
||||||
<f:section name="FirstLevel">
|
<f:section name="FirstLevel">
|
||||||
<div class="collapse navbar-collapse"{f:if(condition: mobile, then: ' data-mobile-menu')}>
|
<div class="navbar-collapse"{f:if(condition: mobile, then: ' x-show="$store.show.mobileNav" x-cloak')}>
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<v:menu pageUid="{navPid}" entryLevel="1" useShortcutUid="true">
|
<v:menu pageUid="{navPid}" entryLevel="1" useShortcutUid="true">
|
||||||
<f:for each="{menu}" as="topitem" iteration="outerIteration">
|
<f:for each="{menu}" as="topitem" iteration="outerIteration">
|
||||||
|
|||||||
+1
-4
@@ -4,10 +4,7 @@
|
|||||||
|
|
||||||
<f:alias map="{images: '{media -> v:iterator.filter(propertyName: \'showinpreview\', filter: 0)}'}">
|
<f:alias map="{images: '{media -> v:iterator.filter(propertyName: \'showinpreview\', filter: 0)}'}">
|
||||||
<f:if condition="{images}">
|
<f:if condition="{images}">
|
||||||
<div data-controller="slider"
|
<div data-slider="content" class="splide slider slider--content">
|
||||||
data-splide='{"perPage": 1, "rewind": true}'
|
|
||||||
data-slider-pagination-class="slider-pagination"
|
|
||||||
class="splide slider slider--content">
|
|
||||||
<div id="carousel-{id}" class="splide__track slider__items">
|
<div id="carousel-{id}" class="splide__track slider__items">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{images}" as="image" iteration="iteration">
|
<f:for each="{images}" as="image" iteration="iteration">
|
||||||
|
|||||||
@@ -3,10 +3,7 @@
|
|||||||
<div class="container ep-product-detail product-header">
|
<div class="container ep-product-detail product-header">
|
||||||
<div class="ep-product-detail-bg season-{product.region.season}"></div>
|
<div class="ep-product-detail-bg season-{product.region.season}"></div>
|
||||||
<div class="col-sm-6 col-sm-offset-1 pull-right">
|
<div class="col-sm-6 col-sm-offset-1 pull-right">
|
||||||
<div data-controller="slider"
|
<div data-slider="content" class="splide slider slider--product">
|
||||||
data-slider-preset="header-detail"
|
|
||||||
data-slider-pagination-class="slider-pagination"
|
|
||||||
class="splide slider slider--product">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{product.images}" as="image" iteration="iteration">
|
<f:for each="{product.images}" as="image" iteration="iteration">
|
||||||
@@ -22,10 +19,12 @@
|
|||||||
</f:for>
|
</f:for>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<f:comment><!--
|
||||||
<div class="splide__arrows slider__pagination">
|
<div class="splide__arrows slider__pagination">
|
||||||
<button class="splide__arrow splide__arrow--prev slider-pagination__arrow slider-pagination__arrow--prev"><i class="fa fa-2x fa-chevron-left"></i></button>
|
<button class="splide__arrow splide__arrow--prev slider-pagination__arrow slider-pagination__arrow--prev"><i class="fa fa-2x fa-chevron-left"></i></button>
|
||||||
<button class="splide__arrow splide__arrow--next slider-pagination__arrow slider-pagination__arrow--next"><i class="fa fa-2x fa-chevron-right"></i></button>
|
<button class="splide__arrow splide__arrow--next slider-pagination__arrow slider-pagination__arrow--next"><i class="fa fa-2x fa-chevron-right"></i></button>
|
||||||
</div>
|
</div>
|
||||||
|
--></f:comment>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 pull-left product-header__title">
|
<div class="col-sm-4 pull-left product-header__title">
|
||||||
|
|||||||
+3
-6
@@ -115,12 +115,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<a href="#" x-data="watchlistToggle" data-uid="{item.key}" x-on:click.prevent="toggle()">
|
||||||
data-controller="watchlist-toggle"
|
<span data-microtip-position="top" x-bind:aria-label="onList() ? 'von der Merkliste entfernen' : 'auf die Merkliste setzen'" role="tooltip">
|
||||||
data-watchlist-toggle-uid-value="{item.key}"
|
<i class="fa fa-plus-circle" x-bind:class="onList() ? 'fa-minus-circle' : 'fa-plus-circle'"></i>
|
||||||
data-action="watchlist-toggle#toggle">
|
|
||||||
<span data-microtip-position="top" data-watchlist-toggle-target="tooltip" role="tooltip">
|
|
||||||
<i class="fa" data-watchlist-toggle-target="icon"></i>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -92,11 +92,10 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="#"
|
<a href="#" class="teaserbox-watchlist" x-data="watchlistToggle" :data-uid="item.key" x-on:click.prevent="toggle()">
|
||||||
class="teaserbox-watchlist"
|
<span data-microtip-position="top" x-bind:aria-label="label()" role="tooltip">
|
||||||
data-controller="watchlist-toggle"
|
<i class="fa fa-plus-circle" x-bind:class="icon()"></i>
|
||||||
data-watchlist-toggle-uid-value="{teaser.key}"
|
</span>
|
||||||
data-action="watchlist-toggle#toggle">
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</f:section>
|
</f:section>
|
||||||
|
|||||||
@@ -18,9 +18,7 @@
|
|||||||
{region.skiArea -> f:format.html()}
|
{region.skiArea -> f:format.html()}
|
||||||
<f:if condition="{teasers}">
|
<f:if condition="{teasers}">
|
||||||
<a id="teasers" class="anchor"></a>
|
<a id="teasers" class="anchor"></a>
|
||||||
<div class="splide"
|
<div class="splide" data-slider="teasersEmbedded">
|
||||||
data-controller="slider"
|
|
||||||
data-slider-preset-value="teasers_embedded">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="teaser">
|
<f:for each="{teasers}" as="teaser">
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<f:render partial="Header/Standalone" arguments="{_all}"/>
|
<f:render partial="Header/Standalone" arguments="{_all}"/>
|
||||||
<div>
|
<div>
|
||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<div class="splide" data-controller="slider" data-slider-preset-value="teasers">
|
<div class="splide" data-slider="teasers">
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="city">
|
<f:for each="{teasers}" as="city">
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<div>
|
<div>
|
||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<div class="splide" data-controller="slider" data-slider-preset-value="teasers">
|
<div class="splide" data-slider="teasers">
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="concept">
|
<f:for each="{teasers}" as="concept">
|
||||||
|
|||||||
@@ -29,9 +29,8 @@
|
|||||||
{country.description -> f:format.html()}
|
{country.description -> f:format.html()}
|
||||||
<f:if condition="{teasers}">
|
<f:if condition="{teasers}">
|
||||||
<a id="teasers" class="anchor"></a>
|
<a id="teasers" class="anchor"></a>
|
||||||
<div data-controller="slider"
|
<div data-slider="teasersEmbedded"
|
||||||
data-slider-preset-value="teasers_embedded"
|
data-splide='{"arrows": true}'
|
||||||
data-slider-arrows-value="true"
|
|
||||||
class="splide slider slider--teasers in-column">
|
class="splide slider slider--teasers in-column">
|
||||||
<div class="splide__track slider__items">
|
<div class="splide__track slider__items">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
|
|||||||
+1
-3
@@ -7,9 +7,7 @@
|
|||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<div>
|
<div>
|
||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<div class="splide"
|
<div class="splide" data-slider="teasers">
|
||||||
data-controller="slider"
|
|
||||||
data-slider-preset-value="teasers">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="hotel">
|
<f:for each="{teasers}" as="hotel">
|
||||||
|
|||||||
@@ -7,9 +7,7 @@
|
|||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<div>
|
<div>
|
||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<div class="splide"
|
<div class="splide" data-slider="teasers">
|
||||||
data-controller="slider"
|
|
||||||
data-slider-preset-value="teasers">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{bookable}" as="hotel">
|
<f:for each="{bookable}" as="hotel">
|
||||||
|
|||||||
@@ -83,16 +83,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
<p>
|
<p>
|
||||||
<a href="#"
|
<a href="#" x-data="watchlistToggle" data-uid="{hotel.uid}:{product.uid}" x-on:click.prevent="toggle()">
|
||||||
data-controller="watchlist-toggle"
|
<span data-microtip-position="top" x-bind:aria-label="label()" role="tooltip">
|
||||||
data-watchlist-toggle-uid-value="{hotel.uid}:{product.uid}"
|
<i class="fa" x-bind:class="icon()"></i>
|
||||||
data-action="watchlist-toggle#toggle">
|
|
||||||
<span data-microtip-position="top" data-watchlist-toggle-target="tooltip" role="tooltip">
|
|
||||||
<i class="fa" data-watchlist-toggle-target="icon"></i>
|
|
||||||
</span>
|
|
||||||
<span data-watchlist-toggle-target="label">
|
|
||||||
auf die Merkliste setzen
|
|
||||||
</span>
|
</span>
|
||||||
|
<span x-text="label()"></span>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -12,9 +12,7 @@
|
|||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<f:if condition="{data.flexForm.settings.layout} == 'cols'">
|
<f:if condition="{data.flexForm.settings.layout} == 'cols'">
|
||||||
<f:then>
|
<f:then>
|
||||||
<div class="splide"
|
<div class="splide" data-slider="teasers">
|
||||||
data-controller="slider"
|
|
||||||
data-slider-preset-value="teasers">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:render section="Teasers" arguments="{_all}"/>
|
<f:render section="Teasers" arguments="{_all}"/>
|
||||||
|
|||||||
@@ -8,9 +8,7 @@
|
|||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<div>
|
<div>
|
||||||
<ep:container data="{data}">
|
<ep:container data="{data}">
|
||||||
<div class="splide"
|
<div class="splide" data-slider="teasers">
|
||||||
data-controller="slider"
|
|
||||||
data-slider-preset-value="teasers">
|
|
||||||
<div class="splide__track">
|
<div class="splide__track">
|
||||||
<ul class="splide__list">
|
<ul class="splide__list">
|
||||||
<f:for each="{teasers}" as="region">
|
<f:for each="{teasers}" as="region">
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
:initial-filter-options='{filterOptions -> f:format.json() -> f:format.raw()}'
|
:initial-filter-options='{filterOptions -> f:format.json() -> f:format.raw()}'
|
||||||
:date-presets='{settings.datePickerPresets -> f:format.json() -> f:format.raw()}'
|
:date-presets='{settings.datePickerPresets -> f:format.json() -> f:format.raw()}'
|
||||||
inline-template>
|
inline-template>
|
||||||
<div class="container searchbar{f:if(condition: fixed, then: ' affix')}"{f:if(condition: fixed, else: ' data-controller="sticky" data-sticky-sticky-class="affix" data-sticky-offset-value="650"')}>
|
<div class="container searchbar{f:if(condition: fixed, then: ' affix')}"{f:if(condition: fixed, else: ' x-data="sticky" data-offset="650" x-bind:class="sticky ? \'affix\': \'\'"')}>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<f:form action="processSearch" controller="Search" method="post" name="searchParams"
|
<f:form action="processSearch" controller="Search" method="post" name="searchParams"
|
||||||
object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
|
object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<f:layout name="Default"/>
|
<f:layout name="Default"/>
|
||||||
|
|
||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<div id="searchbox" class="searchbox hidden-lg" v-cloak>
|
<div id="searchbox" class="searchbox hidden-lg" x-data x-show="$store.show.searchBox" x-cloak>
|
||||||
<search-box
|
<search-box
|
||||||
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" pageUid="{settings.defaultAjaxUid}" />'
|
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" pageUid="{settings.defaultAjaxUid}" />'
|
||||||
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" pageUid="{settings.defaultAjaxUid}" />'
|
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" pageUid="{settings.defaultAjaxUid}" />'
|
||||||
|
|||||||
Reference in New Issue
Block a user