Diff: STRATO-apps/wordpress_03/app/wp-content/themes/blocksy/static/js/main.js
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
import './public-path'
2
+
import './events'
3
+
4
+
import ctEvents from 'ct-events'
5
+
6
+
import { watchLayoutContainerForReveal } from './frontend/animated-element'
7
+
import { onDocumentLoaded, handleEntryPoints, loadStyle } from './helpers'
8
+
9
+
import { getCurrentScreen } from './frontend/helpers/current-screen'
10
+
import { mountDynamicChunks } from './dynamic-chunks'
11
+
12
+
import { menuEntryPoints } from './frontend/entry-points/menus'
13
+
import { liveSearchEntryPoints } from './frontend/entry-points/live-search'
14
+
15
+
import { preloadClickHandlers } from './frontend/dynamic-chunks/click-trigger'
16
+
import { isTouchDevice } from './frontend/helpers/is-touch-device'
17
+
18
+
export const areWeDealingWithSafari = /apple/i.test(navigator.vendor)
19
+
20
+
/**
21
+
* iOS hover fix
22
+
*/
23
+
document.addEventListener('click', (x) => 0)
24
+
25
+
import {
26
+
fastOverlayHandleClick,
27
+
fastOverlayMount
28
+
} from './frontend/fast-overlay'
29
+
// import { mount } from './frontend/social-buttons'
30
+
31
+
let allFrontendEntryPoints = [
32
+
...menuEntryPoints,
33
+
...liveSearchEntryPoints,
34
+
35
+
{
36
+
els: '[data-parallax]',
37
+
load: () => import('./frontend/parallax/register-listener'),
38
+
events: ['blocksy:parallax:init']
39
+
},
40
+
41
+
{
42
+
els: '.flexy-container[data-flexy*="no"]',
43
+
load: () => import('./frontend/flexy'),
44
+
trigger: ['hover-with-touch']
45
+
},
46
+
47
+
{
48
+
els: '.ct-share-box [data-network="pinterest"]',
49
+
load: () => import('./frontend/social-buttons'),
50
+
trigger: ['click']
51
+
},
52
+
53
+
{
54
+
els: '.ct-share-box [data-network="clipboard"]',
55
+
load: () => import('./frontend/social-buttons'),
56
+
trigger: ['click']
57
+
},
58
+
59
+
{
60
+
els: '.ct-media-container[data-media-id]:not([data-state*="hover"]), .ct-dynamic-media[data-media-id]:not([data-state*="hover"])',
61
+
load: () => import('./frontend/lazy/video-on-click'),
62
+
trigger: ['click', 'slight-mousemove', 'scroll']
63
+
},
64
+
65
+
{
66
+
els: '.ct-media-container[data-media-id][data-state*="hover"], .ct-dynamic-media[data-media-id][data-state*="hover"]',
67
+
load: () => import('./frontend/lazy/video-on-click'),
68
+
trigger: ['click', 'hover-with-touch']
69
+
},
70
+
71
+
{
72
+
els: '.ct-share-box [data-network]:not([data-network="pinterest"]):not([data-network="email"]):not([data-network="clipboard"])',
73
+
load: () => import('./frontend/social-buttons'),
74
+
trigger: ['hover'],
75
+
condition: () =>
76
+
!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
77
+
navigator.userAgent
78
+
)
79
+
},
80
+
81
+
{
82
+
els: () => {
83
+
const popperEls = [
84
+
'.ct-language-switcher > .ct-active-language',
85
+
'.ct-header-account[data-interaction="dropdown"] > .ct-account-item'
86
+
]
87
+
88
+
const maybeCart = document.querySelector(
89
+
'.ct-header-cart > .ct-cart-content:not([data-count="0"])'
90
+
)
91
+
92
+
// Cart within offcanvas doesn't have a dropdown
93
+
if (maybeCart && !maybeCart.closest('#offcanvas')) {
94
+
popperEls.push('.ct-header-cart > .ct-cart-item')
95
+
}
96
+
97
+
return popperEls
98
+
},
99
+
load: () => import('./frontend/popper-elements'),
100
+
trigger: ['hover-with-click']
101
+
},
102
+
103
+
{
104
+
els: '.ct-back-to-top, .ct-shortcuts-bar [data-shortcut*="scroll_top"]',
105
+
load: () => import('./frontend/back-to-top-link'),
106
+
events: ['ct:back-to-top:mount'],
107
+
trigger: ['scroll']
108
+
},
109
+
110
+
{
111
+
els: '.ct-pagination:not([data-pagination="simple"])',
112
+
load: () => import('./frontend/layouts/infinite-scroll'),
113
+
trigger: ['scroll']
114
+
},
115
+
116
+
{
117
+
els: ['.entries[data-layout]', '[data-products].products'],
118
+
load: () =>
119
+
new Promise((r) => r({ mount: watchLayoutContainerForReveal }))
120
+
},
121
+
122
+
{
123
+
els: [
124
+
'.ct-has-link-overlay.is-layout-slider .flexy-item:has(> * > .ct-link-overlay)',
125
+
'.ct-has-link-overlay:not(.is-layout-slider) *:has(> .ct-link-overlay)'
126
+
],
127
+
load: () => import('./frontend/link-overlay'),
128
+
trigger: ['click']
129
+
},
130
+
131
+
{
132
+
els: ['.ct-modal-action'],
133
+
load: () => new Promise((r) => r({ mount: fastOverlayMount })),
134
+
events: ['ct:header:update'],
135
+
trigger: ['click']
136
+
},
137
+
138
+
{
139
+
els: ['.ct-expandable-trigger'],
140
+
load: () => import('./frontend/generic-accordion'),
141
+
trigger: ['click']
142
+
},
143
+
144
+
{
145
+
els: ['.ct-header-search'],
146
+
load: () => new Promise((r) => r({ mount: fastOverlayMount })),
147
+
mount: ({ mount, el, ...rest }) => {
148
+
mount(el, {
149
+
...rest,
150
+
focus: true
151
+
})
152
+
},
153
+
events: [],
154
+
trigger: ['click']
155
+
}
156
+
]
157
+
158
+
if (document.body.className.indexOf('woocommerce') > -1) {
159
+
import('./frontend/woocommerce/main').then(({ wooEntryPoints }) => {
160
+
allFrontendEntryPoints = [...allFrontendEntryPoints, ...wooEntryPoints]
161
+
162
+
handleEntryPoints(allFrontendEntryPoints, {
163
+
immediate: true,
164
+
skipEvents: true
165
+
})
166
+
})
167
+
}
168
+
169
+
handleEntryPoints(allFrontendEntryPoints, {
170
+
immediate: /comp|inter|loaded/.test(document.readyState)
171
+
})
172
+
173
+
const initOverlayTrigger = () => {
174
+
;[
175
+
...document.querySelectorAll('.ct-header-trigger'),
176
+
...document.querySelectorAll('.ct-offcanvas-trigger')
177
+
].map((menuToggle) => {
178
+
if (menuToggle && !menuToggle.hasListener) {
179
+
menuToggle.hasListener = true
180
+
181
+
menuToggle.addEventListener('click', (event) => {
182
+
event.preventDefault()
183
+
184
+
if (!menuToggle.dataset.togglePanel && !menuToggle.hash) {
185
+
return
186
+
}
187
+
188
+
let offcanvas = document.querySelector(
189
+
menuToggle.dataset.togglePanel || menuToggle.hash
190
+
)
191
+
192
+
if (!offcanvas) {
193
+
return
194
+
}
195
+
196
+
fastOverlayHandleClick(event, {
197
+
container: offcanvas,
198
+
closeWhenLinkInside: !menuToggle.closest('.ct-header-cart'),
199
+
computeScrollContainer: () => {
200
+
if (
201
+
offcanvas.querySelector('.cart_list') &&
202
+
!offcanvas.querySelector(
203
+
'[data-id="cart"] .cart_list'
204
+
)
205
+
) {
206
+
return offcanvas.querySelector('.cart_list')
207
+
}
208
+
209
+
if (
210
+
getCurrentScreen() === 'mobile' &&
211
+
offcanvas.querySelector(
212
+
'[data-device="mobile"] > .ct-panel-content-inner'
213
+
)
214
+
) {
215
+
return offcanvas.querySelector(
216
+
'[data-device="mobile"] > .ct-panel-content-inner'
217
+
)
218
+
}
219
+
220
+
return offcanvas.querySelector(
221
+
'.ct-panel-content > .ct-panel-content-inner'
222
+
)
223
+
}
224
+
})
225
+
})
226
+
}
227
+
})
228
+
}
229
+
230
+
const mountIntegrations = (integrations) => {
231
+
if (integrations.length > 0) {
232
+
Promise.all(
233
+
integrations
234
+
.filter(({ check }) => check())
235
+
.map(({ promise }) => promise())
236
+
).then((integrations) => {
237
+
integrations.map(({ mount }) => mount())
238
+
})
239
+
}
240
+
}
241
+
242
+
export const preloadLazyAssets = (userCall = true) => {
243
+
loadStyle(ct_localizations.dynamic_styles.lazy_load)
244
+
preloadClickHandlers()
245
+
import('./frontend/handle-3rd-party-events')
246
+
247
+
if (userCall) {
248
+
ctEvents.trigger('blocksy:frontend:init')
249
+
}
250
+
}
251
+
252
+
onDocumentLoaded(() => {
253
+
document.body.addEventListener(
254
+
'mouseover',
255
+
() => {
256
+
preloadLazyAssets(false)
257
+
258
+
const maybeModalSearch = document.querySelector(
259
+
'#search-modal .ct-search-form input'
260
+
)
261
+
262
+
if (maybeModalSearch && maybeModalSearch.value.trim().length > 0) {
263
+
maybeModalSearch.dispatchEvent(
264
+
new Event('input', { bubbles: true })
265
+
)
266
+
}
267
+
},
268
+
{ once: true, passive: true }
269
+
)
270
+
271
+
let inputs = [
272
+
...document.querySelectorAll(
273
+
'.comment-form [class*="comment-form-field"]'
274
+
)
275
+
]
276
+
.reduce(
277
+
(result, parent) => [
278
+
...result,
279
+
parent.querySelector('input,textarea')
280
+
],
281
+
[]
282
+
)
283
+
.filter((input) => input.type !== 'hidden' && input.type !== 'checkbox')
284
+
285
+
const renderEmptiness = () => {
286
+
inputs.map((input) => {
287
+
input.parentNode.classList.remove('ct-not-empty')
288
+
289
+
if (!input.value) {
290
+
return
291
+
}
292
+
293
+
if (input.value.trim().length > 0) {
294
+
input.parentNode.classList.add('ct-not-empty')
295
+
}
296
+
})
297
+
}
298
+
299
+
setTimeout(() => {
300
+
renderEmptiness()
301
+
}, 10)
302
+
303
+
inputs.map((input) => input.addEventListener('input', renderEmptiness))
304
+
305
+
mountDynamicChunks()
306
+
307
+
setTimeout(() => {
308
+
initOverlayTrigger()
309
+
})
310
+
311
+
mountIntegrations([
312
+
{
313
+
promise: () => import('./frontend/integration/litespeed'),
314
+
check: () =>
315
+
!![...document.childNodes].find((c) => {
316
+
if (c.nodeType !== 8) {
317
+
return false
318
+
}
319
+
320
+
return c.nodeValue.toLowerCase().includes('litespeed')
321
+
})
322
+
}
323
+
])
324
+
})
325
+
326
+
let isPageLoad = true
327
+
328
+
ctEvents.on('blocksy:frontend:init', () => {
329
+
handleEntryPoints(allFrontendEntryPoints, {
330
+
immediate: true,
331
+
skipEvents: true
332
+
})
333
+
334
+
mountDynamicChunks()
335
+
336
+
initOverlayTrigger()
337
+
338
+
if (isPageLoad) {
339
+
isPageLoad = false
340
+
} else {
341
+
mountIntegrations([
342
+
{
343
+
promise: () => import('./frontend/integration/stackable'),
344
+
check: () => true
345
+
},
346
+
347
+
{
348
+
promise: () => import('./frontend/integration/greenshift'),
349
+
check: () => !!window.gsInitTabs
350
+
},
351
+
352
+
{
353
+
promise: () => import('./frontend/integration/cf7'),
354
+
check: () => !!window.wpcf7
355
+
},
356
+
357
+
{
358
+
promise: () => import('./frontend/integration/turnstile'),
359
+
check: () => !!window.turnstile
360
+
},
361
+
362
+
{
363
+
promise: () => import('./frontend/integration/elementor'),
364
+
check: () => !!window.elementorFrontend
365
+
},
366
+
367
+
{
368
+
promise: () =>
369
+
import('./frontend/integration/elementor-premium-addons'),
370
+
check: () => !!window.premiumWooProducts
371
+
},
372
+
373
+
{
374
+
promise: () =>
375
+
import(
376
+
'./frontend/integration/advanced-product-fields-for-woocommerce'
377
+
),
378
+
check: () => !!window._wapf
379
+
}
380
+
])
381
+
}
382
+
})
383
+
384
+
ctEvents.on(
385
+
'ct:overlay:handle-click',
386
+
({ e, href, container, options = {} }) => {
387
+
fastOverlayHandleClick(e, {
388
+
...(href
389
+
? {
390
+
container: document.querySelector(href)
391
+
}
392
+
: {}),
393
+
394
+
...(container ? { container } : {}),
395
+
...options
396
+
})
397
+
}
398
+
)
399
+
400
+
export { loadStyle, handleEntryPoints, onDocumentLoaded } from './helpers'
401
+
export { registerDynamicChunk, loadDynamicChunk } from './dynamic-chunks'
402
+
export { getCurrentScreen } from './frontend/helpers/current-screen'
403
+
404
+
export { fastOverlayPreloadAssets as overlayPreloadAssets } from './frontend/fast-overlay'
405
+