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