bootstrap 4.3.1 → 4.6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +4 -12
  4. data/README.md +7 -1
  5. data/Rakefile +16 -4
  6. data/assets/javascripts/bootstrap/alert.js +43 -55
  7. data/assets/javascripts/bootstrap/button.js +112 -70
  8. data/assets/javascripts/bootstrap/carousel.js +164 -189
  9. data/assets/javascripts/bootstrap/collapse.js +98 -129
  10. data/assets/javascripts/bootstrap/dropdown.js +165 -200
  11. data/assets/javascripts/bootstrap/modal.js +218 -205
  12. data/assets/javascripts/bootstrap/popover.js +63 -79
  13. data/assets/javascripts/bootstrap/scrollspy.js +82 -119
  14. data/assets/javascripts/bootstrap/tab.js +79 -85
  15. data/assets/javascripts/bootstrap/toast.js +100 -115
  16. data/assets/javascripts/bootstrap/tooltip.js +207 -225
  17. data/assets/javascripts/bootstrap/util.js +41 -23
  18. data/assets/javascripts/bootstrap.js +1235 -1314
  19. data/assets/javascripts/bootstrap.min.js +4 -4
  20. data/assets/stylesheets/_bootstrap-grid.scss +5 -4
  21. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  22. data/assets/stylesheets/_bootstrap.scss +4 -4
  23. data/assets/stylesheets/bootstrap/_alert.scss +1 -0
  24. data/assets/stylesheets/bootstrap/_badge.scss +1 -1
  25. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -2
  26. data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
  27. data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
  28. data/assets/stylesheets/bootstrap/_card.scss +47 -50
  29. data/assets/stylesheets/bootstrap/_carousel.scss +12 -9
  30. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  31. data/assets/stylesheets/bootstrap/_code.scss +1 -1
  32. data/assets/stylesheets/bootstrap/_custom-forms.scss +43 -24
  33. data/assets/stylesheets/bootstrap/_dropdown.scss +7 -6
  34. data/assets/stylesheets/bootstrap/_forms.scss +30 -13
  35. data/assets/stylesheets/bootstrap/_functions.scss +110 -6
  36. data/assets/stylesheets/bootstrap/_grid.scss +32 -11
  37. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  38. data/assets/stylesheets/bootstrap/_input-group.scss +23 -5
  39. data/assets/stylesheets/bootstrap/_jumbotron.scss +1 -1
  40. data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
  41. data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
  42. data/assets/stylesheets/bootstrap/_modal.scss +26 -15
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -7
  44. data/assets/stylesheets/bootstrap/_navbar.scss +55 -17
  45. data/assets/stylesheets/bootstrap/_pagination.scss +5 -4
  46. data/assets/stylesheets/bootstrap/_popover.scss +17 -18
  47. data/assets/stylesheets/bootstrap/_print.scss +1 -10
  48. data/assets/stylesheets/bootstrap/_progress.scss +7 -3
  49. data/assets/stylesheets/bootstrap/_reboot.scss +39 -38
  50. data/assets/stylesheets/bootstrap/_spinners.scss +18 -8
  51. data/assets/stylesheets/bootstrap/_tables.scss +3 -3
  52. data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  54. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  55. data/assets/stylesheets/bootstrap/_type.scss +3 -3
  56. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  57. data/assets/stylesheets/bootstrap/_variables.scss +71 -45
  58. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  59. data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
  60. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +27 -14
  61. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  62. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  63. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
  64. data/assets/stylesheets/bootstrap/mixins/_forms.scss +52 -49
  65. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +31 -17
  66. data/assets/stylesheets/bootstrap/mixins/_grid.scss +32 -14
  67. data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
  68. data/assets/stylesheets/bootstrap/mixins/_image.scss +2 -2
  69. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  70. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  71. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
  72. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  73. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -4
  74. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
  75. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
  76. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  77. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  78. data/assets/stylesheets/bootstrap/utilities/_borders.scss +1 -1
  79. data/assets/stylesheets/bootstrap/utilities/_embed.scss +1 -1
  80. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  81. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +1 -1
  82. data/assets/stylesheets/bootstrap/utilities/_text.scss +4 -4
  83. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +126 -102
  84. data/bootstrap.gemspec +2 -4
  85. data/lib/bootstrap/engine.rb +17 -1
  86. data/lib/bootstrap/version.rb +2 -2
  87. data/tasks/updater/js.rb +18 -6
  88. data/tasks/updater/network.rb +8 -2
  89. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  90. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  91. data/test/gemfiles/rails_6_0.gemfile +7 -0
  92. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  93. data/test/gemfiles/rails_7_0_sassc.gemfile +8 -0
  94. data/test/support/dummy_rails_integration.rb +3 -1
  95. data/test/test_helper.rb +18 -13
  96. metadata +17 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e32995c543ae2e6e2053b60ca3bf7f852b89c60ce26827c4b3efc87a482d2eb
4
- data.tar.gz: bec41cdf3c4c03ed3945fa20f744aa5d2a2ebd301389809548d6c08ce08a866d
3
+ metadata.gz: dd382f63309c8fbf7da627ee4990fdaeb3e9eb7f25ba5d06f77346c0dcc68de4
4
+ data.tar.gz: 2c24101f290892643a48f3d530132cca24fb35b9d05e8b19c5305056508065ac
5
5
  SHA512:
6
- metadata.gz: 8531bfb77cf50de537a66b36c08ef2f90953c9c80d0177c70f07ea14662b219380e904f27a5aed3c55c41b835efe3e20fbebe670f74495dad7efa107afeb1fea
7
- data.tar.gz: c3a0f8311bf6e76ee646fb92cd7432bd2c482e354ed7aa58b5edad824901fc1da6cc92c631553e0c48de2b7d9ba64797fd369af124fe51ae6e88681afecfeb08
6
+ metadata.gz: ed3113b844e211e9bd1875de399f167043a7b57c81d399fedaa9fb2a6e9b49dd01d1164c89801476bf6ccce66baf3c88fa88d086895cfc655429f14f821c6b2b
7
+ data.tar.gz: b79d08b3e67931da95f530aea47619c1eb486f7f1cf3eae873645b875f65aec62f30018fbd169a490add197037650f0f3cca4dd11de4a7b07f603bbb6c2fb0c8
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.8
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,21 +6,13 @@ 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.1.1
9
+ # 4.6.2.1
10
10
 
11
- No gem-specific changes.
11
+ * Adds support for other Sass compilers. [#278](https://github.com/twbs/bootstrap-rubygem/pull/278)
12
12
 
13
- # 4.1.0
13
+ # 4.2.1
14
14
 
15
- No gem-specific changes.
16
-
17
- # 4.0.0
18
-
19
- No gem-specific changes.
20
-
21
- # 4.0.0.beta3
22
-
23
- No gem-specific changes.
15
+ * Bootstrap rubygem now depends on SassC instead of Sass.
24
16
 
25
17
  # 4.0.0.beta2.1
26
18
 
data/README.md CHANGED
@@ -17,9 +17,15 @@ 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.3.1'
20
+ gem 'bootstrap', '~> 4.6.2.1'
21
21
  ```
22
22
 
23
+ This gem requires a Sass engine, so make sure you have **one** of these four gems in your Gemfile:
24
+ - [`dartsass-sprockets`](https://github.com/tablecheck/dartsass-sprockets): Dart Sass engine, recommended but only works for Ruby 2.6+ and Rails 5+
25
+ - [`dartsass-rails`](https://github.com/rails/dartsass-rails): Dart Sass engine, recommended for Rails projects that use Propshaft
26
+ - [`cssbundling-rails`](https://github.com/rails/cssbundling-rails): External Sass engine
27
+ - [`sassc-rails`](https://github.com/sass/sassc-rails): SassC engine, deprecated but compatible with Ruby 2.3+ and Rails 4
28
+
23
29
  Ensure that `sprockets-rails` is at least v2.3.2.
24
30
 
25
31
  `bundle install` and restart your server to make the files available through the pipeline.
data/Rakefile CHANGED
@@ -45,16 +45,28 @@ end
45
45
 
46
46
  desc 'Dumps output to a CSS file for testing'
47
47
  task :debug do
48
- require 'sassc'
48
+ begin
49
+ require 'sass-embedded'
50
+ rescue LoadError
51
+ begin
52
+ require 'sassc'
53
+ rescue LoadError
54
+ raise LoadError.new("bootstrap-rubygem requires a Sass engine. Please add dartsass-sprockets or sassc-rails to your dependencies.")
55
+ end
56
+ end
49
57
  require './lib/bootstrap'
50
58
  require 'term/ansicolor'
51
59
  require 'autoprefixer-rails'
52
60
  path = Bootstrap.stylesheets_path
53
61
  %w(_bootstrap _bootstrap-reboot _bootstrap-grid).each do |file|
54
- engine = SassC::Engine.new(File.read("#{path}/#{file}.scss"), syntax: :scss, load_paths: [path])
55
- out = File.join('tmp', "#{file[1..-1]}.css")
56
- css = engine.render
62
+ filename = "#{path}/#{file}.scss"
63
+ css = if defined?(SassC::Engine)
64
+ SassC::Engine.new(File.read(filename), filename: filename, syntax: :scss).render
65
+ else
66
+ Sass.compile(filename).css
67
+ end
57
68
  css = AutoprefixerRails.process(css)
69
+ out = File.join('tmp', "#{file[1..-1]}.css")
58
70
  File.write(out, css)
59
71
  $stderr.puts Term::ANSIColor.green "Compiled #{out}"
60
72
  end
@@ -1,16 +1,18 @@
1
1
  /*!
2
- * Bootstrap alert.js v4.3.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
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
5
  */
6
6
  (function (global, factory) {
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
8
- typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
9
- (global = global || self, global.Alert = factory(global.jQuery, global.Util));
10
- }(this, function ($, Util) { 'use strict';
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
11
 
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
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);
14
16
 
15
17
  function _defineProperties(target, props) {
16
18
  for (var i = 0; i < props.length; i++) {
@@ -25,44 +27,34 @@
25
27
  function _createClass(Constructor, protoProps, staticProps) {
26
28
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
29
  if (staticProps) _defineProperties(Constructor, staticProps);
30
+ Object.defineProperty(Constructor, "prototype", {
31
+ writable: false
32
+ });
28
33
  return Constructor;
29
34
  }
30
35
 
31
36
  /**
32
- * ------------------------------------------------------------------------
33
37
  * Constants
34
- * ------------------------------------------------------------------------
35
38
  */
36
39
 
37
40
  var NAME = 'alert';
38
- var VERSION = '4.3.1';
41
+ var VERSION = '4.6.2';
39
42
  var DATA_KEY = 'bs.alert';
40
43
  var EVENT_KEY = "." + DATA_KEY;
41
44
  var DATA_API_KEY = '.data-api';
42
- var JQUERY_NO_CONFLICT = $.fn[NAME];
43
- var Selector = {
44
- DISMISS: '[data-dismiss="alert"]'
45
- };
46
- var Event = {
47
- CLOSE: "close" + EVENT_KEY,
48
- CLOSED: "closed" + EVENT_KEY,
49
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
50
- };
51
- var ClassName = {
52
- ALERT: 'alert',
53
- FADE: 'fade',
54
- SHOW: 'show'
55
- /**
56
- * ------------------------------------------------------------------------
57
- * Class Definition
58
- * ------------------------------------------------------------------------
59
- */
60
-
61
- };
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
+ */
62
56
 
63
- var Alert =
64
- /*#__PURE__*/
65
- function () {
57
+ var Alert = /*#__PURE__*/function () {
66
58
  function Alert(element) {
67
59
  this._element = element;
68
60
  } // Getters
@@ -88,13 +80,13 @@
88
80
  };
89
81
 
90
82
  _proto.dispose = function dispose() {
91
- $.removeData(this._element, DATA_KEY);
83
+ $__default["default"].removeData(this._element, DATA_KEY);
92
84
  this._element = null;
93
85
  } // Private
94
86
  ;
95
87
 
96
88
  _proto._getRootElement = function _getRootElement(element) {
97
- var selector = Util.getSelectorFromElement(element);
89
+ var selector = Util__default["default"].getSelectorFromElement(element);
98
90
  var parent = false;
99
91
 
100
92
  if (selector) {
@@ -102,43 +94,43 @@
102
94
  }
103
95
 
104
96
  if (!parent) {
105
- parent = $(element).closest("." + ClassName.ALERT)[0];
97
+ parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
106
98
  }
107
99
 
108
100
  return parent;
109
101
  };
110
102
 
111
103
  _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
112
- var closeEvent = $.Event(Event.CLOSE);
113
- $(element).trigger(closeEvent);
104
+ var closeEvent = $__default["default"].Event(EVENT_CLOSE);
105
+ $__default["default"](element).trigger(closeEvent);
114
106
  return closeEvent;
115
107
  };
116
108
 
117
109
  _proto._removeElement = function _removeElement(element) {
118
110
  var _this = this;
119
111
 
120
- $(element).removeClass(ClassName.SHOW);
112
+ $__default["default"](element).removeClass(CLASS_NAME_SHOW);
121
113
 
122
- if (!$(element).hasClass(ClassName.FADE)) {
114
+ if (!$__default["default"](element).hasClass(CLASS_NAME_FADE)) {
123
115
  this._destroyElement(element);
124
116
 
125
117
  return;
126
118
  }
127
119
 
128
- var transitionDuration = Util.getTransitionDurationFromElement(element);
129
- $(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) {
130
122
  return _this._destroyElement(element, event);
131
123
  }).emulateTransitionEnd(transitionDuration);
132
124
  };
133
125
 
134
126
  _proto._destroyElement = function _destroyElement(element) {
135
- $(element).detach().trigger(Event.CLOSED).remove();
127
+ $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
136
128
  } // Static
137
129
  ;
138
130
 
139
131
  Alert._jQueryInterface = function _jQueryInterface(config) {
140
132
  return this.each(function () {
141
- var $element = $(this);
133
+ var $element = $__default["default"](this);
142
134
  var data = $element.data(DATA_KEY);
143
135
 
144
136
  if (!data) {
@@ -172,24 +164,20 @@
172
164
  return Alert;
173
165
  }();
174
166
  /**
175
- * ------------------------------------------------------------------------
176
- * Data Api implementation
177
- * ------------------------------------------------------------------------
167
+ * Data API implementation
178
168
  */
179
169
 
180
170
 
181
- $(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()));
182
172
  /**
183
- * ------------------------------------------------------------------------
184
173
  * jQuery
185
- * ------------------------------------------------------------------------
186
174
  */
187
175
 
188
- $.fn[NAME] = Alert._jQueryInterface;
189
- $.fn[NAME].Constructor = Alert;
176
+ $__default["default"].fn[NAME] = Alert._jQueryInterface;
177
+ $__default["default"].fn[NAME].Constructor = Alert;
190
178
 
191
- $.fn[NAME].noConflict = function () {
192
- $.fn[NAME] = JQUERY_NO_CONFLICT;
179
+ $__default["default"].fn[NAME].noConflict = function () {
180
+ $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
193
181
  return Alert._jQueryInterface;
194
182
  };
195
183
 
@@ -1,15 +1,17 @@
1
1
  /*!
2
- * Bootstrap button.js v4.3.1 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
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
5
  */
6
6
  (function (global, factory) {
7
7
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
8
8
  typeof define === 'function' && define.amd ? define(['jquery'], factory) :
9
- (global = global || self, global.Button = factory(global.jQuery));
10
- }(this, function ($) { 'use strict';
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.jQuery));
10
+ })(this, (function ($) { 'use strict';
11
11
 
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var $__default = /*#__PURE__*/_interopDefaultLegacy($);
13
15
 
14
16
  function _defineProperties(target, props) {
15
17
  for (var i = 0; i < props.length; i++) {
@@ -24,49 +26,43 @@
24
26
  function _createClass(Constructor, protoProps, staticProps) {
25
27
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
26
28
  if (staticProps) _defineProperties(Constructor, staticProps);
29
+ Object.defineProperty(Constructor, "prototype", {
30
+ writable: false
31
+ });
27
32
  return Constructor;
28
33
  }
29
34
 
30
35
  /**
31
- * ------------------------------------------------------------------------
32
36
  * Constants
33
- * ------------------------------------------------------------------------
34
37
  */
35
38
 
36
39
  var NAME = 'button';
37
- var VERSION = '4.3.1';
40
+ var VERSION = '4.6.2';
38
41
  var DATA_KEY = 'bs.button';
39
42
  var EVENT_KEY = "." + DATA_KEY;
40
43
  var DATA_API_KEY = '.data-api';
41
- var JQUERY_NO_CONFLICT = $.fn[NAME];
42
- var ClassName = {
43
- ACTIVE: 'active',
44
- BUTTON: 'btn',
45
- FOCUS: 'focus'
46
- };
47
- var Selector = {
48
- DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
49
- DATA_TOGGLE: '[data-toggle="buttons"]',
50
- INPUT: 'input:not([type="hidden"])',
51
- ACTIVE: '.active',
52
- BUTTON: '.btn'
53
- };
54
- var Event = {
55
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
56
- FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY)
57
- /**
58
- * ------------------------------------------------------------------------
59
- * Class Definition
60
- * ------------------------------------------------------------------------
61
- */
62
-
63
- };
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
+ */
64
61
 
65
- var Button =
66
- /*#__PURE__*/
67
- function () {
62
+ var Button = /*#__PURE__*/function () {
68
63
  function Button(element) {
69
64
  this._element = element;
65
+ this.shouldAvoidTriggerChange = false;
70
66
  } // Getters
71
67
 
72
68
 
@@ -76,31 +72,33 @@
76
72
  _proto.toggle = function toggle() {
77
73
  var triggerChangeEvent = true;
78
74
  var addAriaPressed = true;
79
- var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
75
+ var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
80
76
 
81
77
  if (rootElement) {
82
- var input = this._element.querySelector(Selector.INPUT);
78
+ var input = this._element.querySelector(SELECTOR_INPUT);
83
79
 
84
80
  if (input) {
85
81
  if (input.type === 'radio') {
86
- if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {
82
+ if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
87
83
  triggerChangeEvent = false;
88
84
  } else {
89
- var activeElement = rootElement.querySelector(Selector.ACTIVE);
85
+ var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
90
86
 
91
87
  if (activeElement) {
92
- $(activeElement).removeClass(ClassName.ACTIVE);
88
+ $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE);
93
89
  }
94
90
  }
95
91
  }
96
92
 
97
93
  if (triggerChangeEvent) {
98
- if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
99
- 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);
100
97
  }
101
98
 
102
- input.checked = !this._element.classList.contains(ClassName.ACTIVE);
103
- $(input).trigger('change');
99
+ if (!this.shouldAvoidTriggerChange) {
100
+ $__default["default"](input).trigger('change');
101
+ }
104
102
  }
105
103
 
106
104
  input.focus();
@@ -108,30 +106,35 @@
108
106
  }
109
107
  }
110
108
 
111
- if (addAriaPressed) {
112
- this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));
113
- }
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
+ }
114
113
 
115
- if (triggerChangeEvent) {
116
- $(this._element).toggleClass(ClassName.ACTIVE);
114
+ if (triggerChangeEvent) {
115
+ $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE);
116
+ }
117
117
  }
118
118
  };
119
119
 
120
120
  _proto.dispose = function dispose() {
121
- $.removeData(this._element, DATA_KEY);
121
+ $__default["default"].removeData(this._element, DATA_KEY);
122
122
  this._element = null;
123
123
  } // Static
124
124
  ;
125
125
 
126
- Button._jQueryInterface = function _jQueryInterface(config) {
126
+ Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
127
127
  return this.each(function () {
128
- var data = $(this).data(DATA_KEY);
128
+ var $element = $__default["default"](this);
129
+ var data = $element.data(DATA_KEY);
129
130
 
130
131
  if (!data) {
131
132
  data = new Button(this);
132
- $(this).data(DATA_KEY, data);
133
+ $element.data(DATA_KEY, data);
133
134
  }
134
135
 
136
+ data.shouldAvoidTriggerChange = avoidTriggerChange;
137
+
135
138
  if (config === 'toggle') {
136
139
  data[config]();
137
140
  }
@@ -148,36 +151,75 @@
148
151
  return Button;
149
152
  }();
150
153
  /**
151
- * ------------------------------------------------------------------------
152
- * Data Api implementation
153
- * ------------------------------------------------------------------------
154
+ * Data API implementation
154
155
  */
155
156
 
156
157
 
157
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
158
- event.preventDefault();
158
+ $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
159
159
  var button = event.target;
160
+ var initialButton = button;
161
+
162
+ if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
163
+ button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
164
+ }
165
+
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);
160
170
 
161
- if (!$(button).hasClass(ClassName.BUTTON)) {
162
- button = $(button).closest(Selector.BUTTON);
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
+ }
163
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));
164
203
 
165
- Button._jQueryInterface.call($(button), 'toggle');
166
- }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
167
- var button = $(event.target).closest(Selector.BUTTON)[0];
168
- $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
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
+ }
169
213
  });
170
214
  /**
171
- * ------------------------------------------------------------------------
172
215
  * jQuery
173
- * ------------------------------------------------------------------------
174
216
  */
175
217
 
176
- $.fn[NAME] = Button._jQueryInterface;
177
- $.fn[NAME].Constructor = Button;
218
+ $__default["default"].fn[NAME] = Button._jQueryInterface;
219
+ $__default["default"].fn[NAME].Constructor = Button;
178
220
 
179
- $.fn[NAME].noConflict = function () {
180
- $.fn[NAME] = JQUERY_NO_CONFLICT;
221
+ $__default["default"].fn[NAME].noConflict = function () {
222
+ $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
181
223
  return Button._jQueryInterface;
182
224
  };
183
225