@openeuropa/bcl-bootstrap 0.28.1 → 1.0.0
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/bootstrap-icons.svg +1 -1
- package/icons/0-circle-fill.svg +4 -0
- package/icons/0-circle.svg +4 -0
- package/icons/0-square-fill.svg +4 -0
- package/icons/0-square.svg +4 -0
- package/icons/1-circle-fill.svg +1 -1
- package/icons/amd.svg +3 -0
- package/icons/arrow-bar-left.svg +1 -1
- package/icons/arrow-bar-right.svg +1 -1
- package/icons/arrows-collapse.svg +1 -1
- package/icons/arrows-expand.svg +1 -1
- package/icons/building-add.svg +5 -0
- package/icons/building-check.svg +5 -0
- package/icons/building-dash.svg +5 -0
- package/icons/building-down.svg +5 -0
- package/icons/building-exclamation.svg +4 -0
- package/icons/building-fill-add.svg +4 -0
- package/icons/building-fill-check.svg +4 -0
- package/icons/building-fill-dash.svg +4 -0
- package/icons/building-fill-down.svg +4 -0
- package/icons/building-fill-exclamation.svg +4 -0
- package/icons/building-fill-gear.svg +4 -0
- package/icons/building-fill-lock.svg +4 -0
- package/icons/building-fill-slash.svg +4 -0
- package/icons/building-fill-up.svg +4 -0
- package/icons/building-fill-x.svg +4 -0
- package/icons/building-fill.svg +3 -0
- package/icons/building-gear.svg +4 -0
- package/icons/building-lock.svg +4 -0
- package/icons/building-slash.svg +5 -0
- package/icons/building-up.svg +5 -0
- package/icons/building-x.svg +4 -0
- package/icons/building.svg +2 -2
- package/icons/buildings-fill.svg +3 -0
- package/icons/buildings.svg +4 -0
- package/icons/bus-front-fill.svg +3 -0
- package/icons/bus-front.svg +4 -0
- package/icons/capsule-pill.svg +1 -1
- package/icons/capsule.svg +1 -1
- package/icons/car-front-fill.svg +1 -1
- package/icons/car-front.svg +1 -1
- package/icons/database-add.svg +4 -0
- package/icons/database-check.svg +4 -0
- package/icons/database-dash.svg +4 -0
- package/icons/database-down.svg +4 -0
- package/icons/database-exclamation.svg +4 -0
- package/icons/database-fill-add.svg +4 -0
- package/icons/database-fill-check.svg +4 -0
- package/icons/database-fill-dash.svg +4 -0
- package/icons/database-fill-down.svg +4 -0
- package/icons/database-fill-exclamation.svg +5 -0
- package/icons/database-fill-gear.svg +4 -0
- package/icons/database-fill-lock.svg +5 -0
- package/icons/database-fill-slash.svg +4 -0
- package/icons/database-fill-up.svg +4 -0
- package/icons/database-fill-x.svg +5 -0
- package/icons/database-fill.svg +6 -0
- package/icons/database-gear.svg +4 -0
- package/icons/database-lock.svg +4 -0
- package/icons/database-slash.svg +4 -0
- package/icons/database-up.svg +4 -0
- package/icons/database-x.svg +4 -0
- package/icons/database.svg +3 -0
- package/icons/envelope-at-fill.svg +4 -0
- package/icons/envelope-at.svg +4 -0
- package/icons/ev-front-fill.svg +3 -0
- package/icons/ev-front.svg +4 -0
- package/icons/globe-americas.svg +3 -0
- package/icons/globe-asia-australia.svg +4 -0
- package/icons/globe-central-south-asia.svg +3 -0
- package/icons/globe-europe-africa.svg +3 -0
- package/icons/heart-pulse-fill.svg +2 -1
- package/icons/heart-pulse.svg +2 -1
- package/icons/heartbreak-fill.svg +1 -1
- package/icons/heartbreak.svg +1 -1
- package/icons/house-add-fill.svg +5 -0
- package/icons/house-add.svg +4 -0
- package/icons/house-check-fill.svg +5 -0
- package/icons/house-check.svg +4 -0
- package/icons/house-dash-fill.svg +5 -0
- package/icons/house-dash.svg +4 -0
- package/icons/house-door-fill.svg +1 -1
- package/icons/house-door.svg +1 -1
- package/icons/house-down-fill.svg +5 -0
- package/icons/house-down.svg +4 -0
- package/icons/house-exclamation-fill.svg +5 -0
- package/icons/house-exclamation.svg +4 -0
- package/icons/house-fill.svg +2 -2
- package/icons/house-gear-fill.svg +5 -0
- package/icons/house-gear.svg +4 -0
- package/icons/house-lock-fill.svg +5 -0
- package/icons/house-lock.svg +4 -0
- package/icons/house-slash-fill.svg +5 -0
- package/icons/house-slash.svg +4 -0
- package/icons/house-up-fill.svg +5 -0
- package/icons/house-up.svg +4 -0
- package/icons/house-x-fill.svg +5 -0
- package/icons/house-x.svg +4 -0
- package/icons/house.svg +1 -2
- package/icons/houses-fill.svg +4 -0
- package/icons/houses.svg +3 -0
- package/icons/lungs-fill.svg +1 -1
- package/icons/nvidia.svg +3 -0
- package/icons/people-fill.svg +1 -3
- package/icons/people.svg +1 -1
- package/icons/person-add.svg +4 -0
- package/icons/person-check.svg +2 -2
- package/icons/person-dash.svg +2 -2
- package/icons/person-down.svg +4 -0
- package/icons/person-exclamation.svg +4 -0
- package/icons/person-fill-add.svg +4 -0
- package/icons/person-fill-check.svg +4 -0
- package/icons/person-fill-dash.svg +4 -0
- package/icons/person-fill-down.svg +4 -0
- package/icons/person-fill-exclamation.svg +4 -0
- package/icons/person-fill-gear.svg +3 -0
- package/icons/person-fill-lock.svg +3 -0
- package/icons/person-fill-slash.svg +3 -0
- package/icons/person-fill-up.svg +4 -0
- package/icons/person-fill-x.svg +4 -0
- package/icons/person-fill.svg +1 -1
- package/icons/person-gear.svg +3 -0
- package/icons/person-lock.svg +3 -0
- package/icons/person-slash.svg +3 -0
- package/icons/person-up.svg +4 -0
- package/icons/person-vcard-fill.svg +3 -0
- package/icons/person-vcard.svg +4 -0
- package/icons/person-x.svg +2 -2
- package/icons/person.svg +1 -1
- package/icons/prescription.svg +2 -2
- package/icons/prescription2.svg +1 -1
- package/icons/regex.svg +3 -0
- package/icons/rocket-fill.svg +4 -0
- package/icons/rocket-takeoff-fill.svg +4 -0
- package/icons/rocket-takeoff.svg +5 -0
- package/icons/rocket.svg +5 -0
- package/icons/scooter.svg +3 -0
- package/icons/sign-dead-end-fill.svg +4 -0
- package/icons/sign-dead-end.svg +4 -0
- package/icons/sign-do-not-enter-fill.svg +4 -0
- package/icons/sign-do-not-enter.svg +4 -0
- package/icons/sign-intersection-fill.svg +3 -0
- package/icons/sign-intersection-side-fill.svg +3 -0
- package/icons/sign-intersection-side.svg +4 -0
- package/icons/sign-intersection-t-fill.svg +3 -0
- package/icons/sign-intersection-t.svg +4 -0
- package/icons/sign-intersection-y-fill.svg +3 -0
- package/icons/sign-intersection-y.svg +4 -0
- package/icons/sign-intersection.svg +4 -0
- package/icons/sign-merge-left-fill.svg +3 -0
- package/icons/sign-merge-left.svg +4 -0
- package/icons/sign-merge-right-fill.svg +3 -0
- package/icons/sign-merge-right.svg +4 -0
- package/icons/sign-no-left-turn-fill.svg +4 -0
- package/icons/sign-no-left-turn.svg +3 -0
- package/icons/sign-no-parking-fill.svg +4 -0
- package/icons/sign-no-parking.svg +3 -0
- package/icons/sign-no-right-turn-fill.svg +4 -0
- package/icons/sign-no-right-turn.svg +3 -0
- package/icons/sign-railroad-fill.svg +5 -0
- package/icons/sign-railroad.svg +4 -0
- package/icons/sign-stop-fill.svg +1 -1
- package/icons/sign-stop-lights-fill.svg +1 -1
- package/icons/sign-turn-left-fill.svg +1 -1
- package/icons/sign-turn-right-fill.svg +1 -1
- package/icons/sign-turn-slight-left-fill.svg +1 -1
- package/icons/sign-turn-slight-right-fill.svg +1 -1
- package/icons/sign-yield-fill.svg +1 -1
- package/icons/sina-weibo.svg +4 -0
- package/icons/stripe.svg +3 -0
- package/icons/subscript.svg +3 -0
- package/icons/superscript.svg +3 -0
- package/icons/taxi-front-fill.svg +3 -0
- package/icons/taxi-front.svg +4 -0
- package/icons/tencent-qq.svg +4 -0
- package/icons/text-wrap.svg +3 -0
- package/icons/train-freight-front-fill.svg +1 -1
- package/icons/train-freight-front.svg +1 -1
- package/icons/train-front-fill.svg +1 -1
- package/icons/train-front.svg +1 -1
- package/icons/train-lightrail-front-fill.svg +1 -1
- package/icons/train-lightrail-front.svg +1 -1
- package/icons/trello.svg +3 -0
- package/icons/truck-front-fill.svg +1 -1
- package/icons/truck-front.svg +2 -3
- package/icons/virus.svg +1 -1
- package/icons/virus2.svg +1 -1
- package/icons/wikipedia.svg +3 -0
- package/js/dist/alert.js +14 -25
- package/js/dist/alert.js.map +1 -1
- package/js/dist/base-component.js +13 -30
- package/js/dist/base-component.js.map +1 -1
- package/js/dist/button.js +11 -15
- package/js/dist/button.js.map +1 -1
- package/js/dist/carousel.js +36 -120
- package/js/dist/carousel.js.map +1 -1
- package/js/dist/collapse.js +27 -88
- package/js/dist/collapse.js.map +1 -1
- package/js/dist/dependency/manipulator.js +72 -0
- package/js/dist/dependency/manipulator.js.map +1 -0
- package/js/dist/dom/data.js +6 -10
- package/js/dist/dom/data.js.map +1 -1
- package/js/dist/dom/event-handler.js +7 -52
- package/js/dist/dom/event-handler.js.map +1 -1
- package/js/dist/dom/manipulator.js +2 -15
- package/js/dist/dom/manipulator.js.map +1 -1
- package/js/dist/dom/selector-engine.js +2 -16
- package/js/dist/dom/selector-engine.js.map +1 -1
- package/js/dist/dropdown.js +52 -124
- package/js/dist/dropdown.js.map +1 -1
- package/js/dist/modal.js +40 -119
- package/js/dist/modal.js.map +1 -1
- package/js/dist/offcanvas.js +36 -89
- package/js/dist/offcanvas.js.map +1 -1
- package/js/dist/popover.js +15 -22
- package/js/dist/popover.js.map +1 -1
- package/js/dist/scrollspy-legacy.js +216 -0
- package/js/dist/scrollspy-legacy.js.map +1 -0
- package/js/dist/scrollspy.js +42 -80
- package/js/dist/scrollspy.js.map +1 -1
- package/js/dist/tab.js +40 -98
- package/js/dist/tab.js.map +1 -1
- package/js/dist/toast.js +30 -69
- package/js/dist/toast.js.map +1 -1
- package/js/dist/tooltip.js +74 -196
- package/js/dist/tooltip.js.map +1 -1
- package/js/dist/util/backdrop.js +13 -40
- package/js/dist/util/backdrop.js.map +1 -1
- package/js/dist/util/component-functions.js +5 -11
- package/js/dist/util/component-functions.js.map +1 -1
- package/js/dist/util/config.js +6 -18
- package/js/dist/util/config.js.map +1 -1
- package/js/dist/util/focustrap.js +16 -33
- package/js/dist/util/focustrap.js.map +1 -1
- package/js/dist/util/index.js +28 -75
- package/js/dist/util/index.js.map +1 -1
- package/js/dist/util/sanitizer.js +7 -17
- package/js/dist/util/sanitizer.js.map +1 -1
- package/js/dist/util/scrollbar.js +16 -43
- package/js/dist/util/scrollbar.js.map +1 -1
- package/js/dist/util/swipe.js +18 -40
- package/js/dist/util/swipe.js.map +1 -1
- package/js/dist/util/template-factory.js +13 -41
- package/js/dist/util/template-factory.js.map +1 -1
- package/js/src/alert.js +1 -1
- package/js/src/base-component.js +2 -2
- package/js/src/button.js +1 -1
- package/js/src/carousel.js +1 -1
- package/js/src/collapse.js +1 -1
- package/js/src/dependency/manipulator.js +80 -0
- package/js/src/dom/data.js +1 -1
- package/js/src/dom/event-handler.js +1 -1
- package/js/src/dom/manipulator.js +1 -1
- package/js/src/dom/selector-engine.js +1 -1
- package/js/src/dropdown.js +10 -3
- package/js/src/modal.js +3 -3
- package/js/src/offcanvas.js +1 -1
- package/js/src/popover.js +1 -1
- package/js/src/scrollspy-legacy.js +294 -0
- package/js/src/scrollspy.js +1 -1
- package/js/src/tab.js +2 -4
- package/js/src/toast.js +9 -4
- package/js/src/tooltip.js +27 -48
- package/js/src/util/backdrop.js +1 -1
- package/js/src/util/component-functions.js +1 -1
- package/js/src/util/config.js +1 -1
- package/js/src/util/focustrap.js +1 -1
- package/js/src/util/index.js +1 -1
- package/js/src/util/sanitizer.js +1 -1
- package/js/src/util/scrollbar.js +1 -1
- package/js/src/util/swipe.js +1 -1
- package/js/src/util/template-factory.js +1 -1
- package/legacy/dependency/manipulator.js +80 -0
- package/legacy/scrollspy-legacy.js +294 -0
- package/package.json +6 -6
- package/scss/_buttons.scss +8 -2
- package/scss/_carousel.scss +0 -3
- package/scss/_functions.scss +1 -1
- package/scss/_toasts.scss +2 -0
- package/scss/_variables.scss +1 -1
- package/scss/bootstrap-utilities.scss +3 -0
- package/scss/mixins/_banner.scss +1 -1
- package/scss/mixins/_table-variants.scss +2 -2
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dependency/manipulator'), require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['./dependency/manipulator', './util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollspyLegacy = factory(global.Manipulator, global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
|
|
5
|
+
})(this, (function (Manipulator, index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* --------------------------------------------------------------------------
|
|
9
|
+
* Bootstrap (v5.1.3): scrollspy.js
|
|
10
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
11
|
+
* --------------------------------------------------------------------------
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* ------------------------------------------------------------------------
|
|
16
|
+
* Constants
|
|
17
|
+
* ------------------------------------------------------------------------
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const NAME = 'scrollspy';
|
|
21
|
+
const DATA_KEY = 'bs.scrollspy';
|
|
22
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
23
|
+
const DATA_API_KEY = '.data-api';
|
|
24
|
+
const Default = {
|
|
25
|
+
offset: 10,
|
|
26
|
+
method: 'auto',
|
|
27
|
+
target: ''
|
|
28
|
+
};
|
|
29
|
+
const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
|
|
30
|
+
const EVENT_SCROLL = `scroll${EVENT_KEY}`;
|
|
31
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
|
|
32
|
+
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
33
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
34
|
+
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
|
35
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
36
|
+
const SELECTOR_NAV_LINKS = '.nav-link';
|
|
37
|
+
const SELECTOR_NAV_ITEMS = '.nav-item';
|
|
38
|
+
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
|
39
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
|
40
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
41
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
42
|
+
const METHOD_OFFSET = 'offset';
|
|
43
|
+
const METHOD_POSITION = 'position';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* ------------------------------------------------------------------------
|
|
47
|
+
* Class Definition
|
|
48
|
+
* ------------------------------------------------------------------------
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
class ScrollSpy extends BaseComponent {
|
|
52
|
+
constructor(element, config) {
|
|
53
|
+
super(element);
|
|
54
|
+
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
|
55
|
+
this._config = this._getConfig(config);
|
|
56
|
+
this._offsets = [];
|
|
57
|
+
this._targets = [];
|
|
58
|
+
this._activeTarget = null;
|
|
59
|
+
this._scrollHeight = 0;
|
|
60
|
+
EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
|
|
61
|
+
this.refresh();
|
|
62
|
+
this._process();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Getters
|
|
66
|
+
|
|
67
|
+
static get Default() {
|
|
68
|
+
return Default;
|
|
69
|
+
}
|
|
70
|
+
static get NAME() {
|
|
71
|
+
return NAME;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Public
|
|
75
|
+
|
|
76
|
+
refresh() {
|
|
77
|
+
const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
|
|
78
|
+
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
|
79
|
+
const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
|
80
|
+
this._offsets = [];
|
|
81
|
+
this._targets = [];
|
|
82
|
+
this._scrollHeight = this._getScrollHeight();
|
|
83
|
+
const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
|
|
84
|
+
targets.map(element => {
|
|
85
|
+
const targetSelector = index.getSelectorFromElement(element);
|
|
86
|
+
const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
|
|
87
|
+
if (target) {
|
|
88
|
+
const targetBCR = target.getBoundingClientRect();
|
|
89
|
+
if (targetBCR.width || targetBCR.height) {
|
|
90
|
+
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
|
|
95
|
+
this._offsets.push(item[0]);
|
|
96
|
+
this._targets.push(item[1]);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
dispose() {
|
|
100
|
+
EventHandler.off(this._scrollElement, EVENT_KEY);
|
|
101
|
+
super.dispose();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Private
|
|
105
|
+
|
|
106
|
+
_getConfig(config) {
|
|
107
|
+
config = {
|
|
108
|
+
...Default,
|
|
109
|
+
...Manipulator.getDataAttributes(this._element),
|
|
110
|
+
...(typeof config === 'object' && config ? config : {})
|
|
111
|
+
};
|
|
112
|
+
config.target = index.getElement(config.target) || document.documentElement;
|
|
113
|
+
return config;
|
|
114
|
+
}
|
|
115
|
+
_getScrollTop() {
|
|
116
|
+
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
|
|
117
|
+
}
|
|
118
|
+
_getScrollHeight() {
|
|
119
|
+
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
|
120
|
+
}
|
|
121
|
+
_getOffsetHeight() {
|
|
122
|
+
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
|
|
123
|
+
}
|
|
124
|
+
_process() {
|
|
125
|
+
const scrollTop = this._getScrollTop() + this._config.offset;
|
|
126
|
+
const scrollHeight = this._getScrollHeight();
|
|
127
|
+
const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
|
|
128
|
+
if (this._scrollHeight !== scrollHeight) {
|
|
129
|
+
this.refresh();
|
|
130
|
+
}
|
|
131
|
+
if (scrollTop >= maxScroll) {
|
|
132
|
+
const target = this._targets[this._targets.length - 1];
|
|
133
|
+
if (this._activeTarget !== target) {
|
|
134
|
+
this._activate(target);
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
|
|
139
|
+
this._activeTarget = null;
|
|
140
|
+
this._clear();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
for (let i = this._offsets.length; i--;) {
|
|
144
|
+
const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
|
145
|
+
if (isActiveTarget) {
|
|
146
|
+
this._activate(this._targets[i]);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
_activate(target) {
|
|
151
|
+
this._activeTarget = target;
|
|
152
|
+
this._clear();
|
|
153
|
+
const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
|
|
154
|
+
const link = SelectorEngine.findOne(queries.join(','), this._config.target);
|
|
155
|
+
link.classList.add(CLASS_NAME_ACTIVE);
|
|
156
|
+
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
|
157
|
+
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
|
158
|
+
} else {
|
|
159
|
+
SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
|
|
160
|
+
// Set triggered links parents as active
|
|
161
|
+
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
162
|
+
SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
|
|
163
|
+
|
|
164
|
+
// Handle special case when .nav-link is inside .nav-item
|
|
165
|
+
SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
|
|
166
|
+
SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
|
|
171
|
+
relatedTarget: target
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
_clear() {
|
|
175
|
+
SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Static
|
|
179
|
+
|
|
180
|
+
static jQueryInterface(config) {
|
|
181
|
+
return this.each(function () {
|
|
182
|
+
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
183
|
+
if (typeof config !== 'string') {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (typeof data[config] === 'undefined') {
|
|
187
|
+
throw new TypeError(`No method named "${config}"`);
|
|
188
|
+
}
|
|
189
|
+
data[config]();
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* ------------------------------------------------------------------------
|
|
196
|
+
* Data Api implementation
|
|
197
|
+
* ------------------------------------------------------------------------
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
201
|
+
SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* ------------------------------------------------------------------------
|
|
206
|
+
* jQuery
|
|
207
|
+
* ------------------------------------------------------------------------
|
|
208
|
+
* add .ScrollSpy to jQuery only if jQuery is present
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
index.defineJQueryPlugin(ScrollSpy);
|
|
212
|
+
|
|
213
|
+
return ScrollSpy;
|
|
214
|
+
|
|
215
|
+
}));
|
|
216
|
+
//# sourceMappingURL=scrollspy-legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollspy-legacy.js","sources":["../src/scrollspy-legacy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// Old versions\nimport Manipulator from './dependency/manipulator'\n\n import {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n this._config = this._getConfig(config)\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n EventHandler.off(this._scrollElement, EVENT_KEY)\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n config.target = getElement(config.target) || document.documentElement\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = SELECTOR_LINK_ITEMS.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n } else {\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n // Handle special case when .nav-link is inside .nav-item\n SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n .forEach(navItem => {\n SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n })\n })\n }\n\n EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(SELECTOR_DATA_SPY)\n .forEach(spy => new ScrollSpy(spy))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","Default","offset","method","target","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","BaseComponent","constructor","element","config","_scrollElement","_element","tagName","window","_config","_getConfig","_offsets","_targets","_activeTarget","_scrollHeight","EventHandler","on","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","SelectorEngine","find","map","targetSelector","getSelectorFromElement","findOne","targetBCR","getBoundingClientRect","width","height","Manipulator","top","filter","item","sort","a","b","forEach","push","dispose","off","getDataAttributes","getElement","document","documentElement","pageYOffset","scrollTop","scrollHeight","Math","max","body","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","isActiveTarget","queries","split","selector","link","join","classList","add","contains","closest","parents","listGroup","prev","navItem","children","trigger","relatedTarget","node","remove","jQueryInterface","each","data","getOrCreateInstance","TypeError","spy","defineJQueryPlugin"],"mappings":"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"}
|
package/js/dist/scrollspy.js
CHANGED
|
@@ -4,18 +4,13 @@
|
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
|
|
5
5
|
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
6
6
|
|
|
7
|
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
8
|
-
|
|
9
|
-
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
10
|
-
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
11
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
12
|
-
|
|
13
7
|
/**
|
|
14
8
|
* --------------------------------------------------------------------------
|
|
15
|
-
* Bootstrap (v5.2.
|
|
9
|
+
* Bootstrap (v5.2.3): scrollspy.js
|
|
16
10
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
17
11
|
* --------------------------------------------------------------------------
|
|
18
12
|
*/
|
|
13
|
+
|
|
19
14
|
/**
|
|
20
15
|
* Constants
|
|
21
16
|
*/
|
|
@@ -54,14 +49,16 @@
|
|
|
54
49
|
target: 'element',
|
|
55
50
|
threshold: 'array'
|
|
56
51
|
};
|
|
52
|
+
|
|
57
53
|
/**
|
|
58
54
|
* Class definition
|
|
59
55
|
*/
|
|
60
56
|
|
|
61
|
-
class ScrollSpy extends
|
|
57
|
+
class ScrollSpy extends BaseComponent {
|
|
62
58
|
constructor(element, config) {
|
|
63
|
-
super(element, config);
|
|
59
|
+
super(element, config);
|
|
64
60
|
|
|
61
|
+
// this._element is the observablesContainer and config.target the menu links wrapper
|
|
65
62
|
this._targetLinks = new Map();
|
|
66
63
|
this._observableSections = new Map();
|
|
67
64
|
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
|
|
@@ -72,87 +69,75 @@
|
|
|
72
69
|
parentScrollTop: 0
|
|
73
70
|
};
|
|
74
71
|
this.refresh(); // initialize
|
|
75
|
-
}
|
|
76
|
-
|
|
72
|
+
}
|
|
77
73
|
|
|
74
|
+
// Getters
|
|
78
75
|
static get Default() {
|
|
79
76
|
return Default;
|
|
80
77
|
}
|
|
81
|
-
|
|
82
78
|
static get DefaultType() {
|
|
83
79
|
return DefaultType;
|
|
84
80
|
}
|
|
85
|
-
|
|
86
81
|
static get NAME() {
|
|
87
82
|
return NAME;
|
|
88
|
-
}
|
|
89
|
-
|
|
83
|
+
}
|
|
90
84
|
|
|
85
|
+
// Public
|
|
91
86
|
refresh() {
|
|
92
87
|
this._initializeTargetsAndObservables();
|
|
93
|
-
|
|
94
88
|
this._maybeEnableSmoothScroll();
|
|
95
|
-
|
|
96
89
|
if (this._observer) {
|
|
97
90
|
this._observer.disconnect();
|
|
98
91
|
} else {
|
|
99
92
|
this._observer = this._getNewObserver();
|
|
100
93
|
}
|
|
101
|
-
|
|
102
94
|
for (const section of this._observableSections.values()) {
|
|
103
95
|
this._observer.observe(section);
|
|
104
96
|
}
|
|
105
97
|
}
|
|
106
|
-
|
|
107
98
|
dispose() {
|
|
108
99
|
this._observer.disconnect();
|
|
109
|
-
|
|
110
100
|
super.dispose();
|
|
111
|
-
}
|
|
112
|
-
|
|
101
|
+
}
|
|
113
102
|
|
|
103
|
+
// Private
|
|
114
104
|
_configAfterMerge(config) {
|
|
115
105
|
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
|
|
116
|
-
config.target = index.getElement(config.target) || document.body;
|
|
106
|
+
config.target = index.getElement(config.target) || document.body;
|
|
117
107
|
|
|
108
|
+
// TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
|
|
118
109
|
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
|
|
119
|
-
|
|
120
110
|
if (typeof config.threshold === 'string') {
|
|
121
111
|
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
|
|
122
112
|
}
|
|
123
|
-
|
|
124
113
|
return config;
|
|
125
114
|
}
|
|
126
|
-
|
|
127
115
|
_maybeEnableSmoothScroll() {
|
|
128
116
|
if (!this._config.smoothScroll) {
|
|
129
117
|
return;
|
|
130
|
-
}
|
|
131
|
-
|
|
118
|
+
}
|
|
132
119
|
|
|
133
|
-
|
|
134
|
-
|
|
120
|
+
// unregister any previous listeners
|
|
121
|
+
EventHandler.off(this._config.target, EVENT_CLICK);
|
|
122
|
+
EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
|
|
135
123
|
const observableSection = this._observableSections.get(event.target.hash);
|
|
136
|
-
|
|
137
124
|
if (observableSection) {
|
|
138
125
|
event.preventDefault();
|
|
139
126
|
const root = this._rootElement || window;
|
|
140
127
|
const height = observableSection.offsetTop - this._element.offsetTop;
|
|
141
|
-
|
|
142
128
|
if (root.scrollTo) {
|
|
143
129
|
root.scrollTo({
|
|
144
130
|
top: height,
|
|
145
131
|
behavior: 'smooth'
|
|
146
132
|
});
|
|
147
133
|
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
134
|
+
}
|
|
150
135
|
|
|
136
|
+
// Chrome 60 doesn't support `scrollTo`
|
|
151
137
|
root.scrollTop = height;
|
|
152
138
|
}
|
|
153
139
|
});
|
|
154
140
|
}
|
|
155
|
-
|
|
156
141
|
_getNewObserver() {
|
|
157
142
|
const options = {
|
|
158
143
|
root: this._rootElement,
|
|
@@ -160,141 +145,118 @@
|
|
|
160
145
|
rootMargin: this._config.rootMargin
|
|
161
146
|
};
|
|
162
147
|
return new IntersectionObserver(entries => this._observerCallback(entries), options);
|
|
163
|
-
}
|
|
164
|
-
|
|
148
|
+
}
|
|
165
149
|
|
|
150
|
+
// The logic of selection
|
|
166
151
|
_observerCallback(entries) {
|
|
167
152
|
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
|
|
168
|
-
|
|
169
153
|
const activate = entry => {
|
|
170
154
|
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
|
|
171
|
-
|
|
172
155
|
this._process(targetElement(entry));
|
|
173
156
|
};
|
|
174
|
-
|
|
175
157
|
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
|
|
176
158
|
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
|
|
177
159
|
this._previousScrollData.parentScrollTop = parentScrollTop;
|
|
178
|
-
|
|
179
160
|
for (const entry of entries) {
|
|
180
161
|
if (!entry.isIntersecting) {
|
|
181
162
|
this._activeTarget = null;
|
|
182
|
-
|
|
183
163
|
this._clearActiveClass(targetElement(entry));
|
|
184
|
-
|
|
185
164
|
continue;
|
|
186
165
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
166
|
+
const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
|
|
167
|
+
// if we are scrolling down, pick the bigger offsetTop
|
|
190
168
|
if (userScrollsDown && entryIsLowerThanPrevious) {
|
|
191
|
-
activate(entry);
|
|
192
|
-
|
|
169
|
+
activate(entry);
|
|
170
|
+
// if parent isn't scrolled, let's keep the first visible item, breaking the iteration
|
|
193
171
|
if (!parentScrollTop) {
|
|
194
172
|
return;
|
|
195
173
|
}
|
|
196
|
-
|
|
197
174
|
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
175
|
+
}
|
|
200
176
|
|
|
177
|
+
// if we are scrolling up, pick the smallest offsetTop
|
|
201
178
|
if (!userScrollsDown && !entryIsLowerThanPrevious) {
|
|
202
179
|
activate(entry);
|
|
203
180
|
}
|
|
204
181
|
}
|
|
205
182
|
}
|
|
206
|
-
|
|
207
183
|
_initializeTargetsAndObservables() {
|
|
208
184
|
this._targetLinks = new Map();
|
|
209
185
|
this._observableSections = new Map();
|
|
210
|
-
const targetLinks =
|
|
211
|
-
|
|
186
|
+
const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
|
|
212
187
|
for (const anchor of targetLinks) {
|
|
213
188
|
// ensure that the anchor has an id and is not disabled
|
|
214
189
|
if (!anchor.hash || index.isDisabled(anchor)) {
|
|
215
190
|
continue;
|
|
216
191
|
}
|
|
192
|
+
const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
|
|
217
193
|
|
|
218
|
-
|
|
219
|
-
|
|
194
|
+
// ensure that the observableSection exists & is visible
|
|
220
195
|
if (index.isVisible(observableSection)) {
|
|
221
196
|
this._targetLinks.set(anchor.hash, anchor);
|
|
222
|
-
|
|
223
197
|
this._observableSections.set(anchor.hash, observableSection);
|
|
224
198
|
}
|
|
225
199
|
}
|
|
226
200
|
}
|
|
227
|
-
|
|
228
201
|
_process(target) {
|
|
229
202
|
if (this._activeTarget === target) {
|
|
230
203
|
return;
|
|
231
204
|
}
|
|
232
|
-
|
|
233
205
|
this._clearActiveClass(this._config.target);
|
|
234
|
-
|
|
235
206
|
this._activeTarget = target;
|
|
236
207
|
target.classList.add(CLASS_NAME_ACTIVE);
|
|
237
|
-
|
|
238
208
|
this._activateParents(target);
|
|
239
|
-
|
|
240
|
-
EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
|
|
209
|
+
EventHandler.trigger(this._element, EVENT_ACTIVATE, {
|
|
241
210
|
relatedTarget: target
|
|
242
211
|
});
|
|
243
212
|
}
|
|
244
|
-
|
|
245
213
|
_activateParents(target) {
|
|
246
214
|
// Activate dropdown parents
|
|
247
215
|
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
|
248
|
-
|
|
216
|
+
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
|
249
217
|
return;
|
|
250
218
|
}
|
|
251
|
-
|
|
252
|
-
for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
|
|
219
|
+
for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
|
|
253
220
|
// Set triggered links parents as active
|
|
254
221
|
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
255
|
-
for (const item of
|
|
222
|
+
for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
|
|
256
223
|
item.classList.add(CLASS_NAME_ACTIVE);
|
|
257
224
|
}
|
|
258
225
|
}
|
|
259
226
|
}
|
|
260
|
-
|
|
261
227
|
_clearActiveClass(parent) {
|
|
262
228
|
parent.classList.remove(CLASS_NAME_ACTIVE);
|
|
263
|
-
const activeNodes =
|
|
264
|
-
|
|
229
|
+
const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
|
|
265
230
|
for (const node of activeNodes) {
|
|
266
231
|
node.classList.remove(CLASS_NAME_ACTIVE);
|
|
267
232
|
}
|
|
268
|
-
}
|
|
269
|
-
|
|
233
|
+
}
|
|
270
234
|
|
|
235
|
+
// Static
|
|
271
236
|
static jQueryInterface(config) {
|
|
272
237
|
return this.each(function () {
|
|
273
238
|
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
274
|
-
|
|
275
239
|
if (typeof config !== 'string') {
|
|
276
240
|
return;
|
|
277
241
|
}
|
|
278
|
-
|
|
279
242
|
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
280
243
|
throw new TypeError(`No method named "${config}"`);
|
|
281
244
|
}
|
|
282
|
-
|
|
283
245
|
data[config]();
|
|
284
246
|
});
|
|
285
247
|
}
|
|
286
|
-
|
|
287
248
|
}
|
|
249
|
+
|
|
288
250
|
/**
|
|
289
251
|
* Data API implementation
|
|
290
252
|
*/
|
|
291
253
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
|
|
254
|
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
255
|
+
for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
|
|
295
256
|
ScrollSpy.getOrCreateInstance(spy);
|
|
296
257
|
}
|
|
297
258
|
});
|
|
259
|
+
|
|
298
260
|
/**
|
|
299
261
|
* jQuery
|
|
300
262
|
*/
|
package/js/dist/scrollspy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\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 refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","Default","offset","rootMargin","smoothScroll","target","threshold","DefaultType","ScrollSpy","BaseComponent","constructor","element","config","_targetLinks","Map","_observableSections","_rootElement","getComputedStyle","_element","overflowY","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","values","observe","dispose","_configAfterMerge","getElement","document","body","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","IntersectionObserver","entries","_observerCallback","targetElement","entry","id","activate","_process","documentElement","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","SelectorEngine","find","anchor","isDisabled","findOne","isVisible","set","classList","add","_activateParents","trigger","relatedTarget","contains","closest","listGroup","parents","item","prev","parent","remove","activeNodes","node","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","spy","defineJQueryPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\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 refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","Default","offset","rootMargin","smoothScroll","target","threshold","DefaultType","ScrollSpy","BaseComponent","constructor","element","config","_targetLinks","Map","_observableSections","_rootElement","getComputedStyle","_element","overflowY","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","values","observe","dispose","_configAfterMerge","getElement","document","body","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","IntersectionObserver","entries","_observerCallback","targetElement","entry","id","activate","_process","documentElement","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","SelectorEngine","find","anchor","isDisabled","findOne","isVisible","set","classList","add","_activateParents","trigger","relatedTarget","contains","closest","listGroup","parents","item","prev","parent","remove","activeNodes","node","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","spy","defineJQueryPlugin"],"mappings":"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"}
|