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