bootstrap-italia 2.14.0 → 2.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/bootstrap-italia.min.css +1 -1
- package/dist/css/bootstrap-italia.min.css.map +1 -1
- package/dist/js/bootstrap-italia.bundle.min.js +10 -10
- package/dist/js/bootstrap-italia.min.js +4 -4
- package/dist/plugins/navbar-collapsible.js +120 -139
- package/dist/plugins/navbar-collapsible.js.map +1 -1
- package/dist/plugins/navscroll.js +27 -3
- package/dist/plugins/navscroll.js.map +1 -1
- package/dist/plugins/util/focustrap.js +23 -3
- package/dist/plugins/util/focustrap.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/js/plugins/navbar-collapsible.js +120 -141
- package/src/js/plugins/navscroll.js +27 -3
- package/src/js/plugins/util/focustrap.js +23 -3
- package/src/js/version.js +1 -1
- package/src/scss/base/_variables.scss +2 -2
- package/src/scss/base/_version.scss +1 -1
- package/src/scss/components/_carousel.scss +1 -1
- package/src/scss/components/_navigation.scss +21 -6
- package/dist/plugins/util/pageScroll.js +0 -45
- package/dist/plugins/util/pageScroll.js.map +0 -1
|
@@ -3,8 +3,9 @@ import { getElementFromSelector, isVisible, reflow } from './util/index.js';
|
|
|
3
3
|
import EventHandler from './dom/event-handler.js';
|
|
4
4
|
import SelectorEngine from './dom/selector-engine.js';
|
|
5
5
|
import { isScreenMobile } from './util/device.js';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
6
|
+
import ScrollBarHelper from './util/scrollbar.js';
|
|
7
|
+
import FocusTrap from './util/focustrap.js';
|
|
8
|
+
import Backdrop from './util/backdrop.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* --------------------------------------------------------------------------
|
|
@@ -22,7 +23,6 @@ const DATA_API_KEY = '.data-api';
|
|
|
22
23
|
|
|
23
24
|
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
24
25
|
const EVENT_CLICK = `click${EVENT_KEY}`;
|
|
25
|
-
const EVENT_KEYUP = `keyup${EVENT_KEY}`;
|
|
26
26
|
const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;
|
|
27
27
|
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
28
28
|
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
@@ -30,54 +30,88 @@ const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
|
30
30
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
31
31
|
const EVENT_RESIZE = `resize${EVENT_KEY}`;
|
|
32
32
|
|
|
33
|
-
const
|
|
33
|
+
const CLASS_NAME_OPEN = 'navbar-open';
|
|
34
34
|
const CLASS_NAME_SHOW = 'show';
|
|
35
35
|
const CLASS_NAME_EXPANDED = 'expanded';
|
|
36
36
|
|
|
37
37
|
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="navbarcollapsible"]';
|
|
38
|
-
|
|
39
|
-
//const SELECTOR_NAVBAR = '.navbar-collapsable'
|
|
40
38
|
const SELECTOR_BTN_CLOSE = '.close-div button';
|
|
41
39
|
const SELECTOR_BTN_MENU_CLOSE = '.close-menu';
|
|
42
40
|
const SELECTOR_BTN_BACK = '.it-back-button';
|
|
43
|
-
const SELECTOR_OVERLAY = '.overlay';
|
|
44
41
|
const SELECTOR_MENU_WRAPPER = '.menu-wrapper';
|
|
45
42
|
const SELECTOR_NAVLINK = '.nav-link';
|
|
46
43
|
const SELECTOR_MEGAMENUNAVLINK = '.nav-item .list-item';
|
|
47
44
|
const SELECTOR_HEADINGLINK = '.it-heading-link';
|
|
48
45
|
const SELECTOR_FOOTERLINK = '.it-footer-link';
|
|
49
46
|
|
|
47
|
+
const Default = {
|
|
48
|
+
backdrop: true,
|
|
49
|
+
focus: true,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const DefaultType = {
|
|
53
|
+
backdrop: '(boolean|string)',
|
|
54
|
+
focus: 'boolean',
|
|
55
|
+
};
|
|
56
|
+
|
|
50
57
|
class NavBarCollapsible extends BaseComponent {
|
|
51
|
-
constructor(element) {
|
|
52
|
-
super(element);
|
|
58
|
+
constructor(element, config) {
|
|
59
|
+
super(element, config);
|
|
60
|
+
|
|
61
|
+
this._mainElement = SelectorEngine.findOne('main');
|
|
62
|
+
this._isNavbarOutsideMain = this._mainElement && !this._mainElement.contains(this._element);
|
|
63
|
+
this._parentElement = this._element.parentNode;
|
|
53
64
|
|
|
54
65
|
this._isShown = this._element.classList.contains(CLASS_NAME_EXPANDED);
|
|
55
|
-
this._isTransitioning = false;
|
|
56
66
|
|
|
57
|
-
this.
|
|
58
|
-
|
|
67
|
+
if (!this._element.getAttribute('tabindex')) {
|
|
68
|
+
this._element.setAttribute('tabindex', '-1');
|
|
69
|
+
}
|
|
59
70
|
|
|
60
|
-
this.
|
|
71
|
+
this._backdrop = this._initializeBackDrop();
|
|
72
|
+
this._focustrap = this._initializeFocusTrap();
|
|
73
|
+
this._scrollBar = new ScrollBarHelper();
|
|
74
|
+
this._isTransitioning = false;
|
|
75
|
+
this._isMobile = isScreenMobile();
|
|
61
76
|
|
|
62
77
|
this._btnClose = SelectorEngine.findOne(SELECTOR_BTN_CLOSE, this._element);
|
|
63
78
|
this._btnBack = SelectorEngine.findOne(SELECTOR_BTN_BACK, this._element);
|
|
64
79
|
this._menuWrapper = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element);
|
|
65
|
-
|
|
66
|
-
this._setOverlay();
|
|
80
|
+
|
|
67
81
|
this._menuItems = SelectorEngine.find(
|
|
68
82
|
[SELECTOR_NAVLINK, SELECTOR_MEGAMENUNAVLINK, SELECTOR_HEADINGLINK, SELECTOR_FOOTERLINK, SELECTOR_BTN_MENU_CLOSE].join(','),
|
|
69
83
|
this._element
|
|
70
84
|
);
|
|
71
85
|
|
|
86
|
+
this._toggleButton =
|
|
87
|
+
SelectorEngine.findOne(`${SELECTOR_DATA_TOGGLE}[data-bs-target="#${this._element.id}"]`) ||
|
|
88
|
+
SelectorEngine.findOne(`${SELECTOR_DATA_TOGGLE}[href="#${this._element.id}"]`);
|
|
89
|
+
|
|
90
|
+
if (this._toggleButton) {
|
|
91
|
+
if (!this._toggleButton.getAttribute('aria-expanded')) {
|
|
92
|
+
this._toggleButton.setAttribute('aria-expanded', this._isShown ? 'true' : 'false');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
72
95
|
this._bindEvents();
|
|
73
96
|
}
|
|
97
|
+
|
|
74
98
|
// Getters
|
|
99
|
+
static get Default() {
|
|
100
|
+
return Default
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static get DefaultType() {
|
|
104
|
+
return DefaultType
|
|
105
|
+
}
|
|
75
106
|
|
|
76
107
|
static get NAME() {
|
|
77
108
|
return NAME
|
|
78
109
|
}
|
|
79
110
|
|
|
80
111
|
// Public
|
|
112
|
+
toggle(relatedTarget) {
|
|
113
|
+
this._isShown ? this.hide() : this.show(relatedTarget);
|
|
114
|
+
}
|
|
81
115
|
|
|
82
116
|
show(relatedTarget) {
|
|
83
117
|
if (this._isShown || this._isTransitioning) {
|
|
@@ -92,14 +126,22 @@ class NavBarCollapsible extends BaseComponent {
|
|
|
92
126
|
return
|
|
93
127
|
}
|
|
94
128
|
|
|
129
|
+
this._isShown = true;
|
|
130
|
+
this._isTransitioning = true;
|
|
131
|
+
this._scrollBar.hide();
|
|
132
|
+
|
|
95
133
|
if (this._btnBack) {
|
|
96
134
|
this._btnBack.classList.add(CLASS_NAME_SHOW);
|
|
97
135
|
}
|
|
98
136
|
|
|
99
|
-
|
|
137
|
+
document.body.classList.add(CLASS_NAME_OPEN);
|
|
100
138
|
|
|
101
|
-
|
|
139
|
+
this._backdrop.show();
|
|
102
140
|
this._showElement();
|
|
141
|
+
|
|
142
|
+
if (this._toggleButton) {
|
|
143
|
+
this._toggleButton.setAttribute('aria-expanded', 'true');
|
|
144
|
+
}
|
|
103
145
|
}
|
|
104
146
|
|
|
105
147
|
hide() {
|
|
@@ -115,45 +157,64 @@ class NavBarCollapsible extends BaseComponent {
|
|
|
115
157
|
|
|
116
158
|
this._isShown = false;
|
|
117
159
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (isAnimated) {
|
|
121
|
-
this._isTransitioning = true;
|
|
122
|
-
}
|
|
160
|
+
this._isTransitioning = true;
|
|
161
|
+
this._focustrap.deactivate();
|
|
123
162
|
|
|
124
163
|
if (this._btnBack) {
|
|
125
164
|
this._btnBack.classList.remove(CLASS_NAME_SHOW);
|
|
126
165
|
}
|
|
127
|
-
if (this._overlay) {
|
|
128
|
-
this._overlay.classList.remove(CLASS_NAME_SHOW);
|
|
129
|
-
}
|
|
130
166
|
|
|
131
167
|
this._element.classList.remove(CLASS_NAME_EXPANDED);
|
|
132
168
|
|
|
133
|
-
|
|
134
|
-
this._queueCallback(() => this._hideElement(), this._menuWrapper, isAnimated);
|
|
135
|
-
}
|
|
169
|
+
this._backdrop.hide();
|
|
136
170
|
|
|
137
|
-
|
|
138
|
-
|
|
171
|
+
this._queueCallback(() => this._hideElement(), this._menuWrapper, this._isAnimated());
|
|
172
|
+
|
|
173
|
+
if (this._toggleButton) {
|
|
174
|
+
this._toggleButton.setAttribute('aria-expanded', 'false');
|
|
175
|
+
}
|
|
139
176
|
}
|
|
140
177
|
|
|
141
178
|
dispose() {
|
|
142
179
|
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
143
180
|
EventHandler.off(window, EVENT_RESIZE);
|
|
144
|
-
|
|
181
|
+
EventHandler.off(document, EVENT_KEYDOWN);
|
|
145
182
|
}
|
|
183
|
+
this._backdrop.dispose();
|
|
184
|
+
|
|
185
|
+
this._focustrap.deactivate();
|
|
186
|
+
super.dispose();
|
|
146
187
|
}
|
|
147
188
|
|
|
148
|
-
|
|
189
|
+
_initializeBackDrop() {
|
|
190
|
+
return new Backdrop({
|
|
191
|
+
isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,
|
|
192
|
+
isAnimated: this._isAnimated(),
|
|
193
|
+
className: 'navbar-backdrop',
|
|
194
|
+
rootElement: this._parentElement,
|
|
195
|
+
clickCallback: () => {
|
|
196
|
+
this.hide();
|
|
197
|
+
},
|
|
198
|
+
})
|
|
199
|
+
}
|
|
149
200
|
|
|
201
|
+
_initializeFocusTrap() {
|
|
202
|
+
return new FocusTrap({
|
|
203
|
+
trapElement: this._element,
|
|
204
|
+
initialFocus: () => this._btnClose || this._element.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Private
|
|
150
209
|
_bindEvents() {
|
|
151
210
|
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
152
211
|
EventHandler.on(window, EVENT_RESIZE, () => this._onResize());
|
|
212
|
+
EventHandler.on(document, EVENT_KEYDOWN, (evt) => {
|
|
213
|
+
if (this._isShown && evt.key === 'Escape') {
|
|
214
|
+
this.hide();
|
|
215
|
+
}
|
|
216
|
+
});
|
|
153
217
|
|
|
154
|
-
if (this._overlay) {
|
|
155
|
-
EventHandler.on(this._overlay, EVENT_CLICK, () => this.hide());
|
|
156
|
-
}
|
|
157
218
|
EventHandler.on(this._btnClose, EVENT_CLICK, (evt) => {
|
|
158
219
|
evt.preventDefault();
|
|
159
220
|
this.hide();
|
|
@@ -162,11 +223,8 @@ class NavBarCollapsible extends BaseComponent {
|
|
|
162
223
|
evt.preventDefault();
|
|
163
224
|
this.hide();
|
|
164
225
|
});
|
|
165
|
-
|
|
166
226
|
this._menuItems.forEach((item) => {
|
|
167
227
|
EventHandler.on(item, EVENT_KEYDOWN, (evt) => this._isMobile && this._onMenuItemKeyDown(evt));
|
|
168
|
-
EventHandler.on(item, EVENT_KEYUP, (evt) => this._isMobile && this._onMenuItemKeyUp(evt));
|
|
169
|
-
EventHandler.on(item, EVENT_CLICK, (evt) => this._isMobile && this._onMenuItemClick(evt));
|
|
170
228
|
});
|
|
171
229
|
}
|
|
172
230
|
}
|
|
@@ -175,30 +233,14 @@ class NavBarCollapsible extends BaseComponent {
|
|
|
175
233
|
this._isMobile = isScreenMobile();
|
|
176
234
|
}
|
|
177
235
|
|
|
178
|
-
_onMenuItemKeyUp(evt) {
|
|
179
|
-
if (evt.key === 'Shift') {
|
|
180
|
-
this._isKeyShift = false;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
236
|
_onMenuItemKeyDown(evt) {
|
|
184
|
-
if (evt.key === '
|
|
185
|
-
this.
|
|
186
|
-
}
|
|
187
|
-
if (evt.key === 'Tab') {
|
|
188
|
-
evt.preventDefault();
|
|
189
|
-
this._focusNext();
|
|
237
|
+
if (evt.key === 'Escape') {
|
|
238
|
+
this.hide();
|
|
190
239
|
}
|
|
191
240
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Update the last focused element when an interactive element is clicked
|
|
194
|
-
*/
|
|
195
|
-
_onMenuItemClick(evt) {
|
|
196
|
-
this.currItemIdx = getElementIndex(evt.currentTarget, this._menuItems);
|
|
197
|
-
}
|
|
198
241
|
|
|
199
242
|
_isAnimated() {
|
|
200
|
-
|
|
201
|
-
return true //this._element.classList.contains(CLASS_NAME_EXPANDED)
|
|
243
|
+
return true
|
|
202
244
|
}
|
|
203
245
|
|
|
204
246
|
_isElementHidden(element) {
|
|
@@ -206,108 +248,47 @@ class NavBarCollapsible extends BaseComponent {
|
|
|
206
248
|
}
|
|
207
249
|
|
|
208
250
|
_showElement() {
|
|
209
|
-
const isAnimated = this._isAnimated();
|
|
210
|
-
|
|
211
251
|
this._element.style.display = 'block';
|
|
212
|
-
this._element.
|
|
213
|
-
|
|
214
|
-
//this._element.setAttribute('role', 'dialog')
|
|
215
|
-
if (this._overlay) {
|
|
216
|
-
this._overlay.style.display = 'block';
|
|
252
|
+
if (!this._element.getAttribute('aria-label') && !this._element.getAttribute('aria-labelledby')) {
|
|
253
|
+
this._element.setAttribute('aria-label', 'Menu');
|
|
217
254
|
}
|
|
255
|
+
this._element.setAttribute('aria-modal', true);
|
|
256
|
+
this._element.setAttribute('role', 'dialog');
|
|
218
257
|
|
|
219
|
-
if (
|
|
220
|
-
|
|
258
|
+
if (this._mainElement && this._isNavbarOutsideMain) {
|
|
259
|
+
this._mainElement.setAttribute('inert', '');
|
|
221
260
|
}
|
|
222
261
|
|
|
262
|
+
reflow(this._element);
|
|
263
|
+
|
|
223
264
|
this._element.classList.add(CLASS_NAME_EXPANDED);
|
|
224
|
-
if (this._overlay) {
|
|
225
|
-
this._overlay.classList.add(CLASS_NAME_SHOW);
|
|
226
|
-
}
|
|
227
265
|
|
|
228
266
|
const transitionComplete = () => {
|
|
229
|
-
this.
|
|
230
|
-
|
|
231
|
-
if (firstItem.item) {
|
|
232
|
-
firstItem.item.focus();
|
|
233
|
-
this._currItemIdx = firstItem.index;
|
|
267
|
+
if (this._config.focus) {
|
|
268
|
+
this._focustrap.activate();
|
|
234
269
|
}
|
|
270
|
+
this._isTransitioning = false;
|
|
235
271
|
EventHandler.trigger(this._element, EVENT_SHOWN);
|
|
236
272
|
};
|
|
237
273
|
|
|
238
|
-
this._queueCallback(transitionComplete, this._menuWrapper,
|
|
274
|
+
this._queueCallback(transitionComplete, this._menuWrapper, this._isAnimated());
|
|
239
275
|
}
|
|
240
276
|
|
|
241
277
|
_hideElement() {
|
|
242
|
-
if (this._overlay) {
|
|
243
|
-
this._overlay.style.display = 'none';
|
|
244
|
-
}
|
|
245
|
-
|
|
246
278
|
this._element.style.display = 'none';
|
|
247
|
-
this._element.
|
|
248
|
-
this._element.removeAttribute('
|
|
249
|
-
//this._element.removeAttribute('aria-modal')
|
|
250
|
-
//this._element.removeAttribute('role')
|
|
251
|
-
this._isTransitioning = false;
|
|
252
|
-
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
253
|
-
}
|
|
279
|
+
this._element.removeAttribute('aria-modal');
|
|
280
|
+
this._element.removeAttribute('role');
|
|
254
281
|
|
|
255
|
-
|
|
256
|
-
this._overlay = SelectorEngine.findOne(SELECTOR_OVERLAY, this._element);
|
|
257
|
-
if (this._isAnimated) {
|
|
258
|
-
this._overlay.classList.add(CLASS_NAME_FADE);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
282
|
+
document.body.classList.remove(CLASS_NAME_OPEN);
|
|
261
283
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
*/
|
|
265
|
-
_focusNext() {
|
|
266
|
-
let nextIdx = this._currItemIdx + (this._isKeyShift ? -1 : 1);
|
|
267
|
-
if (nextIdx < 0) {
|
|
268
|
-
nextIdx = this._menuItems.length - 1;
|
|
269
|
-
} else if (nextIdx >= this._menuItems.length) {
|
|
270
|
-
nextIdx = 0;
|
|
271
|
-
}
|
|
272
|
-
const target = this._getNextVisibleItem(nextIdx, this._isKeyShift);
|
|
273
|
-
if (target.item) {
|
|
274
|
-
target.item.focus();
|
|
275
|
-
this._currItemIdx = target.index;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Get the next focusable element from a starting point
|
|
280
|
-
* @param {int} start - the index of the array of the elements as starting point (included)
|
|
281
|
-
* @param {boolean} wayTop - the array search direction (true: bottom to top, false: top to bottom)
|
|
282
|
-
* @returns {Object} the item found and its index in the array
|
|
283
|
-
*/
|
|
284
|
-
_getNextVisibleItem(start, wayTop) {
|
|
285
|
-
let found = null;
|
|
286
|
-
let foundIdx = null;
|
|
287
|
-
|
|
288
|
-
let i = start;
|
|
289
|
-
let incr = wayTop ? -1 : 1;
|
|
290
|
-
let firstCheck = false;
|
|
291
|
-
while (!found && (i != start || !firstCheck)) {
|
|
292
|
-
if (i == start) {
|
|
293
|
-
firstCheck = true;
|
|
294
|
-
}
|
|
295
|
-
if (!this._isElementHidden(this._menuItems[i])) {
|
|
296
|
-
found = this._menuItems[i];
|
|
297
|
-
foundIdx = i;
|
|
298
|
-
}
|
|
299
|
-
i = i + incr;
|
|
300
|
-
if (i < 0) {
|
|
301
|
-
i = this._menuItems.length - 1;
|
|
302
|
-
} else if (i >= this._menuItems.length) {
|
|
303
|
-
i = 0;
|
|
304
|
-
}
|
|
284
|
+
if (this._mainElement && this._isNavbarOutsideMain) {
|
|
285
|
+
this._mainElement.removeAttribute('inert');
|
|
305
286
|
}
|
|
306
287
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
288
|
+
this._scrollBar.reset();
|
|
289
|
+
this._isTransitioning = false;
|
|
290
|
+
|
|
291
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
311
292
|
}
|
|
312
293
|
}
|
|
313
294
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar-collapsible.js","sources":["../../src/js/plugins/navbar-collapsible.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\n\nimport { getElementFromSelector, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\n\nimport { isScreenMobile } from './util/device'\nimport { getElementIndex } from './util/dom'\nimport { disablePageScroll, enablePageScroll } from './util/pageScroll'\n\nconst NAME = 'navbarcollapsible'\nconst DATA_KEY = 'bs.navbarcollapsible'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_KEYUP = `keyup${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_EXPANDED = 'expanded'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"navbarcollapsible\"]'\n\n//const SELECTOR_NAVBAR = '.navbar-collapsable'\nconst SELECTOR_BTN_CLOSE = '.close-div button'\nconst SELECTOR_BTN_MENU_CLOSE = '.close-menu'\nconst SELECTOR_BTN_BACK = '.it-back-button'\nconst SELECTOR_OVERLAY = '.overlay'\nconst SELECTOR_MENU_WRAPPER = '.menu-wrapper'\nconst SELECTOR_NAVLINK = '.nav-link'\nconst SELECTOR_MEGAMENUNAVLINK = '.nav-item .list-item'\nconst SELECTOR_HEADINGLINK = '.it-heading-link'\nconst SELECTOR_FOOTERLINK = '.it-footer-link'\n\nclass NavBarCollapsible extends BaseComponent {\n constructor(element) {\n super(element)\n\n this._isShown = this._element.classList.contains(CLASS_NAME_EXPANDED)\n this._isTransitioning = false\n\n this._isMobile = isScreenMobile()\n this._isKeyShift = false\n\n this._currItemIdx = 0\n\n this._btnClose = SelectorEngine.findOne(SELECTOR_BTN_CLOSE, this._element)\n this._btnBack = SelectorEngine.findOne(SELECTOR_BTN_BACK, this._element)\n this._menuWrapper = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element)\n this._overlay = null\n this._setOverlay()\n this._menuItems = SelectorEngine.find(\n [SELECTOR_NAVLINK, SELECTOR_MEGAMENUNAVLINK, SELECTOR_HEADINGLINK, SELECTOR_FOOTERLINK, SELECTOR_BTN_MENU_CLOSE].join(','),\n this._element\n )\n\n this._bindEvents()\n }\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget,\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n if (this._btnBack) {\n this._btnBack.classList.add(CLASS_NAME_SHOW)\n }\n\n this._isShown = true\n\n disablePageScroll()\n this._showElement()\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n\n const isAnimated = this._isAnimated()\n\n if (isAnimated) {\n this._isTransitioning = true\n }\n\n if (this._btnBack) {\n this._btnBack.classList.remove(CLASS_NAME_SHOW)\n }\n if (this._overlay) {\n this._overlay.classList.remove(CLASS_NAME_SHOW)\n }\n\n this._element.classList.remove(CLASS_NAME_EXPANDED)\n\n enablePageScroll()\n this._queueCallback(() => this._hideElement(), this._menuWrapper, isAnimated)\n }\n\n toggle(relatedTarget) {\n this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n dispose() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.off(window, EVENT_RESIZE)\n super.dispose()\n }\n }\n\n // Private\n\n _bindEvents() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, EVENT_RESIZE, () => this._onResize())\n\n if (this._overlay) {\n EventHandler.on(this._overlay, EVENT_CLICK, () => this.hide())\n }\n EventHandler.on(this._btnClose, EVENT_CLICK, (evt) => {\n evt.preventDefault()\n this.hide()\n })\n EventHandler.on(this._btnBack, EVENT_CLICK, (evt) => {\n evt.preventDefault()\n this.hide()\n })\n\n this._menuItems.forEach((item) => {\n EventHandler.on(item, EVENT_KEYDOWN, (evt) => this._isMobile && this._onMenuItemKeyDown(evt))\n EventHandler.on(item, EVENT_KEYUP, (evt) => this._isMobile && this._onMenuItemKeyUp(evt))\n EventHandler.on(item, EVENT_CLICK, (evt) => this._isMobile && this._onMenuItemClick(evt))\n })\n }\n }\n\n _onResize() {\n this._isMobile = isScreenMobile()\n }\n\n _onMenuItemKeyUp(evt) {\n if (evt.key === 'Shift') {\n this._isKeyShift = false\n }\n }\n _onMenuItemKeyDown(evt) {\n if (evt.key === 'Shift') {\n this._isKeyShift = true\n }\n if (evt.key === 'Tab') {\n evt.preventDefault()\n this._focusNext()\n }\n }\n /**\n * Update the last focused element when an interactive element is clicked\n */\n _onMenuItemClick(evt) {\n this.currItemIdx = getElementIndex(evt.currentTarget, this._menuItems)\n }\n\n _isAnimated() {\n //there's no an animation css class you can toggle with a \"show\" css class, so it is supposed true\n return true //this._element.classList.contains(CLASS_NAME_EXPANDED)\n }\n\n _isElementHidden(element) {\n return element.offsetParent === null\n }\n\n _showElement() {\n const isAnimated = this._isAnimated()\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-expanded', true)\n //this._element.setAttribute('role', 'dialog')\n if (this._overlay) {\n this._overlay.style.display = 'block'\n }\n\n if (isAnimated) {\n reflow(this._element)\n }\n\n this._element.classList.add(CLASS_NAME_EXPANDED)\n if (this._overlay) {\n this._overlay.classList.add(CLASS_NAME_SHOW)\n }\n\n const transitionComplete = () => {\n this._isTransitioning = false\n const firstItem = this._getNextVisibleItem(0) //at pos 0 there's the close button\n if (firstItem.item) {\n firstItem.item.focus()\n this._currItemIdx = firstItem.index\n }\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n this._queueCallback(transitionComplete, this._menuWrapper, isAnimated)\n }\n\n _hideElement() {\n if (this._overlay) {\n this._overlay.style.display = 'none'\n }\n\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-expanded')\n //this._element.removeAttribute('aria-modal')\n //this._element.removeAttribute('role')\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n _setOverlay() {\n this._overlay = SelectorEngine.findOne(SELECTOR_OVERLAY, this._element)\n if (this._isAnimated) {\n this._overlay.classList.add(CLASS_NAME_FADE)\n }\n }\n\n /**\n * Moves focus to the next focusable element based on the DOM exploration direction\n */\n _focusNext() {\n let nextIdx = this._currItemIdx + (this._isKeyShift ? -1 : 1)\n if (nextIdx < 0) {\n nextIdx = this._menuItems.length - 1\n } else if (nextIdx >= this._menuItems.length) {\n nextIdx = 0\n }\n const target = this._getNextVisibleItem(nextIdx, this._isKeyShift)\n if (target.item) {\n target.item.focus()\n this._currItemIdx = target.index\n }\n }\n /**\n * Get the next focusable element from a starting point\n * @param {int} start - the index of the array of the elements as starting point (included)\n * @param {boolean} wayTop - the array search direction (true: bottom to top, false: top to bottom)\n * @returns {Object} the item found and its index in the array\n */\n _getNextVisibleItem(start, wayTop) {\n let found = null\n let foundIdx = null\n\n let i = start\n let incr = wayTop ? -1 : 1\n let firstCheck = false\n while (!found && (i != start || !firstCheck)) {\n if (i == start) {\n firstCheck = true\n }\n if (!this._isElementHidden(this._menuItems[i])) {\n found = this._menuItems[i]\n foundIdx = i\n }\n i = i + incr\n if (i < 0) {\n i = this._menuItems.length - 1\n } else if (i >= this._menuItems.length) {\n i = 0\n }\n }\n\n return {\n item: found,\n index: foundIdx,\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n const data = NavBarCollapsible.getOrCreateInstance(target)\n\n data.toggle(this)\n })\n}\n\nexport default NavBarCollapsible\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navbar-collapsible.js","sources":["../../src/js/plugins/navbar-collapsible.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap Italia (https://italia.github.io/bootstrap-italia/)\n * Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS\n * Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport { getElementFromSelector, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport { isScreenMobile } from './util/device'\nimport ScrollBarHelper from './util/scrollbar'\nimport FocusTrap from './util/focustrap'\nimport Backdrop from './util/backdrop'\n\nconst NAME = 'navbarcollapsible'\nconst DATA_KEY = 'bs.navbarcollapsible'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\n\nconst CLASS_NAME_OPEN = 'navbar-open'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_EXPANDED = 'expanded'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"navbarcollapsible\"]'\nconst SELECTOR_BTN_CLOSE = '.close-div button'\nconst SELECTOR_BTN_MENU_CLOSE = '.close-menu'\nconst SELECTOR_BTN_BACK = '.it-back-button'\nconst SELECTOR_MENU_WRAPPER = '.menu-wrapper'\nconst SELECTOR_NAVLINK = '.nav-link'\nconst SELECTOR_MEGAMENUNAVLINK = '.nav-item .list-item'\nconst SELECTOR_HEADINGLINK = '.it-heading-link'\nconst SELECTOR_FOOTERLINK = '.it-footer-link'\n\nconst Default = {\n backdrop: true,\n focus: true,\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n}\n\nclass NavBarCollapsible extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._mainElement = SelectorEngine.findOne('main')\n this._isNavbarOutsideMain = this._mainElement && !this._mainElement.contains(this._element)\n this._parentElement = this._element.parentNode\n\n this._isShown = this._element.classList.contains(CLASS_NAME_EXPANDED)\n\n if (!this._element.getAttribute('tabindex')) {\n this._element.setAttribute('tabindex', '-1')\n }\n\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._scrollBar = new ScrollBarHelper()\n this._isTransitioning = false\n this._isMobile = isScreenMobile()\n\n this._btnClose = SelectorEngine.findOne(SELECTOR_BTN_CLOSE, this._element)\n this._btnBack = SelectorEngine.findOne(SELECTOR_BTN_BACK, this._element)\n this._menuWrapper = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element)\n\n this._menuItems = SelectorEngine.find(\n [SELECTOR_NAVLINK, SELECTOR_MEGAMENUNAVLINK, SELECTOR_HEADINGLINK, SELECTOR_FOOTERLINK, SELECTOR_BTN_MENU_CLOSE].join(','),\n this._element\n )\n\n this._toggleButton =\n SelectorEngine.findOne(`${SELECTOR_DATA_TOGGLE}[data-bs-target=\"#${this._element.id}\"]`) ||\n SelectorEngine.findOne(`${SELECTOR_DATA_TOGGLE}[href=\"#${this._element.id}\"]`)\n\n if (this._toggleButton) {\n if (!this._toggleButton.getAttribute('aria-expanded')) {\n this._toggleButton.setAttribute('aria-expanded', this._isShown ? 'true' : 'false')\n }\n }\n this._bindEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget,\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n this._scrollBar.hide()\n\n if (this._btnBack) {\n this._btnBack.classList.add(CLASS_NAME_SHOW)\n }\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._backdrop.show()\n this._showElement()\n\n if (this._toggleButton) {\n this._toggleButton.setAttribute('aria-expanded', 'true')\n }\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n if (this._btnBack) {\n this._btnBack.classList.remove(CLASS_NAME_SHOW)\n }\n\n this._element.classList.remove(CLASS_NAME_EXPANDED)\n\n this._backdrop.hide()\n\n this._queueCallback(() => this._hideElement(), this._menuWrapper, this._isAnimated())\n\n if (this._toggleButton) {\n this._toggleButton.setAttribute('aria-expanded', 'false')\n }\n }\n\n dispose() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.off(window, EVENT_RESIZE)\n EventHandler.off(document, EVENT_KEYDOWN)\n }\n this._backdrop.dispose()\n\n this._focustrap.deactivate()\n super.dispose()\n }\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated(),\n className: 'navbar-backdrop',\n rootElement: this._parentElement,\n clickCallback: () => {\n this.hide()\n },\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element,\n initialFocus: () => this._btnClose || this._element.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n })\n }\n\n // Private\n _bindEvents() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, EVENT_RESIZE, () => this._onResize())\n EventHandler.on(document, EVENT_KEYDOWN, (evt) => {\n if (this._isShown && evt.key === 'Escape') {\n this.hide()\n }\n })\n\n EventHandler.on(this._btnClose, EVENT_CLICK, (evt) => {\n evt.preventDefault()\n this.hide()\n })\n EventHandler.on(this._btnBack, EVENT_CLICK, (evt) => {\n evt.preventDefault()\n this.hide()\n })\n this._menuItems.forEach((item) => {\n EventHandler.on(item, EVENT_KEYDOWN, (evt) => this._isMobile && this._onMenuItemKeyDown(evt))\n })\n }\n }\n\n _onResize() {\n this._isMobile = isScreenMobile()\n }\n\n _onMenuItemKeyDown(evt) {\n if (evt.key === 'Escape') {\n this.hide()\n }\n }\n\n _isAnimated() {\n return true\n }\n\n _isElementHidden(element) {\n return element.offsetParent === null\n }\n\n _showElement() {\n this._element.style.display = 'block'\n if (!this._element.getAttribute('aria-label') && !this._element.getAttribute('aria-labelledby')) {\n this._element.setAttribute('aria-label', 'Menu')\n }\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if (this._mainElement && this._isNavbarOutsideMain) {\n this._mainElement.setAttribute('inert', '')\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_EXPANDED)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n this._queueCallback(transitionComplete, this._menuWrapper, this._isAnimated())\n }\n\n _hideElement() {\n this._element.style.display = 'none'\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n document.body.classList.remove(CLASS_NAME_OPEN)\n\n if (this._mainElement && this._isNavbarOutsideMain) {\n this._mainElement.removeAttribute('inert')\n }\n\n this._scrollBar.reset()\n this._isTransitioning = false\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, (showEvent) => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n const data = NavBarCollapsible.getOrCreateInstance(target)\n\n data.toggle(this)\n })\n}\n\nexport default NavBarCollapsible\n"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ const SELECTOR_TOGGLER = '.custom-navbar-toggler';
|
|
|
22
22
|
const SELECTOR_TOGGLER_ICON = '.it-list';
|
|
23
23
|
const SELECTOR_COLLAPSIBLE = '.navbar-collapsable';
|
|
24
24
|
const SELECTOR_PROGRESS_BAR = '.it-navscroll-progressbar';
|
|
25
|
+
const SELECTOR_MENU_WRAPPER = '.menu-wrapper';
|
|
25
26
|
|
|
26
27
|
const Default = {
|
|
27
28
|
scrollPadding: 10,
|
|
@@ -41,6 +42,11 @@ class NavScroll extends BaseComponent {
|
|
|
41
42
|
this._callbackQueue = [];
|
|
42
43
|
this._scrollCb = null;
|
|
43
44
|
|
|
45
|
+
const menuWrapper = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element);
|
|
46
|
+
if (menuWrapper && !menuWrapper.hasAttribute('tabindex')) {
|
|
47
|
+
menuWrapper.setAttribute('tabindex', '-1');
|
|
48
|
+
}
|
|
49
|
+
|
|
44
50
|
this._bindEvents();
|
|
45
51
|
}
|
|
46
52
|
// Getters
|
|
@@ -144,13 +150,31 @@ class NavScroll extends BaseComponent {
|
|
|
144
150
|
}
|
|
145
151
|
|
|
146
152
|
_scrollToHash(hash) {
|
|
147
|
-
|
|
153
|
+
if (!hash || hash === '#') {
|
|
154
|
+
// Validate hash to prevent errors
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
const target = this._sectionContainer // Fallback: when container is null, omit the second parameter entirely
|
|
158
|
+
? SelectorEngine.findOne(hash, this._sectionContainer)
|
|
159
|
+
: SelectorEngine.findOne(hash);
|
|
148
160
|
if (target) {
|
|
149
161
|
documentScrollTo(target.offsetTop - this._getScrollPadding(), {
|
|
150
162
|
duration: this._config.duration,
|
|
151
163
|
easing: this._config.easing,
|
|
152
|
-
|
|
153
|
-
|
|
164
|
+
complete: () => {
|
|
165
|
+
const isHeading = target.matches('h1, h2, h3, h4, h5, h6');
|
|
166
|
+
const needsTabIndex = !target.hasAttribute('tabindex');
|
|
167
|
+
if (needsTabIndex) {
|
|
168
|
+
target.setAttribute('tabindex', '-1');
|
|
169
|
+
}
|
|
170
|
+
target.focus({ preventScroll: true }); // preventScroll to avoid double scrolling
|
|
171
|
+
if (needsTabIndex && isHeading) {
|
|
172
|
+
// remove tabIndex for headings after 500ms
|
|
173
|
+
setTimeout(() => {
|
|
174
|
+
target.removeAttribute('tabindex');
|
|
175
|
+
}, 500);
|
|
176
|
+
}
|
|
177
|
+
},
|
|
154
178
|
});
|
|
155
179
|
|
|
156
180
|
if (history.pushState) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navscroll.js","sources":["../../src/js/plugins/navscroll.js"],"sourcesContent":["import BaseComponent from './base-component.js'\n\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\n\nimport onDocumentScroll from './util/on-document-scroll'\nimport NavBarCollapsible from './navbar-collapsible'\n\nimport { documentScrollTo } from './util/tween'\n\nconst NAME = 'navscroll'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_NAVSCROLL = '[data-bs-navscroll]' //'.it-navscroll-wrapper'\nconst SELECTOR_LIST = 'ul.link-list'\nconst SELECTOR_LINK_CONTAINER = 'li.nav-link, li.nav-item'\nconst SELECTOR_LINK = 'a.nav-link'\nconst SELECTOR_LINK_ACTIVE = `${SELECTOR_LINK}.${CLASS_NAME_ACTIVE}`\nconst SELECTOR_LINK_CLICKABLE = `${SELECTOR_LINK}[href^=\"#\"]`\nconst SELECTOR_CONTAINER = '.it-page-sections-container'\nconst SELECTOR_PAGE_SECTION = '.it-page-section'\nconst SELECTOR_TOGGLER = '.custom-navbar-toggler'\nconst SELECTOR_TOGGLER_ICON = '.it-list'\nconst SELECTOR_COLLAPSIBLE = '.navbar-collapsable'\nconst SELECTOR_PROGRESS_BAR = '.it-navscroll-progressbar'\n\nconst Default = {\n scrollPadding: 10,\n duration: 800,\n easing: 'easeInOutSine',\n}\nclass NavScroll extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n\n this._togglerElement = SelectorEngine.findOne(SELECTOR_TOGGLER, this._element)\n this._sectionContainer = SelectorEngine.findOne(SELECTOR_CONTAINER)\n this._collapsible = this._getCollapsible()\n this._isCollapseOpened = false\n this._callbackQueue = []\n this._scrollCb = null\n\n this._bindEvents()\n }\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n setScrollPadding(scrollPadding) {\n this._config.scrollPadding = scrollPadding\n }\n\n dispose() {\n if (this._scrollCb) {\n this._scrollCb.dispose()\n }\n super.dispose()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n return config\n }\n\n _bindEvents() {\n this._scrollCb = onDocumentScroll(() => this._onScroll())\n\n if (this._collapsible) {\n EventHandler.on(this._collapsible._element, 'shown.bs.navbarcollapsible', () => this._onCollapseOpened())\n EventHandler.on(this._collapsible._element, 'hidden.bs.navbarcollapsible', () => this._onCollapseClosed())\n }\n\n SelectorEngine.find(SELECTOR_LINK_CLICKABLE, this._element).forEach((link) => {\n link.addEventListener('click', () => {\n const scrollHash = () => this._scrollToHash(link.hash)\n if (this._isCollapseOpened) {\n this._callbackQueue.push(scrollHash)\n this._collapsible.hide()\n } else {\n scrollHash()\n }\n })\n })\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, 'load', () => {\n //if page is already scrolled\n setTimeout(() => this._onScroll(), 150)\n })\n }\n }\n\n _onCollapseOpened() {\n this._isCollapseOpened = true\n }\n _onCollapseClosed() {\n while (this._callbackQueue.length > 0) {\n const cb = this._callbackQueue.shift()\n if (typeof cb === 'function') {\n cb()\n }\n }\n this._isCollapseOpened = false\n }\n\n _getParentLinks(element) {\n const parents = []\n let parentContainer = element.closest(SELECTOR_LIST)\n let parentContainerPrev = null\n let exit = false\n while (parentContainer && !exit) {\n const parentLinkContainer = parentContainer.closest(SELECTOR_LINK_CONTAINER)\n if (parentLinkContainer) {\n const link = parentLinkContainer.querySelector(SELECTOR_LINK)\n if (link) {\n parents.push(link)\n }\n }\n parentContainerPrev = parentContainer\n parentContainer = (parentContainer.parentElement || parentContainer).closest(SELECTOR_LIST) //avoid self select of closest\n if (parentContainer === parentContainerPrev) {\n exit = true\n }\n }\n return parents\n }\n\n _decorateToggler(text) {\n if (this._togglerElement) {\n const icon = SelectorEngine.findOne(SELECTOR_TOGGLER_ICON, this._togglerElement)\n this._togglerElement.innerText = ''\n this._togglerElement.textContent = ''\n this._togglerElement.append(icon)\n this._togglerElement.append(text)\n }\n }\n\n _scrollToHash(hash) {\n const target = SelectorEngine.findOne(hash, this._sectionContainer)\n if (target) {\n documentScrollTo(target.offsetTop - this._getScrollPadding(), {\n duration: this._config.duration,\n easing: this._config.easing,\n /*complete: () => {\n },*/\n })\n\n if (history.pushState) {\n history.pushState(null, null, hash)\n } else {\n location.hash = hash\n }\n }\n }\n\n _updateProgress(content) {\n if (!content) {\n return\n }\n const progressBars = SelectorEngine.find(SELECTOR_PROGRESS_BAR)\n if (progressBars) {\n const offset = Math.abs(content.getBoundingClientRect().top)\n const height = content.getBoundingClientRect().height\n const scrollAmount = (offset / height) * 100\n const scrollValue = Math.min(100, Math.max(0, scrollAmount))\n\n progressBars.forEach((progressBar) => {\n if (content.getBoundingClientRect().top <= 0) {\n progressBar.style.width = scrollValue + '%'\n progressBar.setAttribute('aria-valuenow', scrollValue)\n } else {\n progressBar.style.width = 0 + '%'\n progressBar.setAttribute('aria-valuenow', 0)\n }\n })\n }\n }\n\n _onScroll() {\n const sectionsContainerTop = this._sectionContainer ? this._sectionContainer.offsetTop : 0\n if (typeof document === 'undefined') {\n return\n }\n const scrollDistance = document.scrollingElement.scrollTop - sectionsContainerTop\n\n const navItems = SelectorEngine.find(SELECTOR_LINK, this._element)\n\n const scrollPadding = this._getScrollPadding()\n\n SelectorEngine.find(SELECTOR_PAGE_SECTION).forEach((pageSec, idx) => {\n if (pageSec.offsetTop - sectionsContainerTop <= scrollDistance + scrollPadding) {\n SelectorEngine.find(SELECTOR_LINK_ACTIVE, this._element).forEach((link) => {\n link.classList.remove(CLASS_NAME_ACTIVE)\n })\n if (idx < navItems.length) {\n const currActive = navItems[idx]\n this._getParentLinks(currActive).forEach((parentLink) => {\n parentLink.classList.add(CLASS_NAME_ACTIVE)\n })\n currActive.classList.add(CLASS_NAME_ACTIVE)\n this._decorateToggler(currActive.innerText)\n }\n }\n })\n this._updateProgress(this._sectionContainer)\n }\n\n _getCollapsible() {\n const coll = SelectorEngine.findOne(SELECTOR_COLLAPSIBLE, this._element)\n if (coll) {\n return NavBarCollapsible.getOrCreateInstance(coll)\n }\n return null\n }\n\n _getScrollPadding() {\n if (typeof this._config.scrollPadding === 'function') {\n return this._config.scrollPadding()\n }\n return this._config.scrollPadding\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const navs = SelectorEngine.find(SELECTOR_NAVSCROLL)\n navs.map((nav) => {\n NavScroll.getOrCreateInstance(nav)\n })\n}\n\nexport default NavScroll\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navscroll.js","sources":["../../src/js/plugins/navscroll.js"],"sourcesContent":["import BaseComponent from './base-component.js'\n\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\n\nimport onDocumentScroll from './util/on-document-scroll'\nimport NavBarCollapsible from './navbar-collapsible'\n\nimport { documentScrollTo } from './util/tween'\n\nconst NAME = 'navscroll'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_NAVSCROLL = '[data-bs-navscroll]' //'.it-navscroll-wrapper'\nconst SELECTOR_LIST = 'ul.link-list'\nconst SELECTOR_LINK_CONTAINER = 'li.nav-link, li.nav-item'\nconst SELECTOR_LINK = 'a.nav-link'\nconst SELECTOR_LINK_ACTIVE = `${SELECTOR_LINK}.${CLASS_NAME_ACTIVE}`\nconst SELECTOR_LINK_CLICKABLE = `${SELECTOR_LINK}[href^=\"#\"]`\nconst SELECTOR_CONTAINER = '.it-page-sections-container'\nconst SELECTOR_PAGE_SECTION = '.it-page-section'\nconst SELECTOR_TOGGLER = '.custom-navbar-toggler'\nconst SELECTOR_TOGGLER_ICON = '.it-list'\nconst SELECTOR_COLLAPSIBLE = '.navbar-collapsable'\nconst SELECTOR_PROGRESS_BAR = '.it-navscroll-progressbar'\nconst SELECTOR_MENU_WRAPPER = '.menu-wrapper'\n\nconst Default = {\n scrollPadding: 10,\n duration: 800,\n easing: 'easeInOutSine',\n}\nclass NavScroll extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n\n this._togglerElement = SelectorEngine.findOne(SELECTOR_TOGGLER, this._element)\n this._sectionContainer = SelectorEngine.findOne(SELECTOR_CONTAINER)\n this._collapsible = this._getCollapsible()\n this._isCollapseOpened = false\n this._callbackQueue = []\n this._scrollCb = null\n\n const menuWrapper = SelectorEngine.findOne(SELECTOR_MENU_WRAPPER, this._element)\n if (menuWrapper && !menuWrapper.hasAttribute('tabindex')) {\n menuWrapper.setAttribute('tabindex', '-1')\n }\n\n this._bindEvents()\n }\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n setScrollPadding(scrollPadding) {\n this._config.scrollPadding = scrollPadding\n }\n\n dispose() {\n if (this._scrollCb) {\n this._scrollCb.dispose()\n }\n super.dispose()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {}),\n }\n return config\n }\n\n _bindEvents() {\n this._scrollCb = onDocumentScroll(() => this._onScroll())\n\n if (this._collapsible) {\n EventHandler.on(this._collapsible._element, 'shown.bs.navbarcollapsible', () => this._onCollapseOpened())\n EventHandler.on(this._collapsible._element, 'hidden.bs.navbarcollapsible', () => this._onCollapseClosed())\n }\n\n SelectorEngine.find(SELECTOR_LINK_CLICKABLE, this._element).forEach((link) => {\n link.addEventListener('click', () => {\n const scrollHash = () => this._scrollToHash(link.hash)\n if (this._isCollapseOpened) {\n this._callbackQueue.push(scrollHash)\n this._collapsible.hide()\n } else {\n scrollHash()\n }\n })\n })\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n EventHandler.on(window, 'load', () => {\n //if page is already scrolled\n setTimeout(() => this._onScroll(), 150)\n })\n }\n }\n\n _onCollapseOpened() {\n this._isCollapseOpened = true\n }\n _onCollapseClosed() {\n while (this._callbackQueue.length > 0) {\n const cb = this._callbackQueue.shift()\n if (typeof cb === 'function') {\n cb()\n }\n }\n this._isCollapseOpened = false\n }\n\n _getParentLinks(element) {\n const parents = []\n let parentContainer = element.closest(SELECTOR_LIST)\n let parentContainerPrev = null\n let exit = false\n while (parentContainer && !exit) {\n const parentLinkContainer = parentContainer.closest(SELECTOR_LINK_CONTAINER)\n if (parentLinkContainer) {\n const link = parentLinkContainer.querySelector(SELECTOR_LINK)\n if (link) {\n parents.push(link)\n }\n }\n parentContainerPrev = parentContainer\n parentContainer = (parentContainer.parentElement || parentContainer).closest(SELECTOR_LIST) //avoid self select of closest\n if (parentContainer === parentContainerPrev) {\n exit = true\n }\n }\n return parents\n }\n\n _decorateToggler(text) {\n if (this._togglerElement) {\n const icon = SelectorEngine.findOne(SELECTOR_TOGGLER_ICON, this._togglerElement)\n this._togglerElement.innerText = ''\n this._togglerElement.textContent = ''\n this._togglerElement.append(icon)\n this._togglerElement.append(text)\n }\n }\n\n _scrollToHash(hash) {\n if (!hash || hash === '#') {\n // Validate hash to prevent errors\n return\n }\n const target = this._sectionContainer // Fallback: when container is null, omit the second parameter entirely\n ? SelectorEngine.findOne(hash, this._sectionContainer)\n : SelectorEngine.findOne(hash)\n if (target) {\n documentScrollTo(target.offsetTop - this._getScrollPadding(), {\n duration: this._config.duration,\n easing: this._config.easing,\n complete: () => {\n const isHeading = target.matches('h1, h2, h3, h4, h5, h6')\n const needsTabIndex = !target.hasAttribute('tabindex')\n if (needsTabIndex) {\n target.setAttribute('tabindex', '-1')\n }\n target.focus({ preventScroll: true }) // preventScroll to avoid double scrolling\n if (needsTabIndex && isHeading) {\n // remove tabIndex for headings after 500ms\n setTimeout(() => {\n target.removeAttribute('tabindex')\n }, 500)\n }\n },\n })\n\n if (history.pushState) {\n history.pushState(null, null, hash)\n } else {\n location.hash = hash\n }\n }\n }\n\n _updateProgress(content) {\n if (!content) {\n return\n }\n const progressBars = SelectorEngine.find(SELECTOR_PROGRESS_BAR)\n if (progressBars) {\n const offset = Math.abs(content.getBoundingClientRect().top)\n const height = content.getBoundingClientRect().height\n const scrollAmount = (offset / height) * 100\n const scrollValue = Math.min(100, Math.max(0, scrollAmount))\n\n progressBars.forEach((progressBar) => {\n if (content.getBoundingClientRect().top <= 0) {\n progressBar.style.width = scrollValue + '%'\n progressBar.setAttribute('aria-valuenow', scrollValue)\n } else {\n progressBar.style.width = 0 + '%'\n progressBar.setAttribute('aria-valuenow', 0)\n }\n })\n }\n }\n\n _onScroll() {\n const sectionsContainerTop = this._sectionContainer ? this._sectionContainer.offsetTop : 0\n if (typeof document === 'undefined') {\n return\n }\n const scrollDistance = document.scrollingElement.scrollTop - sectionsContainerTop\n\n const navItems = SelectorEngine.find(SELECTOR_LINK, this._element)\n\n const scrollPadding = this._getScrollPadding()\n\n SelectorEngine.find(SELECTOR_PAGE_SECTION).forEach((pageSec, idx) => {\n if (pageSec.offsetTop - sectionsContainerTop <= scrollDistance + scrollPadding) {\n SelectorEngine.find(SELECTOR_LINK_ACTIVE, this._element).forEach((link) => {\n link.classList.remove(CLASS_NAME_ACTIVE)\n })\n if (idx < navItems.length) {\n const currActive = navItems[idx]\n this._getParentLinks(currActive).forEach((parentLink) => {\n parentLink.classList.add(CLASS_NAME_ACTIVE)\n })\n currActive.classList.add(CLASS_NAME_ACTIVE)\n this._decorateToggler(currActive.innerText)\n }\n }\n })\n this._updateProgress(this._sectionContainer)\n }\n\n _getCollapsible() {\n const coll = SelectorEngine.findOne(SELECTOR_COLLAPSIBLE, this._element)\n if (coll) {\n return NavBarCollapsible.getOrCreateInstance(coll)\n }\n return null\n }\n\n _getScrollPadding() {\n if (typeof this._config.scrollPadding === 'function') {\n return this._config.scrollPadding()\n }\n return this._config.scrollPadding\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const navs = SelectorEngine.find(SELECTOR_NAVSCROLL)\n navs.map((nav) => {\n NavScroll.getOrCreateInstance(nav)\n })\n}\n\nexport default NavScroll\n"],"names":[],"mappings":"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"}
|