twitter-bootstrap-rails 2.2.1 → 2.2.3

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.

Potentially problematic release.


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

Files changed (46) hide show
  1. data/README.md +4 -0
  2. data/lib/generators/bootstrap/themed/themed_generator.rb +1 -1
  3. data/lib/twitter/bootstrap/rails/version.rb +2 -2
  4. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-affix.js +1 -1
  5. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-alert.js +1 -1
  6. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-button.js +1 -1
  7. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-carousel.js +31 -9
  8. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-collapse.js +4 -4
  9. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-dropdown.js +14 -10
  10. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js +13 -11
  11. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-popover.js +5 -5
  12. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-scrollspy.js +2 -2
  13. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tab.js +1 -1
  14. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-tooltip.js +95 -29
  15. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-transition.js +1 -1
  16. data/vendor/assets/javascripts/twitter/bootstrap/bootstrap-typeahead.js +16 -4
  17. data/vendor/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +108 -103
  18. data/vendor/assets/stylesheets/twitter-bootstrap-static/sprites.css.erb +2 -2
  19. data/vendor/toolkit/twitter/bootstrap/bootstrap.less +4 -4
  20. data/vendor/toolkit/twitter/bootstrap/button-groups.less +4 -2
  21. data/vendor/toolkit/twitter/bootstrap/buttons.less +8 -10
  22. data/vendor/toolkit/twitter/bootstrap/carousel.less +34 -7
  23. data/vendor/toolkit/twitter/bootstrap/close.less +2 -1
  24. data/vendor/toolkit/twitter/bootstrap/dropdowns.less +16 -12
  25. data/vendor/toolkit/twitter/bootstrap/forms.less +5 -2
  26. data/vendor/toolkit/twitter/bootstrap/labels-badges.less +4 -2
  27. data/vendor/toolkit/twitter/bootstrap/media.less +2 -2
  28. data/vendor/toolkit/twitter/bootstrap/mixins.less +20 -4
  29. data/vendor/toolkit/twitter/bootstrap/navbar.less +20 -13
  30. data/vendor/toolkit/twitter/bootstrap/navs.less +39 -21
  31. data/vendor/toolkit/twitter/bootstrap/pager.less +3 -1
  32. data/vendor/toolkit/twitter/bootstrap/pagination.less +3 -1
  33. data/vendor/toolkit/twitter/bootstrap/popovers.less +5 -1
  34. data/vendor/toolkit/twitter/bootstrap/reset.less +1 -1
  35. data/vendor/toolkit/twitter/bootstrap/responsive-767px-max.less +2 -2
  36. data/vendor/toolkit/twitter/bootstrap/responsive-navbar.less +6 -2
  37. data/vendor/toolkit/twitter/bootstrap/responsive-utilities.less +16 -0
  38. data/vendor/toolkit/twitter/bootstrap/responsive.less +1 -10
  39. data/vendor/toolkit/twitter/bootstrap/scaffolding.less +2 -1
  40. data/vendor/toolkit/twitter/bootstrap/sprites.less +9 -5
  41. data/vendor/toolkit/twitter/bootstrap/tables.less +24 -17
  42. data/vendor/toolkit/twitter/bootstrap/thumbnails.less +3 -2
  43. data/vendor/toolkit/twitter/bootstrap/tooltip.less +6 -6
  44. data/vendor/toolkit/twitter/bootstrap/type.less +19 -7
  45. data/vendor/toolkit/twitter/bootstrap/variables.less +1 -1
  46. metadata +14 -14
@@ -3,7 +3,7 @@
3
3
  .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
4
4
  .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
5
5
  [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("<%= asset_path 'twitter/bootstrap/glyphicons-halflings.png' %>");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px;}
6
- .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("<%= asset_path 'twitter/bootstrap/glyphicons-halflings-white.png' %>");}
6
+ .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("<%= asset_path 'twitter/bootstrap/glyphicons-halflings-white.png' %>");}
7
7
  .icon-glass{background-position:0 0;}
8
8
  .icon-music{background-position:-24px 0;}
9
9
  .icon-search{background-position:-48px 0;}
@@ -120,7 +120,7 @@
120
120
  .icon-chevron-down{background-position:-313px -119px;}
121
121
  .icon-retweet{background-position:-336px -120px;}
122
122
  .icon-shopping-cart{background-position:-360px -120px;}
123
- .icon-folder-close{background-position:-384px -120px;}
123
+ .icon-folder-close{background-position:-384px -120px;width:16px;}
124
124
  .icon-folder-open{background-position:-408px -120px;width:16px;}
125
125
  .icon-resize-vertical{background-position:-432px -119px;}
126
126
  .icon-resize-horizontal{background-position:-456px -118px;}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap v2.2.2
2
+ * Bootstrap v2.3.0
3
3
  *
4
4
  * Copyright 2012 Twitter, Inc
5
5
  * Licensed under the Apache License v2.0
@@ -8,13 +8,13 @@
8
8
  * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
9
  */
10
10
 
11
- // CSS Reset
12
- @import "reset.less";
13
-
14
11
  // Core variables and mixins
15
12
  @import "variables.less"; // Modify this for custom colors, font-sizes, etc
16
13
  @import "mixins.less";
17
14
 
15
+ // CSS Reset
16
+ @import "reset.less";
17
+
18
18
  // Grid system and page structure
19
19
  @import "scaffolding.less";
20
20
  @import "grid.less";
@@ -164,8 +164,6 @@
164
164
  margin-left: 0;
165
165
  }
166
166
  // Carets in other button sizes
167
- .btn-mini .caret,
168
- .btn-small .caret,
169
167
  .btn-large .caret {
170
168
  margin-top: 6px;
171
169
  }
@@ -174,6 +172,10 @@
174
172
  border-right-width: 5px;
175
173
  border-top-width: 5px;
176
174
  }
175
+ .btn-mini .caret,
176
+ .btn-small .caret {
177
+ margin-top: 8px;
178
+ }
177
179
  // Upside down carets for .dropup
178
180
  .dropup .btn-large .caret {
179
181
  border-bottom-width: 5px;
@@ -25,13 +25,14 @@
25
25
  .ie7-restore-left-whitespace(); // Give IE7 some love
26
26
  .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
27
27
 
28
- // Hover state
29
- &:hover {
28
+ // Hover/focus state
29
+ &:hover,
30
+ &:focus {
30
31
  color: @grayDark;
31
32
  text-decoration: none;
32
33
  background-position: 0 -15px;
33
34
 
34
- // transition is only when going to hover, otherwise the background
35
+ // transition is only when going to hover/focus, otherwise the background
35
36
  // behind the gradient (there for IE<=9 fallback) gets mismatched
36
37
  .transition(background-position .1s linear);
37
38
  }
@@ -141,11 +142,6 @@ input[type="button"] {
141
142
 
142
143
  // Set the backgrounds
143
144
  // -------------------------
144
- .btn {
145
- // reset here as of 2.0.3 due to Recess property order
146
- border-color: #c5c5c5;
147
- border-color: rgba(0,0,0,.15) rgba(0,0,0,.15) rgba(0,0,0,.25);
148
- }
149
145
  .btn-primary {
150
146
  .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
151
147
  }
@@ -219,12 +215,14 @@ input[type="submit"].btn {
219
215
  color: @linkColor;
220
216
  .border-radius(0);
221
217
  }
222
- .btn-link:hover {
218
+ .btn-link:hover,
219
+ .btn-link:focus {
223
220
  color: @linkColorHover;
224
221
  text-decoration: underline;
225
222
  background-color: transparent;
226
223
  }
227
- .btn-link[disabled]:hover {
224
+ .btn-link[disabled]:hover,
225
+ .btn-link[disabled]:focus {
228
226
  color: @grayDark;
229
227
  text-decoration: none;
230
228
  }
@@ -21,12 +21,13 @@
21
21
  display: none;
22
22
  position: relative;
23
23
  .transition(.6s ease-in-out left);
24
- }
25
24
 
26
- // Account for jankitude on images
27
- > .item > img {
28
- display: block;
29
- line-height: 1;
25
+ // Account for jankitude on images
26
+ > img,
27
+ > a > img {
28
+ display: block;
29
+ line-height: 1;
30
+ }
30
31
  }
31
32
 
32
33
  > .active,
@@ -97,14 +98,40 @@
97
98
  right: 15px;
98
99
  }
99
100
 
100
- // Hover state
101
- &:hover {
101
+ // Hover/focus state
102
+ &:hover,
103
+ &:focus {
102
104
  color: @white;
103
105
  text-decoration: none;
104
106
  .opacity(90);
105
107
  }
106
108
  }
107
109
 
110
+ // Carousel indicator pips
111
+ // -----------------------------
112
+ .carousel-indicators {
113
+ position: absolute;
114
+ top: 15px;
115
+ right: 15px;
116
+ z-index: 5;
117
+ margin: 0;
118
+ list-style: none;
119
+
120
+ li {
121
+ display: block;
122
+ float: left;
123
+ width: 10px;
124
+ height: 10px;
125
+ margin-left: 5px;
126
+ text-indent: -999px;
127
+ background-color: #ccc;
128
+ background-color: rgba(255,255,255,.25);
129
+ border-radius: 5px;
130
+ }
131
+ .active {
132
+ background-color: #fff;
133
+ }
134
+ }
108
135
 
109
136
  // Caption for text below images
110
137
  // -----------------------------
@@ -11,7 +11,8 @@
11
11
  color: @black;
12
12
  text-shadow: 0 1px 0 rgba(255,255,255,1);
13
13
  .opacity(20);
14
- &:hover {
14
+ &:hover,
15
+ &:focus {
15
16
  color: @black;
16
17
  text-decoration: none;
17
18
  cursor: pointer;
@@ -72,7 +72,7 @@
72
72
  }
73
73
 
74
74
  // Links within the dropdown menu
75
- li > a {
75
+ > li > a {
76
76
  display: block;
77
77
  padding: 3px 20px;
78
78
  clear: both;
@@ -83,11 +83,12 @@
83
83
  }
84
84
  }
85
85
 
86
- // Hover state
86
+ // Hover/Focus state
87
87
  // -----------
88
- .dropdown-menu li > a:hover,
89
- .dropdown-menu li > a:focus,
90
- .dropdown-submenu:hover > a {
88
+ .dropdown-menu > li > a:hover,
89
+ .dropdown-menu > li > a:focus,
90
+ .dropdown-submenu:hover > a,
91
+ .dropdown-submenu:focus > a {
91
92
  text-decoration: none;
92
93
  color: @dropdownLinkColorHover;
93
94
  #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
@@ -95,8 +96,9 @@
95
96
 
96
97
  // Active state
97
98
  // ------------
98
- .dropdown-menu .active > a,
99
- .dropdown-menu .active > a:hover {
99
+ .dropdown-menu > .active > a,
100
+ .dropdown-menu > .active > a:hover,
101
+ .dropdown-menu > .active > a:focus {
100
102
  color: @dropdownLinkColorActive;
101
103
  text-decoration: none;
102
104
  outline: 0;
@@ -105,13 +107,15 @@
105
107
 
106
108
  // Disabled state
107
109
  // --------------
108
- // Gray out text and ensure the hover state remains gray
109
- .dropdown-menu .disabled > a,
110
- .dropdown-menu .disabled > a:hover {
110
+ // Gray out text and ensure the hover/focus state remains gray
111
+ .dropdown-menu > .disabled > a,
112
+ .dropdown-menu > .disabled > a:hover,
113
+ .dropdown-menu > .disabled > a:focus {
111
114
  color: @grayLight;
112
115
  }
113
- // Nuke hover effects
114
- .dropdown-menu .disabled > a:hover {
116
+ // Nuke hover/focus effects
117
+ .dropdown-menu > .disabled > a:hover,
118
+ .dropdown-menu > .disabled > a:focus {
115
119
  text-decoration: none;
116
120
  background-color: transparent;
117
121
  background-image: none; // Remove CSS gradient
@@ -422,7 +422,9 @@ select:focus:invalid {
422
422
  // Allow us to put symbols and text within the input field for a cleaner look
423
423
  .input-append,
424
424
  .input-prepend {
425
- margin-bottom: 5px;
425
+ display: inline-block;
426
+ margin-bottom: @baseLineHeight / 2;
427
+ vertical-align: middle;
426
428
  font-size: 0; // white space collapse hack
427
429
  white-space: nowrap; // Prevent span and input from separating
428
430
 
@@ -430,7 +432,8 @@ select:focus:invalid {
430
432
  input,
431
433
  select,
432
434
  .uneditable-input,
433
- .dropdown-menu {
435
+ .dropdown-menu,
436
+ .popover {
434
437
  font-size: @baseFontSize;
435
438
  }
436
439
 
@@ -35,10 +35,12 @@
35
35
  }
36
36
  }
37
37
 
38
- // Hover state, but only for links
38
+ // Hover/focus state, but only for links
39
39
  a {
40
40
  &.label:hover,
41
- &.badge:hover {
41
+ &.label:focus,
42
+ &.badge:hover,
43
+ &.badge:focus {
42
44
  color: @white;
43
45
  text-decoration: none;
44
46
  cursor: pointer;
@@ -37,10 +37,10 @@
37
37
  // Media image alignment
38
38
  // -------------------------
39
39
 
40
- .media .pull-left {
40
+ .media > .pull-left {
41
41
  margin-right: 10px;
42
42
  }
43
- .media .pull-right {
43
+ .media > .pull-right {
44
44
  margin-left: 10px;
45
45
  }
46
46
 
@@ -268,6 +268,12 @@
268
268
  -o-transition-delay: @transition-delay;
269
269
  transition-delay: @transition-delay;
270
270
  }
271
+ .transition-duration(@transition-duration) {
272
+ -webkit-transition-duration: @transition-duration;
273
+ -moz-transition-duration: @transition-duration;
274
+ -o-transition-duration: @transition-duration;
275
+ transition-duration: @transition-duration;
276
+ }
271
277
 
272
278
  // Transformations
273
279
  .rotate(@degrees) {
@@ -437,6 +443,17 @@
437
443
  background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
438
444
  background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
439
445
  }
446
+ .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
447
+ background-color: mix(@midColor, @endColor, 80%);
448
+ background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
449
+ background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
450
+ background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
451
+ background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
452
+ background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor);
453
+ background-repeat: no-repeat;
454
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
455
+ }
456
+
440
457
  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
441
458
  background-color: mix(@midColor, @endColor, 80%);
442
459
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
@@ -500,7 +517,7 @@
500
517
  .reset-filter();
501
518
 
502
519
  // in these cases the gradient won't cover the background, so we override
503
- &:hover, &:active, &.active, &.disabled, &[disabled] {
520
+ &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
504
521
  color: @textColor;
505
522
  background-color: @endColor;
506
523
  *background-color: darken(@endColor, 5%);
@@ -609,8 +626,8 @@
609
626
  .spanX (0) {}
610
627
 
611
628
  .offsetX (@index) when (@index > 0) {
612
- (~'.offset@{index}') { .offset(@index); }
613
- (~'.offset@{index}:first-child') { .offsetFirstChild(@index); }
629
+ (~".offset@{index}") { .offset(@index); }
630
+ (~".offset@{index}:first-child") { .offsetFirstChild(@index); }
614
631
  .offsetX(@index - 1);
615
632
  }
616
633
  .offsetX (0) {}
@@ -682,5 +699,4 @@
682
699
  .spanX (@gridColumns);
683
700
 
684
701
  }
685
-
686
702
  }
@@ -56,7 +56,8 @@
56
56
  font-weight: 200;
57
57
  color: @navbarBrandColor;
58
58
  text-shadow: 0 1px 0 @navbarBackgroundHighlight;
59
- &:hover {
59
+ &:hover,
60
+ &:focus {
60
61
  text-decoration: none;
61
62
  }
62
63
  }
@@ -73,7 +74,8 @@
73
74
  // -------------------------
74
75
  .navbar-link {
75
76
  color: @navbarLinkColor;
76
- &:hover {
77
+ &:hover,
78
+ &:focus {
77
79
  color: @navbarLinkColorHover;
78
80
  }
79
81
  }
@@ -95,7 +97,9 @@
95
97
  }
96
98
  .navbar .btn-group .btn,
97
99
  .navbar .input-prepend .btn,
98
- .navbar .input-append .btn {
100
+ .navbar .input-append .btn,
101
+ .navbar .input-prepend .btn-group,
102
+ .navbar .input-append .btn-group {
99
103
  margin-top: 0; // then undo the margin here so we don't accidentally double it
100
104
  }
101
105
 
@@ -245,13 +249,12 @@
245
249
  }
246
250
  .navbar .nav .dropdown-toggle .caret {
247
251
  margin-top: 8px;
248
-
249
252
  }
250
253
 
251
- // Hover
254
+ // Hover/focus
252
255
  .navbar .nav > li > a:focus,
253
256
  .navbar .nav > li > a:hover {
254
- background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover from .active
257
+ background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active
255
258
  color: @navbarLinkColorHover;
256
259
  text-decoration: none;
257
260
  }
@@ -335,10 +338,11 @@
335
338
  }
336
339
  }
337
340
 
338
- // Caret should match text color on hover
339
- .navbar .nav li.dropdown > a:hover .caret {
340
- border-top-color: @navbarLinkColorActive;
341
- border-bottom-color: @navbarLinkColorActive;
341
+ // Caret should match text color on hover/focus
342
+ .navbar .nav li.dropdown > a:hover .caret,
343
+ .navbar .nav li.dropdown > a:focus .caret {
344
+ border-top-color: @navbarLinkColorHover;
345
+ border-bottom-color: @navbarLinkColorHover;
342
346
  }
343
347
 
344
348
  // Remove background color from open dropdown
@@ -396,7 +400,8 @@
396
400
  .nav > li > a {
397
401
  color: @navbarInverseLinkColor;
398
402
  text-shadow: 0 -1px 0 rgba(0,0,0,.25);
399
- &:hover {
403
+ &:hover,
404
+ &:focus {
400
405
  color: @navbarInverseLinkColorHover;
401
406
  }
402
407
  }
@@ -425,7 +430,8 @@
425
430
  // Inline text links
426
431
  .navbar-link {
427
432
  color: @navbarInverseLinkColor;
428
- &:hover {
433
+ &:hover,
434
+ &:focus {
429
435
  color: @navbarInverseLinkColorHover;
430
436
  }
431
437
  }
@@ -443,7 +449,8 @@
443
449
  background-color: @navbarInverseLinkBackgroundActive;
444
450
  color: @navbarInverseLinkColorActive;
445
451
  }
446
- .nav li.dropdown > a:hover .caret {
452
+ .nav li.dropdown > a:hover .caret,
453
+ .nav li.dropdown > a:focus .caret {
447
454
  border-top-color: @navbarInverseLinkColorActive;
448
455
  border-bottom-color: @navbarInverseLinkColorActive;
449
456
  }
@@ -16,7 +16,8 @@
16
16
  .nav > li > a {
17
17
  display: block;
18
18
  }
19
- .nav > li > a:hover {
19
+ .nav > li > a:hover,
20
+ .nav > li > a:focus {
20
21
  text-decoration: none;
21
22
  background-color: @grayLighter;
22
23
  }
@@ -68,7 +69,8 @@
68
69
  padding: 3px 15px;
69
70
  }
70
71
  .nav-list > .active > a,
71
- .nav-list > .active > a:hover {
72
+ .nav-list > .active > a:hover,
73
+ .nav-list > .active > a:focus {
72
74
  color: @white;
73
75
  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
74
76
  background-color: @linkColor;
@@ -122,13 +124,15 @@
122
124
  line-height: @baseLineHeight;
123
125
  border: 1px solid transparent;
124
126
  .border-radius(4px 4px 0 0);
125
- &:hover {
127
+ &:hover,
128
+ &:focus {
126
129
  border-color: @grayLighter @grayLighter #ddd;
127
130
  }
128
131
  }
129
- // Active state, and it's :hover to override normal :hover
132
+ // Active state, and it's :hover/:focus to override normal :hover/:focus
130
133
  .nav-tabs > .active > a,
131
- .nav-tabs > .active > a:hover {
134
+ .nav-tabs > .active > a:hover,
135
+ .nav-tabs > .active > a:focus {
132
136
  color: @gray;
133
137
  background-color: @bodyBackground;
134
138
  border: 1px solid #ddd;
@@ -151,7 +155,8 @@
151
155
 
152
156
  // Active state
153
157
  .nav-pills > .active > a,
154
- .nav-pills > .active > a:hover {
158
+ .nav-pills > .active > a:hover,
159
+ .nav-pills > .active > a:focus {
155
160
  color: @white;
156
161
  background-color: @linkColor;
157
162
  }
@@ -183,7 +188,8 @@
183
188
  .nav-tabs.nav-stacked > li:last-child > a {
184
189
  .border-bottom-radius(4px);
185
190
  }
186
- .nav-tabs.nav-stacked > li > a:hover {
191
+ .nav-tabs.nav-stacked > li > a:hover,
192
+ .nav-tabs.nav-stacked > li > a:focus {
187
193
  border-color: #ddd;
188
194
  z-index: 2;
189
195
  }
@@ -216,7 +222,8 @@
216
222
  border-bottom-color: @linkColor;
217
223
  margin-top: 6px;
218
224
  }
219
- .nav .dropdown-toggle:hover .caret {
225
+ .nav .dropdown-toggle:hover .caret,
226
+ .nav .dropdown-toggle:focus .caret {
220
227
  border-top-color: @linkColorHover;
221
228
  border-bottom-color: @linkColorHover;
222
229
  }
@@ -236,9 +243,10 @@
236
243
  border-bottom-color: @gray;
237
244
  }
238
245
 
239
- // Active:hover dropdown links
246
+ // Active:hover/:focus dropdown links
240
247
  // -------------------------
241
- .nav > .dropdown.active > a:hover {
248
+ .nav > .dropdown.active > a:hover,
249
+ .nav > .dropdown.active > a:focus {
242
250
  cursor: pointer;
243
251
  }
244
252
 
@@ -246,21 +254,24 @@
246
254
  // -------------------------
247
255
  .nav-tabs .open .dropdown-toggle,
248
256
  .nav-pills .open .dropdown-toggle,
249
- .nav > li.dropdown.open.active > a:hover {
257
+ .nav > li.dropdown.open.active > a:hover,
258
+ .nav > li.dropdown.open.active > a:focus {
250
259
  color: @white;
251
260
  background-color: @grayLight;
252
261
  border-color: @grayLight;
253
262
  }
254
263
  .nav li.dropdown.open .caret,
255
264
  .nav li.dropdown.open.active .caret,
256
- .nav li.dropdown.open a:hover .caret {
265
+ .nav li.dropdown.open a:hover .caret,
266
+ .nav li.dropdown.open a:focus .caret {
257
267
  border-top-color: @white;
258
268
  border-bottom-color: @white;
259
269
  .opacity(100);
260
270
  }
261
271
 
262
272
  // Dropdowns in stacked tabs
263
- .tabs-stacked .open > a:hover {
273
+ .tabs-stacked .open > a:hover,
274
+ .tabs-stacked .open > a:focus {
264
275
  border-color: @grayLight;
265
276
  }
266
277
 
@@ -311,13 +322,15 @@
311
322
  }
312
323
  .tabs-below > .nav-tabs > li > a {
313
324
  .border-radius(0 0 4px 4px);
314
- &:hover {
325
+ &:hover,
326
+ &:focus {
315
327
  border-bottom-color: transparent;
316
328
  border-top-color: #ddd;
317
329
  }
318
330
  }
319
331
  .tabs-below > .nav-tabs > .active > a,
320
- .tabs-below > .nav-tabs > .active > a:hover {
332
+ .tabs-below > .nav-tabs > .active > a:hover,
333
+ .tabs-below > .nav-tabs > .active > a:focus {
321
334
  border-color: transparent #ddd #ddd #ddd;
322
335
  }
323
336
 
@@ -346,11 +359,13 @@
346
359
  margin-right: -1px;
347
360
  .border-radius(4px 0 0 4px);
348
361
  }
349
- .tabs-left > .nav-tabs > li > a:hover {
362
+ .tabs-left > .nav-tabs > li > a:hover,
363
+ .tabs-left > .nav-tabs > li > a:focus {
350
364
  border-color: @grayLighter #ddd @grayLighter @grayLighter;
351
365
  }
352
366
  .tabs-left > .nav-tabs .active > a,
353
- .tabs-left > .nav-tabs .active > a:hover {
367
+ .tabs-left > .nav-tabs .active > a:hover,
368
+ .tabs-left > .nav-tabs .active > a:focus {
354
369
  border-color: #ddd transparent #ddd #ddd;
355
370
  *border-right-color: @white;
356
371
  }
@@ -365,11 +380,13 @@
365
380
  margin-left: -1px;
366
381
  .border-radius(0 4px 4px 0);
367
382
  }
368
- .tabs-right > .nav-tabs > li > a:hover {
383
+ .tabs-right > .nav-tabs > li > a:hover,
384
+ .tabs-right > .nav-tabs > li > a:focus {
369
385
  border-color: @grayLighter @grayLighter @grayLighter #ddd;
370
386
  }
371
387
  .tabs-right > .nav-tabs .active > a,
372
- .tabs-right > .nav-tabs .active > a:hover {
388
+ .tabs-right > .nav-tabs .active > a:hover,
389
+ .tabs-right > .nav-tabs .active > a:focus {
373
390
  border-color: #ddd #ddd #ddd transparent;
374
391
  *border-left-color: @white;
375
392
  }
@@ -383,8 +400,9 @@
383
400
  .nav > .disabled > a {
384
401
  color: @grayLight;
385
402
  }
386
- // Nuke hover effects
387
- .nav > .disabled > a:hover {
403
+ // Nuke hover/focus effects
404
+ .nav > .disabled > a:hover,
405
+ .nav > .disabled > a:focus {
388
406
  text-decoration: none;
389
407
  background-color: transparent;
390
408
  cursor: default;