accordion.5824c4bc9e26d54f2918.bundle.js (7463B)
1 /*! elementor - v3.4.4 - 13-09-2021 */ 2 (self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["accordion"],{ 3 4 /***/ "../assets/dev/js/frontend/handlers/accordion.js": 5 /*!*******************************************************!*\ 6 !*** ../assets/dev/js/frontend/handlers/accordion.js ***! 7 \*******************************************************/ 8 /***/ ((__unused_webpack_module, exports, __webpack_require__) => { 9 10 "use strict"; 11 12 13 var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 14 15 Object.defineProperty(exports, "__esModule", ({ 16 value: true 17 })); 18 exports.default = void 0; 19 20 var _baseTabs = _interopRequireDefault(__webpack_require__(/*! ./base-tabs */ "../assets/dev/js/frontend/handlers/base-tabs.js")); 21 22 class Accordion extends _baseTabs.default { 23 getDefaultSettings() { 24 const defaultSettings = super.getDefaultSettings(); 25 return { ...defaultSettings, 26 showTabFn: 'slideDown', 27 hideTabFn: 'slideUp' 28 }; 29 } 30 31 } 32 33 exports.default = Accordion; 34 35 /***/ }), 36 37 /***/ "../assets/dev/js/frontend/handlers/base-tabs.js": 38 /*!*******************************************************!*\ 39 !*** ../assets/dev/js/frontend/handlers/base-tabs.js ***! 40 \*******************************************************/ 41 /***/ ((__unused_webpack_module, exports) => { 42 43 "use strict"; 44 45 46 Object.defineProperty(exports, "__esModule", ({ 47 value: true 48 })); 49 exports.default = void 0; 50 51 class baseTabs extends elementorModules.frontend.handlers.Base { 52 getDefaultSettings() { 53 return { 54 selectors: { 55 tablist: '[role="tablist"]', 56 tabTitle: '.elementor-tab-title', 57 tabContent: '.elementor-tab-content' 58 }, 59 classes: { 60 active: 'elementor-active' 61 }, 62 showTabFn: 'show', 63 hideTabFn: 'hide', 64 toggleSelf: true, 65 hidePrevious: true, 66 autoExpand: true, 67 keyDirection: { 68 ArrowLeft: elementorFrontendConfig.is_rtl ? 1 : -1, 69 ArrowUp: -1, 70 ArrowRight: elementorFrontendConfig.is_rtl ? -1 : 1, 71 ArrowDown: 1 72 } 73 }; 74 } 75 76 getDefaultElements() { 77 const selectors = this.getSettings('selectors'); 78 return { 79 $tabTitles: this.findElement(selectors.tabTitle), 80 $tabContents: this.findElement(selectors.tabContent) 81 }; 82 } 83 84 activateDefaultTab() { 85 const settings = this.getSettings(); 86 87 if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) { 88 return; 89 } 90 91 const defaultActiveTab = this.getEditSettings('activeItemIndex') || 1, 92 originalToggleMethods = { 93 showTabFn: settings.showTabFn, 94 hideTabFn: settings.hideTabFn 95 }; // Toggle tabs without animation to avoid jumping 96 97 this.setSettings({ 98 showTabFn: 'show', 99 hideTabFn: 'hide' 100 }); 101 this.changeActiveTab(defaultActiveTab); // Return back original toggle effects 102 103 this.setSettings(originalToggleMethods); 104 } 105 106 handleKeyboardNavigation(event) { 107 const tab = event.currentTarget, 108 $tabList = jQuery(tab.closest(this.getSettings('selectors').tablist)), 109 $tabs = $tabList.find(this.getSettings('selectors').tabTitle), 110 isVertical = 'vertical' === $tabList.attr('aria-orientation'); 111 112 switch (event.key) { 113 case 'ArrowLeft': 114 case 'ArrowRight': 115 if (isVertical) { 116 return; 117 } 118 119 break; 120 121 case 'ArrowUp': 122 case 'ArrowDown': 123 if (!isVertical) { 124 return; 125 } 126 127 event.preventDefault(); 128 break; 129 130 case 'Home': 131 event.preventDefault(); 132 $tabs.first().focus(); 133 return; 134 135 case 'End': 136 event.preventDefault(); 137 $tabs.last().focus(); 138 return; 139 140 default: 141 return; 142 } 143 144 const tabIndex = tab.getAttribute('data-tab') - 1, 145 direction = this.getSettings('keyDirection')[event.key], 146 nextTab = $tabs[tabIndex + direction]; 147 148 if (nextTab) { 149 nextTab.focus(); 150 } else if (-1 === tabIndex + direction) { 151 $tabs.last().focus(); 152 } else { 153 $tabs.first().focus(); 154 } 155 } 156 157 deactivateActiveTab(tabIndex) { 158 const settings = this.getSettings(), 159 activeClass = settings.classes.active, 160 activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass, 161 $activeTitle = this.elements.$tabTitles.filter(activeFilter), 162 $activeContent = this.elements.$tabContents.filter(activeFilter); 163 $activeTitle.add($activeContent).removeClass(activeClass); 164 $activeTitle.attr({ 165 tabindex: '-1', 166 'aria-selected': 'false', 167 'aria-expanded': 'false' 168 }); 169 $activeContent[settings.hideTabFn](); 170 $activeContent.attr('hidden', 'hidden'); 171 } 172 173 activateTab(tabIndex) { 174 const settings = this.getSettings(), 175 activeClass = settings.classes.active, 176 $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'), 177 $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]'), 178 animationDuration = 'show' === settings.showTabFn ? 0 : 400; 179 $requestedTitle.add($requestedContent).addClass(activeClass); 180 $requestedTitle.attr({ 181 tabindex: '0', 182 'aria-selected': 'true', 183 'aria-expanded': 'true' 184 }); 185 $requestedContent[settings.showTabFn](animationDuration, () => elementorFrontend.elements.$window.trigger('resize')); 186 $requestedContent.removeAttr('hidden'); 187 } 188 189 isActiveTab(tabIndex) { 190 return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active')); 191 } 192 193 bindEvents() { 194 this.elements.$tabTitles.on({ 195 keydown: event => { 196 // Support for old markup that includes an `<a>` tag in the tab 197 if (jQuery(event.target).is('a') && `Enter` === event.key) { 198 event.preventDefault(); 199 } // We listen to keydowon event for these keys in order to prevent undesired page scrolling 200 201 202 if (['End', 'Home', 'ArrowUp', 'ArrowDown'].includes(event.key)) { 203 this.handleKeyboardNavigation(event); 204 } 205 }, 206 keyup: event => { 207 switch (event.key) { 208 case 'ArrowLeft': 209 case 'ArrowRight': 210 this.handleKeyboardNavigation(event); 211 break; 212 213 case 'Enter': 214 case 'Space': 215 event.preventDefault(); 216 this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); 217 break; 218 } 219 }, 220 click: event => { 221 event.preventDefault(); 222 this.changeActiveTab(event.currentTarget.getAttribute('data-tab')); 223 } 224 }); 225 } 226 227 onInit(...args) { 228 super.onInit(...args); 229 this.activateDefaultTab(); 230 } 231 232 onEditSettingsChange(propertyName) { 233 if ('activeItemIndex' === propertyName) { 234 this.activateDefaultTab(); 235 } 236 } 237 238 changeActiveTab(tabIndex) { 239 const isActiveTab = this.isActiveTab(tabIndex), 240 settings = this.getSettings(); 241 242 if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) { 243 this.deactivateActiveTab(); 244 } 245 246 if (!settings.hidePrevious && isActiveTab) { 247 this.deactivateActiveTab(tabIndex); 248 } 249 250 if (!isActiveTab) { 251 this.activateTab(tabIndex); 252 } 253 } 254 255 } 256 257 exports.default = baseTabs; 258 259 /***/ }) 260 261 }]); 262 //# sourceMappingURL=accordion.5824c4bc9e26d54f2918.bundle.js.map