bootstrap 4.3.1 → 5.3.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/.github/workflows/ci.yml +55 -0
- data/CHANGELOG.md +2 -14
- data/README.md +28 -5
- data/assets/javascripts/bootstrap/alert.js +54 -163
- data/assets/javascripts/bootstrap/base-component.js +83 -0
- data/assets/javascripts/bootstrap/button.js +44 -152
- data/assets/javascripts/bootstrap/carousel.js +289 -569
- data/assets/javascripts/bootstrap/collapse.js +170 -349
- data/assets/javascripts/bootstrap/dom/data.js +62 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
- data/assets/javascripts/bootstrap/dropdown.js +303 -496
- data/assets/javascripts/bootstrap/modal.js +229 -559
- data/assets/javascripts/bootstrap/offcanvas.js +245 -0
- data/assets/javascripts/bootstrap/popover.js +61 -226
- data/assets/javascripts/bootstrap/scrollspy.js +217 -317
- data/assets/javascripts/bootstrap/tab.js +220 -212
- data/assets/javascripts/bootstrap/toast.js +145 -229
- data/assets/javascripts/bootstrap/tooltip.js +421 -782
- data/assets/javascripts/bootstrap/util/backdrop.js +139 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +113 -0
- data/assets/javascripts/bootstrap/util/index.js +281 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +110 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -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 +23 -7
- data/assets/javascripts/bootstrap.js +3690 -3639
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +53 -20
- data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
- data/assets/stylesheets/_bootstrap.scss +21 -13
- data/assets/stylesheets/bootstrap/_accordion.scss +158 -0
- data/assets/stylesheets/bootstrap/_alert.scss +32 -15
- data/assets/stylesheets/bootstrap/_badge.scss +15 -31
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -24
- data/assets/stylesheets/bootstrap/_button-group.scss +27 -48
- data/assets/stylesheets/bootstrap/_buttons.scss +139 -69
- data/assets/stylesheets/bootstrap/_card.scss +91 -141
- data/assets/stylesheets/bootstrap/_carousel.scss +86 -39
- data/assets/stylesheets/bootstrap/_close.scss +51 -29
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +131 -72
- data/assets/stylesheets/bootstrap/_forms.scss +9 -330
- data/assets/stylesheets/bootstrap/_functions.scss +244 -28
- data/assets/stylesheets/bootstrap/_grid.scss +18 -31
- data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
- data/assets/stylesheets/bootstrap/_images.scss +3 -3
- data/assets/stylesheets/bootstrap/_list-group.scss +101 -53
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +13 -18
- data/assets/stylesheets/bootstrap/_modal.scss +120 -112
- data/assets/stylesheets/bootstrap/_nav.scss +113 -24
- data/assets/stylesheets/bootstrap/_navbar.scss +145 -150
- data/assets/stylesheets/bootstrap/_offcanvas.scss +146 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +74 -38
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +99 -74
- data/assets/stylesheets/bootstrap/_progress.scss +40 -15
- data/assets/stylesheets/bootstrap/_reboot.scss +342 -215
- data/assets/stylesheets/bootstrap/_root.scss +174 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +52 -22
- data/assets/stylesheets/bootstrap/_tables.scss +101 -115
- data/assets/stylesheets/bootstrap/_toasts.scss +54 -25
- data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +42 -61
- data/assets/stylesheets/bootstrap/_utilities.scss +806 -17
- data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
- data/assets/stylesheets/bootstrap/_variables.scss +1235 -615
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +94 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +188 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -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 +8 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -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 +11 -6
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -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 +20 -16
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -97
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -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 +77 -116
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +133 -33
- data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +276 -132
- data/bootstrap.gemspec +4 -6
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +31 -7
- data/tasks/updater/network.rb +10 -4
- data/tasks/updater/scss.rb +1 -1
- data/tasks/updater.rb +2 -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_5_2.gemfile +8 -0
- data/test/gemfiles/rails_6_0.gemfile +7 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/gemfiles/rails_7_0.gemfile +7 -0
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -12
- metadata +86 -84
- data/.travis.yml +0 -17
- 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
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
|
@@ -1,648 +1,318 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap modal.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap modal.js v5.3.0 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2023 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.Modal = factory(global.
|
|
10
|
-
}(this, function (
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/backdrop.js'), require('./util/component-functions.js'), require('./util/focustrap.js'), require('./util/index.js'), require('./util/scrollbar.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/backdrop', './util/component-functions', './util/focustrap', './util/index', './util/scrollbar'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Backdrop, global.ComponentFunctions, global.Focustrap, global.Index, global.Scrollbar));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, SelectorEngine, Backdrop, componentFunctions_js, FocusTrap, index_js, ScrollBarHelper) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
}
|
|
30
|
-
|
|
31
|
-
function _defineProperty(obj, key, value) {
|
|
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
|
-
}
|
|
42
|
-
|
|
43
|
-
return obj;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function _objectSpread(target) {
|
|
47
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
48
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
49
|
-
var ownKeys = Object.keys(source);
|
|
50
|
-
|
|
51
|
-
if (typeof Object.getOwnPropertySymbols === 'function') {
|
|
52
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
|
|
53
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
ownKeys.forEach(function (key) {
|
|
58
|
-
_defineProperty(target, key, source[key]);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
12
|
+
/**
|
|
13
|
+
* --------------------------------------------------------------------------
|
|
14
|
+
* Bootstrap modal.js
|
|
15
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
|
+
* --------------------------------------------------------------------------
|
|
17
|
+
*/
|
|
61
18
|
|
|
62
|
-
return target;
|
|
63
|
-
}
|
|
64
19
|
|
|
65
20
|
/**
|
|
66
|
-
* ------------------------------------------------------------------------
|
|
67
21
|
* Constants
|
|
68
|
-
* ------------------------------------------------------------------------
|
|
69
22
|
*/
|
|
70
23
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
24
|
+
const NAME = 'modal';
|
|
25
|
+
const DATA_KEY = 'bs.modal';
|
|
26
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
27
|
+
const DATA_API_KEY = '.data-api';
|
|
28
|
+
const ESCAPE_KEY = 'Escape';
|
|
29
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
30
|
+
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;
|
|
31
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
32
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
33
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
34
|
+
const EVENT_RESIZE = `resize${EVENT_KEY}`;
|
|
35
|
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
|
|
36
|
+
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
|
|
37
|
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
|
|
38
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
39
|
+
const CLASS_NAME_OPEN = 'modal-open';
|
|
40
|
+
const CLASS_NAME_FADE = 'fade';
|
|
41
|
+
const CLASS_NAME_SHOW = 'show';
|
|
42
|
+
const CLASS_NAME_STATIC = 'modal-static';
|
|
43
|
+
const OPEN_SELECTOR = '.modal.show';
|
|
44
|
+
const SELECTOR_DIALOG = '.modal-dialog';
|
|
45
|
+
const SELECTOR_MODAL_BODY = '.modal-body';
|
|
46
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
|
|
47
|
+
const Default = {
|
|
80
48
|
backdrop: true,
|
|
81
|
-
keyboard: true,
|
|
82
49
|
focus: true,
|
|
83
|
-
|
|
50
|
+
keyboard: true
|
|
84
51
|
};
|
|
85
|
-
|
|
52
|
+
const DefaultType = {
|
|
86
53
|
backdrop: '(boolean|string)',
|
|
87
|
-
keyboard: 'boolean',
|
|
88
54
|
focus: 'boolean',
|
|
89
|
-
|
|
55
|
+
keyboard: 'boolean'
|
|
90
56
|
};
|
|
91
|
-
var Event = {
|
|
92
|
-
HIDE: "hide" + EVENT_KEY,
|
|
93
|
-
HIDDEN: "hidden" + EVENT_KEY,
|
|
94
|
-
SHOW: "show" + EVENT_KEY,
|
|
95
|
-
SHOWN: "shown" + EVENT_KEY,
|
|
96
|
-
FOCUSIN: "focusin" + EVENT_KEY,
|
|
97
|
-
RESIZE: "resize" + EVENT_KEY,
|
|
98
|
-
CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
|
|
99
|
-
KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
|
|
100
|
-
MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
|
|
101
|
-
MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
|
|
102
|
-
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
|
|
103
|
-
};
|
|
104
|
-
var ClassName = {
|
|
105
|
-
SCROLLABLE: 'modal-dialog-scrollable',
|
|
106
|
-
SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
|
|
107
|
-
BACKDROP: 'modal-backdrop',
|
|
108
|
-
OPEN: 'modal-open',
|
|
109
|
-
FADE: 'fade',
|
|
110
|
-
SHOW: 'show'
|
|
111
|
-
};
|
|
112
|
-
var Selector = {
|
|
113
|
-
DIALOG: '.modal-dialog',
|
|
114
|
-
MODAL_BODY: '.modal-body',
|
|
115
|
-
DATA_TOGGLE: '[data-toggle="modal"]',
|
|
116
|
-
DATA_DISMISS: '[data-dismiss="modal"]',
|
|
117
|
-
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
|
|
118
|
-
STICKY_CONTENT: '.sticky-top'
|
|
119
|
-
/**
|
|
120
|
-
* ------------------------------------------------------------------------
|
|
121
|
-
* Class Definition
|
|
122
|
-
* ------------------------------------------------------------------------
|
|
123
|
-
*/
|
|
124
57
|
|
|
125
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Class definition
|
|
60
|
+
*/
|
|
126
61
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
this.
|
|
132
|
-
this.
|
|
133
|
-
this._dialog = element.querySelector(Selector.DIALOG);
|
|
134
|
-
this._backdrop = null;
|
|
62
|
+
class Modal extends BaseComponent {
|
|
63
|
+
constructor(element, config) {
|
|
64
|
+
super(element, config);
|
|
65
|
+
this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
|
|
66
|
+
this._backdrop = this._initializeBackDrop();
|
|
67
|
+
this._focustrap = this._initializeFocusTrap();
|
|
135
68
|
this._isShown = false;
|
|
136
|
-
this._isBodyOverflowing = false;
|
|
137
|
-
this._ignoreBackdropClick = false;
|
|
138
69
|
this._isTransitioning = false;
|
|
139
|
-
this.
|
|
140
|
-
|
|
141
|
-
|
|
70
|
+
this._scrollBar = new ScrollBarHelper();
|
|
71
|
+
this._addEventListeners();
|
|
72
|
+
}
|
|
142
73
|
|
|
143
|
-
|
|
74
|
+
// Getters
|
|
75
|
+
static get Default() {
|
|
76
|
+
return Default;
|
|
77
|
+
}
|
|
78
|
+
static get DefaultType() {
|
|
79
|
+
return DefaultType;
|
|
80
|
+
}
|
|
81
|
+
static get NAME() {
|
|
82
|
+
return NAME;
|
|
83
|
+
}
|
|
144
84
|
|
|
145
85
|
// Public
|
|
146
|
-
|
|
86
|
+
toggle(relatedTarget) {
|
|
147
87
|
return this._isShown ? this.hide() : this.show(relatedTarget);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
_proto.show = function show(relatedTarget) {
|
|
151
|
-
var _this = this;
|
|
152
|
-
|
|
88
|
+
}
|
|
89
|
+
show(relatedTarget) {
|
|
153
90
|
if (this._isShown || this._isTransitioning) {
|
|
154
91
|
return;
|
|
155
92
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
this._isTransitioning = true;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
var showEvent = $.Event(Event.SHOW, {
|
|
162
|
-
relatedTarget: relatedTarget
|
|
93
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
|
|
94
|
+
relatedTarget
|
|
163
95
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (this._isShown || showEvent.isDefaultPrevented()) {
|
|
96
|
+
if (showEvent.defaultPrevented) {
|
|
167
97
|
return;
|
|
168
98
|
}
|
|
169
|
-
|
|
170
99
|
this._isShown = true;
|
|
171
|
-
|
|
172
|
-
this.
|
|
173
|
-
|
|
174
|
-
this._setScrollbar();
|
|
175
|
-
|
|
100
|
+
this._isTransitioning = true;
|
|
101
|
+
this._scrollBar.hide();
|
|
102
|
+
document.body.classList.add(CLASS_NAME_OPEN);
|
|
176
103
|
this._adjustDialog();
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this._setResizeEvent();
|
|
181
|
-
|
|
182
|
-
$(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
|
|
183
|
-
return _this.hide(event);
|
|
184
|
-
});
|
|
185
|
-
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
|
|
186
|
-
$(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
|
|
187
|
-
if ($(event.target).is(_this._element)) {
|
|
188
|
-
_this._ignoreBackdropClick = true;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
this._showBackdrop(function () {
|
|
194
|
-
return _this._showElement(relatedTarget);
|
|
195
|
-
});
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
_proto.hide = function hide(event) {
|
|
199
|
-
var _this2 = this;
|
|
200
|
-
|
|
201
|
-
if (event) {
|
|
202
|
-
event.preventDefault();
|
|
203
|
-
}
|
|
204
|
-
|
|
104
|
+
this._backdrop.show(() => this._showElement(relatedTarget));
|
|
105
|
+
}
|
|
106
|
+
hide() {
|
|
205
107
|
if (!this._isShown || this._isTransitioning) {
|
|
206
108
|
return;
|
|
207
109
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
$(this._element).trigger(hideEvent);
|
|
211
|
-
|
|
212
|
-
if (!this._isShown || hideEvent.isDefaultPrevented()) {
|
|
110
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
|
111
|
+
if (hideEvent.defaultPrevented) {
|
|
213
112
|
return;
|
|
214
113
|
}
|
|
215
|
-
|
|
216
114
|
this._isShown = false;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
this.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
$(this._dialog).off(Event.MOUSEDOWN_DISMISS);
|
|
231
|
-
|
|
232
|
-
if (transition) {
|
|
233
|
-
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
|
|
234
|
-
$(this._element).one(Util.TRANSITION_END, function (event) {
|
|
235
|
-
return _this2._hideModal(event);
|
|
236
|
-
}).emulateTransitionEnd(transitionDuration);
|
|
237
|
-
} else {
|
|
238
|
-
this._hideModal();
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
|
|
242
|
-
_proto.dispose = function dispose() {
|
|
243
|
-
[window, this._element, this._dialog].forEach(function (htmlElement) {
|
|
244
|
-
return $(htmlElement).off(EVENT_KEY);
|
|
245
|
-
});
|
|
246
|
-
/**
|
|
247
|
-
* `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
|
|
248
|
-
* Do not move `document` in `htmlElements` array
|
|
249
|
-
* It will remove `Event.CLICK_DATA_API` event that should remain
|
|
250
|
-
*/
|
|
251
|
-
|
|
252
|
-
$(document).off(Event.FOCUSIN);
|
|
253
|
-
$.removeData(this._element, DATA_KEY);
|
|
254
|
-
this._config = null;
|
|
255
|
-
this._element = null;
|
|
256
|
-
this._dialog = null;
|
|
257
|
-
this._backdrop = null;
|
|
258
|
-
this._isShown = null;
|
|
259
|
-
this._isBodyOverflowing = null;
|
|
260
|
-
this._ignoreBackdropClick = null;
|
|
261
|
-
this._isTransitioning = null;
|
|
262
|
-
this._scrollbarWidth = null;
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
_proto.handleUpdate = function handleUpdate() {
|
|
115
|
+
this._isTransitioning = true;
|
|
116
|
+
this._focustrap.deactivate();
|
|
117
|
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
118
|
+
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
|
|
119
|
+
}
|
|
120
|
+
dispose() {
|
|
121
|
+
EventHandler.off(window, EVENT_KEY);
|
|
122
|
+
EventHandler.off(this._dialog, EVENT_KEY);
|
|
123
|
+
this._backdrop.dispose();
|
|
124
|
+
this._focustrap.deactivate();
|
|
125
|
+
super.dispose();
|
|
126
|
+
}
|
|
127
|
+
handleUpdate() {
|
|
266
128
|
this._adjustDialog();
|
|
267
|
-
}
|
|
268
|
-
;
|
|
269
|
-
|
|
270
|
-
_proto._getConfig = function _getConfig(config) {
|
|
271
|
-
config = _objectSpread({}, Default, config);
|
|
272
|
-
Util.typeCheckConfig(NAME, config, DefaultType);
|
|
273
|
-
return config;
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
_proto._showElement = function _showElement(relatedTarget) {
|
|
277
|
-
var _this3 = this;
|
|
278
|
-
|
|
279
|
-
var transition = $(this._element).hasClass(ClassName.FADE);
|
|
129
|
+
}
|
|
280
130
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
131
|
+
// Private
|
|
132
|
+
_initializeBackDrop() {
|
|
133
|
+
return new Backdrop({
|
|
134
|
+
isVisible: Boolean(this._config.backdrop),
|
|
135
|
+
// 'static' option will be translated to true, and booleans will keep their value,
|
|
136
|
+
isAnimated: this._isAnimated()
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
_initializeFocusTrap() {
|
|
140
|
+
return new FocusTrap({
|
|
141
|
+
trapElement: this._element
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
_showElement(relatedTarget) {
|
|
145
|
+
// try to append dynamic modal
|
|
146
|
+
if (!document.body.contains(this._element)) {
|
|
147
|
+
document.body.append(this._element);
|
|
284
148
|
}
|
|
285
|
-
|
|
286
149
|
this._element.style.display = 'block';
|
|
287
|
-
|
|
288
150
|
this._element.removeAttribute('aria-hidden');
|
|
289
|
-
|
|
290
151
|
this._element.setAttribute('aria-modal', true);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
152
|
+
this._element.setAttribute('role', 'dialog');
|
|
153
|
+
this._element.scrollTop = 0;
|
|
154
|
+
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
|
|
155
|
+
if (modalBody) {
|
|
156
|
+
modalBody.scrollTop = 0;
|
|
296
157
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
$(this._element).addClass(ClassName.SHOW);
|
|
303
|
-
|
|
304
|
-
if (this._config.focus) {
|
|
305
|
-
this._enforceFocus();
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
var shownEvent = $.Event(Event.SHOWN, {
|
|
309
|
-
relatedTarget: relatedTarget
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
var transitionComplete = function transitionComplete() {
|
|
313
|
-
if (_this3._config.focus) {
|
|
314
|
-
_this3._element.focus();
|
|
158
|
+
index_js.reflow(this._element);
|
|
159
|
+
this._element.classList.add(CLASS_NAME_SHOW);
|
|
160
|
+
const transitionComplete = () => {
|
|
161
|
+
if (this._config.focus) {
|
|
162
|
+
this._focustrap.activate();
|
|
315
163
|
}
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
164
|
+
this._isTransitioning = false;
|
|
165
|
+
EventHandler.trigger(this._element, EVENT_SHOWN, {
|
|
166
|
+
relatedTarget
|
|
167
|
+
});
|
|
319
168
|
};
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
};
|
|
328
|
-
|
|
329
|
-
_proto._enforceFocus = function _enforceFocus() {
|
|
330
|
-
var _this4 = this;
|
|
331
|
-
|
|
332
|
-
$(document).off(Event.FOCUSIN) // Guard against infinite focus loop
|
|
333
|
-
.on(Event.FOCUSIN, function (event) {
|
|
334
|
-
if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
|
|
335
|
-
_this4._element.focus();
|
|
169
|
+
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
|
|
170
|
+
}
|
|
171
|
+
_addEventListeners() {
|
|
172
|
+
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
|
173
|
+
if (event.key !== ESCAPE_KEY) {
|
|
174
|
+
return;
|
|
336
175
|
}
|
|
176
|
+
if (this._config.keyboard) {
|
|
177
|
+
this.hide();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this._triggerBackdropTransition();
|
|
337
181
|
});
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
182
|
+
EventHandler.on(window, EVENT_RESIZE, () => {
|
|
183
|
+
if (this._isShown && !this._isTransitioning) {
|
|
184
|
+
this._adjustDialog();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
|
|
188
|
+
// a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
|
|
189
|
+
EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
|
|
190
|
+
if (this._element !== event.target || this._element !== event2.target) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (this._config.backdrop === 'static') {
|
|
194
|
+
this._triggerBackdropTransition();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (this._config.backdrop) {
|
|
198
|
+
this.hide();
|
|
349
199
|
}
|
|
350
200
|
});
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
_proto._setResizeEvent = function _setResizeEvent() {
|
|
357
|
-
var _this6 = this;
|
|
358
|
-
|
|
359
|
-
if (this._isShown) {
|
|
360
|
-
$(window).on(Event.RESIZE, function (event) {
|
|
361
|
-
return _this6.handleUpdate(event);
|
|
362
|
-
});
|
|
363
|
-
} else {
|
|
364
|
-
$(window).off(Event.RESIZE);
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
_proto._hideModal = function _hideModal() {
|
|
369
|
-
var _this7 = this;
|
|
370
|
-
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
_hideModal() {
|
|
371
204
|
this._element.style.display = 'none';
|
|
372
|
-
|
|
373
205
|
this._element.setAttribute('aria-hidden', true);
|
|
374
|
-
|
|
375
206
|
this._element.removeAttribute('aria-modal');
|
|
376
|
-
|
|
207
|
+
this._element.removeAttribute('role');
|
|
377
208
|
this._isTransitioning = false;
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
_this7._resetScrollbar();
|
|
385
|
-
|
|
386
|
-
$(_this7._element).trigger(Event.HIDDEN);
|
|
209
|
+
this._backdrop.hide(() => {
|
|
210
|
+
document.body.classList.remove(CLASS_NAME_OPEN);
|
|
211
|
+
this._resetAdjustments();
|
|
212
|
+
this._scrollBar.reset();
|
|
213
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
387
214
|
});
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
215
|
+
}
|
|
216
|
+
_isAnimated() {
|
|
217
|
+
return this._element.classList.contains(CLASS_NAME_FADE);
|
|
218
|
+
}
|
|
219
|
+
_triggerBackdropTransition() {
|
|
220
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
|
221
|
+
if (hideEvent.defaultPrevented) {
|
|
222
|
+
return;
|
|
394
223
|
}
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
|
|
401
|
-
|
|
402
|
-
if (this._isShown && this._config.backdrop) {
|
|
403
|
-
this._backdrop = document.createElement('div');
|
|
404
|
-
this._backdrop.className = ClassName.BACKDROP;
|
|
405
|
-
|
|
406
|
-
if (animate) {
|
|
407
|
-
this._backdrop.classList.add(animate);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
$(this._backdrop).appendTo(document.body);
|
|
411
|
-
$(this._element).on(Event.CLICK_DISMISS, function (event) {
|
|
412
|
-
if (_this8._ignoreBackdropClick) {
|
|
413
|
-
_this8._ignoreBackdropClick = false;
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
if (event.target !== event.currentTarget) {
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
if (_this8._config.backdrop === 'static') {
|
|
422
|
-
_this8._element.focus();
|
|
423
|
-
} else {
|
|
424
|
-
_this8.hide();
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
if (animate) {
|
|
429
|
-
Util.reflow(this._backdrop);
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
$(this._backdrop).addClass(ClassName.SHOW);
|
|
433
|
-
|
|
434
|
-
if (!callback) {
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
if (!animate) {
|
|
439
|
-
callback();
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
|
444
|
-
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
|
|
445
|
-
} else if (!this._isShown && this._backdrop) {
|
|
446
|
-
$(this._backdrop).removeClass(ClassName.SHOW);
|
|
447
|
-
|
|
448
|
-
var callbackRemove = function callbackRemove() {
|
|
449
|
-
_this8._removeBackdrop();
|
|
450
|
-
|
|
451
|
-
if (callback) {
|
|
452
|
-
callback();
|
|
453
|
-
}
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
if ($(this._element).hasClass(ClassName.FADE)) {
|
|
457
|
-
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
|
|
458
|
-
|
|
459
|
-
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
|
|
460
|
-
} else {
|
|
461
|
-
callbackRemove();
|
|
462
|
-
}
|
|
463
|
-
} else if (callback) {
|
|
464
|
-
callback();
|
|
224
|
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
|
225
|
+
const initialOverflowY = this._element.style.overflowY;
|
|
226
|
+
// return if the following background transition hasn't yet completed
|
|
227
|
+
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
|
|
228
|
+
return;
|
|
465
229
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
230
|
+
if (!isModalOverflowing) {
|
|
231
|
+
this._element.style.overflowY = 'hidden';
|
|
232
|
+
}
|
|
233
|
+
this._element.classList.add(CLASS_NAME_STATIC);
|
|
234
|
+
this._queueCallback(() => {
|
|
235
|
+
this._element.classList.remove(CLASS_NAME_STATIC);
|
|
236
|
+
this._queueCallback(() => {
|
|
237
|
+
this._element.style.overflowY = initialOverflowY;
|
|
238
|
+
}, this._dialog);
|
|
239
|
+
}, this._dialog);
|
|
240
|
+
this._element.focus();
|
|
241
|
+
}
|
|
471
242
|
|
|
472
|
-
|
|
473
|
-
|
|
243
|
+
/**
|
|
244
|
+
* The following methods are used to handle overflowing modals
|
|
245
|
+
*/
|
|
474
246
|
|
|
475
|
-
|
|
476
|
-
|
|
247
|
+
_adjustDialog() {
|
|
248
|
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
|
249
|
+
const scrollbarWidth = this._scrollBar.getWidth();
|
|
250
|
+
const isBodyOverflowing = scrollbarWidth > 0;
|
|
251
|
+
if (isBodyOverflowing && !isModalOverflowing) {
|
|
252
|
+
const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';
|
|
253
|
+
this._element.style[property] = `${scrollbarWidth}px`;
|
|
477
254
|
}
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
this._element.style
|
|
255
|
+
if (!isBodyOverflowing && isModalOverflowing) {
|
|
256
|
+
const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';
|
|
257
|
+
this._element.style[property] = `${scrollbarWidth}px`;
|
|
481
258
|
}
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
_proto._resetAdjustments = function _resetAdjustments() {
|
|
259
|
+
}
|
|
260
|
+
_resetAdjustments() {
|
|
485
261
|
this._element.style.paddingLeft = '';
|
|
486
262
|
this._element.style.paddingRight = '';
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
_proto._checkScrollbar = function _checkScrollbar() {
|
|
490
|
-
var rect = document.body.getBoundingClientRect();
|
|
491
|
-
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
|
|
492
|
-
this._scrollbarWidth = this._getScrollbarWidth();
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
_proto._setScrollbar = function _setScrollbar() {
|
|
496
|
-
var _this9 = this;
|
|
497
|
-
|
|
498
|
-
if (this._isBodyOverflowing) {
|
|
499
|
-
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
|
500
|
-
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
|
|
501
|
-
var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
|
|
502
|
-
var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding
|
|
503
|
-
|
|
504
|
-
$(fixedContent).each(function (index, element) {
|
|
505
|
-
var actualPadding = element.style.paddingRight;
|
|
506
|
-
var calculatedPadding = $(element).css('padding-right');
|
|
507
|
-
$(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
|
|
508
|
-
}); // Adjust sticky content margin
|
|
509
|
-
|
|
510
|
-
$(stickyContent).each(function (index, element) {
|
|
511
|
-
var actualMargin = element.style.marginRight;
|
|
512
|
-
var calculatedMargin = $(element).css('margin-right');
|
|
513
|
-
$(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
|
|
514
|
-
}); // Adjust body padding
|
|
515
|
-
|
|
516
|
-
var actualPadding = document.body.style.paddingRight;
|
|
517
|
-
var calculatedPadding = $(document.body).css('padding-right');
|
|
518
|
-
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
$(document.body).addClass(ClassName.OPEN);
|
|
522
|
-
};
|
|
523
|
-
|
|
524
|
-
_proto._resetScrollbar = function _resetScrollbar() {
|
|
525
|
-
// Restore fixed content padding
|
|
526
|
-
var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
|
|
527
|
-
$(fixedContent).each(function (index, element) {
|
|
528
|
-
var padding = $(element).data('padding-right');
|
|
529
|
-
$(element).removeData('padding-right');
|
|
530
|
-
element.style.paddingRight = padding ? padding : '';
|
|
531
|
-
}); // Restore sticky content
|
|
532
|
-
|
|
533
|
-
var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT));
|
|
534
|
-
$(elements).each(function (index, element) {
|
|
535
|
-
var margin = $(element).data('margin-right');
|
|
536
|
-
|
|
537
|
-
if (typeof margin !== 'undefined') {
|
|
538
|
-
$(element).css('margin-right', margin).removeData('margin-right');
|
|
539
|
-
}
|
|
540
|
-
}); // Restore body padding
|
|
541
|
-
|
|
542
|
-
var padding = $(document.body).data('padding-right');
|
|
543
|
-
$(document.body).removeData('padding-right');
|
|
544
|
-
document.body.style.paddingRight = padding ? padding : '';
|
|
545
|
-
};
|
|
546
|
-
|
|
547
|
-
_proto._getScrollbarWidth = function _getScrollbarWidth() {
|
|
548
|
-
// thx d.walsh
|
|
549
|
-
var scrollDiv = document.createElement('div');
|
|
550
|
-
scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
|
|
551
|
-
document.body.appendChild(scrollDiv);
|
|
552
|
-
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
|
|
553
|
-
document.body.removeChild(scrollDiv);
|
|
554
|
-
return scrollbarWidth;
|
|
555
|
-
} // Static
|
|
556
|
-
;
|
|
263
|
+
}
|
|
557
264
|
|
|
558
|
-
|
|
265
|
+
// Static
|
|
266
|
+
static jQueryInterface(config, relatedTarget) {
|
|
559
267
|
return this.each(function () {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
if (!data) {
|
|
565
|
-
data = new Modal(this, _config);
|
|
566
|
-
$(this).data(DATA_KEY, data);
|
|
268
|
+
const data = Modal.getOrCreateInstance(this, config);
|
|
269
|
+
if (typeof config !== 'string') {
|
|
270
|
+
return;
|
|
567
271
|
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
if (typeof data[config] === 'undefined') {
|
|
571
|
-
throw new TypeError("No method named \"" + config + "\"");
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
data[config](relatedTarget);
|
|
575
|
-
} else if (_config.show) {
|
|
576
|
-
data.show(relatedTarget);
|
|
272
|
+
if (typeof data[config] === 'undefined') {
|
|
273
|
+
throw new TypeError(`No method named "${config}"`);
|
|
577
274
|
}
|
|
275
|
+
data[config](relatedTarget);
|
|
578
276
|
});
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
_createClass(Modal, null, [{
|
|
582
|
-
key: "VERSION",
|
|
583
|
-
get: function get() {
|
|
584
|
-
return VERSION;
|
|
585
|
-
}
|
|
586
|
-
}, {
|
|
587
|
-
key: "Default",
|
|
588
|
-
get: function get() {
|
|
589
|
-
return Default;
|
|
590
|
-
}
|
|
591
|
-
}]);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
592
279
|
|
|
593
|
-
return Modal;
|
|
594
|
-
}();
|
|
595
280
|
/**
|
|
596
|
-
*
|
|
597
|
-
* Data Api implementation
|
|
598
|
-
* ------------------------------------------------------------------------
|
|
281
|
+
* Data API implementation
|
|
599
282
|
*/
|
|
600
283
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
var target;
|
|
606
|
-
var selector = Util.getSelectorFromElement(this);
|
|
607
|
-
|
|
608
|
-
if (selector) {
|
|
609
|
-
target = document.querySelector(selector);
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
|
|
613
|
-
|
|
614
|
-
if (this.tagName === 'A' || this.tagName === 'AREA') {
|
|
284
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
285
|
+
const target = SelectorEngine.getElementFromSelector(this);
|
|
286
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
615
287
|
event.preventDefault();
|
|
616
288
|
}
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
// Only register focus restorer if modal will actually get shown
|
|
289
|
+
EventHandler.one(target, EVENT_SHOW, showEvent => {
|
|
290
|
+
if (showEvent.defaultPrevented) {
|
|
291
|
+
// only register focus restorer if modal will actually get shown
|
|
621
292
|
return;
|
|
622
293
|
}
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
_this10.focus();
|
|
294
|
+
EventHandler.one(target, EVENT_HIDDEN, () => {
|
|
295
|
+
if (index_js.isVisible(this)) {
|
|
296
|
+
this.focus();
|
|
627
297
|
}
|
|
628
298
|
});
|
|
629
299
|
});
|
|
630
300
|
|
|
631
|
-
|
|
301
|
+
// avoid conflict when clicking modal toggler while another one is open
|
|
302
|
+
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
|
|
303
|
+
if (alreadyOpen) {
|
|
304
|
+
Modal.getInstance(alreadyOpen).hide();
|
|
305
|
+
}
|
|
306
|
+
const data = Modal.getOrCreateInstance(target);
|
|
307
|
+
data.toggle(this);
|
|
632
308
|
});
|
|
309
|
+
componentFunctions_js.enableDismissTrigger(Modal);
|
|
310
|
+
|
|
633
311
|
/**
|
|
634
|
-
* ------------------------------------------------------------------------
|
|
635
312
|
* jQuery
|
|
636
|
-
* ------------------------------------------------------------------------
|
|
637
313
|
*/
|
|
638
314
|
|
|
639
|
-
|
|
640
|
-
$.fn[NAME].Constructor = Modal;
|
|
641
|
-
|
|
642
|
-
$.fn[NAME].noConflict = function () {
|
|
643
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
644
|
-
return Modal._jQueryInterface;
|
|
645
|
-
};
|
|
315
|
+
index_js.defineJQueryPlugin(Modal);
|
|
646
316
|
|
|
647
317
|
return Modal;
|
|
648
318
|
|