bootstrap 4.0.0.beta3 → 4.6.2

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.
Files changed (114) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -2
  4. data/README.md +2 -2
  5. data/Rakefile +4 -2
  6. data/assets/javascripts/bootstrap/alert.js +79 -68
  7. data/assets/javascripts/bootstrap/button.js +140 -78
  8. data/assets/javascripts/bootstrap/carousel.js +294 -158
  9. data/assets/javascripts/bootstrap/collapse.js +157 -133
  10. data/assets/javascripts/bootstrap/dropdown.js +257 -167
  11. data/assets/javascripts/bootstrap/modal.js +285 -204
  12. data/assets/javascripts/bootstrap/popover.js +101 -60
  13. data/assets/javascripts/bootstrap/scrollspy.js +127 -106
  14. data/assets/javascripts/bootstrap/tab.js +113 -101
  15. data/assets/javascripts/bootstrap/toast.js +267 -0
  16. data/assets/javascripts/bootstrap/tooltip.js +406 -188
  17. data/assets/javascripts/bootstrap/util.js +106 -55
  18. data/assets/javascripts/bootstrap-sprockets.js +1 -0
  19. data/assets/javascripts/bootstrap.js +1946 -1482
  20. data/assets/javascripts/bootstrap.min.js +4 -4
  21. data/assets/stylesheets/_bootstrap-grid.scss +7 -12
  22. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  23. data/assets/stylesheets/_bootstrap.scss +6 -4
  24. data/assets/stylesheets/bootstrap/_alert.scss +3 -2
  25. data/assets/stylesheets/bootstrap/_badge.scss +8 -1
  26. data/assets/stylesheets/bootstrap/_breadcrumb.scss +10 -6
  27. data/assets/stylesheets/bootstrap/_button-group.scss +17 -20
  28. data/assets/stylesheets/bootstrap/_buttons.scss +23 -28
  29. data/assets/stylesheets/bootstrap/_card.scss +77 -61
  30. data/assets/stylesheets/bootstrap/_carousel.scss +72 -63
  31. data/assets/stylesheets/bootstrap/_close.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_code.scss +6 -14
  33. data/assets/stylesheets/bootstrap/_custom-forms.scss +287 -43
  34. data/assets/stylesheets/bootstrap/_dropdown.scss +70 -9
  35. data/assets/stylesheets/bootstrap/_forms.scss +56 -42
  36. data/assets/stylesheets/bootstrap/_functions.scss +117 -13
  37. data/assets/stylesheets/bootstrap/_grid.scss +32 -11
  38. data/assets/stylesheets/bootstrap/_images.scss +4 -4
  39. data/assets/stylesheets/bootstrap/_input-group.scss +80 -25
  40. data/assets/stylesheets/bootstrap/_jumbotron.scss +2 -1
  41. data/assets/stylesheets/bootstrap/_list-group.scss +63 -24
  42. data/assets/stylesheets/bootstrap/_mixins.scss +9 -4
  43. data/assets/stylesheets/bootstrap/_modal.scss +96 -24
  44. data/assets/stylesheets/bootstrap/_nav.scss +14 -7
  45. data/assets/stylesheets/bootstrap/_navbar.scss +66 -45
  46. data/assets/stylesheets/bootstrap/_pagination.scss +10 -8
  47. data/assets/stylesheets/bootstrap/_popover.scss +56 -69
  48. data/assets/stylesheets/bootstrap/_print.scss +41 -19
  49. data/assets/stylesheets/bootstrap/_progress.scss +20 -6
  50. data/assets/stylesheets/bootstrap/_reboot.scss +88 -109
  51. data/assets/stylesheets/bootstrap/_spinners.scss +65 -0
  52. data/assets/stylesheets/bootstrap/_tables.scss +19 -14
  53. data/assets/stylesheets/bootstrap/_toasts.scss +46 -0
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +6 -6
  55. data/assets/stylesheets/bootstrap/_transitions.scss +10 -20
  56. data/assets/stylesheets/bootstrap/_type.scss +19 -19
  57. data/assets/stylesheets/bootstrap/_utilities.scss +4 -0
  58. data/assets/stylesheets/bootstrap/_variables.scss +492 -215
  59. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  60. data/assets/stylesheets/bootstrap/mixins/_badge.scss +8 -3
  61. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +51 -10
  62. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +16 -1
  63. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -9
  64. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +35 -26
  65. data/assets/stylesheets/bootstrap/mixins/_caret.scss +13 -16
  66. data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
  67. data/assets/stylesheets/bootstrap/mixins/_float.scss +6 -3
  68. data/assets/stylesheets/bootstrap/mixins/_forms.scss +102 -40
  69. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +7 -7
  70. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +36 -25
  71. data/assets/stylesheets/bootstrap/mixins/_grid.scss +34 -17
  72. data/assets/stylesheets/bootstrap/mixins/_hover.scss +27 -51
  73. data/assets/stylesheets/bootstrap/mixins/_image.scss +4 -4
  74. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +10 -13
  75. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +3 -2
  77. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +1 -1
  78. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
  79. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -6
  80. data/assets/stylesheets/bootstrap/mixins/_size.scss +1 -0
  81. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +11 -2
  82. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +7 -4
  83. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +3 -1
  84. data/assets/stylesheets/bootstrap/mixins/_transition.scss +20 -3
  85. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +1 -0
  86. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  87. data/assets/stylesheets/bootstrap/utilities/_borders.scss +23 -2
  88. data/assets/stylesheets/bootstrap/utilities/_display.scss +6 -36
  89. data/assets/stylesheets/bootstrap/utilities/_embed.scss +7 -20
  90. data/assets/stylesheets/bootstrap/utilities/_flex.scss +5 -0
  91. data/assets/stylesheets/bootstrap/utilities/_float.scss +5 -3
  92. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  93. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +5 -0
  94. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -4
  95. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +6 -0
  96. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +8 -0
  97. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +23 -1
  98. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +19 -0
  99. data/assets/stylesheets/bootstrap/utilities/_text.scss +28 -8
  100. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +4 -2
  101. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +228 -0
  102. data/bootstrap.gemspec +7 -4
  103. data/lib/bootstrap/engine.rb +3 -0
  104. data/lib/bootstrap/version.rb +4 -2
  105. data/lib/bootstrap.rb +10 -7
  106. data/tasks/updater/js.rb +18 -6
  107. data/tasks/updater/network.rb +8 -2
  108. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  109. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  110. data/test/gemfiles/rails_6_0.gemfile +7 -0
  111. data/test/support/dummy_rails_integration.rb +3 -1
  112. data/test/test_helper.rb +21 -15
  113. metadata +29 -16
  114. data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 12ec82c20064a195af9678234b5c6b3d2119671c
4
- data.tar.gz: 853bdd71f1c84bf68b7f461136ec235e14d4dc0c
2
+ SHA256:
3
+ metadata.gz: 26f3252ccbfe53a40fd0cdf9d0d9f3d717dcf854d19a9535c903cd072796313d
4
+ data.tar.gz: bce01fe328a2cd98599d10c0ee56a356754159bc49ecf99593652ae227f29210
5
5
  SHA512:
6
- metadata.gz: 88f3b52d9873b5d627611beb3509dabaf6c8870b387ededa5c4216dc9bc82ce7575d5df394bd26e0b616128c8dd416a537683e7720c9a73ffed140db74454a41
7
- data.tar.gz: b046a683d8ccc5bd518e40b1f0b9efdb514e4ffb0a61ec094a3f985dc2af2389fa762baa02eecd23e1f081d3fc28854c7fbb639d9cae796716537f51d894f543
6
+ metadata.gz: c303b1722240f8db43117ae7b11680738e3f5dc1a0f41d65e3e0ddda579ec10d13f80e210e8e15819e56230844962325fd470b3fc0add59ee44441f0b15f7681
7
+ data.tar.gz: 3e74aa08bcbdf56c5ee25eda907c2b4a57a67abc2bef1ce02485e4aab3c3067e7119f847fb3bb6d3c7278680c0ce46b7950d614e899ccbb8e701b9f06fccfafc
data/.travis.yml CHANGED
@@ -1,11 +1,25 @@
1
1
  language: ruby
2
2
  sudo: false
3
+ addons:
4
+ apt:
5
+ packages:
6
+ - chromium-browser
3
7
  rvm:
4
- - 2.3.1
8
+ - 2.5
9
+ - 2.6
10
+ - 2.7
11
+
5
12
  gemfile:
6
13
  - test/gemfiles/rails_4_2.gemfile
7
14
  - test/gemfiles/rails_5_0.gemfile
8
15
  - test/gemfiles/rails_5_1.gemfile
16
+ - test/gemfiles/rails_6_0.gemfile
17
+
18
+ jobs:
19
+ exclude:
20
+ rvm: 2.7
21
+ gemfile: test/gemfiles/rails_4_2.gemfile
22
+
9
23
  cache: bundler
10
24
  bundler_args: --path ../../vendor/bundle --without debug
11
25
  notifications:
data/CHANGELOG.md CHANGED
@@ -6,9 +6,9 @@ The changelog only includes changes specific to the RubyGem.
6
6
  The Bootstrap framework changes can be found in [the Releases section of twbs/bootstrap](https://github.com/twbs/bootstrap/releases).
7
7
  Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release of Bootstrap.
8
8
 
9
- # 4.0.0.beta3
9
+ # 4.2.1
10
10
 
11
- No gem-specific changes.
11
+ * Bootstrap rubygem now depends on SassC instead of Sass.
12
12
 
13
13
  # 4.0.0.beta2.1
14
14
 
data/README.md CHANGED
@@ -17,7 +17,7 @@ Please see the appropriate guide for your environment of choice:
17
17
  Add `bootstrap` to your Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'bootstrap', '~> 4.0.0.beta3'
20
+ gem 'bootstrap', '~> 4.6.2'
21
21
  ```
22
22
 
23
23
  Ensure that `sprockets-rails` is at least v2.3.2.
@@ -105,7 +105,7 @@ In the application Sass file, replace `@import 'bootstrap'` with:
105
105
  @import 'bootstrap-custom';
106
106
  ```
107
107
 
108
- [bootstrap-home]: http://v4-alpha.getbootstrap.com/
108
+ [bootstrap-home]: https://getbootstrap.com
109
109
  [bootstrap-variables.scss]: https://github.com/twbs/bootstrap-rubygem/blob/master/templates/project/_bootstrap-variables.scss
110
110
  [autoprefixer]: https://github.com/ai/autoprefixer
111
111
  [popper.js]: https://popper.js.org
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+
1
3
  lib_path = File.join(File.dirname(__FILE__), 'lib')
2
4
  $:.unshift(lib_path) unless $:.include?(lib_path)
3
5
 
@@ -43,13 +45,13 @@ end
43
45
 
44
46
  desc 'Dumps output to a CSS file for testing'
45
47
  task :debug do
46
- require 'sass'
48
+ require 'sassc'
47
49
  require './lib/bootstrap'
48
50
  require 'term/ansicolor'
49
51
  require 'autoprefixer-rails'
50
52
  path = Bootstrap.stylesheets_path
51
53
  %w(_bootstrap _bootstrap-reboot _bootstrap-grid).each do |file|
52
- engine = Sass::Engine.for_file("#{path}/#{file}.scss", syntax: :scss, load_paths: [path])
54
+ engine = SassC::Engine.new(File.read("#{path}/#{file}.scss"), syntax: :scss, load_paths: [path])
53
55
  out = File.join('tmp', "#{file[1..-1]}.css")
54
56
  css = engine.render
55
57
  css = AutoprefixerRails.process(css)
@@ -1,61 +1,74 @@
1
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
1
+ /*!
2
+ * Bootstrap alert.js v4.6.2 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
8
+ typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.jQuery, global.Util));
10
+ })(this, (function ($, Util) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
+ var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
16
+
17
+ function _defineProperties(target, props) {
18
+ for (var i = 0; i < props.length; i++) {
19
+ var descriptor = props[i];
20
+ descriptor.enumerable = descriptor.enumerable || false;
21
+ descriptor.configurable = true;
22
+ if ("value" in descriptor) descriptor.writable = true;
23
+ Object.defineProperty(target, descriptor.key, descriptor);
24
+ }
25
+ }
26
+
27
+ function _createClass(Constructor, protoProps, staticProps) {
28
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
29
+ if (staticProps) _defineProperties(Constructor, staticProps);
30
+ Object.defineProperty(Constructor, "prototype", {
31
+ writable: false
32
+ });
33
+ return Constructor;
34
+ }
2
35
 
3
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
4
-
5
- /**
6
- * --------------------------------------------------------------------------
7
- * Bootstrap (v4.0.0-beta.3): alert.js
8
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9
- * --------------------------------------------------------------------------
10
- */
11
- var Alert = function ($) {
12
36
  /**
13
- * ------------------------------------------------------------------------
14
37
  * Constants
15
- * ------------------------------------------------------------------------
16
38
  */
39
+
17
40
  var NAME = 'alert';
18
- var VERSION = '4.0.0-beta.3';
41
+ var VERSION = '4.6.2';
19
42
  var DATA_KEY = 'bs.alert';
20
43
  var EVENT_KEY = "." + DATA_KEY;
21
44
  var DATA_API_KEY = '.data-api';
22
- var JQUERY_NO_CONFLICT = $.fn[NAME];
23
- var TRANSITION_DURATION = 150;
24
- var Selector = {
25
- DISMISS: '[data-dismiss="alert"]'
26
- };
27
- var Event = {
28
- CLOSE: "close" + EVENT_KEY,
29
- CLOSED: "closed" + EVENT_KEY,
30
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
31
- };
32
- var ClassName = {
33
- ALERT: 'alert',
34
- FADE: 'fade',
35
- SHOW: 'show'
36
- /**
37
- * ------------------------------------------------------------------------
38
- * Class Definition
39
- * ------------------------------------------------------------------------
40
- */
41
-
42
- };
45
+ var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
46
+ var CLASS_NAME_ALERT = 'alert';
47
+ var CLASS_NAME_FADE = 'fade';
48
+ var CLASS_NAME_SHOW = 'show';
49
+ var EVENT_CLOSE = "close" + EVENT_KEY;
50
+ var EVENT_CLOSED = "closed" + EVENT_KEY;
51
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
52
+ var SELECTOR_DISMISS = '[data-dismiss="alert"]';
53
+ /**
54
+ * Class definition
55
+ */
43
56
 
44
- var Alert =
45
- /*#__PURE__*/
46
- function () {
57
+ var Alert = /*#__PURE__*/function () {
47
58
  function Alert(element) {
48
59
  this._element = element;
49
- } // getters
60
+ } // Getters
50
61
 
51
62
 
52
63
  var _proto = Alert.prototype;
53
64
 
54
- // public
65
+ // Public
55
66
  _proto.close = function close(element) {
56
- element = element || this._element;
67
+ var rootElement = this._element;
57
68
 
58
- var rootElement = this._getRootElement(element);
69
+ if (element) {
70
+ rootElement = this._getRootElement(element);
71
+ }
59
72
 
60
73
  var customEvent = this._triggerCloseEvent(rootElement);
61
74
 
@@ -67,56 +80,57 @@ var Alert = function ($) {
67
80
  };
68
81
 
69
82
  _proto.dispose = function dispose() {
70
- $.removeData(this._element, DATA_KEY);
83
+ $__default["default"].removeData(this._element, DATA_KEY);
71
84
  this._element = null;
72
- }; // private
73
-
85
+ } // Private
86
+ ;
74
87
 
75
88
  _proto._getRootElement = function _getRootElement(element) {
76
- var selector = Util.getSelectorFromElement(element);
89
+ var selector = Util__default["default"].getSelectorFromElement(element);
77
90
  var parent = false;
78
91
 
79
92
  if (selector) {
80
- parent = $(selector)[0];
93
+ parent = document.querySelector(selector);
81
94
  }
82
95
 
83
96
  if (!parent) {
84
- parent = $(element).closest("." + ClassName.ALERT)[0];
97
+ parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
85
98
  }
86
99
 
87
100
  return parent;
88
101
  };
89
102
 
90
103
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
91
- var closeEvent = $.Event(Event.CLOSE);
92
- $(element).trigger(closeEvent);
104
+ var closeEvent = $__default["default"].Event(EVENT_CLOSE);
105
+ $__default["default"](element).trigger(closeEvent);
93
106
  return closeEvent;
94
107
  };
95
108
 
96
109
  _proto._removeElement = function _removeElement(element) {
97
110
  var _this = this;
98
111
 
99
- $(element).removeClass(ClassName.SHOW);
112
+ $__default["default"](element).removeClass(CLASS_NAME_SHOW);
100
113
 
101
- if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
114
+ if (!$__default["default"](element).hasClass(CLASS_NAME_FADE)) {
102
115
  this._destroyElement(element);
103
116
 
104
117
  return;
105
118
  }
106
119
 
107
- $(element).one(Util.TRANSITION_END, function (event) {
120
+ var transitionDuration = Util__default["default"].getTransitionDurationFromElement(element);
121
+ $__default["default"](element).one(Util__default["default"].TRANSITION_END, function (event) {
108
122
  return _this._destroyElement(element, event);
109
- }).emulateTransitionEnd(TRANSITION_DURATION);
123
+ }).emulateTransitionEnd(transitionDuration);
110
124
  };
111
125
 
112
126
  _proto._destroyElement = function _destroyElement(element) {
113
- $(element).detach().trigger(Event.CLOSED).remove();
114
- }; // static
115
-
127
+ $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
128
+ } // Static
129
+ ;
116
130
 
117
131
  Alert._jQueryInterface = function _jQueryInterface(config) {
118
132
  return this.each(function () {
119
- var $element = $(this);
133
+ var $element = $__default["default"](this);
120
134
  var data = $element.data(DATA_KEY);
121
135
 
122
136
  if (!data) {
@@ -150,26 +164,23 @@ var Alert = function ($) {
150
164
  return Alert;
151
165
  }();
152
166
  /**
153
- * ------------------------------------------------------------------------
154
- * Data Api implementation
155
- * ------------------------------------------------------------------------
167
+ * Data API implementation
156
168
  */
157
169
 
158
170
 
159
- $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
171
+ $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
160
172
  /**
161
- * ------------------------------------------------------------------------
162
173
  * jQuery
163
- * ------------------------------------------------------------------------
164
174
  */
165
175
 
166
- $.fn[NAME] = Alert._jQueryInterface;
167
- $.fn[NAME].Constructor = Alert;
176
+ $__default["default"].fn[NAME] = Alert._jQueryInterface;
177
+ $__default["default"].fn[NAME].Constructor = Alert;
168
178
 
169
- $.fn[NAME].noConflict = function () {
170
- $.fn[NAME] = JQUERY_NO_CONFLICT;
179
+ $__default["default"].fn[NAME].noConflict = function () {
180
+ $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
171
181
  return Alert._jQueryInterface;
172
182
  };
173
183
 
174
184
  return Alert;
175
- }($);
185
+
186
+ }));
@@ -1,87 +1,104 @@
1
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
1
+ /*!
2
+ * Bootstrap button.js v4.6.2 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
8
+ typeof define === 'function' && define.amd ? define(['jquery'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.jQuery));
10
+ })(this, (function ($) { 'use strict';
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
+
16
+ function _defineProperties(target, props) {
17
+ for (var i = 0; i < props.length; i++) {
18
+ var descriptor = props[i];
19
+ descriptor.enumerable = descriptor.enumerable || false;
20
+ descriptor.configurable = true;
21
+ if ("value" in descriptor) descriptor.writable = true;
22
+ Object.defineProperty(target, descriptor.key, descriptor);
23
+ }
24
+ }
2
25
 
3
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
26
+ function _createClass(Constructor, protoProps, staticProps) {
27
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
+ if (staticProps) _defineProperties(Constructor, staticProps);
29
+ Object.defineProperty(Constructor, "prototype", {
30
+ writable: false
31
+ });
32
+ return Constructor;
33
+ }
4
34
 
5
- /**
6
- * --------------------------------------------------------------------------
7
- * Bootstrap (v4.0.0-beta.3): button.js
8
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9
- * --------------------------------------------------------------------------
10
- */
11
- var Button = function ($) {
12
35
  /**
13
- * ------------------------------------------------------------------------
14
36
  * Constants
15
- * ------------------------------------------------------------------------
16
37
  */
38
+
17
39
  var NAME = 'button';
18
- var VERSION = '4.0.0-beta.3';
40
+ var VERSION = '4.6.2';
19
41
  var DATA_KEY = 'bs.button';
20
42
  var EVENT_KEY = "." + DATA_KEY;
21
43
  var DATA_API_KEY = '.data-api';
22
- var JQUERY_NO_CONFLICT = $.fn[NAME];
23
- var ClassName = {
24
- ACTIVE: 'active',
25
- BUTTON: 'btn',
26
- FOCUS: 'focus'
27
- };
28
- var Selector = {
29
- DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
30
- DATA_TOGGLE: '[data-toggle="buttons"]',
31
- INPUT: 'input',
32
- ACTIVE: '.active',
33
- BUTTON: '.btn'
34
- };
35
- var Event = {
36
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
37
- FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY)
38
- /**
39
- * ------------------------------------------------------------------------
40
- * Class Definition
41
- * ------------------------------------------------------------------------
42
- */
43
-
44
- };
44
+ var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
45
+ var CLASS_NAME_ACTIVE = 'active';
46
+ var CLASS_NAME_BUTTON = 'btn';
47
+ var CLASS_NAME_FOCUS = 'focus';
48
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
49
+ var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY);
50
+ var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
51
+ var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
52
+ var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
53
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
54
+ var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
55
+ var SELECTOR_INPUT = 'input:not([type="hidden"])';
56
+ var SELECTOR_ACTIVE = '.active';
57
+ var SELECTOR_BUTTON = '.btn';
58
+ /**
59
+ * Class definition
60
+ */
45
61
 
46
- var Button =
47
- /*#__PURE__*/
48
- function () {
62
+ var Button = /*#__PURE__*/function () {
49
63
  function Button(element) {
50
64
  this._element = element;
51
- } // getters
65
+ this.shouldAvoidTriggerChange = false;
66
+ } // Getters
52
67
 
53
68
 
54
69
  var _proto = Button.prototype;
55
70
 
56
- // public
71
+ // Public
57
72
  _proto.toggle = function toggle() {
58
73
  var triggerChangeEvent = true;
59
74
  var addAriaPressed = true;
60
- var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
75
+ var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
61
76
 
62
77
  if (rootElement) {
63
- var input = $(this._element).find(Selector.INPUT)[0];
78
+ var input = this._element.querySelector(SELECTOR_INPUT);
64
79
 
65
80
  if (input) {
66
81
  if (input.type === 'radio') {
67
- if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
82
+ if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
68
83
  triggerChangeEvent = false;
69
84
  } else {
70
- var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
85
+ var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
71
86
 
72
87
  if (activeElement) {
73
- $(activeElement).removeClass(ClassName.ACTIVE);
88
+ $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE);
74
89
  }
75
90
  }
76
91
  }
77
92
 
78
93
  if (triggerChangeEvent) {
79
- if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
80
- return;
94
+ // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
95
+ if (input.type === 'checkbox' || input.type === 'radio') {
96
+ input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
81
97
  }
82
98
 
83
- input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
84
- $(input).trigger('change');
99
+ if (!this.shouldAvoidTriggerChange) {
100
+ $__default["default"](input).trigger('change');
101
+ }
85
102
  }
86
103
 
87
104
  input.focus();
@@ -89,30 +106,35 @@ var Button = function ($) {
89
106
  }
90
107
  }
91
108
 
92
- if (addAriaPressed) {
93
- this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
94
- }
109
+ if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
110
+ if (addAriaPressed) {
111
+ this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
112
+ }
95
113
 
96
- if (triggerChangeEvent) {
97
- $(this._element).toggleClass(ClassName.ACTIVE);
114
+ if (triggerChangeEvent) {
115
+ $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE);
116
+ }
98
117
  }
99
118
  };
100
119
 
101
120
  _proto.dispose = function dispose() {
102
- $.removeData(this._element, DATA_KEY);
121
+ $__default["default"].removeData(this._element, DATA_KEY);
103
122
  this._element = null;
104
- }; // static
123
+ } // Static
124
+ ;
105
125
 
106
-
107
- Button._jQueryInterface = function _jQueryInterface(config) {
126
+ Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
108
127
  return this.each(function () {
109
- var data = $(this).data(DATA_KEY);
128
+ var $element = $__default["default"](this);
129
+ var data = $element.data(DATA_KEY);
110
130
 
111
131
  if (!data) {
112
132
  data = new Button(this);
113
- $(this).data(DATA_KEY, data);
133
+ $element.data(DATA_KEY, data);
114
134
  }
115
135
 
136
+ data.shouldAvoidTriggerChange = avoidTriggerChange;
137
+
116
138
  if (config === 'toggle') {
117
139
  data[config]();
118
140
  }
@@ -129,38 +151,78 @@ var Button = function ($) {
129
151
  return Button;
130
152
  }();
131
153
  /**
132
- * ------------------------------------------------------------------------
133
- * Data Api implementation
134
- * ------------------------------------------------------------------------
154
+ * Data API implementation
135
155
  */
136
156
 
137
157
 
138
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
139
- event.preventDefault();
158
+ $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
140
159
  var button = event.target;
160
+ var initialButton = button;
141
161
 
142
- if (!$(button).hasClass(ClassName.BUTTON)) {
143
- button = $(button).closest(Selector.BUTTON);
162
+ if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
163
+ button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
144
164
  }
145
165
 
146
- Button._jQueryInterface.call($(button), 'toggle');
147
- }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
148
- var button = $(event.target).closest(Selector.BUTTON)[0];
149
- $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
166
+ if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
167
+ event.preventDefault(); // work around Firefox bug #1540995
168
+ } else {
169
+ var inputBtn = button.querySelector(SELECTOR_INPUT);
170
+
171
+ if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
172
+ event.preventDefault(); // work around Firefox bug #1540995
173
+
174
+ return;
175
+ }
176
+
177
+ if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
178
+ Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
179
+ }
180
+ }
181
+ }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
182
+ var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
183
+ $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
184
+ });
185
+ $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
186
+ // ensure correct active class is set to match the controls' actual values/states
187
+ // find all checkboxes/readio buttons inside data-toggle groups
188
+ var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
189
+
190
+ for (var i = 0, len = buttons.length; i < len; i++) {
191
+ var button = buttons[i];
192
+ var input = button.querySelector(SELECTOR_INPUT);
193
+
194
+ if (input.checked || input.hasAttribute('checked')) {
195
+ button.classList.add(CLASS_NAME_ACTIVE);
196
+ } else {
197
+ button.classList.remove(CLASS_NAME_ACTIVE);
198
+ }
199
+ } // find all button toggles
200
+
201
+
202
+ buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
203
+
204
+ for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
205
+ var _button = buttons[_i];
206
+
207
+ if (_button.getAttribute('aria-pressed') === 'true') {
208
+ _button.classList.add(CLASS_NAME_ACTIVE);
209
+ } else {
210
+ _button.classList.remove(CLASS_NAME_ACTIVE);
211
+ }
212
+ }
150
213
  });
151
214
  /**
152
- * ------------------------------------------------------------------------
153
215
  * jQuery
154
- * ------------------------------------------------------------------------
155
216
  */
156
217
 
157
- $.fn[NAME] = Button._jQueryInterface;
158
- $.fn[NAME].Constructor = Button;
218
+ $__default["default"].fn[NAME] = Button._jQueryInterface;
219
+ $__default["default"].fn[NAME].Constructor = Button;
159
220
 
160
- $.fn[NAME].noConflict = function () {
161
- $.fn[NAME] = JQUERY_NO_CONFLICT;
221
+ $__default["default"].fn[NAME].noConflict = function () {
222
+ $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
162
223
  return Button._jQueryInterface;
163
224
  };
164
225
 
165
226
  return Button;
166
- }($);
227
+
228
+ }));