bootstrap 4.5.3 → 5.2.3
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +55 -0
- data/README.md +28 -5
- data/assets/javascripts/bootstrap/alert.js +54 -133
- data/assets/javascripts/bootstrap/base-component.js +99 -0
- data/assets/javascripts/bootstrap/button.js +44 -183
- data/assets/javascripts/bootstrap/carousel.js +308 -450
- data/assets/javascripts/bootstrap/collapse.js +180 -243
- data/assets/javascripts/bootstrap/dom/data.js +66 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +283 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +84 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
- data/assets/javascripts/bootstrap/dropdown.js +320 -387
- data/assets/javascripts/bootstrap/modal.js +238 -478
- data/assets/javascripts/bootstrap/offcanvas.js +297 -0
- data/assets/javascripts/bootstrap/popover.js +58 -163
- data/assets/javascripts/bootstrap/scrollspy.js +223 -228
- data/assets/javascripts/bootstrap/tab.js +251 -166
- data/assets/javascripts/bootstrap/toast.js +147 -149
- data/assets/javascripts/bootstrap/tooltip.js +434 -646
- data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
- data/assets/javascripts/bootstrap/util/config.js +79 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
- data/assets/javascripts/bootstrap/util/index.js +350 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
- data/assets/javascripts/bootstrap/util/swipe.js +155 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +24 -8
- data/assets/javascripts/bootstrap.js +4037 -3206
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +56 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
- data/assets/stylesheets/_bootstrap.scss +20 -13
- data/assets/stylesheets/bootstrap/_accordion.scss +149 -0
- data/assets/stylesheets/bootstrap/_alert.scss +33 -14
- data/assets/stylesheets/bootstrap/_badge.scss +15 -31
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -27
- data/assets/stylesheets/bootstrap/_button-group.scss +25 -46
- data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
- data/assets/stylesheets/bootstrap/_card.scss +61 -113
- data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
- data/assets/stylesheets/bootstrap/_close.scss +30 -30
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +128 -71
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +181 -23
- data/assets/stylesheets/bootstrap/_grid.scss +13 -53
- data/assets/stylesheets/bootstrap/_helpers.scss +10 -0
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +72 -34
- data/assets/stylesheets/bootstrap/_maps.scss +54 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +9 -13
- data/assets/stylesheets/bootstrap/_modal.scss +107 -110
- data/assets/stylesheets/bootstrap/_nav.scss +72 -23
- data/assets/stylesheets/bootstrap/_navbar.scss +127 -173
- data/assets/stylesheets/bootstrap/_offcanvas.scss +144 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +99 -73
- data/assets/stylesheets/bootstrap/_progress.scss +26 -14
- data/assets/stylesheets/bootstrap/_reboot.scss +326 -200
- data/assets/stylesheets/bootstrap/_root.scss +62 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +51 -22
- data/assets/stylesheets/bootstrap/_tables.scss +94 -115
- data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
- data/assets/stylesheets/bootstrap/_tooltip.scss +68 -63
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +647 -18
- data/assets/stylesheets/bootstrap/_variables.scss +1018 -526
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +75 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +175 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +194 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +71 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +8 -6
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +48 -74
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +119 -37
- data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
- data/bootstrap.gemspec +3 -5
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +31 -7
- data/tasks/updater/network.rb +9 -3
- data/tasks/updater.rb +2 -2
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_5_2.gemfile +8 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/gemfiles/rails_7_0.gemfile +7 -0
- data/test/test_helper.rb +3 -2
- metadata +70 -78
- data/.travis.yml +0 -31
- data/assets/javascripts/bootstrap/util.js +0 -192
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -524
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
- data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
- data/assets/stylesheets/bootstrap/_media.scss +0 -8
- data/assets/stylesheets/bootstrap/_print.scss +0 -141
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
- data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
- data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
- data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
- data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
- data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
- data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
|
@@ -1,316 +1,311 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap scrollspy.js
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap scrollspy.js v5.2.3 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
4
4
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.
|
|
10
|
-
}(this, (function (
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
|
|
10
|
+
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
+
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
16
17
|
|
|
17
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
18
|
-
|
|
19
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
20
|
-
|
|
21
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
22
18
|
/**
|
|
23
|
-
*
|
|
19
|
+
* --------------------------------------------------------------------------
|
|
20
|
+
* Bootstrap (v5.2.3): scrollspy.js
|
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
|
+
* --------------------------------------------------------------------------
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
24
25
|
* Constants
|
|
25
|
-
* ------------------------------------------------------------------------
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
const NAME = 'scrollspy';
|
|
29
|
+
const DATA_KEY = 'bs.scrollspy';
|
|
30
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
31
|
+
const DATA_API_KEY = '.data-api';
|
|
32
|
+
const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
|
|
33
|
+
const EVENT_CLICK = `click${EVENT_KEY}`;
|
|
34
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
|
|
35
|
+
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
36
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
37
|
+
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
|
38
|
+
const SELECTOR_TARGET_LINKS = '[href]';
|
|
39
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
40
|
+
const SELECTOR_NAV_LINKS = '.nav-link';
|
|
41
|
+
const SELECTOR_NAV_ITEMS = '.nav-item';
|
|
42
|
+
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
|
43
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
|
|
44
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
45
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
46
|
+
const Default = {
|
|
47
|
+
offset: null,
|
|
48
|
+
// TODO: v6 @deprecated, keep it for backwards compatibility reasons
|
|
49
|
+
rootMargin: '0px 0px -25%',
|
|
50
|
+
smoothScroll: false,
|
|
51
|
+
target: null,
|
|
52
|
+
threshold: [0.1, 0.5, 1]
|
|
38
53
|
};
|
|
39
|
-
|
|
40
|
-
offset: 'number',
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
const DefaultType = {
|
|
55
|
+
offset: '(number|null)',
|
|
56
|
+
// TODO v6 @deprecated, keep it for backwards compatibility reasons
|
|
57
|
+
rootMargin: 'string',
|
|
58
|
+
smoothScroll: 'boolean',
|
|
59
|
+
target: 'element',
|
|
60
|
+
threshold: 'array'
|
|
43
61
|
};
|
|
44
|
-
var EVENT_ACTIVATE = "activate" + EVENT_KEY;
|
|
45
|
-
var EVENT_SCROLL = "scroll" + EVENT_KEY;
|
|
46
|
-
var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
|
|
47
|
-
var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
48
|
-
var CLASS_NAME_ACTIVE = 'active';
|
|
49
|
-
var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
|
|
50
|
-
var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
51
|
-
var SELECTOR_NAV_LINKS = '.nav-link';
|
|
52
|
-
var SELECTOR_NAV_ITEMS = '.nav-item';
|
|
53
|
-
var SELECTOR_LIST_ITEMS = '.list-group-item';
|
|
54
|
-
var SELECTOR_DROPDOWN = '.dropdown';
|
|
55
|
-
var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
|
|
56
|
-
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
57
|
-
var METHOD_OFFSET = 'offset';
|
|
58
|
-
var METHOD_POSITION = 'position';
|
|
59
62
|
/**
|
|
60
|
-
*
|
|
61
|
-
* Class Definition
|
|
62
|
-
* ------------------------------------------------------------------------
|
|
63
|
+
* Class definition
|
|
63
64
|
*/
|
|
64
65
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
class ScrollSpy extends BaseComponent__default.default {
|
|
67
|
+
constructor(element, config) {
|
|
68
|
+
super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
|
|
68
69
|
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
72
|
-
this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
|
|
73
|
-
this._offsets = [];
|
|
74
|
-
this._targets = [];
|
|
70
|
+
this._targetLinks = new Map();
|
|
71
|
+
this._observableSections = new Map();
|
|
72
|
+
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
|
|
75
73
|
this._activeTarget = null;
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this._process();
|
|
74
|
+
this._observer = null;
|
|
75
|
+
this._previousScrollData = {
|
|
76
|
+
visibleEntryTop: 0,
|
|
77
|
+
parentScrollTop: 0
|
|
78
|
+
};
|
|
79
|
+
this.refresh(); // initialize
|
|
83
80
|
} // Getters
|
|
84
81
|
|
|
85
82
|
|
|
86
|
-
|
|
83
|
+
static get Default() {
|
|
84
|
+
return Default;
|
|
85
|
+
}
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
static get DefaultType() {
|
|
88
|
+
return DefaultType;
|
|
89
|
+
}
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
this._offsets = [];
|
|
96
|
-
this._targets = [];
|
|
97
|
-
this._scrollHeight = this._getScrollHeight();
|
|
98
|
-
var targets = [].slice.call(document.querySelectorAll(this._selector));
|
|
99
|
-
targets.map(function (element) {
|
|
100
|
-
var target;
|
|
101
|
-
var targetSelector = Util__default['default'].getSelectorFromElement(element);
|
|
91
|
+
static get NAME() {
|
|
92
|
+
return NAME;
|
|
93
|
+
} // Public
|
|
102
94
|
|
|
103
|
-
if (targetSelector) {
|
|
104
|
-
target = document.querySelector(targetSelector);
|
|
105
|
-
}
|
|
106
95
|
|
|
107
|
-
|
|
108
|
-
|
|
96
|
+
refresh() {
|
|
97
|
+
this._initializeTargetsAndObservables();
|
|
109
98
|
|
|
110
|
-
|
|
111
|
-
// TODO (fat): remove sketch reliance on jQuery position/offset
|
|
112
|
-
return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];
|
|
113
|
-
}
|
|
114
|
-
}
|
|
99
|
+
this._maybeEnableSmoothScroll();
|
|
115
100
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}).forEach(function (item) {
|
|
122
|
-
_this2._offsets.push(item[0]);
|
|
101
|
+
if (this._observer) {
|
|
102
|
+
this._observer.disconnect();
|
|
103
|
+
} else {
|
|
104
|
+
this._observer = this._getNewObserver();
|
|
105
|
+
}
|
|
123
106
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this._config = null;
|
|
134
|
-
this._selector = null;
|
|
135
|
-
this._offsets = null;
|
|
136
|
-
this._targets = null;
|
|
137
|
-
this._activeTarget = null;
|
|
138
|
-
this._scrollHeight = null;
|
|
107
|
+
for (const section of this._observableSections.values()) {
|
|
108
|
+
this._observer.observe(section);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
dispose() {
|
|
113
|
+
this._observer.disconnect();
|
|
114
|
+
|
|
115
|
+
super.dispose();
|
|
139
116
|
} // Private
|
|
140
|
-
;
|
|
141
117
|
|
|
142
|
-
_proto._getConfig = function _getConfig(config) {
|
|
143
|
-
config = _extends({}, Default, typeof config === 'object' && config ? config : {});
|
|
144
118
|
|
|
145
|
-
|
|
146
|
-
|
|
119
|
+
_configAfterMerge(config) {
|
|
120
|
+
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
|
|
121
|
+
config.target = index.getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
|
|
147
122
|
|
|
148
|
-
|
|
149
|
-
id = Util__default['default'].getUID(NAME);
|
|
150
|
-
$__default['default'](config.target).attr('id', id);
|
|
151
|
-
}
|
|
123
|
+
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
|
|
152
124
|
|
|
153
|
-
|
|
125
|
+
if (typeof config.threshold === 'string') {
|
|
126
|
+
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
|
|
154
127
|
}
|
|
155
128
|
|
|
156
|
-
Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
|
|
157
129
|
return config;
|
|
158
|
-
}
|
|
130
|
+
}
|
|
159
131
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
132
|
+
_maybeEnableSmoothScroll() {
|
|
133
|
+
if (!this._config.smoothScroll) {
|
|
134
|
+
return;
|
|
135
|
+
} // unregister any previous listeners
|
|
163
136
|
|
|
164
|
-
_proto._getScrollHeight = function _getScrollHeight() {
|
|
165
|
-
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
|
166
|
-
};
|
|
167
137
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
138
|
+
EventHandler__default.default.off(this._config.target, EVENT_CLICK);
|
|
139
|
+
EventHandler__default.default.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
|
|
140
|
+
const observableSection = this._observableSections.get(event.target.hash);
|
|
171
141
|
|
|
172
|
-
|
|
173
|
-
|
|
142
|
+
if (observableSection) {
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
const root = this._rootElement || window;
|
|
145
|
+
const height = observableSection.offsetTop - this._element.offsetTop;
|
|
174
146
|
|
|
175
|
-
|
|
147
|
+
if (root.scrollTo) {
|
|
148
|
+
root.scrollTo({
|
|
149
|
+
top: height,
|
|
150
|
+
behavior: 'smooth'
|
|
151
|
+
});
|
|
152
|
+
return;
|
|
153
|
+
} // Chrome 60 doesn't support `scrollTo`
|
|
176
154
|
|
|
177
|
-
var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
|
|
178
155
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
156
|
+
root.scrollTop = height;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
_getNewObserver() {
|
|
162
|
+
const options = {
|
|
163
|
+
root: this._rootElement,
|
|
164
|
+
threshold: this._config.threshold,
|
|
165
|
+
rootMargin: this._config.rootMargin
|
|
166
|
+
};
|
|
167
|
+
return new IntersectionObserver(entries => this._observerCallback(entries), options);
|
|
168
|
+
} // The logic of selection
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
_observerCallback(entries) {
|
|
172
|
+
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
|
|
182
173
|
|
|
183
|
-
|
|
184
|
-
|
|
174
|
+
const activate = entry => {
|
|
175
|
+
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
|
|
185
176
|
|
|
186
|
-
|
|
187
|
-
|
|
177
|
+
this._process(targetElement(entry));
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
|
|
181
|
+
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
|
|
182
|
+
this._previousScrollData.parentScrollTop = parentScrollTop;
|
|
183
|
+
|
|
184
|
+
for (const entry of entries) {
|
|
185
|
+
if (!entry.isIntersecting) {
|
|
186
|
+
this._activeTarget = null;
|
|
187
|
+
|
|
188
|
+
this._clearActiveClass(targetElement(entry));
|
|
189
|
+
|
|
190
|
+
continue;
|
|
188
191
|
}
|
|
189
192
|
|
|
190
|
-
|
|
191
|
-
|
|
193
|
+
const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
|
|
194
|
+
|
|
195
|
+
if (userScrollsDown && entryIsLowerThanPrevious) {
|
|
196
|
+
activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
|
|
192
197
|
|
|
193
|
-
|
|
194
|
-
|
|
198
|
+
if (!parentScrollTop) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
195
201
|
|
|
196
|
-
|
|
202
|
+
continue;
|
|
203
|
+
} // if we are scrolling up, pick the smallest offsetTop
|
|
197
204
|
|
|
198
|
-
|
|
205
|
+
|
|
206
|
+
if (!userScrollsDown && !entryIsLowerThanPrevious) {
|
|
207
|
+
activate(entry);
|
|
208
|
+
}
|
|
199
209
|
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
_initializeTargetsAndObservables() {
|
|
213
|
+
this._targetLinks = new Map();
|
|
214
|
+
this._observableSections = new Map();
|
|
215
|
+
const targetLinks = SelectorEngine__default.default.find(SELECTOR_TARGET_LINKS, this._config.target);
|
|
216
|
+
|
|
217
|
+
for (const anchor of targetLinks) {
|
|
218
|
+
// ensure that the anchor has an id and is not disabled
|
|
219
|
+
if (!anchor.hash || index.isDisabled(anchor)) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const observableSection = SelectorEngine__default.default.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
|
|
200
224
|
|
|
201
|
-
|
|
202
|
-
|
|
225
|
+
if (index.isVisible(observableSection)) {
|
|
226
|
+
this._targetLinks.set(anchor.hash, anchor);
|
|
203
227
|
|
|
204
|
-
|
|
205
|
-
this._activate(this._targets[i]);
|
|
228
|
+
this._observableSections.set(anchor.hash, observableSection);
|
|
206
229
|
}
|
|
207
230
|
}
|
|
208
|
-
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
_process(target) {
|
|
234
|
+
if (this._activeTarget === target) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
this._clearActiveClass(this._config.target);
|
|
209
239
|
|
|
210
|
-
_proto._activate = function _activate(target) {
|
|
211
240
|
this._activeTarget = target;
|
|
241
|
+
target.classList.add(CLASS_NAME_ACTIVE);
|
|
212
242
|
|
|
213
|
-
this.
|
|
243
|
+
this._activateParents(target);
|
|
214
244
|
|
|
215
|
-
|
|
216
|
-
|
|
245
|
+
EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
|
|
246
|
+
relatedTarget: target
|
|
217
247
|
});
|
|
248
|
+
}
|
|
218
249
|
|
|
219
|
-
|
|
250
|
+
_activateParents(target) {
|
|
251
|
+
// Activate dropdown parents
|
|
252
|
+
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
|
253
|
+
SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
220
256
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
$link.addClass(CLASS_NAME_ACTIVE);
|
|
224
|
-
} else {
|
|
225
|
-
// Set triggered link as active
|
|
226
|
-
$link.addClass(CLASS_NAME_ACTIVE); // Set triggered links parents as active
|
|
257
|
+
for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
|
|
258
|
+
// Set triggered links parents as active
|
|
227
259
|
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE);
|
|
260
|
+
for (const item of SelectorEngine__default.default.prev(listGroup, SELECTOR_LINK_ITEMS)) {
|
|
261
|
+
item.classList.add(CLASS_NAME_ACTIVE);
|
|
262
|
+
}
|
|
232
263
|
}
|
|
264
|
+
}
|
|
233
265
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
});
|
|
237
|
-
};
|
|
266
|
+
_clearActiveClass(parent) {
|
|
267
|
+
parent.classList.remove(CLASS_NAME_ACTIVE);
|
|
268
|
+
const activeNodes = SelectorEngine__default.default.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
|
|
238
269
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}).forEach(function (node) {
|
|
243
|
-
return node.classList.remove(CLASS_NAME_ACTIVE);
|
|
244
|
-
});
|
|
270
|
+
for (const node of activeNodes) {
|
|
271
|
+
node.classList.remove(CLASS_NAME_ACTIVE);
|
|
272
|
+
}
|
|
245
273
|
} // Static
|
|
246
|
-
;
|
|
247
274
|
|
|
248
|
-
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
|
|
249
|
-
return this.each(function () {
|
|
250
|
-
var data = $__default['default'](this).data(DATA_KEY);
|
|
251
275
|
|
|
252
|
-
|
|
276
|
+
static jQueryInterface(config) {
|
|
277
|
+
return this.each(function () {
|
|
278
|
+
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
253
279
|
|
|
254
|
-
if (
|
|
255
|
-
|
|
256
|
-
$__default['default'](this).data(DATA_KEY, data);
|
|
280
|
+
if (typeof config !== 'string') {
|
|
281
|
+
return;
|
|
257
282
|
}
|
|
258
283
|
|
|
259
|
-
if (
|
|
260
|
-
|
|
261
|
-
throw new TypeError("No method named \"" + config + "\"");
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
data[config]();
|
|
284
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
285
|
+
throw new TypeError(`No method named "${config}"`);
|
|
265
286
|
}
|
|
266
|
-
});
|
|
267
|
-
};
|
|
268
287
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
return VERSION;
|
|
273
|
-
}
|
|
274
|
-
}, {
|
|
275
|
-
key: "Default",
|
|
276
|
-
get: function get() {
|
|
277
|
-
return Default;
|
|
278
|
-
}
|
|
279
|
-
}]);
|
|
288
|
+
data[config]();
|
|
289
|
+
});
|
|
290
|
+
}
|
|
280
291
|
|
|
281
|
-
|
|
282
|
-
}();
|
|
292
|
+
}
|
|
283
293
|
/**
|
|
284
|
-
*
|
|
285
|
-
* Data Api implementation
|
|
286
|
-
* ------------------------------------------------------------------------
|
|
294
|
+
* Data API implementation
|
|
287
295
|
*/
|
|
288
296
|
|
|
289
297
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
for (var i = scrollSpysLength; i--;) {
|
|
295
|
-
var $spy = $__default['default'](scrollSpys[i]);
|
|
296
|
-
|
|
297
|
-
ScrollSpy._jQueryInterface.call($spy, $spy.data());
|
|
298
|
+
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
|
|
299
|
+
for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
|
|
300
|
+
ScrollSpy.getOrCreateInstance(spy);
|
|
298
301
|
}
|
|
299
302
|
});
|
|
300
303
|
/**
|
|
301
|
-
* ------------------------------------------------------------------------
|
|
302
304
|
* jQuery
|
|
303
|
-
* ------------------------------------------------------------------------
|
|
304
305
|
*/
|
|
305
306
|
|
|
306
|
-
|
|
307
|
-
$__default['default'].fn[NAME].Constructor = ScrollSpy;
|
|
308
|
-
|
|
309
|
-
$__default['default'].fn[NAME].noConflict = function () {
|
|
310
|
-
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
|
|
311
|
-
return ScrollSpy._jQueryInterface;
|
|
312
|
-
};
|
|
307
|
+
index.defineJQueryPlugin(ScrollSpy);
|
|
313
308
|
|
|
314
309
|
return ScrollSpy;
|
|
315
310
|
|
|
316
|
-
}))
|
|
311
|
+
}));
|