bootstrap 4.0.0.alpha5 → 4.0.0.alpha6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bootstrap might be problematic. Click here for more details.

Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -4
  3. data/assets/javascripts/bootstrap.js +312 -207
  4. data/assets/javascripts/bootstrap.min.js +4 -4
  5. data/assets/javascripts/bootstrap/alert.js +9 -5
  6. data/assets/javascripts/bootstrap/button.js +5 -5
  7. data/assets/javascripts/bootstrap/carousel.js +52 -28
  8. data/assets/javascripts/bootstrap/collapse.js +19 -11
  9. data/assets/javascripts/bootstrap/dropdown.js +21 -19
  10. data/assets/javascripts/bootstrap/modal.js +69 -43
  11. data/assets/javascripts/bootstrap/popover.js +4 -4
  12. data/assets/javascripts/bootstrap/scrollspy.js +20 -11
  13. data/assets/javascripts/bootstrap/tab.js +19 -14
  14. data/assets/javascripts/bootstrap/tooltip.js +54 -22
  15. data/assets/javascripts/bootstrap/util.js +7 -12
  16. data/assets/stylesheets/_bootstrap-grid.scss +23 -3
  17. data/assets/stylesheets/_bootstrap-reboot.scss +2 -3
  18. data/assets/stylesheets/_bootstrap.scss +6 -6
  19. data/assets/stylesheets/bootstrap/_alert.scss +3 -4
  20. data/assets/stylesheets/bootstrap/_badge.scss +77 -0
  21. data/assets/stylesheets/bootstrap/_button-group.scss +18 -51
  22. data/assets/stylesheets/bootstrap/_buttons.scss +14 -20
  23. data/assets/stylesheets/bootstrap/_card.scss +30 -76
  24. data/assets/stylesheets/bootstrap/_carousel.scss +96 -171
  25. data/assets/stylesheets/bootstrap/_close.scss +3 -3
  26. data/assets/stylesheets/bootstrap/_code.scss +7 -0
  27. data/assets/stylesheets/bootstrap/_custom-forms.scss +13 -12
  28. data/assets/stylesheets/bootstrap/_dropdown.scss +17 -36
  29. data/assets/stylesheets/bootstrap/_forms.scss +61 -47
  30. data/assets/stylesheets/bootstrap/_grid.scss +13 -0
  31. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  32. data/assets/stylesheets/bootstrap/_input-group.scss +17 -27
  33. data/assets/stylesheets/bootstrap/_list-group.scss +79 -63
  34. data/assets/stylesheets/bootstrap/_media.scss +5 -78
  35. data/assets/stylesheets/bootstrap/_mixins.scss +8 -5
  36. data/assets/stylesheets/bootstrap/_modal.scss +21 -13
  37. data/assets/stylesheets/bootstrap/_nav.scss +30 -68
  38. data/assets/stylesheets/bootstrap/_navbar.scss +131 -178
  39. data/assets/stylesheets/bootstrap/_normalize.scss +133 -94
  40. data/assets/stylesheets/bootstrap/_pagination.scss +16 -22
  41. data/assets/stylesheets/bootstrap/_popover.scss +3 -3
  42. data/assets/stylesheets/bootstrap/_print.scss +5 -8
  43. data/assets/stylesheets/bootstrap/_progress.scss +14 -127
  44. data/assets/stylesheets/bootstrap/_reboot.scss +16 -15
  45. data/assets/stylesheets/bootstrap/_responsive-embed.scss +18 -5
  46. data/assets/stylesheets/bootstrap/_tables.scss +13 -56
  47. data/assets/stylesheets/bootstrap/_tooltip.scss +1 -1
  48. data/assets/stylesheets/bootstrap/{_animation.scss → _transitions.scss} +6 -8
  49. data/assets/stylesheets/bootstrap/_type.scss +5 -12
  50. data/assets/stylesheets/bootstrap/_utilities.scss +2 -0
  51. data/assets/stylesheets/bootstrap/_variables.scss +320 -216
  52. data/assets/stylesheets/bootstrap/mixins/{_tag.scss → _badge.scss} +2 -2
  53. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +25 -16
  54. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +31 -58
  55. data/assets/stylesheets/bootstrap/mixins/_cards.scss +3 -0
  56. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +1 -1
  57. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -0
  58. data/assets/stylesheets/bootstrap/mixins/_forms.scss +3 -5
  59. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -7
  60. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +19 -23
  61. data/assets/stylesheets/bootstrap/mixins/_grid.scss +19 -26
  62. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -5
  63. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  64. data/assets/stylesheets/bootstrap/mixins/_transforms.scss +14 -0
  65. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +5 -0
  66. data/assets/stylesheets/bootstrap/utilities/_align.scss +5 -5
  67. data/assets/stylesheets/bootstrap/utilities/_background.scss +1 -1
  68. data/assets/stylesheets/bootstrap/utilities/_borders.scss +10 -3
  69. data/assets/stylesheets/bootstrap/utilities/_display.scss +13 -8
  70. data/assets/stylesheets/bootstrap/utilities/_flex.scss +42 -31
  71. data/assets/stylesheets/bootstrap/utilities/_float.scss +5 -9
  72. data/assets/stylesheets/bootstrap/utilities/_position.scss +23 -0
  73. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +10 -0
  74. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +36 -37
  75. data/assets/stylesheets/bootstrap/utilities/_text.scss +14 -12
  76. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +1 -1
  77. data/lib/bootstrap/version.rb +2 -2
  78. data/tasks/updater/scss.rb +3 -5
  79. data/templates/project/_bootstrap-variables.scss +321 -217
  80. metadata +10 -10
  81. data/assets/stylesheets/_bootstrap-flex.scss +0 -8
  82. data/assets/stylesheets/bootstrap/_tags.scss +0 -77
  83. data/assets/stylesheets/bootstrap/mixins/_progress.scss +0 -23
  84. data/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +0 -8
  85. data/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76a5c21070ce1f021c48f79bb00615ef40c529d4
4
- data.tar.gz: 9089af86caface1b5d49b36450a2c3f036f9e0f2
3
+ metadata.gz: 4d180a69e0c7dbefd63219ca59c3baffae843676
4
+ data.tar.gz: b757df00875d03cc153c13e4aa27dd1d013fbce9
5
5
  SHA512:
6
- metadata.gz: bb521a0b80641656aaf57005970087173826fb48a25065cce26456487354a46b40d4403e2ceec21f9b1f94f3899b707d5a4bf5f2a390ee658a837495c36fcda2
7
- data.tar.gz: 040e314028beedb18531318b64cdebab07c21176a997fe43eafcdc6a3f1a7af25c6dba4758009a617e4b2d32a946ec95f1cf378072b814559fdcbefa56164636
6
+ metadata.gz: 776760a7de9f3b666eaae0cb084412d11385e441536d610c4b31b756bed9f6e9a1cdc9f183c7be44076718a26a920f845b85dcc14fa4ef68e660f1f2dbc4b542
7
+ data.tar.gz: e259b489f25fe9afa1df5c85abce20ab1c474d940c0980b1eca95ed0fb92814ab81994030b4c4f7fb4af4916442088307f4e21b9cf875a5d29b2a00625d7be11
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.alpha5'
20
+ gem 'bootstrap', '~> 4.0.0.alpha6'
21
21
  ```
22
22
 
23
23
  Ensure that `sprockets-rails` is at least v2.3.2.
@@ -27,10 +27,12 @@ Ensure that `sprockets-rails` is at least v2.3.2.
27
27
  Import Bootstrap styles in `app/assets/stylesheets/application.scss`:
28
28
 
29
29
  ```scss
30
- // Custom bootstrap variables must be set or imported before bootstrap itself.
30
+ // Custom bootstrap variables must be set or imported *before* bootstrap.
31
31
  @import "bootstrap";
32
32
  ```
33
33
 
34
+ The available variables can be found [here][bootstrap-variables.scss].
35
+
34
36
  Make sure the file has `.scss` extension (or `.sass` for Sass syntax). If you have just generated a new Rails app,
35
37
  it may come with a `.css` file instead. If this file exists, it will be served instead of Sass, so rename it:
36
38
 
@@ -61,7 +63,7 @@ If you use them, add tether to the Gemfile:
61
63
 
62
64
  ```ruby
63
65
  source 'https://rails-assets.org' do
64
- gem 'rails-assets-tether', '>= 1.1.0'
66
+ gem 'rails-assets-tether', '>= 1.3.3'
65
67
  end
66
68
  ```
67
69
 
@@ -78,7 +80,7 @@ Then, run `bundle`, restart the server, and require tether before bootstrap but
78
80
  Install the gem:
79
81
 
80
82
  ```console
81
- $ gem install bootstrap -v 4.0.0.alpha5
83
+ $ gem install bootstrap -v 4.0.0.alpha6
82
84
  ```
83
85
 
84
86
  **If you have an existing Compass project:**
@@ -139,5 +141,6 @@ In the application Sass file, replace `@import 'bootstrap'` with:
139
141
  ```
140
142
 
141
143
  [bootstrap-home]: http://v4-alpha.getbootstrap.com/
144
+ [bootstrap-variables.scss]: https://github.com/twbs/bootstrap-rubygem/blob/master/templates/project/_bootstrap-variables.scss
142
145
  [autoprefixer]: https://github.com/ai/autoprefixer
143
146
  [tether]: http://github.hubspot.com/tether/
@@ -1,11 +1,11 @@
1
1
  /*!
2
- * Bootstrap v4.0.0-alpha.5 (https://getbootstrap.com)
3
- * Copyright 2011-2016 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com)
3
+ * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
5
  */
6
6
 
7
7
  if (typeof jQuery === 'undefined') {
8
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
8
+ throw new Error('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.')
9
9
  }
10
10
 
11
11
  +function ($) {
@@ -30,7 +30,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
30
30
 
31
31
  /**
32
32
  * --------------------------------------------------------------------------
33
- * Bootstrap (v4.0.0-alpha.5): util.js
33
+ * Bootstrap (v4.0.0-alpha.6): util.js
34
34
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
35
35
  * --------------------------------------------------------------------------
36
36
  */
@@ -85,7 +85,9 @@ var Util = function ($) {
85
85
 
86
86
  for (var name in TransitionEndEvent) {
87
87
  if (el.style[name] !== undefined) {
88
- return { end: TransitionEndEvent[name] };
88
+ return {
89
+ end: TransitionEndEvent[name]
90
+ };
89
91
  }
90
92
  }
91
93
 
@@ -132,9 +134,8 @@ var Util = function ($) {
132
134
 
133
135
  getUID: function getUID(prefix) {
134
136
  do {
135
- /* eslint-disable no-bitwise */
137
+ // eslint-disable-next-line no-bitwise
136
138
  prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
137
- /* eslint-enable no-bitwise */
138
139
  } while (document.getElementById(prefix));
139
140
  return prefix;
140
141
  },
@@ -149,7 +150,7 @@ var Util = function ($) {
149
150
  return selector;
150
151
  },
151
152
  reflow: function reflow(element) {
152
- new Function('bs', 'return bs')(element.offsetHeight);
153
+ return element.offsetHeight;
153
154
  },
154
155
  triggerTransitionEnd: function triggerTransitionEnd(element) {
155
156
  $(element).trigger(transition.end);
@@ -162,13 +163,7 @@ var Util = function ($) {
162
163
  if (configTypes.hasOwnProperty(property)) {
163
164
  var expectedTypes = configTypes[property];
164
165
  var value = config[property];
165
- var valueType = void 0;
166
-
167
- if (value && isElement(value)) {
168
- valueType = 'element';
169
- } else {
170
- valueType = toType(value);
171
- }
166
+ var valueType = value && isElement(value) ? 'element' : toType(value);
172
167
 
173
168
  if (!new RegExp(expectedTypes).test(valueType)) {
174
169
  throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
@@ -185,7 +180,7 @@ var Util = function ($) {
185
180
 
186
181
  /**
187
182
  * --------------------------------------------------------------------------
188
- * Bootstrap (v4.0.0-alpha.5): alert.js
183
+ * Bootstrap (v4.0.0-alpha.6): alert.js
189
184
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
190
185
  * --------------------------------------------------------------------------
191
186
  */
@@ -199,7 +194,7 @@ var Alert = function ($) {
199
194
  */
200
195
 
201
196
  var NAME = 'alert';
202
- var VERSION = '4.0.0-alpha.5';
197
+ var VERSION = '4.0.0-alpha.6';
203
198
  var DATA_KEY = 'bs.alert';
204
199
  var EVENT_KEY = '.' + DATA_KEY;
205
200
  var DATA_API_KEY = '.data-api';
@@ -219,7 +214,7 @@ var Alert = function ($) {
219
214
  var ClassName = {
220
215
  ALERT: 'alert',
221
216
  FADE: 'fade',
222
- IN: 'in'
217
+ SHOW: 'show'
223
218
  };
224
219
 
225
220
  /**
@@ -282,14 +277,18 @@ var Alert = function ($) {
282
277
  };
283
278
 
284
279
  Alert.prototype._removeElement = function _removeElement(element) {
285
- $(element).removeClass(ClassName.IN);
280
+ var _this2 = this;
281
+
282
+ $(element).removeClass(ClassName.SHOW);
286
283
 
287
284
  if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
288
285
  this._destroyElement(element);
289
286
  return;
290
287
  }
291
288
 
292
- $(element).one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION);
289
+ $(element).one(Util.TRANSITION_END, function (event) {
290
+ return _this2._destroyElement(element, event);
291
+ }).emulateTransitionEnd(TRANSITION_DURATION);
293
292
  };
294
293
 
295
294
  Alert.prototype._destroyElement = function _destroyElement(element) {
@@ -360,7 +359,7 @@ var Alert = function ($) {
360
359
 
361
360
  /**
362
361
  * --------------------------------------------------------------------------
363
- * Bootstrap (v4.0.0-alpha.5): button.js
362
+ * Bootstrap (v4.0.0-alpha.6): button.js
364
363
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
365
364
  * --------------------------------------------------------------------------
366
365
  */
@@ -374,7 +373,7 @@ var Button = function ($) {
374
373
  */
375
374
 
376
375
  var NAME = 'button';
377
- var VERSION = '4.0.0-alpha.5';
376
+ var VERSION = '4.0.0-alpha.6';
378
377
  var DATA_KEY = 'bs.button';
379
378
  var EVENT_KEY = '.' + DATA_KEY;
380
379
  var DATA_API_KEY = '.data-api';
@@ -438,15 +437,15 @@ var Button = function ($) {
438
437
 
439
438
  if (triggerChangeEvent) {
440
439
  input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
441
- $(this._element).trigger('change');
440
+ $(input).trigger('change');
442
441
  }
443
442
 
444
443
  input.focus();
445
444
  }
446
- } else {
447
- this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
448
445
  }
449
446
 
447
+ this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
448
+
450
449
  if (triggerChangeEvent) {
451
450
  $(this._element).toggleClass(ClassName.ACTIVE);
452
451
  }
@@ -523,7 +522,7 @@ var Button = function ($) {
523
522
 
524
523
  /**
525
524
  * --------------------------------------------------------------------------
526
- * Bootstrap (v4.0.0-alpha.5): carousel.js
525
+ * Bootstrap (v4.0.0-alpha.6): carousel.js
527
526
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
528
527
  * --------------------------------------------------------------------------
529
528
  */
@@ -537,7 +536,7 @@ var Carousel = function ($) {
537
536
  */
538
537
 
539
538
  var NAME = 'carousel';
540
- var VERSION = '4.0.0-alpha.5';
539
+ var VERSION = '4.0.0-alpha.6';
541
540
  var DATA_KEY = 'bs.carousel';
542
541
  var EVENT_KEY = '.' + DATA_KEY;
543
542
  var DATA_API_KEY = '.data-api';
@@ -564,7 +563,9 @@ var Carousel = function ($) {
564
563
 
565
564
  var Direction = {
566
565
  NEXT: 'next',
567
- PREVIOUS: 'prev'
566
+ PREV: 'prev',
567
+ LEFT: 'left',
568
+ RIGHT: 'right'
568
569
  };
569
570
 
570
571
  var Event = {
@@ -581,8 +582,10 @@ var Carousel = function ($) {
581
582
  CAROUSEL: 'carousel',
582
583
  ACTIVE: 'active',
583
584
  SLIDE: 'slide',
584
- RIGHT: 'right',
585
- LEFT: 'left',
585
+ RIGHT: 'carousel-item-right',
586
+ LEFT: 'carousel-item-left',
587
+ NEXT: 'carousel-item-next',
588
+ PREV: 'carousel-item-prev',
586
589
  ITEM: 'carousel-item'
587
590
  };
588
591
 
@@ -590,7 +593,7 @@ var Carousel = function ($) {
590
593
  ACTIVE: '.active',
591
594
  ACTIVE_ITEM: '.active.carousel-item',
592
595
  ITEM: '.carousel-item',
593
- NEXT_PREV: '.next, .prev',
596
+ NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
594
597
  INDICATORS: '.carousel-indicators',
595
598
  DATA_SLIDE: '[data-slide], [data-slide-to]',
596
599
  DATA_RIDE: '[data-ride="carousel"]'
@@ -625,9 +628,10 @@ var Carousel = function ($) {
625
628
  // public
626
629
 
627
630
  Carousel.prototype.next = function next() {
628
- if (!this._isSliding) {
629
- this._slide(Direction.NEXT);
631
+ if (this._isSliding) {
632
+ throw new Error('Carousel is sliding');
630
633
  }
634
+ this._slide(Direction.NEXT);
631
635
  };
632
636
 
633
637
  Carousel.prototype.nextWhenVisible = function nextWhenVisible() {
@@ -638,9 +642,10 @@ var Carousel = function ($) {
638
642
  };
639
643
 
640
644
  Carousel.prototype.prev = function prev() {
641
- if (!this._isSliding) {
642
- this._slide(Direction.PREVIOUS);
645
+ if (this._isSliding) {
646
+ throw new Error('Carousel is sliding');
643
647
  }
648
+ this._slide(Direction.PREVIOUS);
644
649
  };
645
650
 
646
651
  Carousel.prototype.pause = function pause(event) {
@@ -668,12 +673,12 @@ var Carousel = function ($) {
668
673
  }
669
674
 
670
675
  if (this._config.interval && !this._isPaused) {
671
- this._interval = setInterval($.proxy(document.visibilityState ? this.nextWhenVisible : this.next, this), this._config.interval);
676
+ this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
672
677
  }
673
678
  };
674
679
 
675
680
  Carousel.prototype.to = function to(index) {
676
- var _this2 = this;
681
+ var _this3 = this;
677
682
 
678
683
  this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
679
684
 
@@ -685,7 +690,7 @@ var Carousel = function ($) {
685
690
 
686
691
  if (this._isSliding) {
687
692
  $(this._element).one(Event.SLID, function () {
688
- return _this2.to(index);
693
+ return _this3.to(index);
689
694
  });
690
695
  return;
691
696
  }
@@ -724,27 +729,35 @@ var Carousel = function ($) {
724
729
  };
725
730
 
726
731
  Carousel.prototype._addEventListeners = function _addEventListeners() {
732
+ var _this4 = this;
733
+
727
734
  if (this._config.keyboard) {
728
- $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this));
735
+ $(this._element).on(Event.KEYDOWN, function (event) {
736
+ return _this4._keydown(event);
737
+ });
729
738
  }
730
739
 
731
740
  if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) {
732
- $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this));
741
+ $(this._element).on(Event.MOUSEENTER, function (event) {
742
+ return _this4.pause(event);
743
+ }).on(Event.MOUSELEAVE, function (event) {
744
+ return _this4.cycle(event);
745
+ });
733
746
  }
734
747
  };
735
748
 
736
749
  Carousel.prototype._keydown = function _keydown(event) {
737
- event.preventDefault();
738
-
739
750
  if (/input|textarea/i.test(event.target.tagName)) {
740
751
  return;
741
752
  }
742
753
 
743
754
  switch (event.which) {
744
755
  case ARROW_LEFT_KEYCODE:
756
+ event.preventDefault();
745
757
  this.prev();
746
758
  break;
747
759
  case ARROW_RIGHT_KEYCODE:
760
+ event.preventDefault();
748
761
  this.next();
749
762
  break;
750
763
  default:
@@ -774,10 +787,10 @@ var Carousel = function ($) {
774
787
  return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
775
788
  };
776
789
 
777
- Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, directionalClassname) {
790
+ Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
778
791
  var slideEvent = $.Event(Event.SLIDE, {
779
792
  relatedTarget: relatedTarget,
780
- direction: directionalClassname
793
+ direction: eventDirectionName
781
794
  });
782
795
 
783
796
  $(this._element).trigger(slideEvent);
@@ -798,21 +811,33 @@ var Carousel = function ($) {
798
811
  };
799
812
 
800
813
  Carousel.prototype._slide = function _slide(direction, element) {
801
- var _this3 = this;
814
+ var _this5 = this;
802
815
 
803
816
  var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
804
817
  var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
805
818
 
806
819
  var isCycling = Boolean(this._interval);
807
820
 
808
- var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT;
821
+ var directionalClassName = void 0;
822
+ var orderClassName = void 0;
823
+ var eventDirectionName = void 0;
824
+
825
+ if (direction === Direction.NEXT) {
826
+ directionalClassName = ClassName.LEFT;
827
+ orderClassName = ClassName.NEXT;
828
+ eventDirectionName = Direction.LEFT;
829
+ } else {
830
+ directionalClassName = ClassName.RIGHT;
831
+ orderClassName = ClassName.PREV;
832
+ eventDirectionName = Direction.RIGHT;
833
+ }
809
834
 
810
835
  if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
811
836
  this._isSliding = false;
812
837
  return;
813
838
  }
814
839
 
815
- var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName);
840
+ var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
816
841
  if (slideEvent.isDefaultPrevented()) {
817
842
  return;
818
843
  }
@@ -832,12 +857,12 @@ var Carousel = function ($) {
832
857
 
833
858
  var slidEvent = $.Event(Event.SLID, {
834
859
  relatedTarget: nextElement,
835
- direction: directionalClassName
860
+ direction: eventDirectionName
836
861
  });
837
862
 
838
863
  if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
839
864
 
840
- $(nextElement).addClass(direction);
865
+ $(nextElement).addClass(orderClassName);
841
866
 
842
867
  Util.reflow(nextElement);
843
868
 
@@ -845,16 +870,14 @@ var Carousel = function ($) {
845
870
  $(nextElement).addClass(directionalClassName);
846
871
 
847
872
  $(activeElement).one(Util.TRANSITION_END, function () {
848
- $(nextElement).removeClass(directionalClassName).removeClass(direction);
873
+ $(nextElement).removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE);
849
874
 
850
- $(nextElement).addClass(ClassName.ACTIVE);
875
+ $(activeElement).removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName);
851
876
 
852
- $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName);
853
-
854
- _this3._isSliding = false;
877
+ _this5._isSliding = false;
855
878
 
856
879
  setTimeout(function () {
857
- return $(_this3._element).trigger(slidEvent);
880
+ return $(_this5._element).trigger(slidEvent);
858
881
  }, 0);
859
882
  }).emulateTransitionEnd(TRANSITION_DURATION);
860
883
  } else {
@@ -979,7 +1002,7 @@ var Carousel = function ($) {
979
1002
 
980
1003
  /**
981
1004
  * --------------------------------------------------------------------------
982
- * Bootstrap (v4.0.0-alpha.5): collapse.js
1005
+ * Bootstrap (v4.0.0-alpha.6): collapse.js
983
1006
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
984
1007
  * --------------------------------------------------------------------------
985
1008
  */
@@ -993,7 +1016,7 @@ var Collapse = function ($) {
993
1016
  */
994
1017
 
995
1018
  var NAME = 'collapse';
996
- var VERSION = '4.0.0-alpha.5';
1019
+ var VERSION = '4.0.0-alpha.6';
997
1020
  var DATA_KEY = 'bs.collapse';
998
1021
  var EVENT_KEY = '.' + DATA_KEY;
999
1022
  var DATA_API_KEY = '.data-api';
@@ -1019,7 +1042,7 @@ var Collapse = function ($) {
1019
1042
  };
1020
1043
 
1021
1044
  var ClassName = {
1022
- IN: 'in',
1045
+ SHOW: 'show',
1023
1046
  COLLAPSE: 'collapse',
1024
1047
  COLLAPSING: 'collapsing',
1025
1048
  COLLAPSED: 'collapsed'
@@ -1031,7 +1054,7 @@ var Collapse = function ($) {
1031
1054
  };
1032
1055
 
1033
1056
  var Selector = {
1034
- ACTIVES: '.card > .in, .card > .collapsing',
1057
+ ACTIVES: '.card > .show, .card > .collapsing',
1035
1058
  DATA_TOGGLE: '[data-toggle="collapse"]'
1036
1059
  };
1037
1060
 
@@ -1066,7 +1089,7 @@ var Collapse = function ($) {
1066
1089
  // public
1067
1090
 
1068
1091
  Collapse.prototype.toggle = function toggle() {
1069
- if ($(this._element).hasClass(ClassName.IN)) {
1092
+ if ($(this._element).hasClass(ClassName.SHOW)) {
1070
1093
  this.hide();
1071
1094
  } else {
1072
1095
  this.show();
@@ -1074,9 +1097,13 @@ var Collapse = function ($) {
1074
1097
  };
1075
1098
 
1076
1099
  Collapse.prototype.show = function show() {
1077
- var _this4 = this;
1100
+ var _this6 = this;
1078
1101
 
1079
- if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
1102
+ if (this._isTransitioning) {
1103
+ throw new Error('Collapse is transitioning');
1104
+ }
1105
+
1106
+ if ($(this._element).hasClass(ClassName.SHOW)) {
1080
1107
  return;
1081
1108
  }
1082
1109
 
@@ -1084,7 +1111,7 @@ var Collapse = function ($) {
1084
1111
  var activesData = void 0;
1085
1112
 
1086
1113
  if (this._parent) {
1087
- actives = $.makeArray($(Selector.ACTIVES));
1114
+ actives = $.makeArray($(this._parent).find(Selector.ACTIVES));
1088
1115
  if (!actives.length) {
1089
1116
  actives = null;
1090
1117
  }
@@ -1124,13 +1151,13 @@ var Collapse = function ($) {
1124
1151
  this.setTransitioning(true);
1125
1152
 
1126
1153
  var complete = function complete() {
1127
- $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
1154
+ $(_this6._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
1128
1155
 
1129
- _this4._element.style[dimension] = '';
1156
+ _this6._element.style[dimension] = '';
1130
1157
 
1131
- _this4.setTransitioning(false);
1158
+ _this6.setTransitioning(false);
1132
1159
 
1133
- $(_this4._element).trigger(Event.SHOWN);
1160
+ $(_this6._element).trigger(Event.SHOWN);
1134
1161
  };
1135
1162
 
1136
1163
  if (!Util.supportsTransitionEnd()) {
@@ -1147,9 +1174,13 @@ var Collapse = function ($) {
1147
1174
  };
1148
1175
 
1149
1176
  Collapse.prototype.hide = function hide() {
1150
- var _this5 = this;
1177
+ var _this7 = this;
1151
1178
 
1152
- if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
1179
+ if (this._isTransitioning) {
1180
+ throw new Error('Collapse is transitioning');
1181
+ }
1182
+
1183
+ if (!$(this._element).hasClass(ClassName.SHOW)) {
1153
1184
  return;
1154
1185
  }
1155
1186
 
@@ -1166,7 +1197,7 @@ var Collapse = function ($) {
1166
1197
 
1167
1198
  Util.reflow(this._element);
1168
1199
 
1169
- $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
1200
+ $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
1170
1201
 
1171
1202
  this._element.setAttribute('aria-expanded', false);
1172
1203
 
@@ -1177,8 +1208,8 @@ var Collapse = function ($) {
1177
1208
  this.setTransitioning(true);
1178
1209
 
1179
1210
  var complete = function complete() {
1180
- _this5.setTransitioning(false);
1181
- $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
1211
+ _this7.setTransitioning(false);
1212
+ $(_this7._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
1182
1213
  };
1183
1214
 
1184
1215
  this._element.style[dimension] = '';
@@ -1220,13 +1251,13 @@ var Collapse = function ($) {
1220
1251
  };
1221
1252
 
1222
1253
  Collapse.prototype._getParent = function _getParent() {
1223
- var _this6 = this;
1254
+ var _this8 = this;
1224
1255
 
1225
1256
  var parent = $(this._config.parent)[0];
1226
1257
  var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
1227
1258
 
1228
1259
  $(parent).find(selector).each(function (i, element) {
1229
- _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1260
+ _this8._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1230
1261
  });
1231
1262
 
1232
1263
  return parent;
@@ -1234,7 +1265,7 @@ var Collapse = function ($) {
1234
1265
 
1235
1266
  Collapse.prototype._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1236
1267
  if (element) {
1237
- var isOpen = $(element).hasClass(ClassName.IN);
1268
+ var isOpen = $(element).hasClass(ClassName.SHOW);
1238
1269
  element.setAttribute('aria-expanded', isOpen);
1239
1270
 
1240
1271
  if (triggerArray.length) {
@@ -1323,7 +1354,7 @@ var Collapse = function ($) {
1323
1354
 
1324
1355
  /**
1325
1356
  * --------------------------------------------------------------------------
1326
- * Bootstrap (v4.0.0-alpha.5): dropdown.js
1357
+ * Bootstrap (v4.0.0-alpha.6): dropdown.js
1327
1358
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1328
1359
  * --------------------------------------------------------------------------
1329
1360
  */
@@ -1337,7 +1368,7 @@ var Dropdown = function ($) {
1337
1368
  */
1338
1369
 
1339
1370
  var NAME = 'dropdown';
1340
- var VERSION = '4.0.0-alpha.5';
1371
+ var VERSION = '4.0.0-alpha.6';
1341
1372
  var DATA_KEY = 'bs.dropdown';
1342
1373
  var EVENT_KEY = '.' + DATA_KEY;
1343
1374
  var DATA_API_KEY = '.data-api';
@@ -1354,13 +1385,14 @@ var Dropdown = function ($) {
1354
1385
  SHOWN: 'shown' + EVENT_KEY,
1355
1386
  CLICK: 'click' + EVENT_KEY,
1356
1387
  CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
1388
+ FOCUSIN_DATA_API: 'focusin' + EVENT_KEY + DATA_API_KEY,
1357
1389
  KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
1358
1390
  };
1359
1391
 
1360
1392
  var ClassName = {
1361
1393
  BACKDROP: 'dropdown-backdrop',
1362
1394
  DISABLED: 'disabled',
1363
- OPEN: 'open'
1395
+ SHOW: 'show'
1364
1396
  };
1365
1397
 
1366
1398
  var Selector = {
@@ -1398,7 +1430,7 @@ var Dropdown = function ($) {
1398
1430
  }
1399
1431
 
1400
1432
  var parent = Dropdown._getParentFromElement(this);
1401
- var isActive = $(parent).hasClass(ClassName.OPEN);
1433
+ var isActive = $(parent).hasClass(ClassName.SHOW);
1402
1434
 
1403
1435
  Dropdown._clearMenus();
1404
1436
 
@@ -1415,7 +1447,9 @@ var Dropdown = function ($) {
1415
1447
  $(dropdown).on('click', Dropdown._clearMenus);
1416
1448
  }
1417
1449
 
1418
- var relatedTarget = { relatedTarget: this };
1450
+ var relatedTarget = {
1451
+ relatedTarget: this
1452
+ };
1419
1453
  var showEvent = $.Event(Event.SHOW, relatedTarget);
1420
1454
 
1421
1455
  $(parent).trigger(showEvent);
@@ -1425,9 +1459,9 @@ var Dropdown = function ($) {
1425
1459
  }
1426
1460
 
1427
1461
  this.focus();
1428
- this.setAttribute('aria-expanded', 'true');
1462
+ this.setAttribute('aria-expanded', true);
1429
1463
 
1430
- $(parent).toggleClass(ClassName.OPEN);
1464
+ $(parent).toggleClass(ClassName.SHOW);
1431
1465
  $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
1432
1466
 
1433
1467
  return false;
@@ -1452,7 +1486,8 @@ var Dropdown = function ($) {
1452
1486
  var data = $(this).data(DATA_KEY);
1453
1487
 
1454
1488
  if (!data) {
1455
- $(this).data(DATA_KEY, data = new Dropdown(this));
1489
+ data = new Dropdown(this);
1490
+ $(this).data(DATA_KEY, data);
1456
1491
  }
1457
1492
 
1458
1493
  if (typeof config === 'string') {
@@ -1478,13 +1513,15 @@ var Dropdown = function ($) {
1478
1513
 
1479
1514
  for (var i = 0; i < toggles.length; i++) {
1480
1515
  var parent = Dropdown._getParentFromElement(toggles[i]);
1481
- var relatedTarget = { relatedTarget: toggles[i] };
1516
+ var relatedTarget = {
1517
+ relatedTarget: toggles[i]
1518
+ };
1482
1519
 
1483
- if (!$(parent).hasClass(ClassName.OPEN)) {
1520
+ if (!$(parent).hasClass(ClassName.SHOW)) {
1484
1521
  continue;
1485
1522
  }
1486
1523
 
1487
- if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(parent, event.target)) {
1524
+ if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'focusin') && $.contains(parent, event.target)) {
1488
1525
  continue;
1489
1526
  }
1490
1527
 
@@ -1496,7 +1533,7 @@ var Dropdown = function ($) {
1496
1533
 
1497
1534
  toggles[i].setAttribute('aria-expanded', 'false');
1498
1535
 
1499
- $(parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
1536
+ $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
1500
1537
  }
1501
1538
  };
1502
1539
 
@@ -1524,7 +1561,7 @@ var Dropdown = function ($) {
1524
1561
  }
1525
1562
 
1526
1563
  var parent = Dropdown._getParentFromElement(this);
1527
- var isActive = $(parent).hasClass(ClassName.OPEN);
1564
+ var isActive = $(parent).hasClass(ClassName.SHOW);
1528
1565
 
1529
1566
  if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
1530
1567
 
@@ -1537,11 +1574,7 @@ var Dropdown = function ($) {
1537
1574
  return;
1538
1575
  }
1539
1576
 
1540
- var items = $.makeArray($(Selector.VISIBLE_ITEMS));
1541
-
1542
- items = items.filter(function (item) {
1543
- return item.offsetWidth || item.offsetHeight;
1544
- });
1577
+ var items = $(parent).find(Selector.VISIBLE_ITEMS).get();
1545
1578
 
1546
1579
  if (!items.length) {
1547
1580
  return;
@@ -1582,7 +1615,7 @@ var Dropdown = function ($) {
1582
1615
  * ------------------------------------------------------------------------
1583
1616
  */
1584
1617
 
1585
- $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
1618
+ $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.FOCUSIN_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
1586
1619
  e.stopPropagation();
1587
1620
  });
1588
1621
 
@@ -1604,7 +1637,7 @@ var Dropdown = function ($) {
1604
1637
 
1605
1638
  /**
1606
1639
  * --------------------------------------------------------------------------
1607
- * Bootstrap (v4.0.0-alpha.5): modal.js
1640
+ * Bootstrap (v4.0.0-alpha.6): modal.js
1608
1641
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1609
1642
  * --------------------------------------------------------------------------
1610
1643
  */
@@ -1618,7 +1651,7 @@ var Modal = function ($) {
1618
1651
  */
1619
1652
 
1620
1653
  var NAME = 'modal';
1621
- var VERSION = '4.0.0-alpha.5';
1654
+ var VERSION = '4.0.0-alpha.6';
1622
1655
  var DATA_KEY = 'bs.modal';
1623
1656
  var EVENT_KEY = '.' + DATA_KEY;
1624
1657
  var DATA_API_KEY = '.data-api';
@@ -1660,14 +1693,14 @@ var Modal = function ($) {
1660
1693
  BACKDROP: 'modal-backdrop',
1661
1694
  OPEN: 'modal-open',
1662
1695
  FADE: 'fade',
1663
- IN: 'in'
1696
+ SHOW: 'show'
1664
1697
  };
1665
1698
 
1666
1699
  var Selector = {
1667
1700
  DIALOG: '.modal-dialog',
1668
1701
  DATA_TOGGLE: '[data-toggle="modal"]',
1669
1702
  DATA_DISMISS: '[data-dismiss="modal"]',
1670
- FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
1703
+ FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
1671
1704
  };
1672
1705
 
1673
1706
  /**
@@ -1687,6 +1720,7 @@ var Modal = function ($) {
1687
1720
  this._isShown = false;
1688
1721
  this._isBodyOverflowing = false;
1689
1722
  this._ignoreBackdropClick = false;
1723
+ this._isTransitioning = false;
1690
1724
  this._originalBodyPadding = 0;
1691
1725
  this._scrollbarWidth = 0;
1692
1726
  }
@@ -1700,8 +1734,15 @@ var Modal = function ($) {
1700
1734
  };
1701
1735
 
1702
1736
  Modal.prototype.show = function show(relatedTarget) {
1703
- var _this7 = this;
1737
+ var _this9 = this;
1704
1738
 
1739
+ if (this._isTransitioning) {
1740
+ throw new Error('Modal is transitioning');
1741
+ }
1742
+
1743
+ if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
1744
+ this._isTransitioning = true;
1745
+ }
1705
1746
  var showEvent = $.Event(Event.SHOW, {
1706
1747
  relatedTarget: relatedTarget
1707
1748
  });
@@ -1722,26 +1763,40 @@ var Modal = function ($) {
1722
1763
  this._setEscapeEvent();
1723
1764
  this._setResizeEvent();
1724
1765
 
1725
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
1766
+ $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
1767
+ return _this9.hide(event);
1768
+ });
1726
1769
 
1727
1770
  $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
1728
- $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
1729
- if ($(event.target).is(_this7._element)) {
1730
- _this7._ignoreBackdropClick = true;
1771
+ $(_this9._element).one(Event.MOUSEUP_DISMISS, function (event) {
1772
+ if ($(event.target).is(_this9._element)) {
1773
+ _this9._ignoreBackdropClick = true;
1731
1774
  }
1732
1775
  });
1733
1776
  });
1734
1777
 
1735
- this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
1778
+ this._showBackdrop(function () {
1779
+ return _this9._showElement(relatedTarget);
1780
+ });
1736
1781
  };
1737
1782
 
1738
1783
  Modal.prototype.hide = function hide(event) {
1784
+ var _this10 = this;
1785
+
1739
1786
  if (event) {
1740
1787
  event.preventDefault();
1741
1788
  }
1742
1789
 
1743
- var hideEvent = $.Event(Event.HIDE);
1790
+ if (this._isTransitioning) {
1791
+ throw new Error('Modal is transitioning');
1792
+ }
1793
+
1794
+ var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
1795
+ if (transition) {
1796
+ this._isTransitioning = true;
1797
+ }
1744
1798
 
1799
+ var hideEvent = $.Event(Event.HIDE);
1745
1800
  $(this._element).trigger(hideEvent);
1746
1801
 
1747
1802
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
@@ -1755,14 +1810,15 @@ var Modal = function ($) {
1755
1810
 
1756
1811
  $(document).off(Event.FOCUSIN);
1757
1812
 
1758
- $(this._element).removeClass(ClassName.IN);
1813
+ $(this._element).removeClass(ClassName.SHOW);
1759
1814
 
1760
1815
  $(this._element).off(Event.CLICK_DISMISS);
1761
1816
  $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
1762
1817
 
1763
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
1764
-
1765
- $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
1818
+ if (transition) {
1819
+ $(this._element).one(Util.TRANSITION_END, function (event) {
1820
+ return _this10._hideModal(event);
1821
+ }).emulateTransitionEnd(TRANSITION_DURATION);
1766
1822
  } else {
1767
1823
  this._hideModal();
1768
1824
  }
@@ -1771,10 +1827,7 @@ var Modal = function ($) {
1771
1827
  Modal.prototype.dispose = function dispose() {
1772
1828
  $.removeData(this._element, DATA_KEY);
1773
1829
 
1774
- $(window).off(EVENT_KEY);
1775
- $(document).off(EVENT_KEY);
1776
- $(this._element).off(EVENT_KEY);
1777
- $(this._backdrop).off(EVENT_KEY);
1830
+ $(window, document, this._element, this._backdrop).off(EVENT_KEY);
1778
1831
 
1779
1832
  this._config = null;
1780
1833
  this._element = null;
@@ -1796,7 +1849,7 @@ var Modal = function ($) {
1796
1849
  };
1797
1850
 
1798
1851
  Modal.prototype._showElement = function _showElement(relatedTarget) {
1799
- var _this8 = this;
1852
+ var _this11 = this;
1800
1853
 
1801
1854
  var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
1802
1855
 
@@ -1813,7 +1866,7 @@ var Modal = function ($) {
1813
1866
  Util.reflow(this._element);
1814
1867
  }
1815
1868
 
1816
- $(this._element).addClass(ClassName.IN);
1869
+ $(this._element).addClass(ClassName.SHOW);
1817
1870
 
1818
1871
  if (this._config.focus) {
1819
1872
  this._enforceFocus();
@@ -1824,10 +1877,11 @@ var Modal = function ($) {
1824
1877
  });
1825
1878
 
1826
1879
  var transitionComplete = function transitionComplete() {
1827
- if (_this8._config.focus) {
1828
- _this8._element.focus();
1880
+ if (_this11._config.focus) {
1881
+ _this11._element.focus();
1829
1882
  }
1830
- $(_this8._element).trigger(shownEvent);
1883
+ _this11._isTransitioning = false;
1884
+ $(_this11._element).trigger(shownEvent);
1831
1885
  };
1832
1886
 
1833
1887
  if (transition) {
@@ -1838,23 +1892,23 @@ var Modal = function ($) {
1838
1892
  };
1839
1893
 
1840
1894
  Modal.prototype._enforceFocus = function _enforceFocus() {
1841
- var _this9 = this;
1895
+ var _this12 = this;
1842
1896
 
1843
1897
  $(document).off(Event.FOCUSIN) // guard against infinite focus loop
1844
1898
  .on(Event.FOCUSIN, function (event) {
1845
- if (document !== event.target && _this9._element !== event.target && !$(_this9._element).has(event.target).length) {
1846
- _this9._element.focus();
1899
+ if (document !== event.target && _this12._element !== event.target && !$(_this12._element).has(event.target).length) {
1900
+ _this12._element.focus();
1847
1901
  }
1848
1902
  });
1849
1903
  };
1850
1904
 
1851
1905
  Modal.prototype._setEscapeEvent = function _setEscapeEvent() {
1852
- var _this10 = this;
1906
+ var _this13 = this;
1853
1907
 
1854
1908
  if (this._isShown && this._config.keyboard) {
1855
1909
  $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
1856
1910
  if (event.which === ESCAPE_KEYCODE) {
1857
- _this10.hide();
1911
+ _this13.hide();
1858
1912
  }
1859
1913
  });
1860
1914
  } else if (!this._isShown) {
@@ -1863,23 +1917,28 @@ var Modal = function ($) {
1863
1917
  };
1864
1918
 
1865
1919
  Modal.prototype._setResizeEvent = function _setResizeEvent() {
1920
+ var _this14 = this;
1921
+
1866
1922
  if (this._isShown) {
1867
- $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
1923
+ $(window).on(Event.RESIZE, function (event) {
1924
+ return _this14._handleUpdate(event);
1925
+ });
1868
1926
  } else {
1869
1927
  $(window).off(Event.RESIZE);
1870
1928
  }
1871
1929
  };
1872
1930
 
1873
1931
  Modal.prototype._hideModal = function _hideModal() {
1874
- var _this11 = this;
1932
+ var _this15 = this;
1875
1933
 
1876
1934
  this._element.style.display = 'none';
1877
1935
  this._element.setAttribute('aria-hidden', 'true');
1936
+ this._isTransitioning = false;
1878
1937
  this._showBackdrop(function () {
1879
1938
  $(document.body).removeClass(ClassName.OPEN);
1880
- _this11._resetAdjustments();
1881
- _this11._resetScrollbar();
1882
- $(_this11._element).trigger(Event.HIDDEN);
1939
+ _this15._resetAdjustments();
1940
+ _this15._resetScrollbar();
1941
+ $(_this15._element).trigger(Event.HIDDEN);
1883
1942
  });
1884
1943
  };
1885
1944
 
@@ -1891,7 +1950,7 @@ var Modal = function ($) {
1891
1950
  };
1892
1951
 
1893
1952
  Modal.prototype._showBackdrop = function _showBackdrop(callback) {
1894
- var _this12 = this;
1953
+ var _this16 = this;
1895
1954
 
1896
1955
  var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
1897
1956
 
@@ -1908,17 +1967,17 @@ var Modal = function ($) {
1908
1967
  $(this._backdrop).appendTo(document.body);
1909
1968
 
1910
1969
  $(this._element).on(Event.CLICK_DISMISS, function (event) {
1911
- if (_this12._ignoreBackdropClick) {
1912
- _this12._ignoreBackdropClick = false;
1970
+ if (_this16._ignoreBackdropClick) {
1971
+ _this16._ignoreBackdropClick = false;
1913
1972
  return;
1914
1973
  }
1915
1974
  if (event.target !== event.currentTarget) {
1916
1975
  return;
1917
1976
  }
1918
- if (_this12._config.backdrop === 'static') {
1919
- _this12._element.focus();
1977
+ if (_this16._config.backdrop === 'static') {
1978
+ _this16._element.focus();
1920
1979
  } else {
1921
- _this12.hide();
1980
+ _this16.hide();
1922
1981
  }
1923
1982
  });
1924
1983
 
@@ -1926,7 +1985,7 @@ var Modal = function ($) {
1926
1985
  Util.reflow(this._backdrop);
1927
1986
  }
1928
1987
 
1929
- $(this._backdrop).addClass(ClassName.IN);
1988
+ $(this._backdrop).addClass(ClassName.SHOW);
1930
1989
 
1931
1990
  if (!callback) {
1932
1991
  return;
@@ -1939,10 +1998,10 @@ var Modal = function ($) {
1939
1998
 
1940
1999
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
1941
2000
  } else if (!this._isShown && this._backdrop) {
1942
- $(this._backdrop).removeClass(ClassName.IN);
2001
+ $(this._backdrop).removeClass(ClassName.SHOW);
1943
2002
 
1944
2003
  var callbackRemove = function callbackRemove() {
1945
- _this12._removeBackdrop();
2004
+ _this16._removeBackdrop();
1946
2005
  if (callback) {
1947
2006
  callback();
1948
2007
  }
@@ -2058,7 +2117,7 @@ var Modal = function ($) {
2058
2117
  */
2059
2118
 
2060
2119
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
2061
- var _this13 = this;
2120
+ var _this17 = this;
2062
2121
 
2063
2122
  var target = void 0;
2064
2123
  var selector = Util.getSelectorFromElement(this);
@@ -2069,7 +2128,7 @@ var Modal = function ($) {
2069
2128
 
2070
2129
  var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
2071
2130
 
2072
- if (this.tagName === 'A') {
2131
+ if (this.tagName === 'A' || this.tagName === 'AREA') {
2073
2132
  event.preventDefault();
2074
2133
  }
2075
2134
 
@@ -2080,8 +2139,8 @@ var Modal = function ($) {
2080
2139
  }
2081
2140
 
2082
2141
  $target.one(Event.HIDDEN, function () {
2083
- if ($(_this13).is(':visible')) {
2084
- _this13.focus();
2142
+ if ($(_this17).is(':visible')) {
2143
+ _this17.focus();
2085
2144
  }
2086
2145
  });
2087
2146
  });
@@ -2107,7 +2166,7 @@ var Modal = function ($) {
2107
2166
 
2108
2167
  /**
2109
2168
  * --------------------------------------------------------------------------
2110
- * Bootstrap (v4.0.0-alpha.5): scrollspy.js
2169
+ * Bootstrap (v4.0.0-alpha.6): scrollspy.js
2111
2170
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2112
2171
  * --------------------------------------------------------------------------
2113
2172
  */
@@ -2121,7 +2180,7 @@ var ScrollSpy = function ($) {
2121
2180
  */
2122
2181
 
2123
2182
  var NAME = 'scrollspy';
2124
- var VERSION = '4.0.0-alpha.5';
2183
+ var VERSION = '4.0.0-alpha.6';
2125
2184
  var DATA_KEY = 'bs.scrollspy';
2126
2185
  var EVENT_KEY = '.' + DATA_KEY;
2127
2186
  var DATA_API_KEY = '.data-api';
@@ -2178,6 +2237,8 @@ var ScrollSpy = function ($) {
2178
2237
 
2179
2238
  var ScrollSpy = function () {
2180
2239
  function ScrollSpy(element, config) {
2240
+ var _this18 = this;
2241
+
2181
2242
  _classCallCheck(this, ScrollSpy);
2182
2243
 
2183
2244
  this._element = element;
@@ -2189,7 +2250,9 @@ var ScrollSpy = function ($) {
2189
2250
  this._activeTarget = null;
2190
2251
  this._scrollHeight = 0;
2191
2252
 
2192
- $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
2253
+ $(this._scrollElement).on(Event.SCROLL, function (event) {
2254
+ return _this18._process(event);
2255
+ });
2193
2256
 
2194
2257
  this.refresh();
2195
2258
  this._process();
@@ -2200,7 +2263,7 @@ var ScrollSpy = function ($) {
2200
2263
  // public
2201
2264
 
2202
2265
  ScrollSpy.prototype.refresh = function refresh() {
2203
- var _this14 = this;
2266
+ var _this19 = this;
2204
2267
 
2205
2268
  var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
2206
2269
 
@@ -2233,8 +2296,8 @@ var ScrollSpy = function ($) {
2233
2296
  }).sort(function (a, b) {
2234
2297
  return a[0] - b[0];
2235
2298
  }).forEach(function (item) {
2236
- _this14._offsets.push(item[0]);
2237
- _this14._targets.push(item[1]);
2299
+ _this19._offsets.push(item[0]);
2300
+ _this19._targets.push(item[1]);
2238
2301
  });
2239
2302
  };
2240
2303
 
@@ -2272,17 +2335,21 @@ var ScrollSpy = function ($) {
2272
2335
  };
2273
2336
 
2274
2337
  ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
2275
- return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
2338
+ return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
2276
2339
  };
2277
2340
 
2278
2341
  ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
2279
2342
  return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
2280
2343
  };
2281
2344
 
2345
+ ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
2346
+ return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
2347
+ };
2348
+
2282
2349
  ScrollSpy.prototype._process = function _process() {
2283
2350
  var scrollTop = this._getScrollTop() + this._config.offset;
2284
2351
  var scrollHeight = this._getScrollHeight();
2285
- var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
2352
+ var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
2286
2353
 
2287
2354
  if (this._scrollHeight !== scrollHeight) {
2288
2355
  this.refresh();
@@ -2294,9 +2361,10 @@ var ScrollSpy = function ($) {
2294
2361
  if (this._activeTarget !== target) {
2295
2362
  this._activate(target);
2296
2363
  }
2364
+ return;
2297
2365
  }
2298
2366
 
2299
- if (this._activeTarget && scrollTop < this._offsets[0]) {
2367
+ if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
2300
2368
  this._activeTarget = null;
2301
2369
  this._clear();
2302
2370
  return;
@@ -2329,7 +2397,7 @@ var ScrollSpy = function ($) {
2329
2397
  } else {
2330
2398
  // todo (fat) this is kinda sus...
2331
2399
  // recursively add actives to tested nav-links
2332
- $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
2400
+ $link.parents(Selector.LI).find('> ' + Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
2333
2401
  }
2334
2402
 
2335
2403
  $(this._scrollElement).trigger(Event.ACTIVATE, {
@@ -2346,7 +2414,7 @@ var ScrollSpy = function ($) {
2346
2414
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
2347
2415
  return this.each(function () {
2348
2416
  var data = $(this).data(DATA_KEY);
2349
- var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config || null;
2417
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
2350
2418
 
2351
2419
  if (!data) {
2352
2420
  data = new ScrollSpy(this, _config);
@@ -2410,7 +2478,7 @@ var ScrollSpy = function ($) {
2410
2478
 
2411
2479
  /**
2412
2480
  * --------------------------------------------------------------------------
2413
- * Bootstrap (v4.0.0-alpha.5): tab.js
2481
+ * Bootstrap (v4.0.0-alpha.6): tab.js
2414
2482
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2415
2483
  * --------------------------------------------------------------------------
2416
2484
  */
@@ -2424,7 +2492,7 @@ var Tab = function ($) {
2424
2492
  */
2425
2493
 
2426
2494
  var NAME = 'tab';
2427
- var VERSION = '4.0.0-alpha.5';
2495
+ var VERSION = '4.0.0-alpha.6';
2428
2496
  var DATA_KEY = 'bs.tab';
2429
2497
  var EVENT_KEY = '.' + DATA_KEY;
2430
2498
  var DATA_API_KEY = '.data-api';
@@ -2442,15 +2510,16 @@ var Tab = function ($) {
2442
2510
  var ClassName = {
2443
2511
  DROPDOWN_MENU: 'dropdown-menu',
2444
2512
  ACTIVE: 'active',
2513
+ DISABLED: 'disabled',
2445
2514
  FADE: 'fade',
2446
- IN: 'in'
2515
+ SHOW: 'show'
2447
2516
  };
2448
2517
 
2449
2518
  var Selector = {
2450
2519
  A: 'a',
2451
2520
  LI: 'li',
2452
2521
  DROPDOWN: '.dropdown',
2453
- UL: 'ul:not(.dropdown-menu)',
2522
+ LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)',
2454
2523
  FADE_CHILD: '> .nav-item .fade, > .fade',
2455
2524
  ACTIVE: '.active',
2456
2525
  ACTIVE_CHILD: '> .nav-item > .active, > .active',
@@ -2477,19 +2546,19 @@ var Tab = function ($) {
2477
2546
  // public
2478
2547
 
2479
2548
  Tab.prototype.show = function show() {
2480
- var _this15 = this;
2549
+ var _this20 = this;
2481
2550
 
2482
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
2551
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
2483
2552
  return;
2484
2553
  }
2485
2554
 
2486
2555
  var target = void 0;
2487
2556
  var previous = void 0;
2488
- var ulElement = $(this._element).closest(Selector.UL)[0];
2557
+ var listElement = $(this._element).closest(Selector.LIST)[0];
2489
2558
  var selector = Util.getSelectorFromElement(this._element);
2490
2559
 
2491
- if (ulElement) {
2492
- previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
2560
+ if (listElement) {
2561
+ previous = $.makeArray($(listElement).find(Selector.ACTIVE));
2493
2562
  previous = previous[previous.length - 1];
2494
2563
  }
2495
2564
 
@@ -2515,11 +2584,11 @@ var Tab = function ($) {
2515
2584
  target = $(selector)[0];
2516
2585
  }
2517
2586
 
2518
- this._activate(this._element, ulElement);
2587
+ this._activate(this._element, listElement);
2519
2588
 
2520
2589
  var complete = function complete() {
2521
2590
  var hiddenEvent = $.Event(Event.HIDDEN, {
2522
- relatedTarget: _this15._element
2591
+ relatedTarget: _this20._element
2523
2592
  });
2524
2593
 
2525
2594
  var shownEvent = $.Event(Event.SHOWN, {
@@ -2527,7 +2596,7 @@ var Tab = function ($) {
2527
2596
  });
2528
2597
 
2529
2598
  $(previous).trigger(hiddenEvent);
2530
- $(_this15._element).trigger(shownEvent);
2599
+ $(_this20._element).trigger(shownEvent);
2531
2600
  };
2532
2601
 
2533
2602
  if (target) {
@@ -2545,10 +2614,14 @@ var Tab = function ($) {
2545
2614
  // private
2546
2615
 
2547
2616
  Tab.prototype._activate = function _activate(element, container, callback) {
2617
+ var _this21 = this;
2618
+
2548
2619
  var active = $(container).find(Selector.ACTIVE_CHILD)[0];
2549
2620
  var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
2550
2621
 
2551
- var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
2622
+ var complete = function complete() {
2623
+ return _this21._transitionComplete(element, active, isTransitioning, callback);
2624
+ };
2552
2625
 
2553
2626
  if (active && isTransitioning) {
2554
2627
  $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
@@ -2557,7 +2630,7 @@ var Tab = function ($) {
2557
2630
  }
2558
2631
 
2559
2632
  if (active) {
2560
- $(active).removeClass(ClassName.IN);
2633
+ $(active).removeClass(ClassName.SHOW);
2561
2634
  }
2562
2635
  };
2563
2636
 
@@ -2565,7 +2638,7 @@ var Tab = function ($) {
2565
2638
  if (active) {
2566
2639
  $(active).removeClass(ClassName.ACTIVE);
2567
2640
 
2568
- var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
2641
+ var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
2569
2642
 
2570
2643
  if (dropdownChild) {
2571
2644
  $(dropdownChild).removeClass(ClassName.ACTIVE);
@@ -2579,7 +2652,7 @@ var Tab = function ($) {
2579
2652
 
2580
2653
  if (isTransitioning) {
2581
2654
  Util.reflow(element);
2582
- $(element).addClass(ClassName.IN);
2655
+ $(element).addClass(ClassName.SHOW);
2583
2656
  } else {
2584
2657
  $(element).removeClass(ClassName.FADE);
2585
2658
  }
@@ -2607,7 +2680,7 @@ var Tab = function ($) {
2607
2680
  var data = $this.data(DATA_KEY);
2608
2681
 
2609
2682
  if (!data) {
2610
- data = data = new Tab(this);
2683
+ data = new Tab(this);
2611
2684
  $this.data(DATA_KEY, data);
2612
2685
  }
2613
2686
 
@@ -2661,7 +2734,7 @@ var Tab = function ($) {
2661
2734
 
2662
2735
  /**
2663
2736
  * --------------------------------------------------------------------------
2664
- * Bootstrap (v4.0.0-alpha.5): tooltip.js
2737
+ * Bootstrap (v4.0.0-alpha.6): tooltip.js
2665
2738
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2666
2739
  * --------------------------------------------------------------------------
2667
2740
  */
@@ -2672,7 +2745,7 @@ var Tooltip = function ($) {
2672
2745
  * Check for Tether dependency
2673
2746
  * Tether - http://tether.io/
2674
2747
  */
2675
- if (window.Tether === undefined) {
2748
+ if (typeof Tether === 'undefined') {
2676
2749
  throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
2677
2750
  }
2678
2751
 
@@ -2683,7 +2756,7 @@ var Tooltip = function ($) {
2683
2756
  */
2684
2757
 
2685
2758
  var NAME = 'tooltip';
2686
- var VERSION = '4.0.0-alpha.5';
2759
+ var VERSION = '4.0.0-alpha.6';
2687
2760
  var DATA_KEY = 'bs.tooltip';
2688
2761
  var EVENT_KEY = '.' + DATA_KEY;
2689
2762
  var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -2700,7 +2773,8 @@ var Tooltip = function ($) {
2700
2773
  selector: false,
2701
2774
  placement: 'top',
2702
2775
  offset: '0 0',
2703
- constraints: []
2776
+ constraints: [],
2777
+ container: false
2704
2778
  };
2705
2779
 
2706
2780
  var DefaultType = {
@@ -2713,7 +2787,8 @@ var Tooltip = function ($) {
2713
2787
  selector: '(string|boolean)',
2714
2788
  placement: '(string|function)',
2715
2789
  offset: 'string',
2716
- constraints: 'array'
2790
+ constraints: 'array',
2791
+ container: '(string|element|boolean)'
2717
2792
  };
2718
2793
 
2719
2794
  var AttachmentMap = {
@@ -2724,7 +2799,7 @@ var Tooltip = function ($) {
2724
2799
  };
2725
2800
 
2726
2801
  var HoverState = {
2727
- IN: 'in',
2802
+ SHOW: 'show',
2728
2803
  OUT: 'out'
2729
2804
  };
2730
2805
 
@@ -2743,7 +2818,7 @@ var Tooltip = function ($) {
2743
2818
 
2744
2819
  var ClassName = {
2745
2820
  FADE: 'fade',
2746
- IN: 'in'
2821
+ SHOW: 'show'
2747
2822
  };
2748
2823
 
2749
2824
  var Selector = {
@@ -2778,6 +2853,7 @@ var Tooltip = function ($) {
2778
2853
  this._timeout = 0;
2779
2854
  this._hoverState = '';
2780
2855
  this._activeTrigger = {};
2856
+ this._isTransitioning = false;
2781
2857
  this._tether = null;
2782
2858
 
2783
2859
  // protected
@@ -2823,7 +2899,7 @@ var Tooltip = function ($) {
2823
2899
  }
2824
2900
  } else {
2825
2901
 
2826
- if ($(this.getTipElement()).hasClass(ClassName.IN)) {
2902
+ if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {
2827
2903
  this._leave(null, this);
2828
2904
  return;
2829
2905
  }
@@ -2840,6 +2916,7 @@ var Tooltip = function ($) {
2840
2916
  $.removeData(this.element, this.constructor.DATA_KEY);
2841
2917
 
2842
2918
  $(this.element).off(this.constructor.EVENT_KEY);
2919
+ $(this.element).closest('.modal').off('hide.bs.modal');
2843
2920
 
2844
2921
  if (this.tip) {
2845
2922
  $(this.tip).remove();
@@ -2857,11 +2934,17 @@ var Tooltip = function ($) {
2857
2934
  };
2858
2935
 
2859
2936
  Tooltip.prototype.show = function show() {
2860
- var _this16 = this;
2937
+ var _this22 = this;
2861
2938
 
2862
- var showEvent = $.Event(this.constructor.Event.SHOW);
2939
+ if ($(this.element).css('display') === 'none') {
2940
+ throw new Error('Please use show on visible elements');
2941
+ }
2863
2942
 
2943
+ var showEvent = $.Event(this.constructor.Event.SHOW);
2864
2944
  if (this.isWithContent() && this._isEnabled) {
2945
+ if (this._isTransitioning) {
2946
+ throw new Error('Tooltip is transitioning');
2947
+ }
2865
2948
  $(this.element).trigger(showEvent);
2866
2949
 
2867
2950
  var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
@@ -2886,7 +2969,9 @@ var Tooltip = function ($) {
2886
2969
 
2887
2970
  var attachment = this._getAttachment(placement);
2888
2971
 
2889
- $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
2972
+ var container = this.config.container === false ? document.body : $(this.config.container);
2973
+
2974
+ $(tip).data(this.constructor.DATA_KEY, this).appendTo(container);
2890
2975
 
2891
2976
  $(this.element).trigger(this.constructor.Event.INSERTED);
2892
2977
 
@@ -2904,20 +2989,22 @@ var Tooltip = function ($) {
2904
2989
  Util.reflow(tip);
2905
2990
  this._tether.position();
2906
2991
 
2907
- $(tip).addClass(ClassName.IN);
2992
+ $(tip).addClass(ClassName.SHOW);
2908
2993
 
2909
2994
  var complete = function complete() {
2910
- var prevHoverState = _this16._hoverState;
2911
- _this16._hoverState = null;
2995
+ var prevHoverState = _this22._hoverState;
2996
+ _this22._hoverState = null;
2997
+ _this22._isTransitioning = false;
2912
2998
 
2913
- $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
2999
+ $(_this22.element).trigger(_this22.constructor.Event.SHOWN);
2914
3000
 
2915
3001
  if (prevHoverState === HoverState.OUT) {
2916
- _this16._leave(null, _this16);
3002
+ _this22._leave(null, _this22);
2917
3003
  }
2918
3004
  };
2919
3005
 
2920
3006
  if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
3007
+ this._isTransitioning = true;
2921
3008
  $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
2922
3009
  return;
2923
3010
  }
@@ -2927,18 +3014,22 @@ var Tooltip = function ($) {
2927
3014
  };
2928
3015
 
2929
3016
  Tooltip.prototype.hide = function hide(callback) {
2930
- var _this17 = this;
3017
+ var _this23 = this;
2931
3018
 
2932
3019
  var tip = this.getTipElement();
2933
3020
  var hideEvent = $.Event(this.constructor.Event.HIDE);
3021
+ if (this._isTransitioning) {
3022
+ throw new Error('Tooltip is transitioning');
3023
+ }
2934
3024
  var complete = function complete() {
2935
- if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
3025
+ if (_this23._hoverState !== HoverState.SHOW && tip.parentNode) {
2936
3026
  tip.parentNode.removeChild(tip);
2937
3027
  }
2938
3028
 
2939
- _this17.element.removeAttribute('aria-describedby');
2940
- $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
2941
- _this17.cleanupTether();
3029
+ _this23.element.removeAttribute('aria-describedby');
3030
+ $(_this23.element).trigger(_this23.constructor.Event.HIDDEN);
3031
+ _this23._isTransitioning = false;
3032
+ _this23.cleanupTether();
2942
3033
 
2943
3034
  if (callback) {
2944
3035
  callback();
@@ -2951,10 +3042,14 @@ var Tooltip = function ($) {
2951
3042
  return;
2952
3043
  }
2953
3044
 
2954
- $(tip).removeClass(ClassName.IN);
3045
+ $(tip).removeClass(ClassName.SHOW);
2955
3046
 
2956
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
3047
+ this._activeTrigger[Trigger.CLICK] = false;
3048
+ this._activeTrigger[Trigger.FOCUS] = false;
3049
+ this._activeTrigger[Trigger.HOVER] = false;
2957
3050
 
3051
+ if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
3052
+ this._isTransitioning = true;
2958
3053
  $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
2959
3054
  } else {
2960
3055
  complete();
@@ -2978,7 +3073,7 @@ var Tooltip = function ($) {
2978
3073
 
2979
3074
  this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
2980
3075
 
2981
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
3076
+ $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
2982
3077
 
2983
3078
  this.cleanupTether();
2984
3079
  };
@@ -3022,19 +3117,29 @@ var Tooltip = function ($) {
3022
3117
  };
3023
3118
 
3024
3119
  Tooltip.prototype._setListeners = function _setListeners() {
3025
- var _this18 = this;
3120
+ var _this24 = this;
3026
3121
 
3027
3122
  var triggers = this.config.trigger.split(' ');
3028
3123
 
3029
3124
  triggers.forEach(function (trigger) {
3030
3125
  if (trigger === 'click') {
3031
- $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
3126
+ $(_this24.element).on(_this24.constructor.Event.CLICK, _this24.config.selector, function (event) {
3127
+ return _this24.toggle(event);
3128
+ });
3032
3129
  } else if (trigger !== Trigger.MANUAL) {
3033
- var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
3034
- var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
3130
+ var eventIn = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSEENTER : _this24.constructor.Event.FOCUSIN;
3131
+ var eventOut = trigger === Trigger.HOVER ? _this24.constructor.Event.MOUSELEAVE : _this24.constructor.Event.FOCUSOUT;
3035
3132
 
3036
- $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
3133
+ $(_this24.element).on(eventIn, _this24.config.selector, function (event) {
3134
+ return _this24._enter(event);
3135
+ }).on(eventOut, _this24.config.selector, function (event) {
3136
+ return _this24._leave(event);
3137
+ });
3037
3138
  }
3139
+
3140
+ $(_this24.element).closest('.modal').on('hide.bs.modal', function () {
3141
+ return _this24.hide();
3142
+ });
3038
3143
  });
3039
3144
 
3040
3145
  if (this.config.selector) {
@@ -3069,14 +3174,14 @@ var Tooltip = function ($) {
3069
3174
  context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
3070
3175
  }
3071
3176
 
3072
- if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
3073
- context._hoverState = HoverState.IN;
3177
+ if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
3178
+ context._hoverState = HoverState.SHOW;
3074
3179
  return;
3075
3180
  }
3076
3181
 
3077
3182
  clearTimeout(context._timeout);
3078
3183
 
3079
- context._hoverState = HoverState.IN;
3184
+ context._hoverState = HoverState.SHOW;
3080
3185
 
3081
3186
  if (!context.config.delay || !context.config.delay.show) {
3082
3187
  context.show();
@@ -3084,7 +3189,7 @@ var Tooltip = function ($) {
3084
3189
  }
3085
3190
 
3086
3191
  context._timeout = setTimeout(function () {
3087
- if (context._hoverState === HoverState.IN) {
3192
+ if (context._hoverState === HoverState.SHOW) {
3088
3193
  context.show();
3089
3194
  }
3090
3195
  }, context.config.delay.show);
@@ -3168,7 +3273,7 @@ var Tooltip = function ($) {
3168
3273
  Tooltip._jQueryInterface = function _jQueryInterface(config) {
3169
3274
  return this.each(function () {
3170
3275
  var data = $(this).data(DATA_KEY);
3171
- var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null;
3276
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
3172
3277
 
3173
3278
  if (!data && /dispose|hide/.test(config)) {
3174
3279
  return;
@@ -3246,7 +3351,7 @@ var Tooltip = function ($) {
3246
3351
 
3247
3352
  /**
3248
3353
  * --------------------------------------------------------------------------
3249
- * Bootstrap (v4.0.0-alpha.5): popover.js
3354
+ * Bootstrap (v4.0.0-alpha.6): popover.js
3250
3355
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3251
3356
  * --------------------------------------------------------------------------
3252
3357
  */
@@ -3260,7 +3365,7 @@ var Popover = function ($) {
3260
3365
  */
3261
3366
 
3262
3367
  var NAME = 'popover';
3263
- var VERSION = '4.0.0-alpha.5';
3368
+ var VERSION = '4.0.0-alpha.6';
3264
3369
  var DATA_KEY = 'bs.popover';
3265
3370
  var EVENT_KEY = '.' + DATA_KEY;
3266
3371
  var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -3278,7 +3383,7 @@ var Popover = function ($) {
3278
3383
 
3279
3384
  var ClassName = {
3280
3385
  FADE: 'fade',
3281
- IN: 'in'
3386
+ SHOW: 'show'
3282
3387
  };
3283
3388
 
3284
3389
  var Selector = {
@@ -3331,7 +3436,7 @@ var Popover = function ($) {
3331
3436
  this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
3332
3437
  this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
3333
3438
 
3334
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
3439
+ $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
3335
3440
 
3336
3441
  this.cleanupTether();
3337
3442
  };