bootstrap 4.0.0.beta3 → 4.6.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ }));