twitter-bootswatch-rails 3.2.0.0 → 3.3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/fonts/twitter/bootstrap/glyphicons-halflings-regular.eot +0 -0
  3. data/app/assets/fonts/twitter/bootstrap/glyphicons-halflings-regular.svg +272 -213
  4. data/app/assets/fonts/twitter/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  5. data/app/assets/fonts/twitter/bootstrap/glyphicons-halflings-regular.woff +0 -0
  6. data/app/assets/fonts/twitter/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  7. data/app/assets/javascripts/twitter/bootstrap/affix.js +44 -24
  8. data/app/assets/javascripts/twitter/bootstrap/alert.js +7 -5
  9. data/app/assets/javascripts/twitter/bootstrap/button.js +17 -11
  10. data/app/assets/javascripts/twitter/bootstrap/carousel.js +31 -17
  11. data/app/assets/javascripts/twitter/bootstrap/collapse.js +70 -29
  12. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +21 -11
  13. data/app/assets/javascripts/twitter/bootstrap/modal.js +68 -24
  14. data/app/assets/javascripts/twitter/bootstrap/popover.js +4 -4
  15. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +13 -8
  16. data/app/assets/javascripts/twitter/bootstrap/tab.js +42 -17
  17. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +54 -39
  18. data/app/assets/javascripts/twitter/bootstrap/transition.js +2 -2
  19. data/lib/generators/bootswatch/import/import_generator.rb +0 -4
  20. data/lib/generators/bootswatch/install/templates/variables.less.tt +33 -22
  21. data/lib/twitter/bootswatch/rails/version.rb +1 -1
  22. data/vendor/toolkit/twitter/bootstrap/alerts.less +5 -0
  23. data/vendor/toolkit/twitter/bootstrap/badges.less +11 -1
  24. data/vendor/toolkit/twitter/bootstrap/button-groups.less +18 -15
  25. data/vendor/toolkit/twitter/bootstrap/buttons.less +8 -5
  26. data/vendor/toolkit/twitter/bootstrap/carousel.less +26 -0
  27. data/vendor/toolkit/twitter/bootstrap/close.less +1 -0
  28. data/vendor/toolkit/twitter/bootstrap/code.less +1 -0
  29. data/vendor/toolkit/twitter/bootstrap/component-animations.less +5 -2
  30. data/vendor/toolkit/twitter/bootstrap/dropdowns.less +5 -6
  31. data/vendor/toolkit/twitter/bootstrap/forms.less +70 -44
  32. data/vendor/toolkit/twitter/bootstrap/glyphicons.less +69 -1
  33. data/vendor/toolkit/twitter/bootstrap/jumbotron.less +7 -5
  34. data/vendor/toolkit/twitter/bootstrap/list-group.less +1 -8
  35. data/vendor/toolkit/twitter/bootstrap/media.less +35 -30
  36. data/vendor/toolkit/twitter/bootstrap/mixins/buttons.less +2 -0
  37. data/vendor/toolkit/twitter/bootstrap/mixins/forms.less +5 -1
  38. data/vendor/toolkit/twitter/bootstrap/mixins/grid-framework.less +2 -2
  39. data/vendor/toolkit/twitter/bootstrap/mixins/image.less +0 -1
  40. data/vendor/toolkit/twitter/bootstrap/mixins/labels.less +1 -1
  41. data/vendor/toolkit/twitter/bootstrap/mixins/vendor-prefixes.less +6 -3
  42. data/vendor/toolkit/twitter/bootstrap/modals.less +3 -5
  43. data/vendor/toolkit/twitter/bootstrap/navbar.less +31 -25
  44. data/vendor/toolkit/twitter/bootstrap/navs.less +3 -1
  45. data/vendor/toolkit/twitter/bootstrap/normalize.less +5 -3
  46. data/vendor/toolkit/twitter/bootstrap/pager.less +1 -2
  47. data/vendor/toolkit/twitter/bootstrap/pagination.less +1 -1
  48. data/vendor/toolkit/twitter/bootstrap/panels.less +26 -4
  49. data/vendor/toolkit/twitter/bootstrap/popovers.less +6 -4
  50. data/vendor/toolkit/twitter/bootstrap/print.less +102 -96
  51. data/vendor/toolkit/twitter/bootstrap/progress-bars.less +1 -19
  52. data/vendor/toolkit/twitter/bootstrap/responsive-embed.less +2 -1
  53. data/vendor/toolkit/twitter/bootstrap/scaffolding.less +1 -1
  54. data/vendor/toolkit/twitter/bootstrap/tables.less +14 -13
  55. data/vendor/toolkit/twitter/bootstrap/theme.less +26 -11
  56. data/vendor/toolkit/twitter/bootstrap/thumbnails.less +1 -1
  57. data/vendor/toolkit/twitter/bootstrap/tooltip.less +12 -4
  58. data/vendor/toolkit/twitter/bootstrap/type.less +0 -11
  59. data/vendor/toolkit/twitter/bootstrap/utilities.less +0 -1
  60. data/vendor/toolkit/twitter/bootstrap/variables.less +33 -22
  61. metadata +33 -14
@@ -1,9 +1,9 @@
1
1
  /* ========================================================================
2
- * Bootstrap: tooltip.js v3.2.0
2
+ * Bootstrap: tooltip.js v3.3.2
3
3
  * http://getbootstrap.com/javascript/#tooltip
4
4
  * Inspired by the original jQuery.tipsy by Jason Frame
5
5
  * ========================================================================
6
- * Copyright 2011-2014 Twitter, Inc.
6
+ * Copyright 2011-2015 Twitter, Inc.
7
7
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
8
8
  * ======================================================================== */
9
9
 
@@ -25,7 +25,9 @@
25
25
  this.init('tooltip', element, options)
26
26
  }
27
27
 
28
- Tooltip.VERSION = '3.2.0'
28
+ Tooltip.VERSION = '3.3.2'
29
+
30
+ Tooltip.TRANSITION_DURATION = 150
29
31
 
30
32
  Tooltip.DEFAULTS = {
31
33
  animation: true,
@@ -103,6 +105,11 @@
103
105
  var self = obj instanceof this.constructor ?
104
106
  obj : $(obj.currentTarget).data('bs.' + this.type)
105
107
 
108
+ if (self && self.$tip && self.$tip.is(':visible')) {
109
+ self.hoverState = 'in'
110
+ return
111
+ }
112
+
106
113
  if (!self) {
107
114
  self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
108
115
  $(obj.currentTarget).data('bs.' + this.type, self)
@@ -145,7 +152,7 @@
145
152
  if (this.hasContent() && this.enabled) {
146
153
  this.$element.trigger(e)
147
154
 
148
- var inDom = $.contains(document.documentElement, this.$element[0])
155
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
149
156
  if (e.isDefaultPrevented() || !inDom) return
150
157
  var that = this
151
158
 
@@ -181,13 +188,13 @@
181
188
 
182
189
  if (autoPlace) {
183
190
  var orgPlacement = placement
184
- var $parent = this.$element.parent()
185
- var parentDim = this.getPosition($parent)
191
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
192
+ var containerDim = this.getPosition($container)
186
193
 
187
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
188
- placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
189
- placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
190
- placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
194
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
195
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
196
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
197
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
191
198
  placement
192
199
 
193
200
  $tip
@@ -200,14 +207,17 @@
200
207
  this.applyPlacement(calculatedOffset, placement)
201
208
 
202
209
  var complete = function () {
210
+ var prevHoverState = that.hoverState
203
211
  that.$element.trigger('shown.bs.' + that.type)
204
212
  that.hoverState = null
213
+
214
+ if (prevHoverState == 'out') that.leave(that)
205
215
  }
206
216
 
207
217
  $.support.transition && this.$tip.hasClass('fade') ?
208
218
  $tip
209
219
  .one('bsTransitionEnd', complete)
210
- .emulateTransitionEnd(150) :
220
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
211
221
  complete()
212
222
  }
213
223
  }
@@ -254,16 +264,18 @@
254
264
  if (delta.left) offset.left += delta.left
255
265
  else offset.top += delta.top
256
266
 
257
- var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
258
- var arrowPosition = delta.left ? 'left' : 'top'
259
- var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
267
+ var isVertical = /top|bottom/.test(placement)
268
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
269
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
260
270
 
261
271
  $tip.offset(offset)
262
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
272
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
263
273
  }
264
274
 
265
- Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
266
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
275
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isHorizontal) {
276
+ this.arrow()
277
+ .css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
278
+ .css(isHorizontal ? 'top' : 'left', '')
267
279
  }
268
280
 
269
281
  Tooltip.prototype.setContent = function () {
@@ -274,16 +286,17 @@
274
286
  $tip.removeClass('fade in top bottom left right')
275
287
  }
276
288
 
277
- Tooltip.prototype.hide = function () {
289
+ Tooltip.prototype.hide = function (callback) {
278
290
  var that = this
279
291
  var $tip = this.tip()
280
292
  var e = $.Event('hide.bs.' + this.type)
281
293
 
282
- this.$element.removeAttr('aria-describedby')
283
-
284
294
  function complete() {
285
295
  if (that.hoverState != 'in') $tip.detach()
286
- that.$element.trigger('hidden.bs.' + that.type)
296
+ that.$element
297
+ .removeAttr('aria-describedby')
298
+ .trigger('hidden.bs.' + that.type)
299
+ callback && callback()
287
300
  }
288
301
 
289
302
  this.$element.trigger(e)
@@ -295,7 +308,7 @@
295
308
  $.support.transition && this.$tip.hasClass('fade') ?
296
309
  $tip
297
310
  .one('bsTransitionEnd', complete)
298
- .emulateTransitionEnd(150) :
311
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
299
312
  complete()
300
313
 
301
314
  this.hoverState = null
@@ -316,20 +329,27 @@
316
329
 
317
330
  Tooltip.prototype.getPosition = function ($element) {
318
331
  $element = $element || this.$element
332
+
319
333
  var el = $element[0]
320
334
  var isBody = el.tagName == 'BODY'
321
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
322
- scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
323
- width: isBody ? $(window).width() : $element.outerWidth(),
324
- height: isBody ? $(window).height() : $element.outerHeight()
325
- }, isBody ? { top: 0, left: 0 } : $element.offset())
335
+
336
+ var elRect = el.getBoundingClientRect()
337
+ if (elRect.width == null) {
338
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
339
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
340
+ }
341
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
342
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
343
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
344
+
345
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
326
346
  }
327
347
 
328
348
  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
329
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
330
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
349
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
350
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
331
351
  placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
332
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
352
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
333
353
 
334
354
  }
335
355
 
@@ -386,14 +406,6 @@
386
406
  return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
387
407
  }
388
408
 
389
- Tooltip.prototype.validate = function () {
390
- if (!this.$element[0].parentNode) {
391
- this.hide()
392
- this.$element = null
393
- this.options = null
394
- }
395
- }
396
-
397
409
  Tooltip.prototype.enable = function () {
398
410
  this.enabled = true
399
411
  }
@@ -420,8 +432,11 @@
420
432
  }
421
433
 
422
434
  Tooltip.prototype.destroy = function () {
435
+ var that = this
423
436
  clearTimeout(this.timeout)
424
- this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
437
+ this.hide(function () {
438
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
439
+ })
425
440
  }
426
441
 
427
442
 
@@ -1,8 +1,8 @@
1
1
  /* ========================================================================
2
- * Bootstrap: transition.js v3.2.0
2
+ * Bootstrap: transition.js v3.3.2
3
3
  * http://getbootstrap.com/javascript/#transitions
4
4
  * ========================================================================
5
- * Copyright 2011-2014 Twitter, Inc.
5
+ * Copyright 2011-2015 Twitter, Inc.
6
6
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
7
  * ======================================================================== */
8
8
 
@@ -34,10 +34,6 @@ module Bootswatch
34
34
  "@import \"#{theme_directory}/base\";\n\n"
35
35
  end
36
36
 
37
- gsub_file File.join(stylesheets_dest_path,'variables.less'),
38
- '"../img/glyphicons-halflings.png"',
39
- '"twitter/bootstrap/glyphicons-halflings.png"'
40
-
41
37
  gsub_file File.join(stylesheets_dest_path, 'variables.less'),
42
38
  '"../fonts/"',
43
39
  '"twitter/bootstrap/"'
@@ -10,13 +10,14 @@
10
10
  //
11
11
  //## Gray and brand colors for use across Bootstrap.
12
12
 
13
- @gray-darker: lighten(#000, 13.5%); // #222
14
- @gray-dark: lighten(#000, 20%); // #333
15
- @gray: lighten(#000, 33.5%); // #555
16
- @gray-light: lighten(#000, 46.7%); // #777
17
- @gray-lighter: lighten(#000, 93.5%); // #eee
18
-
19
- @brand-primary: #428bca;
13
+ @gray-base: #000;
14
+ @gray-darker: lighten(@gray-base, 13.5%); // #222
15
+ @gray-dark: lighten(@gray-base, 20%); // #333
16
+ @gray: lighten(@gray-base, 33.5%); // #555
17
+ @gray-light: lighten(@gray-base, 46.7%); // #777
18
+ @gray-lighter: lighten(@gray-base, 93.5%); // #eee
19
+
20
+ @brand-primary: darken(#428bca, 6.5%); // #337ab7
20
21
  @brand-success: #5cb85c;
21
22
  @brand-info: #5bc0de;
22
23
  @brand-warning: #f0ad4e;
@@ -36,6 +37,8 @@
36
37
  @link-color: @brand-primary;
37
38
  //** Link hover color set via `darken()` function.
38
39
  @link-hover-color: darken(@link-color, 15%);
40
+ //** Link hover decoration.
41
+ @link-hover-decoration: underline;
39
42
 
40
43
 
41
44
  //== Typography
@@ -99,7 +102,7 @@
99
102
  @padding-xs-vertical: 1px;
100
103
  @padding-xs-horizontal: 5px;
101
104
 
102
- @line-height-large: 1.33;
105
+ @line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
103
106
  @line-height-small: 1.5;
104
107
 
105
108
  @border-radius-base: 4px;
@@ -184,13 +187,21 @@
184
187
  @input-color: @gray;
185
188
  //** `<input>` border color
186
189
  @input-border: #ccc;
187
- //** `<input>` border radius
190
+
191
+ // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
192
+ //** Default `.form-control` border radius
193
+ // This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
188
194
  @input-border-radius: @border-radius-base;
195
+ //** Large `.form-control` border radius
196
+ @input-border-radius-large: @border-radius-large;
197
+ //** Small `.form-control` border radius
198
+ @input-border-radius-small: @border-radius-small;
199
+
189
200
  //** Border color for inputs on focus
190
201
  @input-border-focus: #66afe9;
191
202
 
192
203
  //** Placeholder text color
193
- @input-color-placeholder: @gray-light;
204
+ @input-color-placeholder: #999;
194
205
 
195
206
  //** Default `.form-control` height
196
207
  @input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
@@ -207,6 +218,9 @@
207
218
  //** Border color for textual input addons
208
219
  @input-group-addon-border-color: @input-border;
209
220
 
221
+ //** Disabled cursor for form controls and buttons.
222
+ @cursor-disabled: not-allowed;
223
+
210
224
 
211
225
  //== Dropdowns
212
226
  //
@@ -255,8 +269,7 @@
255
269
  @zindex-popover: 1060;
256
270
  @zindex-tooltip: 1070;
257
271
  @zindex-navbar-fixed: 1030;
258
- @zindex-modal-background: 1040;
259
- @zindex-modal: 1050;
272
+ @zindex-modal: 1040;
260
273
 
261
274
 
262
275
  //== Media queries breakpoints
@@ -318,17 +331,17 @@
318
331
  //## Define the maximum width of `.container` for different screen sizes.
319
332
 
320
333
  // Small screen / tablet
321
- @container-tablet: ((720px + @grid-gutter-width));
334
+ @container-tablet: (720px + @grid-gutter-width);
322
335
  //** For `@screen-sm-min` and up.
323
336
  @container-sm: @container-tablet;
324
337
 
325
338
  // Medium screen / desktop
326
- @container-desktop: ((940px + @grid-gutter-width));
339
+ @container-desktop: (940px + @grid-gutter-width);
327
340
  //** For `@screen-md-min` and up.
328
341
  @container-md: @container-desktop;
329
342
 
330
343
  // Large screen / wide desktop
331
- @container-large-desktop: ((1140px + @grid-gutter-width));
344
+ @container-large-desktop: (1140px + @grid-gutter-width);
332
345
  //** For `@screen-lg-min` and up.
333
346
  @container-lg: @container-large-desktop;
334
347
 
@@ -371,12 +384,12 @@
371
384
 
372
385
  // Inverted navbar
373
386
  // Reset inverted navbar basics
374
- @navbar-inverse-color: @gray-light;
387
+ @navbar-inverse-color: lighten(@gray-light, 15%);
375
388
  @navbar-inverse-bg: #222;
376
389
  @navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
377
390
 
378
391
  // Inverted navbar links
379
- @navbar-inverse-link-color: @gray-light;
392
+ @navbar-inverse-link-color: lighten(@gray-light, 15%);
380
393
  @navbar-inverse-link-hover-color: #fff;
381
394
  @navbar-inverse-link-hover-bg: transparent;
382
395
  @navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
@@ -406,8 +419,6 @@
406
419
  @nav-disabled-link-color: @gray-light;
407
420
  @nav-disabled-link-hover-color: @gray-light;
408
421
 
409
- @nav-open-link-hover-color: #fff;
410
-
411
422
  //== Tabs
412
423
  @nav-tabs-border-color: #ddd;
413
424
 
@@ -532,7 +543,7 @@
532
543
  //** Popover arrow width
533
544
  @popover-arrow-width: 10px;
534
545
  //** Popover arrow color
535
- @popover-arrow-color: #fff;
546
+ @popover-arrow-color: @popover-bg;
536
547
 
537
548
  //** Popover outer arrow width
538
549
  @popover-arrow-outer-width: (@popover-arrow-width + 1);
@@ -631,6 +642,8 @@
631
642
  @progress-bg: #f5f5f5;
632
643
  //** Progress bar text color
633
644
  @progress-bar-color: #fff;
645
+ //** Variable for setting rounded corners on progress bar.
646
+ @progress-border-radius: @border-radius-base;
634
647
 
635
648
  //** Default progress bar color
636
649
  @progress-bar-bg: @brand-primary;
@@ -845,5 +858,3 @@
845
858
  @dl-horizontal-offset: @component-offset-horizontal;
846
859
  //** Horizontal line color.
847
860
  @hr-border: @gray-lighter;
848
-
849
-
@@ -1,7 +1,7 @@
1
1
  module Twitter
2
2
  module Bootswatch
3
3
  module Rails
4
- VERSION = '3.2.0.0'
4
+ VERSION = '3.3.2.0'
5
5
  end
6
6
  end
7
7
  end
@@ -18,6 +18,7 @@
18
18
  // Specified for the h4 to prevent conflicts of changing @headings-color
19
19
  color: inherit;
20
20
  }
21
+
21
22
  // Provide class for links that match alerts
22
23
  .alert-link {
23
24
  font-weight: @alert-link-font-weight;
@@ -28,6 +29,7 @@
28
29
  > ul {
29
30
  margin-bottom: 0;
30
31
  }
32
+
31
33
  > p + p {
32
34
  margin-top: 5px;
33
35
  }
@@ -57,12 +59,15 @@
57
59
  .alert-success {
58
60
  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
59
61
  }
62
+
60
63
  .alert-info {
61
64
  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
62
65
  }
66
+
63
67
  .alert-warning {
64
68
  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
65
69
  }
70
+
66
71
  .alert-danger {
67
72
  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
68
73
  }
@@ -28,6 +28,7 @@
28
28
  position: relative;
29
29
  top: -1px;
30
30
  }
31
+
31
32
  .btn-xs & {
32
33
  top: 0;
33
34
  padding: 1px 5px;
@@ -44,11 +45,20 @@
44
45
  }
45
46
 
46
47
  // Account for badges in navs
47
- a.list-group-item.active > &,
48
+ .list-group-item.active > &,
48
49
  .nav-pills > .active > a > & {
49
50
  color: @badge-active-color;
50
51
  background-color: @badge-active-bg;
51
52
  }
53
+
54
+ .list-group-item > & {
55
+ float: right;
56
+ }
57
+
58
+ .list-group-item > & + & {
59
+ margin-right: 5px;
60
+ }
61
+
52
62
  .nav-pills > li > a > & {
53
63
  margin-left: 3px;
54
64
  }
@@ -18,10 +18,6 @@
18
18
  &.active {
19
19
  z-index: 2;
20
20
  }
21
- &:focus {
22
- // Remove focus outline when dropdown JS adds it after closing the menu
23
- outline: 0;
24
- }
25
21
  }
26
22
  }
27
23
 
@@ -75,13 +71,13 @@
75
71
  .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
76
72
  border-radius: 0;
77
73
  }
78
- .btn-group > .btn-group:first-child {
74
+ .btn-group > .btn-group:first-child:not(:last-child) {
79
75
  > .btn:last-child,
80
76
  > .dropdown-toggle {
81
77
  .border-right-radius(0);
82
78
  }
83
79
  }
84
- .btn-group > .btn-group:last-child > .btn:first-child {
80
+ .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
85
81
  .border-left-radius(0);
86
82
  }
87
83
 
@@ -198,7 +194,6 @@
198
194
  }
199
195
 
200
196
 
201
-
202
197
  // Justified button groups
203
198
  // ----------------------
204
199
 
@@ -226,15 +221,23 @@
226
221
  // Checkbox and radio options
227
222
  //
228
223
  // In order to support the browser's form validation feedback, powered by the
229
- // `required` attribute, we have to "hide" the inputs via `opacity`. We cannot
230
- // use `display: none;` or `visibility: hidden;` as that also hides the popover.
224
+ // `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
225
+ // `display: none;` or `visibility: hidden;` as that also hides the popover.
226
+ // Simply visually hiding the inputs via `opacity` would leave them clickable in
227
+ // certain cases which is prevented by using `clip` and `pointer-events`.
231
228
  // This way, we ensure a DOM element is visible to position the popover from.
232
229
  //
233
- // See https://github.com/twbs/bootstrap/pull/12794 for more.
230
+ // See https://github.com/twbs/bootstrap/pull/12794 and
231
+ // https://github.com/twbs/bootstrap/pull/14559 for more information.
234
232
 
235
- [data-toggle="buttons"] > .btn > input[type="radio"],
236
- [data-toggle="buttons"] > .btn > input[type="checkbox"] {
237
- position: absolute;
238
- z-index: -1;
239
- .opacity(0);
233
+ [data-toggle="buttons"] {
234
+ > .btn,
235
+ > .btn-group > .btn {
236
+ input[type="radio"],
237
+ input[type="checkbox"] {
238
+ position: absolute;
239
+ clip: rect(0,0,0,0);
240
+ pointer-events: none;
241
+ }
242
+ }
240
243
  }