twitter-bootstrap-rails 2.2.1 → 2.2.3

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

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;