oont-contents/plugins/elementor-pro/assets/js/floating-bars-var-2.c6f25c32db86d04f5e8b.bundle.js
2025-02-08 15:10:23 +01:00

328 lines
No EOL
13 KiB
JavaScript

/*! elementor-pro - v3.26.0 - 22-12-2024 */
"use strict";
(self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["floating-bars-var-2"],{
/***/ "../modules/floating-buttons/assets/js/frontend/handlers/floating-bars-v2.js":
/*!***********************************************************************************!*\
!*** ../modules/floating-buttons/assets/js/frontend/handlers/floating-bars-v2.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _base = _interopRequireDefault(__webpack_require__(/*! elementor-frontend/handlers/base */ "../../elementor/assets/dev/js/frontend/handlers/base.js"));
var _floatinBarDom = _interopRequireDefault(__webpack_require__(/*! ../classes/floatin-bar-dom */ "../modules/floating-buttons/assets/js/frontend/classes/floatin-bar-dom.js"));
var _clickTracking = _interopRequireDefault(__webpack_require__(/*! ../../shared/frontend/handlers/click-tracking */ "../modules/floating-buttons/assets/js/shared/frontend/handlers/click-tracking.js"));
class FloatingBarsHandler extends _base.default {
getDefaultSettings() {
return {
selectors: {
main: '.e-floating-bars',
closeButton: '.e-floating-bars__close-button',
playButton: '.e-floating-bars__play-button',
pauseButton: '.e-floating-bars__pause-button',
headline: '.e-floating-bars__headline',
headlines: '.e-floating-bars__headlines',
headlinesInner: '.e-floating-bars__headlines-inner',
overlay: '.e-floating-bars__overlay'
},
constants: {
isHidden: 'is-hidden',
isSticky: 'is-sticky',
hasVerticalPositionTop: 'has-vertical-position-top',
hasVerticalPositionBottom: 'has-vertical-position-bottom',
isPaused: 'is-paused',
animationTypeControl: 'style_ticker_animation_type',
autoplay: 'autoplay'
}
};
}
onElementChange(property) {
const verticalSpaceProperties = ['style_headline_text_typography_font_size', 'style_headlines_icon_size', 'style_floating_bar_padding', 'style_floating_bar_controls_size', 'style_floating_bar_element_spacing'];
if (verticalSpaceProperties.includes(property)) {
this.initDefaultState();
}
}
getDefaultElements() {
const selectors = this.getSettings('selectors');
return {
main: this.$element[0].querySelector(selectors.main),
closeButton: this.$element[0].querySelector(selectors.closeButton),
pauseButton: this.$element[0].querySelector(selectors.pauseButton),
playButton: this.$element[0].querySelector(selectors.playButton),
headlineAll: this.$element[0].querySelectorAll(selectors.headline),
headlines: this.$element[0].querySelector(selectors.headlines),
headlinesInner: this.$element[0].querySelector(selectors.headlinesInner),
overlay: this.$element[0].querySelector(selectors.overlay)
};
}
getResponsiveSetting(controlName) {
const currentDevice = elementorFrontend.getCurrentDeviceMode();
return elementorFrontend.utils.controls.getResponsiveControlValue(this.getElementSettings(), controlName, '', currentDevice);
}
bindEvents() {
if (this.elements.closeButton) {
this.elements.closeButton.addEventListener('click', this.closeFloatingBar.bind(this));
}
if (this.elements.pauseButton) {
this.elements.pauseButton.addEventListener('click', this.pauseCarousel.bind(this));
}
if (this.elements.playButton) {
this.elements.playButton.addEventListener('click', this.playCarousel.bind(this));
}
if (this.hasStickyElements()) {
window.addEventListener('resize', this.handleStickyElements.bind(this));
}
}
isMobileDevice() {
const mobileDevices = ['mobile', 'mobile_extra'];
return mobileDevices.includes(elementorFrontend.getCurrentDeviceMode());
}
isStickyTop() {
const {
isSticky,
hasVerticalPositionTop
} = this.getSettings('constants');
return this.elements.main.classList.contains(isSticky) && this.elements.main.classList.contains(hasVerticalPositionTop);
}
isStickyBottom() {
const {
isSticky,
hasVerticalPositionBottom
} = this.getSettings('constants');
return this.elements.main.classList.contains(isSticky) && this.elements.main.classList.contains(hasVerticalPositionBottom);
}
hasStickyElements() {
const stickyElements = document.querySelectorAll('.elementor-sticky');
return stickyElements.length > 0;
}
pauseCarousel() {
const {
isPaused
} = this.getSettings('constants');
this.elements.headlines.classList.add(isPaused);
if (this.elements.playButton && this.elements.pauseButton) {
this.elements.playButton.setAttribute('aria-hidden', 'false');
this.elements.pauseButton.setAttribute('aria-hidden', 'true');
}
}
playCarousel() {
const {
isPaused
} = this.getSettings('constants');
this.elements.headlines.classList.remove(isPaused);
if (this.elements.playButton && this.elements.pauseButton) {
this.elements.pauseButton.setAttribute('aria-hidden', 'false');
this.elements.playButton.setAttribute('aria-hidden', 'true');
}
}
closeFloatingBar() {
const {
isHidden
} = this.getSettings('constants');
if (!elementorFrontend.isEditMode()) {
this.elements.main.classList.add(isHidden);
if (this.hasStickyElements()) {
this.handleStickyElements();
} else if (this.isStickyTop()) {
this.removeBodyPadding();
}
}
}
focusOnLoad() {
this.elements.main.setAttribute('tabindex', '0');
this.elements.main.focus({
focusVisible: true
});
}
applyBodyPadding() {
const mainHeight = this.elements.main.offsetHeight;
document.body.style.paddingTop = `${mainHeight}px`;
}
removeBodyPadding() {
document.body.style.paddingTop = '0';
}
cloneScrollerContent() {
const scrollerContent = Array.from(this.elements.headlinesInner.children);
scrollerContent.forEach(item => {
const duplicatedItem = item.cloneNode(true);
duplicatedItem.setAttribute('aria-hidden', 'true');
duplicatedItem.classList.add('e-floating-bars__headline--clone');
this.elements.headlinesInner.appendChild(duplicatedItem);
});
}
cloneHeadlinesToFillContainer() {
let headlinesInnerWidth = this.elements.headlinesInner.offsetWidth;
const headlinesWidth = this.elements.headlines.offsetWidth;
while (headlinesInnerWidth < headlinesWidth) {
this.cloneScrollerContent();
headlinesInnerWidth = this.elements.headlinesInner.offsetWidth;
}
}
cloneHeadlinesInner() {
const headlinesInnerDuplicate = this.elements.headlinesInner.cloneNode(true);
const overlay = this.elements.overlay;
headlinesInnerDuplicate.classList.add('e-floating-bars__headlines-inner--clone');
headlinesInnerDuplicate.setAttribute('aria-hidden', 'true');
this.elements.headlines.insertBefore(headlinesInnerDuplicate, overlay);
}
handleBrowserScrollAnimation() {
document.addEventListener('scroll', () => {
const scrollPosition = window.scrollY;
const lastHeadline = this.elements.headlinesInner.lastElementChild;
const isRTL = elementorFrontend.config.is_rtl;
if (isRTL) {
this.elements.headlinesInner.style.transform = `translateX(${scrollPosition}px)`;
const lastHeadlineLeftPosition = lastHeadline.lastElementChild.getBoundingClientRect().left;
const headlinesLeftPosition = this.elements.headlines.getBoundingClientRect().left;
if (lastHeadlineLeftPosition >= headlinesLeftPosition) {
this.cloneScrollerContent();
}
} else {
this.elements.headlinesInner.style.transform = `translateX(-${scrollPosition}px)`;
const lastHeadlineRightPosition = lastHeadline.lastElementChild.getBoundingClientRect().right;
const headlinesRightPosition = this.elements.headlines.getBoundingClientRect().right;
if (lastHeadlineRightPosition <= headlinesRightPosition) {
this.cloneScrollerContent();
}
}
});
}
handleTickerClick(event) {
event.preventDefault();
const {
isPlaying
} = this.getSettings('constants');
if (this.elements.headlines.classList.contains(isPlaying)) {
this.pauseCarousel();
} else {
const href = event.currentTarget.getAttribute('href');
const target = event.currentTarget.getAttribute('target');
const isTargetSet = !!target;
if (isTargetSet) {
window.open(href, target);
} else if (href) {
window.location.href = href;
}
this.playCarousel();
}
}
handleWPAdminBar() {
const wpAdminBar = elementorFrontend.elements.$wpAdminBar;
if (wpAdminBar.length) {
this.elements.main.style.top = `${wpAdminBar.height()}px`;
}
}
handleStickyElements() {
const mainHeight = this.elements.main.offsetHeight;
const wpAdminBar = elementorFrontend.elements.$wpAdminBar;
const stickyElements = document.querySelectorAll('.elementor-sticky:not(.elementor-sticky__spacer)');
if (0 === stickyElements.length) {
return;
}
stickyElements.forEach(stickyElement => {
const dataSettings = stickyElement.getAttribute('data-settings');
const stickyPosition = JSON.parse(dataSettings)?.sticky;
const isTop = '0px' === stickyElement.style.top || 'top' === stickyPosition;
const isBottom = '0px' === stickyElement.style.bottom || 'bottom' === stickyPosition;
if (this.isStickyTop() && isTop) {
if (wpAdminBar.length) {
stickyElement.style.top = `${mainHeight + wpAdminBar.height()}px`;
} else {
stickyElement.style.top = `${mainHeight}px`;
}
} else if (this.isStickyBottom() && isBottom) {
stickyElement.style.bottom = `${mainHeight}px`;
}
if (elementorFrontend.isEditMode()) {
if (isTop) {
stickyElement.style.top = this.isStickyTop() ? `${mainHeight}px` : '0px';
} else if (isBottom) {
stickyElement.style.bottom = this.isStickyBottom() ? `${mainHeight}px` : '0px';
}
}
});
document.querySelectorAll('.elementor-sticky__spacer').forEach(stickySpacer => {
const dataSettings = stickySpacer.getAttribute('data-settings');
const stickyPosition = JSON.parse(dataSettings)?.sticky;
const isTop = '0px' === stickySpacer.style.top || 'top' === stickyPosition;
if (this.isStickyTop() && isTop) {
stickySpacer.style.marginBottom = `${mainHeight}px`;
}
});
}
handleClickOutside() {
const {
isPlaying
} = this.getSettings('constants');
document.addEventListener('click', event => {
if (!this.elements.headlines.classList.contains(isPlaying) && !this.elements.main.contains(event.target)) {
this.playCarousel();
}
});
}
initScrollingAnimation() {
const {
autoplay,
animationTypeControl
} = this.getSettings('constants');
const animationType = this.getResponsiveSetting(animationTypeControl);
if (autoplay === animationType) {
this.cloneHeadlinesInner();
this.elements.headlines.setAttribute('data-animated', 'true');
this.playCarousel();
if (this.isMobileDevice()) {
this.elements.headlineAll.forEach(headline => {
headline.addEventListener('click', this.handleTickerClick.bind(this));
});
this.handleClickOutside();
}
} else {
this.handleBrowserScrollAnimation();
}
}
initDefaultState() {
if (this.isStickyTop()) {
this.handleWPAdminBar();
}
if (this.hasStickyElements()) {
this.handleStickyElements();
} else if (this.isStickyTop()) {
this.applyBodyPadding();
}
if (this.elements.main && !elementorFrontend.isEditMode()) {
this.focusOnLoad();
}
if (this.elements.headlinesInner) {
this.cloneHeadlinesToFillContainer();
}
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
this.initScrollingAnimation();
}
}
setupInnerContainer() {
this.elements.main.closest('.e-con-inner').classList.add('e-con-inner--floating-bars');
this.elements.main.closest('.e-con').classList.add('e-con--floating-bars');
}
onInit() {
super.onInit(...arguments);
this.clickTrackingHandler = new _clickTracking.default({
$element: this.$element
});
const domHelper = new _floatinBarDom.default(this.$element);
domHelper.maybeMoveToTop();
this.initDefaultState();
this.setupInnerContainer();
}
}
exports["default"] = FloatingBarsHandler;
/***/ })
}]);
//# sourceMappingURL=floating-bars-var-2.c6f25c32db86d04f5e8b.bundle.js.map