bootstrap 4.3.0 → 5.1.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.
- checksums.yaml +4 -4
- data/.travis.yml +17 -2
- data/CHANGELOG.md +2 -14
- data/README.md +7 -4
- data/assets/javascripts/bootstrap/alert.js +173 -137
- data/assets/javascripts/bootstrap/base-component.js +182 -0
- data/assets/javascripts/bootstrap/button.js +102 -143
- data/assets/javascripts/bootstrap/carousel.js +481 -410
- data/assets/javascripts/bootstrap/collapse.js +340 -274
- data/assets/javascripts/bootstrap/dom/data.js +68 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
- data/assets/javascripts/bootstrap/dropdown.js +494 -400
- data/assets/javascripts/bootstrap/modal.js +834 -450
- data/assets/javascripts/bootstrap/offcanvas.js +866 -0
- data/assets/javascripts/bootstrap/popover.js +122 -199
- data/assets/javascripts/bootstrap/scrollspy.js +257 -241
- data/assets/javascripts/bootstrap/tab.js +219 -155
- data/assets/javascripts/bootstrap/toast.js +330 -190
- data/assets/javascripts/bootstrap/tooltip.js +710 -472
- 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 +8 -1
- data/assets/javascripts/bootstrap.js +3547 -2809
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +54 -18
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +20 -11
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +15 -9
- data/assets/stylesheets/bootstrap/_badge.scss +2 -27
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
- data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
- data/assets/stylesheets/bootstrap/_card.scss +52 -125
- data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
- data/assets/stylesheets/bootstrap/_close.scss +30 -31
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
- data/assets/stylesheets/bootstrap/_forms.scss +9 -330
- data/assets/stylesheets/bootstrap/_functions.scss +237 -27
- data/assets/stylesheets/bootstrap/_grid.scss +14 -33
- data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
- data/assets/stylesheets/bootstrap/_images.scss +3 -3
- data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
- data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
- data/assets/stylesheets/bootstrap/_modal.scss +64 -84
- data/assets/stylesheets/bootstrap/_nav.scss +29 -10
- data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
- data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +29 -42
- data/assets/stylesheets/bootstrap/_progress.scss +10 -5
- data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
- data/assets/stylesheets/bootstrap/_root.scss +42 -8
- data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
- data/assets/stylesheets/bootstrap/_tables.scss +80 -114
- data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
- data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -61
- data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
- data/assets/stylesheets/bootstrap/_variables.scss +993 -487
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +70 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -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 +3 -5
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -51
- 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 +9 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +67 -115
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +131 -32
- data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +89 -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 +274 -132
- data/bootstrap.gemspec +4 -6
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +25 -6
- data/tasks/updater/network.rb +8 -2
- data/test/dummy_rails/app/assets/config/manifest.js +3 -0
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
- 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_6_0.gemfile +7 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -13
- metadata +61 -79
- data/assets/javascripts/bootstrap/util.js +0 -171
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
- 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 -21
- 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 -66
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
- 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 -16
- 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/_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
|
@@ -1,260 +1,183 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap popover.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap popover.js v5.1.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
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 = global || self, global.Popover = factory(global.
|
|
10
|
-
}(this, function (
|
|
11
|
-
|
|
12
|
-
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
|
|
13
|
-
Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;
|
|
14
|
-
|
|
15
|
-
function _defineProperties(target, props) {
|
|
16
|
-
for (var i = 0; i < props.length; i++) {
|
|
17
|
-
var descriptor = props[i];
|
|
18
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
19
|
-
descriptor.configurable = true;
|
|
20
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
21
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./tooltip.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./tooltip'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Tooltip));
|
|
10
|
+
}(this, (function (Tooltip) { 'use strict';
|
|
24
11
|
|
|
25
|
-
function
|
|
26
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
27
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
28
|
-
return Constructor;
|
|
29
|
-
}
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
30
13
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
14
|
+
var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* --------------------------------------------------------------------------
|
|
18
|
+
* Bootstrap (v5.1.0): util/index.js
|
|
19
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
20
|
+
* --------------------------------------------------------------------------
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
const getjQuery = () => {
|
|
24
|
+
const {
|
|
25
|
+
jQuery
|
|
26
|
+
} = window;
|
|
27
|
+
|
|
28
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
29
|
+
return jQuery;
|
|
41
30
|
}
|
|
42
31
|
|
|
43
|
-
return
|
|
44
|
-
}
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
45
34
|
|
|
46
|
-
|
|
47
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
48
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
49
|
-
var ownKeys = Object.keys(source);
|
|
35
|
+
const DOMContentLoadedCallbacks = [];
|
|
50
36
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
37
|
+
const onDOMContentLoaded = callback => {
|
|
38
|
+
if (document.readyState === 'loading') {
|
|
39
|
+
// add listener on the first call when the document is in loading state
|
|
40
|
+
if (!DOMContentLoadedCallbacks.length) {
|
|
41
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
42
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
43
|
+
});
|
|
55
44
|
}
|
|
56
45
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
46
|
+
DOMContentLoadedCallbacks.push(callback);
|
|
47
|
+
} else {
|
|
48
|
+
callback();
|
|
60
49
|
}
|
|
50
|
+
};
|
|
61
51
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
const defineJQueryPlugin = plugin => {
|
|
53
|
+
onDOMContentLoaded(() => {
|
|
54
|
+
const $ = getjQuery();
|
|
55
|
+
/* istanbul ignore if */
|
|
56
|
+
|
|
57
|
+
if ($) {
|
|
58
|
+
const name = plugin.NAME;
|
|
59
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
60
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
61
|
+
$.fn[name].Constructor = plugin;
|
|
62
|
+
|
|
63
|
+
$.fn[name].noConflict = () => {
|
|
64
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
65
|
+
return plugin.jQueryInterface;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
70
|
|
|
71
|
+
/**
|
|
72
|
+
* --------------------------------------------------------------------------
|
|
73
|
+
* Bootstrap (v5.1.0): popover.js
|
|
74
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
75
|
+
* --------------------------------------------------------------------------
|
|
76
|
+
*/
|
|
71
77
|
/**
|
|
72
78
|
* ------------------------------------------------------------------------
|
|
73
79
|
* Constants
|
|
74
80
|
* ------------------------------------------------------------------------
|
|
75
81
|
*/
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
var CLASS_PREFIX = 'bs-popover';
|
|
83
|
-
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
|
|
84
|
-
|
|
85
|
-
var Default = _objectSpread({}, Tooltip.Default, {
|
|
83
|
+
const NAME = 'popover';
|
|
84
|
+
const DATA_KEY = 'bs.popover';
|
|
85
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
86
|
+
const CLASS_PREFIX = 'bs-popover';
|
|
87
|
+
const Default = { ...Tooltip__default['default'].Default,
|
|
86
88
|
placement: 'right',
|
|
89
|
+
offset: [0, 8],
|
|
87
90
|
trigger: 'click',
|
|
88
91
|
content: '',
|
|
89
|
-
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
|
|
93
|
-
content: '(string|element|function)'
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
var ClassName = {
|
|
97
|
-
FADE: 'fade',
|
|
98
|
-
SHOW: 'show'
|
|
92
|
+
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
|
|
99
93
|
};
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
CONTENT: '.popover-body'
|
|
94
|
+
const DefaultType = { ...Tooltip__default['default'].DefaultType,
|
|
95
|
+
content: '(string|element|function)'
|
|
103
96
|
};
|
|
104
|
-
|
|
105
|
-
HIDE:
|
|
106
|
-
HIDDEN:
|
|
107
|
-
SHOW:
|
|
108
|
-
SHOWN:
|
|
109
|
-
INSERTED:
|
|
110
|
-
CLICK:
|
|
111
|
-
FOCUSIN:
|
|
112
|
-
FOCUSOUT:
|
|
113
|
-
MOUSEENTER:
|
|
114
|
-
MOUSELEAVE:
|
|
115
|
-
/**
|
|
116
|
-
* ------------------------------------------------------------------------
|
|
117
|
-
* Class Definition
|
|
118
|
-
* ------------------------------------------------------------------------
|
|
119
|
-
*/
|
|
120
|
-
|
|
97
|
+
const Event = {
|
|
98
|
+
HIDE: `hide${EVENT_KEY}`,
|
|
99
|
+
HIDDEN: `hidden${EVENT_KEY}`,
|
|
100
|
+
SHOW: `show${EVENT_KEY}`,
|
|
101
|
+
SHOWN: `shown${EVENT_KEY}`,
|
|
102
|
+
INSERTED: `inserted${EVENT_KEY}`,
|
|
103
|
+
CLICK: `click${EVENT_KEY}`,
|
|
104
|
+
FOCUSIN: `focusin${EVENT_KEY}`,
|
|
105
|
+
FOCUSOUT: `focusout${EVENT_KEY}`,
|
|
106
|
+
MOUSEENTER: `mouseenter${EVENT_KEY}`,
|
|
107
|
+
MOUSELEAVE: `mouseleave${EVENT_KEY}`
|
|
121
108
|
};
|
|
109
|
+
const SELECTOR_TITLE = '.popover-header';
|
|
110
|
+
const SELECTOR_CONTENT = '.popover-body';
|
|
111
|
+
/**
|
|
112
|
+
* ------------------------------------------------------------------------
|
|
113
|
+
* Class Definition
|
|
114
|
+
* ------------------------------------------------------------------------
|
|
115
|
+
*/
|
|
122
116
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
function Popover() {
|
|
129
|
-
return _Tooltip.apply(this, arguments) || this;
|
|
117
|
+
class Popover extends Tooltip__default['default'] {
|
|
118
|
+
// Getters
|
|
119
|
+
static get Default() {
|
|
120
|
+
return Default;
|
|
130
121
|
}
|
|
131
122
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
_proto.isWithContent = function isWithContent() {
|
|
136
|
-
return this.getTitle() || this._getContent();
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
_proto.addAttachmentClass = function addAttachmentClass(attachment) {
|
|
140
|
-
$(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
|
|
141
|
-
};
|
|
123
|
+
static get NAME() {
|
|
124
|
+
return NAME;
|
|
125
|
+
}
|
|
142
126
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
};
|
|
127
|
+
static get Event() {
|
|
128
|
+
return Event;
|
|
129
|
+
}
|
|
147
130
|
|
|
148
|
-
|
|
149
|
-
|
|
131
|
+
static get DefaultType() {
|
|
132
|
+
return DefaultType;
|
|
133
|
+
} // Overrides
|
|
150
134
|
|
|
151
|
-
this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
|
|
152
135
|
|
|
153
|
-
|
|
136
|
+
isWithContent() {
|
|
137
|
+
return this.getTitle() || this._getContent();
|
|
138
|
+
}
|
|
154
139
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
140
|
+
setContent(tip) {
|
|
141
|
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
|
|
158
142
|
|
|
159
|
-
this.
|
|
160
|
-
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
|
|
143
|
+
this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
|
|
161
144
|
} // Private
|
|
162
|
-
;
|
|
163
145
|
|
|
164
|
-
_proto._getContent = function _getContent() {
|
|
165
|
-
return this.element.getAttribute('data-content') || this.config.content;
|
|
166
|
-
};
|
|
167
146
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
147
|
+
_getContent() {
|
|
148
|
+
return this._resolvePossibleFunction(this._config.content);
|
|
149
|
+
}
|
|
171
150
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
151
|
+
_getBasicClassPrefix() {
|
|
152
|
+
return CLASS_PREFIX;
|
|
175
153
|
} // Static
|
|
176
|
-
;
|
|
177
|
-
|
|
178
|
-
Popover._jQueryInterface = function _jQueryInterface(config) {
|
|
179
|
-
return this.each(function () {
|
|
180
|
-
var data = $(this).data(DATA_KEY);
|
|
181
|
-
|
|
182
|
-
var _config = typeof config === 'object' ? config : null;
|
|
183
154
|
|
|
184
|
-
if (!data && /dispose|hide/.test(config)) {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
155
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
156
|
+
static jQueryInterface(config) {
|
|
157
|
+
return this.each(function () {
|
|
158
|
+
const data = Popover.getOrCreateInstance(this, config);
|
|
192
159
|
|
|
193
160
|
if (typeof config === 'string') {
|
|
194
161
|
if (typeof data[config] === 'undefined') {
|
|
195
|
-
throw new TypeError(
|
|
162
|
+
throw new TypeError(`No method named "${config}"`);
|
|
196
163
|
}
|
|
197
164
|
|
|
198
165
|
data[config]();
|
|
199
166
|
}
|
|
200
167
|
});
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
_createClass(Popover, null, [{
|
|
204
|
-
key: "VERSION",
|
|
205
|
-
// Getters
|
|
206
|
-
get: function get() {
|
|
207
|
-
return VERSION;
|
|
208
|
-
}
|
|
209
|
-
}, {
|
|
210
|
-
key: "Default",
|
|
211
|
-
get: function get() {
|
|
212
|
-
return Default;
|
|
213
|
-
}
|
|
214
|
-
}, {
|
|
215
|
-
key: "NAME",
|
|
216
|
-
get: function get() {
|
|
217
|
-
return NAME;
|
|
218
|
-
}
|
|
219
|
-
}, {
|
|
220
|
-
key: "DATA_KEY",
|
|
221
|
-
get: function get() {
|
|
222
|
-
return DATA_KEY;
|
|
223
|
-
}
|
|
224
|
-
}, {
|
|
225
|
-
key: "Event",
|
|
226
|
-
get: function get() {
|
|
227
|
-
return Event;
|
|
228
|
-
}
|
|
229
|
-
}, {
|
|
230
|
-
key: "EVENT_KEY",
|
|
231
|
-
get: function get() {
|
|
232
|
-
return EVENT_KEY;
|
|
233
|
-
}
|
|
234
|
-
}, {
|
|
235
|
-
key: "DefaultType",
|
|
236
|
-
get: function get() {
|
|
237
|
-
return DefaultType;
|
|
238
|
-
}
|
|
239
|
-
}]);
|
|
168
|
+
}
|
|
240
169
|
|
|
241
|
-
|
|
242
|
-
}(Tooltip);
|
|
170
|
+
}
|
|
243
171
|
/**
|
|
244
172
|
* ------------------------------------------------------------------------
|
|
245
173
|
* jQuery
|
|
246
174
|
* ------------------------------------------------------------------------
|
|
175
|
+
* add .Popover to jQuery only if jQuery is present
|
|
247
176
|
*/
|
|
248
177
|
|
|
249
178
|
|
|
250
|
-
|
|
251
|
-
$.fn[NAME].Constructor = Popover;
|
|
252
|
-
|
|
253
|
-
$.fn[NAME].noConflict = function () {
|
|
254
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
255
|
-
return Popover._jQueryInterface;
|
|
256
|
-
};
|
|
179
|
+
defineJQueryPlugin(Popover);
|
|
257
180
|
|
|
258
181
|
return Popover;
|
|
259
182
|
|
|
260
|
-
}));
|
|
183
|
+
})));
|
|
@@ -1,243 +1,296 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap scrollspy.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap scrollspy.js v5.1.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
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 = global || self, global.ScrollSpy = factory(global.
|
|
10
|
-
}(this, function (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
|
|
10
|
+
}(this, (function (EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
+
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
16
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
17
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* --------------------------------------------------------------------------
|
|
21
|
+
* Bootstrap (v5.1.0): util/index.js
|
|
22
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
23
|
+
* --------------------------------------------------------------------------
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const toType = obj => {
|
|
27
|
+
if (obj === null || obj === undefined) {
|
|
28
|
+
return `${obj}`;
|
|
22
29
|
}
|
|
23
|
-
}
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
28
|
-
return Constructor;
|
|
29
|
-
}
|
|
31
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
32
|
+
};
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
const getSelector = element => {
|
|
35
|
+
let selector = element.getAttribute('data-bs-target');
|
|
36
|
+
|
|
37
|
+
if (!selector || selector === '#') {
|
|
38
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
39
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
40
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
41
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
42
|
+
|
|
43
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
44
|
+
return null;
|
|
45
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
49
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
41
53
|
}
|
|
42
54
|
|
|
43
|
-
return
|
|
44
|
-
}
|
|
55
|
+
return selector;
|
|
56
|
+
};
|
|
45
57
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
49
|
-
var ownKeys = Object.keys(source);
|
|
58
|
+
const getSelectorFromElement = element => {
|
|
59
|
+
const selector = getSelector(element);
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
if (selector) {
|
|
62
|
+
return document.querySelector(selector) ? selector : null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return null;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const isElement = obj => {
|
|
69
|
+
if (!obj || typeof obj !== 'object') {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (typeof obj.jquery !== 'undefined') {
|
|
74
|
+
obj = obj[0];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return typeof obj.nodeType !== 'undefined';
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const getElement = obj => {
|
|
81
|
+
if (isElement(obj)) {
|
|
82
|
+
// it's a jQuery object or a node element
|
|
83
|
+
return obj.jquery ? obj[0] : obj;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (typeof obj === 'string' && obj.length > 0) {
|
|
87
|
+
return document.querySelector(obj);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return null;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
94
|
+
Object.keys(configTypes).forEach(property => {
|
|
95
|
+
const expectedTypes = configTypes[property];
|
|
96
|
+
const value = config[property];
|
|
97
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
98
|
+
|
|
99
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
100
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
55
101
|
}
|
|
102
|
+
});
|
|
103
|
+
};
|
|
56
104
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
105
|
+
const getjQuery = () => {
|
|
106
|
+
const {
|
|
107
|
+
jQuery
|
|
108
|
+
} = window;
|
|
109
|
+
|
|
110
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
111
|
+
return jQuery;
|
|
60
112
|
}
|
|
61
113
|
|
|
62
|
-
return
|
|
63
|
-
}
|
|
114
|
+
return null;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const DOMContentLoadedCallbacks = [];
|
|
118
|
+
|
|
119
|
+
const onDOMContentLoaded = callback => {
|
|
120
|
+
if (document.readyState === 'loading') {
|
|
121
|
+
// add listener on the first call when the document is in loading state
|
|
122
|
+
if (!DOMContentLoadedCallbacks.length) {
|
|
123
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
124
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
DOMContentLoadedCallbacks.push(callback);
|
|
129
|
+
} else {
|
|
130
|
+
callback();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const defineJQueryPlugin = plugin => {
|
|
135
|
+
onDOMContentLoaded(() => {
|
|
136
|
+
const $ = getjQuery();
|
|
137
|
+
/* istanbul ignore if */
|
|
138
|
+
|
|
139
|
+
if ($) {
|
|
140
|
+
const name = plugin.NAME;
|
|
141
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
142
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
143
|
+
$.fn[name].Constructor = plugin;
|
|
144
|
+
|
|
145
|
+
$.fn[name].noConflict = () => {
|
|
146
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
147
|
+
return plugin.jQueryInterface;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
};
|
|
64
152
|
|
|
153
|
+
/**
|
|
154
|
+
* --------------------------------------------------------------------------
|
|
155
|
+
* Bootstrap (v5.1.0): scrollspy.js
|
|
156
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
157
|
+
* --------------------------------------------------------------------------
|
|
158
|
+
*/
|
|
65
159
|
/**
|
|
66
160
|
* ------------------------------------------------------------------------
|
|
67
161
|
* Constants
|
|
68
162
|
* ------------------------------------------------------------------------
|
|
69
163
|
*/
|
|
70
164
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
77
|
-
var Default = {
|
|
165
|
+
const NAME = 'scrollspy';
|
|
166
|
+
const DATA_KEY = 'bs.scrollspy';
|
|
167
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
168
|
+
const DATA_API_KEY = '.data-api';
|
|
169
|
+
const Default = {
|
|
78
170
|
offset: 10,
|
|
79
171
|
method: 'auto',
|
|
80
172
|
target: ''
|
|
81
173
|
};
|
|
82
|
-
|
|
174
|
+
const DefaultType = {
|
|
83
175
|
offset: 'number',
|
|
84
176
|
method: 'string',
|
|
85
177
|
target: '(string|element)'
|
|
86
178
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
};
|
|
108
|
-
var OffsetMethod = {
|
|
109
|
-
OFFSET: 'offset',
|
|
110
|
-
POSITION: 'position'
|
|
111
|
-
/**
|
|
112
|
-
* ------------------------------------------------------------------------
|
|
113
|
-
* Class Definition
|
|
114
|
-
* ------------------------------------------------------------------------
|
|
115
|
-
*/
|
|
116
|
-
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
var ScrollSpy =
|
|
120
|
-
/*#__PURE__*/
|
|
121
|
-
function () {
|
|
122
|
-
function ScrollSpy(element, config) {
|
|
123
|
-
var _this = this;
|
|
179
|
+
const EVENT_ACTIVATE = `activate${EVENT_KEY}`;
|
|
180
|
+
const EVENT_SCROLL = `scroll${EVENT_KEY}`;
|
|
181
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
|
|
182
|
+
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
|
183
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
184
|
+
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
|
185
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
186
|
+
const SELECTOR_NAV_LINKS = '.nav-link';
|
|
187
|
+
const SELECTOR_NAV_ITEMS = '.nav-item';
|
|
188
|
+
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
|
189
|
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
|
190
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
191
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
192
|
+
const METHOD_OFFSET = 'offset';
|
|
193
|
+
const METHOD_POSITION = 'position';
|
|
194
|
+
/**
|
|
195
|
+
* ------------------------------------------------------------------------
|
|
196
|
+
* Class Definition
|
|
197
|
+
* ------------------------------------------------------------------------
|
|
198
|
+
*/
|
|
124
199
|
|
|
125
|
-
|
|
126
|
-
|
|
200
|
+
class ScrollSpy extends BaseComponent__default['default'] {
|
|
201
|
+
constructor(element, config) {
|
|
202
|
+
super(element);
|
|
203
|
+
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
|
127
204
|
this._config = this._getConfig(config);
|
|
128
|
-
this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
|
|
129
205
|
this._offsets = [];
|
|
130
206
|
this._targets = [];
|
|
131
207
|
this._activeTarget = null;
|
|
132
208
|
this._scrollHeight = 0;
|
|
133
|
-
|
|
134
|
-
return _this._process(event);
|
|
135
|
-
});
|
|
209
|
+
EventHandler__default['default'].on(this._scrollElement, EVENT_SCROLL, () => this._process());
|
|
136
210
|
this.refresh();
|
|
137
211
|
|
|
138
212
|
this._process();
|
|
139
213
|
} // Getters
|
|
140
214
|
|
|
141
215
|
|
|
142
|
-
|
|
216
|
+
static get Default() {
|
|
217
|
+
return Default;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
static get NAME() {
|
|
221
|
+
return NAME;
|
|
222
|
+
} // Public
|
|
143
223
|
|
|
144
|
-
// Public
|
|
145
|
-
_proto.refresh = function refresh() {
|
|
146
|
-
var _this2 = this;
|
|
147
224
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
225
|
+
refresh() {
|
|
226
|
+
const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
|
|
227
|
+
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
|
228
|
+
const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
|
151
229
|
this._offsets = [];
|
|
152
230
|
this._targets = [];
|
|
153
231
|
this._scrollHeight = this._getScrollHeight();
|
|
154
|
-
|
|
155
|
-
targets.map(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
if (targetSelector) {
|
|
160
|
-
target = document.querySelector(targetSelector);
|
|
161
|
-
}
|
|
232
|
+
const targets = SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target);
|
|
233
|
+
targets.map(element => {
|
|
234
|
+
const targetSelector = getSelectorFromElement(element);
|
|
235
|
+
const target = targetSelector ? SelectorEngine__default['default'].findOne(targetSelector) : null;
|
|
162
236
|
|
|
163
237
|
if (target) {
|
|
164
|
-
|
|
238
|
+
const targetBCR = target.getBoundingClientRect();
|
|
165
239
|
|
|
166
240
|
if (targetBCR.width || targetBCR.height) {
|
|
167
|
-
|
|
168
|
-
return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
|
|
241
|
+
return [Manipulator__default['default'][offsetMethod](target).top + offsetBase, targetSelector];
|
|
169
242
|
}
|
|
170
243
|
}
|
|
171
244
|
|
|
172
245
|
return null;
|
|
173
|
-
}).filter(
|
|
174
|
-
|
|
175
|
-
}).sort(function (a, b) {
|
|
176
|
-
return a[0] - b[0];
|
|
177
|
-
}).forEach(function (item) {
|
|
178
|
-
_this2._offsets.push(item[0]);
|
|
179
|
-
|
|
180
|
-
_this2._targets.push(item[1]);
|
|
181
|
-
});
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
_proto.dispose = function dispose() {
|
|
185
|
-
$.removeData(this._element, DATA_KEY);
|
|
186
|
-
$(this._scrollElement).off(EVENT_KEY);
|
|
187
|
-
this._element = null;
|
|
188
|
-
this._scrollElement = null;
|
|
189
|
-
this._config = null;
|
|
190
|
-
this._selector = null;
|
|
191
|
-
this._offsets = null;
|
|
192
|
-
this._targets = null;
|
|
193
|
-
this._activeTarget = null;
|
|
194
|
-
this._scrollHeight = null;
|
|
195
|
-
} // Private
|
|
196
|
-
;
|
|
197
|
-
|
|
198
|
-
_proto._getConfig = function _getConfig(config) {
|
|
199
|
-
config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});
|
|
246
|
+
}).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
|
|
247
|
+
this._offsets.push(item[0]);
|
|
200
248
|
|
|
201
|
-
|
|
202
|
-
|
|
249
|
+
this._targets.push(item[1]);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
203
252
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
253
|
+
dispose() {
|
|
254
|
+
EventHandler__default['default'].off(this._scrollElement, EVENT_KEY);
|
|
255
|
+
super.dispose();
|
|
256
|
+
} // Private
|
|
208
257
|
|
|
209
|
-
config.target = "#" + id;
|
|
210
|
-
}
|
|
211
258
|
|
|
212
|
-
|
|
259
|
+
_getConfig(config) {
|
|
260
|
+
config = { ...Default,
|
|
261
|
+
...Manipulator__default['default'].getDataAttributes(this._element),
|
|
262
|
+
...(typeof config === 'object' && config ? config : {})
|
|
263
|
+
};
|
|
264
|
+
config.target = getElement(config.target) || document.documentElement;
|
|
265
|
+
typeCheckConfig(NAME, config, DefaultType);
|
|
213
266
|
return config;
|
|
214
|
-
}
|
|
267
|
+
}
|
|
215
268
|
|
|
216
|
-
|
|
269
|
+
_getScrollTop() {
|
|
217
270
|
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
|
|
218
|
-
}
|
|
271
|
+
}
|
|
219
272
|
|
|
220
|
-
|
|
273
|
+
_getScrollHeight() {
|
|
221
274
|
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
|
222
|
-
}
|
|
275
|
+
}
|
|
223
276
|
|
|
224
|
-
|
|
277
|
+
_getOffsetHeight() {
|
|
225
278
|
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
|
|
226
|
-
}
|
|
279
|
+
}
|
|
227
280
|
|
|
228
|
-
|
|
229
|
-
|
|
281
|
+
_process() {
|
|
282
|
+
const scrollTop = this._getScrollTop() + this._config.offset;
|
|
230
283
|
|
|
231
|
-
|
|
284
|
+
const scrollHeight = this._getScrollHeight();
|
|
232
285
|
|
|
233
|
-
|
|
286
|
+
const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
|
|
234
287
|
|
|
235
288
|
if (this._scrollHeight !== scrollHeight) {
|
|
236
289
|
this.refresh();
|
|
237
290
|
}
|
|
238
291
|
|
|
239
292
|
if (scrollTop >= maxScroll) {
|
|
240
|
-
|
|
293
|
+
const target = this._targets[this._targets.length - 1];
|
|
241
294
|
|
|
242
295
|
if (this._activeTarget !== target) {
|
|
243
296
|
this._activate(target);
|
|
@@ -254,90 +307,65 @@
|
|
|
254
307
|
return;
|
|
255
308
|
}
|
|
256
309
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
for (var i = offsetLength; i--;) {
|
|
260
|
-
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
|
310
|
+
for (let i = this._offsets.length; i--;) {
|
|
311
|
+
const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
|
261
312
|
|
|
262
313
|
if (isActiveTarget) {
|
|
263
314
|
this._activate(this._targets[i]);
|
|
264
315
|
}
|
|
265
316
|
}
|
|
266
|
-
}
|
|
317
|
+
}
|
|
267
318
|
|
|
268
|
-
|
|
319
|
+
_activate(target) {
|
|
269
320
|
this._activeTarget = target;
|
|
270
321
|
|
|
271
322
|
this._clear();
|
|
272
323
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
|
|
324
|
+
const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
|
|
325
|
+
const link = SelectorEngine__default['default'].findOne(queries.join(','), this._config.target);
|
|
326
|
+
link.classList.add(CLASS_NAME_ACTIVE);
|
|
278
327
|
|
|
279
|
-
if (
|
|
280
|
-
|
|
281
|
-
$link.addClass(ClassName.ACTIVE);
|
|
328
|
+
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
|
329
|
+
SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
|
|
282
330
|
} else {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
331
|
+
SelectorEngine__default['default'].parents(link, SELECTOR_NAV_LIST_GROUP).forEach(listGroup => {
|
|
332
|
+
// Set triggered links parents as active
|
|
333
|
+
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
|
334
|
+
SelectorEngine__default['default'].prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE)); // Handle special case when .nav-link is inside .nav-item
|
|
335
|
+
|
|
336
|
+
SelectorEngine__default['default'].prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
|
|
337
|
+
SelectorEngine__default['default'].children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE));
|
|
338
|
+
});
|
|
339
|
+
});
|
|
290
340
|
}
|
|
291
341
|
|
|
292
|
-
|
|
342
|
+
EventHandler__default['default'].trigger(this._scrollElement, EVENT_ACTIVATE, {
|
|
293
343
|
relatedTarget: target
|
|
294
344
|
});
|
|
295
|
-
}
|
|
345
|
+
}
|
|
296
346
|
|
|
297
|
-
|
|
298
|
-
[].
|
|
299
|
-
return node.classList.contains(ClassName.ACTIVE);
|
|
300
|
-
}).forEach(function (node) {
|
|
301
|
-
return node.classList.remove(ClassName.ACTIVE);
|
|
302
|
-
});
|
|
347
|
+
_clear() {
|
|
348
|
+
SelectorEngine__default['default'].find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE));
|
|
303
349
|
} // Static
|
|
304
|
-
;
|
|
305
350
|
|
|
306
|
-
ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
|
|
307
|
-
return this.each(function () {
|
|
308
|
-
var data = $(this).data(DATA_KEY);
|
|
309
351
|
|
|
310
|
-
|
|
352
|
+
static jQueryInterface(config) {
|
|
353
|
+
return this.each(function () {
|
|
354
|
+
const data = ScrollSpy.getOrCreateInstance(this, config);
|
|
311
355
|
|
|
312
|
-
if (
|
|
313
|
-
|
|
314
|
-
$(this).data(DATA_KEY, data);
|
|
356
|
+
if (typeof config !== 'string') {
|
|
357
|
+
return;
|
|
315
358
|
}
|
|
316
359
|
|
|
317
|
-
if (typeof config === '
|
|
318
|
-
|
|
319
|
-
throw new TypeError("No method named \"" + config + "\"");
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
data[config]();
|
|
360
|
+
if (typeof data[config] === 'undefined') {
|
|
361
|
+
throw new TypeError(`No method named "${config}"`);
|
|
323
362
|
}
|
|
324
|
-
});
|
|
325
|
-
};
|
|
326
363
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
return VERSION;
|
|
331
|
-
}
|
|
332
|
-
}, {
|
|
333
|
-
key: "Default",
|
|
334
|
-
get: function get() {
|
|
335
|
-
return Default;
|
|
336
|
-
}
|
|
337
|
-
}]);
|
|
364
|
+
data[config]();
|
|
365
|
+
});
|
|
366
|
+
}
|
|
338
367
|
|
|
339
|
-
|
|
340
|
-
}();
|
|
368
|
+
}
|
|
341
369
|
/**
|
|
342
370
|
* ------------------------------------------------------------------------
|
|
343
371
|
* Data Api implementation
|
|
@@ -345,30 +373,18 @@
|
|
|
345
373
|
*/
|
|
346
374
|
|
|
347
375
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
var scrollSpysLength = scrollSpys.length;
|
|
351
|
-
|
|
352
|
-
for (var i = scrollSpysLength; i--;) {
|
|
353
|
-
var $spy = $(scrollSpys[i]);
|
|
354
|
-
|
|
355
|
-
ScrollSpy._jQueryInterface.call($spy, $spy.data());
|
|
356
|
-
}
|
|
376
|
+
EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
|
|
377
|
+
SelectorEngine__default['default'].find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
|
|
357
378
|
});
|
|
358
379
|
/**
|
|
359
380
|
* ------------------------------------------------------------------------
|
|
360
381
|
* jQuery
|
|
361
382
|
* ------------------------------------------------------------------------
|
|
383
|
+
* add .ScrollSpy to jQuery only if jQuery is present
|
|
362
384
|
*/
|
|
363
385
|
|
|
364
|
-
|
|
365
|
-
$.fn[NAME].Constructor = ScrollSpy;
|
|
366
|
-
|
|
367
|
-
$.fn[NAME].noConflict = function () {
|
|
368
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
369
|
-
return ScrollSpy._jQueryInterface;
|
|
370
|
-
};
|
|
386
|
+
defineJQueryPlugin(ScrollSpy);
|
|
371
387
|
|
|
372
388
|
return ScrollSpy;
|
|
373
389
|
|
|
374
|
-
}));
|
|
390
|
+
})));
|