bootstrap-sass 3.3.6 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +10 -4
  4. data/LICENSE +2 -1
  5. data/README.md +50 -16
  6. data/assets/javascripts/bootstrap-sprockets.js +3 -3
  7. data/assets/javascripts/bootstrap.js +64 -50
  8. data/assets/javascripts/bootstrap.min.js +4 -4
  9. data/assets/javascripts/bootstrap/affix.js +3 -3
  10. data/assets/javascripts/bootstrap/alert.js +4 -4
  11. data/assets/javascripts/bootstrap/button.js +13 -8
  12. data/assets/javascripts/bootstrap/carousel.js +3 -3
  13. data/assets/javascripts/bootstrap/collapse.js +4 -3
  14. data/assets/javascripts/bootstrap/dropdown.js +3 -3
  15. data/assets/javascripts/bootstrap/modal.js +6 -4
  16. data/assets/javascripts/bootstrap/popover.js +3 -3
  17. data/assets/javascripts/bootstrap/scrollspy.js +3 -3
  18. data/assets/javascripts/bootstrap/tab.js +3 -3
  19. data/assets/javascripts/bootstrap/tooltip.js +13 -7
  20. data/assets/javascripts/bootstrap/transition.js +2 -2
  21. data/assets/stylesheets/_bootstrap.scss +2 -2
  22. data/assets/stylesheets/bootstrap/_button-groups.scss +1 -1
  23. data/assets/stylesheets/bootstrap/_forms.scss +1 -1
  24. data/assets/stylesheets/bootstrap/_input-groups.scss +1 -1
  25. data/assets/stylesheets/bootstrap/_panels.scss +1 -1
  26. data/assets/stylesheets/bootstrap/_scaffolding.scss +1 -1
  27. data/assets/stylesheets/bootstrap/_theme.scss +2 -2
  28. data/assets/stylesheets/bootstrap/_variables.scss +1 -1
  29. data/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +3 -3
  30. data/bower.json +2 -2
  31. data/eyeglass-exports.js +7 -0
  32. data/lib/bootstrap-sass/version.rb +2 -2
  33. data/package.json +19 -5
  34. data/templates/project/_bootstrap-variables.sass +2 -2
  35. data/test/gemfiles/sass_3_3.gemfile +3 -0
  36. data/test/support/dummy_rails_integration.rb +1 -1
  37. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55139f6cb78bf3543a9bfa371598eafbecfc743d
4
- data.tar.gz: ab0260cc09e54be379f9c7f1c1b93f490d85c7ef
3
+ metadata.gz: 013bb0c0a90ddf8a44535fa62101bdd689b546e3
4
+ data.tar.gz: 25f3ca5f87b51c621ccc005a1f928e942fdf1150
5
5
  SHA512:
6
- metadata.gz: e4284b5dbb1561011e953993a4264d12cc373e0aa94a0bb1221714d842819073bd2755b78134094b961344d12275237eded8424eff05f8b3d0d3de910e82386c
7
- data.tar.gz: 25ca22cf946b3f8b286cef43a9d71d851f57268fd44fb72c4463e4938861a48498912a98cfccece688572966e4fe5ca4edee0e18355e53ae3c0c3630e41e32f9
6
+ metadata.gz: e5a94c51d3bf95ef518fbc2ad79415db4895927fc81d0762dc4768b63f8a750e6526aeeaefd56843d119f940538e2263081f65d1271bb7b6dba671654f3476c8
7
+ data.tar.gz: 9a298b7413d8d280786eca28e13f877ea093d33e2b36b82044c316e223a3c1735aa9a8cb8e93710dd43552123962dbca9b3f86e6852844b1dc64d0bca3deb19b
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/dummy_rails/log/*.log
17
17
  test/dummy_rails/public/assets/
18
18
  .DS_Store
19
19
  node_modules
20
+ /.idea
@@ -1,11 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.3.7
4
+
5
+ * Allows jQuery 3.x in bower.json. [#1048](https://github.com/twbs/bootstrap-sass/issues/1048)
6
+ * Adds the `style` and `sass` fields to package.json. [#1045](https://github.com/twbs/bootstrap-sass/issues/1045)
7
+ * Adds Eyeglass support. [#1007](https://github.com/twbs/bootstrap-sass/pull/1007)
8
+
3
9
  ## 3.3.6
4
10
 
5
- Bumps Sass dependency to 3.3.4+ to avoid compatibility issues with @at-root.
6
- Bumps node-sass dependency to ~3.4.2 for Node.js v5 compatibility. [#986](https://github.com/twbs/bootstrap-sass/issues/986)
7
- Fixes breadcrumb content issues on libsass. [#919](https://github.com/twbs/bootstrap-sass/issues/919)
8
- Fixes a Rails 5 compatibility issue. [#965](https://github.com/twbs/bootstrap-sass/pull/965)
11
+ * Bumps Sass dependency to 3.3.4+ to avoid compatibility issues with @at-root.
12
+ * Bumps node-sass dependency to ~3.4.2 for Node.js v5 compatibility. [#986](https://github.com/twbs/bootstrap-sass/issues/986)
13
+ * Fixes breadcrumb content issues on libsass. [#919](https://github.com/twbs/bootstrap-sass/issues/919)
14
+ * Fixes a Rails 5 compatibility issue. [#965](https://github.com/twbs/bootstrap-sass/pull/965)
9
15
 
10
16
  Framework version: Bootstrap **v3.3.6**
11
17
 
data/LICENSE CHANGED
@@ -1,6 +1,7 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2013-2015 Twitter, Inc
3
+ Copyright (c) 2011-2016 Twitter, Inc
4
+ Copyright (c) 2011-2016 The Bootstrap Authors
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -15,6 +15,7 @@ Please see the appropriate guide for your environment of choice:
15
15
  * [Ruby on Rails](#a-ruby-on-rails).
16
16
  * [Compass](#b-compass-without-rails) not on Rails.
17
17
  * [Bower](#c-bower).
18
+ * [npm / Node.js](#d-npm--nodejs).
18
19
 
19
20
  ### a. Ruby on Rails
20
21
 
@@ -157,7 +158,7 @@ This is compatible by default with asset managers such as [wiredep](https://gith
157
158
 
158
159
  #### Node.js Mincer
159
160
 
160
- If you use [mincer][mincer] with node-sass, import bootstrap like so:
161
+ If you use [mincer][mincer] with node-sass, import Bootstrap like so:
161
162
 
162
163
  In `application.css.ejs.scss` (NB **.css.ejs.scss**):
163
164
 
@@ -175,10 +176,15 @@ In `application.js`:
175
176
 
176
177
  See also this [example manifest.js](/test/dummy_node_mincer/manifest.js) for mincer.
177
178
 
179
+ ### d. npm / Node.js
180
+ ```console
181
+ $ npm install bootstrap-sass
182
+ ```
178
183
 
179
- ### Configuration
180
184
 
181
- #### Sass
185
+ ## Configuration
186
+
187
+ ### Sass
182
188
 
183
189
  By default all of Bootstrap is imported.
184
190
 
@@ -191,25 +197,39 @@ In the application Sass file, replace `@import 'bootstrap'` with:
191
197
  @import 'bootstrap-custom';
192
198
  ```
193
199
 
194
- #### Sass: Number Precision
200
+ ### Sass: Number Precision
195
201
 
196
202
  bootstrap-sass [requires](https://github.com/twbs/bootstrap-sass/issues/409) minimum [Sass number precision][sass-precision] of 8 (default is 5).
197
203
 
198
204
  Precision is set for Rails and Compass automatically.
199
- When using ruby Sass compiler standalone or with the Bower version you can set it with:
205
+ When using Ruby Sass compiler standalone or with the Bower version you can set it with:
200
206
 
201
207
  ```ruby
202
208
  ::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max
203
209
  ```
204
210
 
205
- #### Sass: Autoprefixer
211
+ ### Sass: Autoprefixer
206
212
 
207
213
  Bootstrap requires the use of [Autoprefixer][autoprefixer].
208
214
  [Autoprefixer][autoprefixer] adds vendor prefixes to CSS rules using values from [Can I Use](http://caniuse.com/).
209
215
 
210
- #### JavaScript
216
+ To match [upstream Bootstrap's level of browser compatibility](http://getbootstrap.com/getting-started/#support), set Autoprefixer's `browsers` option to:
217
+ ```json
218
+ [
219
+ "Android 2.3",
220
+ "Android >= 4",
221
+ "Chrome >= 20",
222
+ "Firefox >= 24",
223
+ "Explorer >= 8",
224
+ "iOS >= 6",
225
+ "Opera >= 12",
226
+ "Safari >= 6"
227
+ ]
228
+ ```
229
+
230
+ ### JavaScript
211
231
 
212
- [`assets/javascripts/bootstrap.js`](/assets/javascripts/bootstrap.js) contains all of Bootstrap JavaScript,
232
+ [`assets/javascripts/bootstrap.js`](/assets/javascripts/bootstrap.js) contains all of Bootstrap's JavaScript,
213
233
  concatenated in the [correct order](/assets/javascripts/bootstrap-sprockets.js).
214
234
 
215
235
 
@@ -231,7 +251,7 @@ You can check dependencies in the [Bootstrap JS documentation][jsdocs].
231
251
  //= require bootstrap/dropdown
232
252
  ```
233
253
 
234
- #### Fonts
254
+ ### Fonts
235
255
 
236
256
  The fonts are referenced as:
237
257
 
@@ -252,19 +272,19 @@ When using bootstrap-sass with Compass, Sprockets, or Mincer, you **must** impor
252
272
 
253
273
  ### Sass
254
274
 
255
- Import Bootstrap into a Sass file (for example, application.scss) to get all of Bootstrap's styles, mixins and variables!
275
+ Import Bootstrap into a Sass file (for example, `application.scss`) to get all of Bootstrap's styles, mixins and variables!
256
276
 
257
277
  ```scss
258
278
  @import "bootstrap";
259
279
  ```
260
280
 
261
- You can also include optional bootstrap theme:
281
+ You can also include optional Bootstrap theme:
262
282
 
263
283
  ```scss
264
284
  @import "bootstrap/theme";
265
285
  ```
266
286
 
267
- The full list of bootstrap variables can be found [here](http://getbootstrap.com/customize/#less-variables). You can override these by simply redefining the variable before the `@import` directive, e.g.:
287
+ The full list of Bootstrap variables can be found [here](http://getbootstrap.com/customize/#less-variables). You can override these by simply redefining the variable before the `@import` directive, e.g.:
268
288
 
269
289
  ```scss
270
290
  $navbar-default-bg: #312312;
@@ -274,6 +294,22 @@ $navbar-default-color: $light-orange;
274
294
  @import "bootstrap";
275
295
  ```
276
296
 
297
+ ### Eyeglass
298
+
299
+ Bootstrap is available as an [Eyeglass](https://github.com/sass-eyeglass/eyeglass) module. After installing Bootstrap via NPM you can import the Bootstrap library via:
300
+
301
+ ```scss
302
+ @import "bootstrap-sass/bootstrap"
303
+ ```
304
+
305
+ or import only the parts of Bootstrap you need:
306
+
307
+ ```scss
308
+ @import "bootstrap-sass/bootstrap/variables";
309
+ @import "bootstrap-sass/bootstrap/mixins";
310
+ @import "bootstrap-sass/bootstrap/carousel";
311
+ ```
312
+
277
313
  ## Version
278
314
 
279
315
  Bootstrap for Sass version may differ from the upstream version in the last number, known as
@@ -287,9 +323,7 @@ The upstream versions vs the Bootstrap for Sass versions are:
287
323
 
288
324
  | Upstream | Sass |
289
325
  |---------:|--------:|
290
- | 3.3.6 | 3.3.6 |
291
- | 3.3.5 | 3.3.5 |
292
- | 3.3.4 | 3.3.4 |
326
+ | 3.3.4+ | same |
293
327
  | 3.3.2 | 3.3.3 |
294
328
  | <= 3.3.1 | 3.3.1.x |
295
329
 
@@ -320,7 +354,7 @@ To convert a specific branch or version, pass the branch name or the commit hash
320
354
 
321
355
  The latest converter script is located [here][converter] and does the following:
322
356
 
323
- * Converts upstream bootstrap LESS files to its matching SCSS file.
357
+ * Converts upstream Bootstrap LESS files to its matching SCSS file.
324
358
  * Copies all upstream JavaScript into `assets/javascripts/bootstrap`, a Sprockets manifest at `assets/javascripts/bootstrap-sprockets.js`, and a concatenation at `assets/javascripts/bootstrap.js`.
325
359
  * Copies all upstream font files into `assets/fonts/bootstrap`.
326
360
  * Sets `Bootstrap::BOOTSTRAP_SHA` in [version.rb][version] to the branch sha.
@@ -1,12 +1,12 @@
1
- //= require ./bootstrap/affix
1
+ //= require ./bootstrap/transition
2
2
  //= require ./bootstrap/alert
3
3
  //= require ./bootstrap/button
4
4
  //= require ./bootstrap/carousel
5
5
  //= require ./bootstrap/collapse
6
6
  //= require ./bootstrap/dropdown
7
7
  //= require ./bootstrap/modal
8
- //= require ./bootstrap/scrollspy
9
8
  //= require ./bootstrap/tab
10
- //= require ./bootstrap/transition
9
+ //= require ./bootstrap/affix
10
+ //= require ./bootstrap/scrollspy
11
11
  //= require ./bootstrap/tooltip
12
12
  //= require ./bootstrap/popover
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Bootstrap v3.3.6 (http://getbootstrap.com)
3
- * Copyright 2011-2015 Twitter, Inc.
2
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
3
+ * Copyright 2011-2016 Twitter, Inc.
4
4
  * Licensed under the MIT license
5
5
  */
6
6
 
@@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
11
11
  +function ($) {
12
12
  'use strict';
13
13
  var version = $.fn.jquery.split(' ')[0].split('.')
14
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
15
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
14
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
15
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
16
16
  }
17
17
  }(jQuery);
18
18
 
19
19
  /* ========================================================================
20
- * Bootstrap: transition.js v3.3.6
20
+ * Bootstrap: transition.js v3.3.7
21
21
  * http://getbootstrap.com/javascript/#transitions
22
22
  * ========================================================================
23
- * Copyright 2011-2015 Twitter, Inc.
23
+ * Copyright 2011-2016 Twitter, Inc.
24
24
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25
25
  * ======================================================================== */
26
26
 
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
77
77
  }(jQuery);
78
78
 
79
79
  /* ========================================================================
80
- * Bootstrap: alert.js v3.3.6
80
+ * Bootstrap: alert.js v3.3.7
81
81
  * http://getbootstrap.com/javascript/#alerts
82
82
  * ========================================================================
83
- * Copyright 2011-2015 Twitter, Inc.
83
+ * Copyright 2011-2016 Twitter, Inc.
84
84
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
85
85
  * ======================================================================== */
86
86
 
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
96
96
  $(el).on('click', dismiss, this.close)
97
97
  }
98
98
 
99
- Alert.VERSION = '3.3.6'
99
+ Alert.VERSION = '3.3.7'
100
100
 
101
101
  Alert.TRANSITION_DURATION = 150
102
102
 
@@ -109,7 +109,7 @@ if (typeof jQuery === 'undefined') {
109
109
  selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
110
110
  }
111
111
 
112
- var $parent = $(selector)
112
+ var $parent = $(selector === '#' ? [] : selector)
113
113
 
114
114
  if (e) e.preventDefault()
115
115
 
@@ -172,10 +172,10 @@ if (typeof jQuery === 'undefined') {
172
172
  }(jQuery);
173
173
 
174
174
  /* ========================================================================
175
- * Bootstrap: button.js v3.3.6
175
+ * Bootstrap: button.js v3.3.7
176
176
  * http://getbootstrap.com/javascript/#buttons
177
177
  * ========================================================================
178
- * Copyright 2011-2015 Twitter, Inc.
178
+ * Copyright 2011-2016 Twitter, Inc.
179
179
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
180
180
  * ======================================================================== */
181
181
 
@@ -192,7 +192,7 @@ if (typeof jQuery === 'undefined') {
192
192
  this.isLoading = false
193
193
  }
194
194
 
195
- Button.VERSION = '3.3.6'
195
+ Button.VERSION = '3.3.7'
196
196
 
197
197
  Button.DEFAULTS = {
198
198
  loadingText: 'loading...'
@@ -214,10 +214,10 @@ if (typeof jQuery === 'undefined') {
214
214
 
215
215
  if (state == 'loadingText') {
216
216
  this.isLoading = true
217
- $el.addClass(d).attr(d, d)
217
+ $el.addClass(d).attr(d, d).prop(d, true)
218
218
  } else if (this.isLoading) {
219
219
  this.isLoading = false
220
- $el.removeClass(d).removeAttr(d)
220
+ $el.removeClass(d).removeAttr(d).prop(d, false)
221
221
  }
222
222
  }, this), 0)
223
223
  }
@@ -281,10 +281,15 @@ if (typeof jQuery === 'undefined') {
281
281
 
282
282
  $(document)
283
283
  .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
284
- var $btn = $(e.target)
285
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
284
+ var $btn = $(e.target).closest('.btn')
286
285
  Plugin.call($btn, 'toggle')
287
- if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
286
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
287
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
288
+ e.preventDefault()
289
+ // The target component still receive the focus
290
+ if ($btn.is('input,button')) $btn.trigger('focus')
291
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
292
+ }
288
293
  })
289
294
  .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
290
295
  $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
@@ -293,10 +298,10 @@ if (typeof jQuery === 'undefined') {
293
298
  }(jQuery);
294
299
 
295
300
  /* ========================================================================
296
- * Bootstrap: carousel.js v3.3.6
301
+ * Bootstrap: carousel.js v3.3.7
297
302
  * http://getbootstrap.com/javascript/#carousel
298
303
  * ========================================================================
299
- * Copyright 2011-2015 Twitter, Inc.
304
+ * Copyright 2011-2016 Twitter, Inc.
300
305
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
301
306
  * ======================================================================== */
302
307
 
@@ -324,7 +329,7 @@ if (typeof jQuery === 'undefined') {
324
329
  .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
325
330
  }
326
331
 
327
- Carousel.VERSION = '3.3.6'
332
+ Carousel.VERSION = '3.3.7'
328
333
 
329
334
  Carousel.TRANSITION_DURATION = 600
330
335
 
@@ -531,13 +536,14 @@ if (typeof jQuery === 'undefined') {
531
536
  }(jQuery);
532
537
 
533
538
  /* ========================================================================
534
- * Bootstrap: collapse.js v3.3.6
539
+ * Bootstrap: collapse.js v3.3.7
535
540
  * http://getbootstrap.com/javascript/#collapse
536
541
  * ========================================================================
537
- * Copyright 2011-2015 Twitter, Inc.
542
+ * Copyright 2011-2016 Twitter, Inc.
538
543
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
539
544
  * ======================================================================== */
540
545
 
546
+ /* jshint latedef: false */
541
547
 
542
548
  +function ($) {
543
549
  'use strict';
@@ -561,7 +567,7 @@ if (typeof jQuery === 'undefined') {
561
567
  if (this.options.toggle) this.toggle()
562
568
  }
563
569
 
564
- Collapse.VERSION = '3.3.6'
570
+ Collapse.VERSION = '3.3.7'
565
571
 
566
572
  Collapse.TRANSITION_DURATION = 350
567
573
 
@@ -743,10 +749,10 @@ if (typeof jQuery === 'undefined') {
743
749
  }(jQuery);
744
750
 
745
751
  /* ========================================================================
746
- * Bootstrap: dropdown.js v3.3.6
752
+ * Bootstrap: dropdown.js v3.3.7
747
753
  * http://getbootstrap.com/javascript/#dropdowns
748
754
  * ========================================================================
749
- * Copyright 2011-2015 Twitter, Inc.
755
+ * Copyright 2011-2016 Twitter, Inc.
750
756
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
751
757
  * ======================================================================== */
752
758
 
@@ -763,7 +769,7 @@ if (typeof jQuery === 'undefined') {
763
769
  $(element).on('click.bs.dropdown', this.toggle)
764
770
  }
765
771
 
766
- Dropdown.VERSION = '3.3.6'
772
+ Dropdown.VERSION = '3.3.7'
767
773
 
768
774
  function getParent($this) {
769
775
  var selector = $this.attr('data-target')
@@ -909,10 +915,10 @@ if (typeof jQuery === 'undefined') {
909
915
  }(jQuery);
910
916
 
911
917
  /* ========================================================================
912
- * Bootstrap: modal.js v3.3.6
918
+ * Bootstrap: modal.js v3.3.7
913
919
  * http://getbootstrap.com/javascript/#modals
914
920
  * ========================================================================
915
- * Copyright 2011-2015 Twitter, Inc.
921
+ * Copyright 2011-2016 Twitter, Inc.
916
922
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
917
923
  * ======================================================================== */
918
924
 
@@ -943,7 +949,7 @@ if (typeof jQuery === 'undefined') {
943
949
  }
944
950
  }
945
951
 
946
- Modal.VERSION = '3.3.6'
952
+ Modal.VERSION = '3.3.7'
947
953
 
948
954
  Modal.TRANSITION_DURATION = 300
949
955
  Modal.BACKDROP_TRANSITION_DURATION = 150
@@ -1050,7 +1056,9 @@ if (typeof jQuery === 'undefined') {
1050
1056
  $(document)
1051
1057
  .off('focusin.bs.modal') // guard against infinite focus loop
1052
1058
  .on('focusin.bs.modal', $.proxy(function (e) {
1053
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
1059
+ if (document !== e.target &&
1060
+ this.$element[0] !== e.target &&
1061
+ !this.$element.has(e.target).length) {
1054
1062
  this.$element.trigger('focus')
1055
1063
  }
1056
1064
  }, this))
@@ -1247,11 +1255,11 @@ if (typeof jQuery === 'undefined') {
1247
1255
  }(jQuery);
1248
1256
 
1249
1257
  /* ========================================================================
1250
- * Bootstrap: tooltip.js v3.3.6
1258
+ * Bootstrap: tooltip.js v3.3.7
1251
1259
  * http://getbootstrap.com/javascript/#tooltip
1252
1260
  * Inspired by the original jQuery.tipsy by Jason Frame
1253
1261
  * ========================================================================
1254
- * Copyright 2011-2015 Twitter, Inc.
1262
+ * Copyright 2011-2016 Twitter, Inc.
1255
1263
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1256
1264
  * ======================================================================== */
1257
1265
 
@@ -1274,7 +1282,7 @@ if (typeof jQuery === 'undefined') {
1274
1282
  this.init('tooltip', element, options)
1275
1283
  }
1276
1284
 
1277
- Tooltip.VERSION = '3.3.6'
1285
+ Tooltip.VERSION = '3.3.7'
1278
1286
 
1279
1287
  Tooltip.TRANSITION_DURATION = 150
1280
1288
 
@@ -1565,9 +1573,11 @@ if (typeof jQuery === 'undefined') {
1565
1573
 
1566
1574
  function complete() {
1567
1575
  if (that.hoverState != 'in') $tip.detach()
1568
- that.$element
1569
- .removeAttr('aria-describedby')
1570
- .trigger('hidden.bs.' + that.type)
1576
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
1577
+ that.$element
1578
+ .removeAttr('aria-describedby')
1579
+ .trigger('hidden.bs.' + that.type)
1580
+ }
1571
1581
  callback && callback()
1572
1582
  }
1573
1583
 
@@ -1610,7 +1620,10 @@ if (typeof jQuery === 'undefined') {
1610
1620
  // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
1611
1621
  elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
1612
1622
  }
1613
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
1623
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
1624
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
1625
+ // See https://github.com/twbs/bootstrap/issues/20280
1626
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
1614
1627
  var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
1615
1628
  var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
1616
1629
 
@@ -1726,6 +1739,7 @@ if (typeof jQuery === 'undefined') {
1726
1739
  that.$tip = null
1727
1740
  that.$arrow = null
1728
1741
  that.$viewport = null
1742
+ that.$element = null
1729
1743
  })
1730
1744
  }
1731
1745
 
@@ -1762,10 +1776,10 @@ if (typeof jQuery === 'undefined') {
1762
1776
  }(jQuery);
1763
1777
 
1764
1778
  /* ========================================================================
1765
- * Bootstrap: popover.js v3.3.6
1779
+ * Bootstrap: popover.js v3.3.7
1766
1780
  * http://getbootstrap.com/javascript/#popovers
1767
1781
  * ========================================================================
1768
- * Copyright 2011-2015 Twitter, Inc.
1782
+ * Copyright 2011-2016 Twitter, Inc.
1769
1783
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1770
1784
  * ======================================================================== */
1771
1785
 
@@ -1782,7 +1796,7 @@ if (typeof jQuery === 'undefined') {
1782
1796
 
1783
1797
  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1784
1798
 
1785
- Popover.VERSION = '3.3.6'
1799
+ Popover.VERSION = '3.3.7'
1786
1800
 
1787
1801
  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
1788
1802
  placement: 'right',
@@ -1871,10 +1885,10 @@ if (typeof jQuery === 'undefined') {
1871
1885
  }(jQuery);
1872
1886
 
1873
1887
  /* ========================================================================
1874
- * Bootstrap: scrollspy.js v3.3.6
1888
+ * Bootstrap: scrollspy.js v3.3.7
1875
1889
  * http://getbootstrap.com/javascript/#scrollspy
1876
1890
  * ========================================================================
1877
- * Copyright 2011-2015 Twitter, Inc.
1891
+ * Copyright 2011-2016 Twitter, Inc.
1878
1892
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1879
1893
  * ======================================================================== */
1880
1894
 
@@ -1900,7 +1914,7 @@ if (typeof jQuery === 'undefined') {
1900
1914
  this.process()
1901
1915
  }
1902
1916
 
1903
- ScrollSpy.VERSION = '3.3.6'
1917
+ ScrollSpy.VERSION = '3.3.7'
1904
1918
 
1905
1919
  ScrollSpy.DEFAULTS = {
1906
1920
  offset: 10
@@ -2044,10 +2058,10 @@ if (typeof jQuery === 'undefined') {
2044
2058
  }(jQuery);
2045
2059
 
2046
2060
  /* ========================================================================
2047
- * Bootstrap: tab.js v3.3.6
2061
+ * Bootstrap: tab.js v3.3.7
2048
2062
  * http://getbootstrap.com/javascript/#tabs
2049
2063
  * ========================================================================
2050
- * Copyright 2011-2015 Twitter, Inc.
2064
+ * Copyright 2011-2016 Twitter, Inc.
2051
2065
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2052
2066
  * ======================================================================== */
2053
2067
 
@@ -2064,7 +2078,7 @@ if (typeof jQuery === 'undefined') {
2064
2078
  // jscs:enable requireDollarBeforejQueryAssignment
2065
2079
  }
2066
2080
 
2067
- Tab.VERSION = '3.3.6'
2081
+ Tab.VERSION = '3.3.7'
2068
2082
 
2069
2083
  Tab.TRANSITION_DURATION = 150
2070
2084
 
@@ -2200,10 +2214,10 @@ if (typeof jQuery === 'undefined') {
2200
2214
  }(jQuery);
2201
2215
 
2202
2216
  /* ========================================================================
2203
- * Bootstrap: affix.js v3.3.6
2217
+ * Bootstrap: affix.js v3.3.7
2204
2218
  * http://getbootstrap.com/javascript/#affix
2205
2219
  * ========================================================================
2206
- * Copyright 2011-2015 Twitter, Inc.
2220
+ * Copyright 2011-2016 Twitter, Inc.
2207
2221
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2208
2222
  * ======================================================================== */
2209
2223
 
@@ -2229,7 +2243,7 @@ if (typeof jQuery === 'undefined') {
2229
2243
  this.checkPosition()
2230
2244
  }
2231
2245
 
2232
- Affix.VERSION = '3.3.6'
2246
+ Affix.VERSION = '3.3.7'
2233
2247
 
2234
2248
  Affix.RESET = 'affix affix-top affix-bottom'
2235
2249