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
@@ -6,7 +6,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
6
6
 
7
7
  /**
8
8
  * --------------------------------------------------------------------------
9
- * Bootstrap (v4.0.0-alpha.5): modal.js
9
+ * Bootstrap (v4.0.0-alpha.6): modal.js
10
10
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11
11
  * --------------------------------------------------------------------------
12
12
  */
@@ -20,7 +20,7 @@ var Modal = function ($) {
20
20
  */
21
21
 
22
22
  var NAME = 'modal';
23
- var VERSION = '4.0.0-alpha.5';
23
+ var VERSION = '4.0.0-alpha.6';
24
24
  var DATA_KEY = 'bs.modal';
25
25
  var EVENT_KEY = '.' + DATA_KEY;
26
26
  var DATA_API_KEY = '.data-api';
@@ -62,14 +62,14 @@ var Modal = function ($) {
62
62
  BACKDROP: 'modal-backdrop',
63
63
  OPEN: 'modal-open',
64
64
  FADE: 'fade',
65
- IN: 'in'
65
+ SHOW: 'show'
66
66
  };
67
67
 
68
68
  var Selector = {
69
69
  DIALOG: '.modal-dialog',
70
70
  DATA_TOGGLE: '[data-toggle="modal"]',
71
71
  DATA_DISMISS: '[data-dismiss="modal"]',
72
- FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
72
+ FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
73
73
  };
74
74
 
75
75
  /**
@@ -89,6 +89,7 @@ var Modal = function ($) {
89
89
  this._isShown = false;
90
90
  this._isBodyOverflowing = false;
91
91
  this._ignoreBackdropClick = false;
92
+ this._isTransitioning = false;
92
93
  this._originalBodyPadding = 0;
93
94
  this._scrollbarWidth = 0;
94
95
  }
@@ -104,6 +105,13 @@ var Modal = function ($) {
104
105
  Modal.prototype.show = function show(relatedTarget) {
105
106
  var _this = this;
106
107
 
108
+ if (this._isTransitioning) {
109
+ throw new Error('Modal is transitioning');
110
+ }
111
+
112
+ if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
113
+ this._isTransitioning = true;
114
+ }
107
115
  var showEvent = $.Event(Event.SHOW, {
108
116
  relatedTarget: relatedTarget
109
117
  });
@@ -124,7 +132,9 @@ var Modal = function ($) {
124
132
  this._setEscapeEvent();
125
133
  this._setResizeEvent();
126
134
 
127
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
135
+ $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
136
+ return _this.hide(event);
137
+ });
128
138
 
129
139
  $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
130
140
  $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
@@ -134,16 +144,28 @@ var Modal = function ($) {
134
144
  });
135
145
  });
136
146
 
137
- this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
147
+ this._showBackdrop(function () {
148
+ return _this._showElement(relatedTarget);
149
+ });
138
150
  };
139
151
 
140
152
  Modal.prototype.hide = function hide(event) {
153
+ var _this2 = this;
154
+
141
155
  if (event) {
142
156
  event.preventDefault();
143
157
  }
144
158
 
145
- var hideEvent = $.Event(Event.HIDE);
159
+ if (this._isTransitioning) {
160
+ throw new Error('Modal is transitioning');
161
+ }
162
+
163
+ var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
164
+ if (transition) {
165
+ this._isTransitioning = true;
166
+ }
146
167
 
168
+ var hideEvent = $.Event(Event.HIDE);
147
169
  $(this._element).trigger(hideEvent);
148
170
 
149
171
  if (!this._isShown || hideEvent.isDefaultPrevented()) {
@@ -157,14 +179,15 @@ var Modal = function ($) {
157
179
 
158
180
  $(document).off(Event.FOCUSIN);
159
181
 
160
- $(this._element).removeClass(ClassName.IN);
182
+ $(this._element).removeClass(ClassName.SHOW);
161
183
 
162
184
  $(this._element).off(Event.CLICK_DISMISS);
163
185
  $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
164
186
 
165
- if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
166
-
167
- $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
187
+ if (transition) {
188
+ $(this._element).one(Util.TRANSITION_END, function (event) {
189
+ return _this2._hideModal(event);
190
+ }).emulateTransitionEnd(TRANSITION_DURATION);
168
191
  } else {
169
192
  this._hideModal();
170
193
  }
@@ -173,10 +196,7 @@ var Modal = function ($) {
173
196
  Modal.prototype.dispose = function dispose() {
174
197
  $.removeData(this._element, DATA_KEY);
175
198
 
176
- $(window).off(EVENT_KEY);
177
- $(document).off(EVENT_KEY);
178
- $(this._element).off(EVENT_KEY);
179
- $(this._backdrop).off(EVENT_KEY);
199
+ $(window, document, this._element, this._backdrop).off(EVENT_KEY);
180
200
 
181
201
  this._config = null;
182
202
  this._element = null;
@@ -198,7 +218,7 @@ var Modal = function ($) {
198
218
  };
199
219
 
200
220
  Modal.prototype._showElement = function _showElement(relatedTarget) {
201
- var _this2 = this;
221
+ var _this3 = this;
202
222
 
203
223
  var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
204
224
 
@@ -215,7 +235,7 @@ var Modal = function ($) {
215
235
  Util.reflow(this._element);
216
236
  }
217
237
 
218
- $(this._element).addClass(ClassName.IN);
238
+ $(this._element).addClass(ClassName.SHOW);
219
239
 
220
240
  if (this._config.focus) {
221
241
  this._enforceFocus();
@@ -226,10 +246,11 @@ var Modal = function ($) {
226
246
  });
227
247
 
228
248
  var transitionComplete = function transitionComplete() {
229
- if (_this2._config.focus) {
230
- _this2._element.focus();
249
+ if (_this3._config.focus) {
250
+ _this3._element.focus();
231
251
  }
232
- $(_this2._element).trigger(shownEvent);
252
+ _this3._isTransitioning = false;
253
+ $(_this3._element).trigger(shownEvent);
233
254
  };
234
255
 
235
256
  if (transition) {
@@ -240,23 +261,23 @@ var Modal = function ($) {
240
261
  };
241
262
 
242
263
  Modal.prototype._enforceFocus = function _enforceFocus() {
243
- var _this3 = this;
264
+ var _this4 = this;
244
265
 
245
266
  $(document).off(Event.FOCUSIN) // guard against infinite focus loop
246
267
  .on(Event.FOCUSIN, function (event) {
247
- if (document !== event.target && _this3._element !== event.target && !$(_this3._element).has(event.target).length) {
248
- _this3._element.focus();
268
+ if (document !== event.target && _this4._element !== event.target && !$(_this4._element).has(event.target).length) {
269
+ _this4._element.focus();
249
270
  }
250
271
  });
251
272
  };
252
273
 
253
274
  Modal.prototype._setEscapeEvent = function _setEscapeEvent() {
254
- var _this4 = this;
275
+ var _this5 = this;
255
276
 
256
277
  if (this._isShown && this._config.keyboard) {
257
278
  $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
258
279
  if (event.which === ESCAPE_KEYCODE) {
259
- _this4.hide();
280
+ _this5.hide();
260
281
  }
261
282
  });
262
283
  } else if (!this._isShown) {
@@ -265,23 +286,28 @@ var Modal = function ($) {
265
286
  };
266
287
 
267
288
  Modal.prototype._setResizeEvent = function _setResizeEvent() {
289
+ var _this6 = this;
290
+
268
291
  if (this._isShown) {
269
- $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
292
+ $(window).on(Event.RESIZE, function (event) {
293
+ return _this6._handleUpdate(event);
294
+ });
270
295
  } else {
271
296
  $(window).off(Event.RESIZE);
272
297
  }
273
298
  };
274
299
 
275
300
  Modal.prototype._hideModal = function _hideModal() {
276
- var _this5 = this;
301
+ var _this7 = this;
277
302
 
278
303
  this._element.style.display = 'none';
279
304
  this._element.setAttribute('aria-hidden', 'true');
305
+ this._isTransitioning = false;
280
306
  this._showBackdrop(function () {
281
307
  $(document.body).removeClass(ClassName.OPEN);
282
- _this5._resetAdjustments();
283
- _this5._resetScrollbar();
284
- $(_this5._element).trigger(Event.HIDDEN);
308
+ _this7._resetAdjustments();
309
+ _this7._resetScrollbar();
310
+ $(_this7._element).trigger(Event.HIDDEN);
285
311
  });
286
312
  };
287
313
 
@@ -293,7 +319,7 @@ var Modal = function ($) {
293
319
  };
294
320
 
295
321
  Modal.prototype._showBackdrop = function _showBackdrop(callback) {
296
- var _this6 = this;
322
+ var _this8 = this;
297
323
 
298
324
  var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
299
325
 
@@ -310,17 +336,17 @@ var Modal = function ($) {
310
336
  $(this._backdrop).appendTo(document.body);
311
337
 
312
338
  $(this._element).on(Event.CLICK_DISMISS, function (event) {
313
- if (_this6._ignoreBackdropClick) {
314
- _this6._ignoreBackdropClick = false;
339
+ if (_this8._ignoreBackdropClick) {
340
+ _this8._ignoreBackdropClick = false;
315
341
  return;
316
342
  }
317
343
  if (event.target !== event.currentTarget) {
318
344
  return;
319
345
  }
320
- if (_this6._config.backdrop === 'static') {
321
- _this6._element.focus();
346
+ if (_this8._config.backdrop === 'static') {
347
+ _this8._element.focus();
322
348
  } else {
323
- _this6.hide();
349
+ _this8.hide();
324
350
  }
325
351
  });
326
352
 
@@ -328,7 +354,7 @@ var Modal = function ($) {
328
354
  Util.reflow(this._backdrop);
329
355
  }
330
356
 
331
- $(this._backdrop).addClass(ClassName.IN);
357
+ $(this._backdrop).addClass(ClassName.SHOW);
332
358
 
333
359
  if (!callback) {
334
360
  return;
@@ -341,10 +367,10 @@ var Modal = function ($) {
341
367
 
342
368
  $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
343
369
  } else if (!this._isShown && this._backdrop) {
344
- $(this._backdrop).removeClass(ClassName.IN);
370
+ $(this._backdrop).removeClass(ClassName.SHOW);
345
371
 
346
372
  var callbackRemove = function callbackRemove() {
347
- _this6._removeBackdrop();
373
+ _this8._removeBackdrop();
348
374
  if (callback) {
349
375
  callback();
350
376
  }
@@ -460,7 +486,7 @@ var Modal = function ($) {
460
486
  */
461
487
 
462
488
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
463
- var _this7 = this;
489
+ var _this9 = this;
464
490
 
465
491
  var target = void 0;
466
492
  var selector = Util.getSelectorFromElement(this);
@@ -471,7 +497,7 @@ var Modal = function ($) {
471
497
 
472
498
  var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
473
499
 
474
- if (this.tagName === 'A') {
500
+ if (this.tagName === 'A' || this.tagName === 'AREA') {
475
501
  event.preventDefault();
476
502
  }
477
503
 
@@ -482,8 +508,8 @@ var Modal = function ($) {
482
508
  }
483
509
 
484
510
  $target.one(Event.HIDDEN, function () {
485
- if ($(_this7).is(':visible')) {
486
- _this7.focus();
511
+ if ($(_this9).is(':visible')) {
512
+ _this9.focus();
487
513
  }
488
514
  });
489
515
  });
@@ -10,7 +10,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
10
10
 
11
11
  /**
12
12
  * --------------------------------------------------------------------------
13
- * Bootstrap (v4.0.0-alpha.5): popover.js
13
+ * Bootstrap (v4.0.0-alpha.6): popover.js
14
14
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
15
15
  * --------------------------------------------------------------------------
16
16
  */
@@ -24,7 +24,7 @@ var Popover = function ($) {
24
24
  */
25
25
 
26
26
  var NAME = 'popover';
27
- var VERSION = '4.0.0-alpha.5';
27
+ var VERSION = '4.0.0-alpha.6';
28
28
  var DATA_KEY = 'bs.popover';
29
29
  var EVENT_KEY = '.' + DATA_KEY;
30
30
  var JQUERY_NO_CONFLICT = $.fn[NAME];
@@ -42,7 +42,7 @@ var Popover = function ($) {
42
42
 
43
43
  var ClassName = {
44
44
  FADE: 'fade',
45
- IN: 'in'
45
+ SHOW: 'show'
46
46
  };
47
47
 
48
48
  var Selector = {
@@ -95,7 +95,7 @@ var Popover = function ($) {
95
95
  this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
96
96
  this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
97
97
 
98
- $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
98
+ $tip.removeClass(ClassName.FADE + ' ' + ClassName.SHOW);
99
99
 
100
100
  this.cleanupTether();
101
101
  };
@@ -6,7 +6,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
6
6
 
7
7
  /**
8
8
  * --------------------------------------------------------------------------
9
- * Bootstrap (v4.0.0-alpha.5): scrollspy.js
9
+ * Bootstrap (v4.0.0-alpha.6): scrollspy.js
10
10
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11
11
  * --------------------------------------------------------------------------
12
12
  */
@@ -20,7 +20,7 @@ var ScrollSpy = function ($) {
20
20
  */
21
21
 
22
22
  var NAME = 'scrollspy';
23
- var VERSION = '4.0.0-alpha.5';
23
+ var VERSION = '4.0.0-alpha.6';
24
24
  var DATA_KEY = 'bs.scrollspy';
25
25
  var EVENT_KEY = '.' + DATA_KEY;
26
26
  var DATA_API_KEY = '.data-api';
@@ -77,6 +77,8 @@ var ScrollSpy = function ($) {
77
77
 
78
78
  var ScrollSpy = function () {
79
79
  function ScrollSpy(element, config) {
80
+ var _this = this;
81
+
80
82
  _classCallCheck(this, ScrollSpy);
81
83
 
82
84
  this._element = element;
@@ -88,7 +90,9 @@ var ScrollSpy = function ($) {
88
90
  this._activeTarget = null;
89
91
  this._scrollHeight = 0;
90
92
 
91
- $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
93
+ $(this._scrollElement).on(Event.SCROLL, function (event) {
94
+ return _this._process(event);
95
+ });
92
96
 
93
97
  this.refresh();
94
98
  this._process();
@@ -99,7 +103,7 @@ var ScrollSpy = function ($) {
99
103
  // public
100
104
 
101
105
  ScrollSpy.prototype.refresh = function refresh() {
102
- var _this = this;
106
+ var _this2 = this;
103
107
 
104
108
  var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
105
109
 
@@ -132,8 +136,8 @@ var ScrollSpy = function ($) {
132
136
  }).sort(function (a, b) {
133
137
  return a[0] - b[0];
134
138
  }).forEach(function (item) {
135
- _this._offsets.push(item[0]);
136
- _this._targets.push(item[1]);
139
+ _this2._offsets.push(item[0]);
140
+ _this2._targets.push(item[1]);
137
141
  });
138
142
  };
139
143
 
@@ -171,17 +175,21 @@ var ScrollSpy = function ($) {
171
175
  };
172
176
 
173
177
  ScrollSpy.prototype._getScrollTop = function _getScrollTop() {
174
- return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
178
+ return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
175
179
  };
176
180
 
177
181
  ScrollSpy.prototype._getScrollHeight = function _getScrollHeight() {
178
182
  return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
179
183
  };
180
184
 
185
+ ScrollSpy.prototype._getOffsetHeight = function _getOffsetHeight() {
186
+ return this._scrollElement === window ? window.innerHeight : this._scrollElement.offsetHeight;
187
+ };
188
+
181
189
  ScrollSpy.prototype._process = function _process() {
182
190
  var scrollTop = this._getScrollTop() + this._config.offset;
183
191
  var scrollHeight = this._getScrollHeight();
184
- var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
192
+ var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
185
193
 
186
194
  if (this._scrollHeight !== scrollHeight) {
187
195
  this.refresh();
@@ -193,9 +201,10 @@ var ScrollSpy = function ($) {
193
201
  if (this._activeTarget !== target) {
194
202
  this._activate(target);
195
203
  }
204
+ return;
196
205
  }
197
206
 
198
- if (this._activeTarget && scrollTop < this._offsets[0]) {
207
+ if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
199
208
  this._activeTarget = null;
200
209
  this._clear();
201
210
  return;
@@ -228,7 +237,7 @@ var ScrollSpy = function ($) {
228
237
  } else {
229
238
  // todo (fat) this is kinda sus...
230
239
  // recursively add actives to tested nav-links
231
- $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
240
+ $link.parents(Selector.LI).find('> ' + Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
232
241
  }
233
242
 
234
243
  $(this._scrollElement).trigger(Event.ACTIVATE, {
@@ -245,7 +254,7 @@ var ScrollSpy = function ($) {
245
254
  ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
246
255
  return this.each(function () {
247
256
  var data = $(this).data(DATA_KEY);
248
- var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config || null;
257
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' && config;
249
258
 
250
259
  if (!data) {
251
260
  data = new ScrollSpy(this, _config);
@@ -4,7 +4,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
4
4
 
5
5
  /**
6
6
  * --------------------------------------------------------------------------
7
- * Bootstrap (v4.0.0-alpha.5): tab.js
7
+ * Bootstrap (v4.0.0-alpha.6): tab.js
8
8
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9
9
  * --------------------------------------------------------------------------
10
10
  */
@@ -18,7 +18,7 @@ var Tab = function ($) {
18
18
  */
19
19
 
20
20
  var NAME = 'tab';
21
- var VERSION = '4.0.0-alpha.5';
21
+ var VERSION = '4.0.0-alpha.6';
22
22
  var DATA_KEY = 'bs.tab';
23
23
  var EVENT_KEY = '.' + DATA_KEY;
24
24
  var DATA_API_KEY = '.data-api';
@@ -36,15 +36,16 @@ var Tab = function ($) {
36
36
  var ClassName = {
37
37
  DROPDOWN_MENU: 'dropdown-menu',
38
38
  ACTIVE: 'active',
39
+ DISABLED: 'disabled',
39
40
  FADE: 'fade',
40
- IN: 'in'
41
+ SHOW: 'show'
41
42
  };
42
43
 
43
44
  var Selector = {
44
45
  A: 'a',
45
46
  LI: 'li',
46
47
  DROPDOWN: '.dropdown',
47
- UL: 'ul:not(.dropdown-menu)',
48
+ LIST: 'ul:not(.dropdown-menu), ol:not(.dropdown-menu), nav:not(.dropdown-menu)',
48
49
  FADE_CHILD: '> .nav-item .fade, > .fade',
49
50
  ACTIVE: '.active',
50
51
  ACTIVE_CHILD: '> .nav-item > .active, > .active',
@@ -73,17 +74,17 @@ var Tab = function ($) {
73
74
  Tab.prototype.show = function show() {
74
75
  var _this = this;
75
76
 
76
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
77
+ if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
77
78
  return;
78
79
  }
79
80
 
80
81
  var target = void 0;
81
82
  var previous = void 0;
82
- var ulElement = $(this._element).closest(Selector.UL)[0];
83
+ var listElement = $(this._element).closest(Selector.LIST)[0];
83
84
  var selector = Util.getSelectorFromElement(this._element);
84
85
 
85
- if (ulElement) {
86
- previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
86
+ if (listElement) {
87
+ previous = $.makeArray($(listElement).find(Selector.ACTIVE));
87
88
  previous = previous[previous.length - 1];
88
89
  }
89
90
 
@@ -109,7 +110,7 @@ var Tab = function ($) {
109
110
  target = $(selector)[0];
110
111
  }
111
112
 
112
- this._activate(this._element, ulElement);
113
+ this._activate(this._element, listElement);
113
114
 
114
115
  var complete = function complete() {
115
116
  var hiddenEvent = $.Event(Event.HIDDEN, {
@@ -139,10 +140,14 @@ var Tab = function ($) {
139
140
  // private
140
141
 
141
142
  Tab.prototype._activate = function _activate(element, container, callback) {
143
+ var _this2 = this;
144
+
142
145
  var active = $(container).find(Selector.ACTIVE_CHILD)[0];
143
146
  var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
144
147
 
145
- var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
148
+ var complete = function complete() {
149
+ return _this2._transitionComplete(element, active, isTransitioning, callback);
150
+ };
146
151
 
147
152
  if (active && isTransitioning) {
148
153
  $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
@@ -151,7 +156,7 @@ var Tab = function ($) {
151
156
  }
152
157
 
153
158
  if (active) {
154
- $(active).removeClass(ClassName.IN);
159
+ $(active).removeClass(ClassName.SHOW);
155
160
  }
156
161
  };
157
162
 
@@ -159,7 +164,7 @@ var Tab = function ($) {
159
164
  if (active) {
160
165
  $(active).removeClass(ClassName.ACTIVE);
161
166
 
162
- var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
167
+ var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
163
168
 
164
169
  if (dropdownChild) {
165
170
  $(dropdownChild).removeClass(ClassName.ACTIVE);
@@ -173,7 +178,7 @@ var Tab = function ($) {
173
178
 
174
179
  if (isTransitioning) {
175
180
  Util.reflow(element);
176
- $(element).addClass(ClassName.IN);
181
+ $(element).addClass(ClassName.SHOW);
177
182
  } else {
178
183
  $(element).removeClass(ClassName.FADE);
179
184
  }
@@ -201,7 +206,7 @@ var Tab = function ($) {
201
206
  var data = $this.data(DATA_KEY);
202
207
 
203
208
  if (!data) {
204
- data = data = new Tab(this);
209
+ data = new Tab(this);
205
210
  $this.data(DATA_KEY, data);
206
211
  }
207
212