bootstrap-sass 2.2.2.0 → 2.3.0.0

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 bootstrap-sass might be problematic. Click here for more details.

Files changed (42) hide show
  1. data/README.md +44 -22
  2. data/lib/bootstrap-sass.rb +3 -1
  3. data/vendor/assets/javascripts/bootstrap-affix.js +1 -1
  4. data/vendor/assets/javascripts/bootstrap-alert.js +1 -1
  5. data/vendor/assets/javascripts/bootstrap-button.js +1 -1
  6. data/vendor/assets/javascripts/bootstrap-carousel.js +31 -9
  7. data/vendor/assets/javascripts/bootstrap-collapse.js +4 -4
  8. data/vendor/assets/javascripts/bootstrap-dropdown.js +14 -10
  9. data/vendor/assets/javascripts/bootstrap-modal.js +13 -11
  10. data/vendor/assets/javascripts/bootstrap-popover.js +5 -5
  11. data/vendor/assets/javascripts/bootstrap-scrollspy.js +2 -2
  12. data/vendor/assets/javascripts/bootstrap-tab.js +1 -1
  13. data/vendor/assets/javascripts/bootstrap-tooltip.js +95 -29
  14. data/vendor/assets/javascripts/bootstrap-transition.js +1 -1
  15. data/vendor/assets/javascripts/bootstrap-typeahead.js +16 -4
  16. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +4 -2
  17. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +8 -10
  18. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +33 -6
  19. data/vendor/assets/stylesheets/bootstrap/_close.scss +2 -1
  20. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +16 -12
  21. data/vendor/assets/stylesheets/bootstrap/_forms.scss +5 -2
  22. data/vendor/assets/stylesheets/bootstrap/_labels-badges.scss +4 -2
  23. data/vendor/assets/stylesheets/bootstrap/_media.scss +2 -2
  24. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +6 -0
  25. data/vendor/assets/stylesheets/bootstrap/_modals.scss +3 -3
  26. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +18 -11
  27. data/vendor/assets/stylesheets/bootstrap/_navs.scss +39 -21
  28. data/vendor/assets/stylesheets/bootstrap/_pager.scss +3 -1
  29. data/vendor/assets/stylesheets/bootstrap/_pagination.scss +3 -1
  30. data/vendor/assets/stylesheets/bootstrap/_popovers.scss +5 -1
  31. data/vendor/assets/stylesheets/bootstrap/_responsive-navbar.scss +6 -2
  32. data/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss +29 -13
  33. data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +2 -1
  34. data/vendor/assets/stylesheets/bootstrap/_sprites.scss +7 -3
  35. data/vendor/assets/stylesheets/bootstrap/_tables.scss +24 -17
  36. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +3 -2
  37. data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +6 -6
  38. data/vendor/assets/stylesheets/bootstrap/_type.scss +20 -8
  39. data/vendor/assets/stylesheets/bootstrap/_variables.scss +2 -2
  40. data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +1 -1
  41. data/vendor/assets/stylesheets/bootstrap/responsive.scss +1 -10
  42. metadata +9 -24
@@ -1,5 +1,5 @@
1
1
  /* ========================================================
2
- * bootstrap-tab.js v2.2.2
2
+ * bootstrap-tab.js v2.3.0
3
3
  * http://twitter.github.com/bootstrap/javascript.html#tabs
4
4
  * ========================================================
5
5
  * Copyright 2012 Twitter, Inc.
@@ -1,5 +1,5 @@
1
1
  /* ===========================================================
2
- * bootstrap-tooltip.js v2.2.2
2
+ * bootstrap-tooltip.js v2.3.0
3
3
  * http://twitter.github.com/bootstrap/javascript.html#tooltips
4
4
  * Inspired by the original jQuery.tipsy by Jason Frame
5
5
  * ===========================================================
@@ -38,19 +38,27 @@
38
38
  , init: function (type, element, options) {
39
39
  var eventIn
40
40
  , eventOut
41
+ , triggers
42
+ , trigger
43
+ , i
41
44
 
42
45
  this.type = type
43
46
  this.$element = $(element)
44
47
  this.options = this.getOptions(options)
45
48
  this.enabled = true
46
49
 
47
- if (this.options.trigger == 'click') {
48
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
49
- } else if (this.options.trigger != 'manual') {
50
- eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
51
- eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
52
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
53
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
50
+ triggers = this.options.trigger.split(' ')
51
+
52
+ for (i = triggers.length; i--;) {
53
+ trigger = triggers[i]
54
+ if (trigger == 'click') {
55
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
56
+ } else if (trigger != 'manual') {
57
+ eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
58
+ eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
59
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
60
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
61
+ }
54
62
  }
55
63
 
56
64
  this.options.selector ?
@@ -59,7 +67,7 @@
59
67
  }
60
68
 
61
69
  , getOptions: function (options) {
62
- options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
70
+ options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
63
71
 
64
72
  if (options.delay && typeof options.delay == 'number') {
65
73
  options.delay = {
@@ -97,14 +105,16 @@
97
105
 
98
106
  , show: function () {
99
107
  var $tip
100
- , inside
101
108
  , pos
102
109
  , actualWidth
103
110
  , actualHeight
104
111
  , placement
105
112
  , tp
113
+ , e = $.Event('show')
106
114
 
107
115
  if (this.hasContent() && this.enabled) {
116
+ this.$element.trigger(e)
117
+ if (e.isDefaultPrevented()) return
108
118
  $tip = this.tip()
109
119
  this.setContent()
110
120
 
@@ -116,19 +126,18 @@
116
126
  this.options.placement.call(this, $tip[0], this.$element[0]) :
117
127
  this.options.placement
118
128
 
119
- inside = /in/.test(placement)
120
-
121
129
  $tip
122
130
  .detach()
123
131
  .css({ top: 0, left: 0, display: 'block' })
124
- .insertAfter(this.$element)
125
132
 
126
- pos = this.getPosition(inside)
133
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
134
+
135
+ pos = this.getPosition()
127
136
 
128
137
  actualWidth = $tip[0].offsetWidth
129
138
  actualHeight = $tip[0].offsetHeight
130
139
 
131
- switch (inside ? placement.split(' ')[1] : placement) {
140
+ switch (placement) {
132
141
  case 'bottom':
133
142
  tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
134
143
  break
@@ -143,11 +152,56 @@
143
152
  break
144
153
  }
145
154
 
146
- $tip
147
- .offset(tp)
148
- .addClass(placement)
149
- .addClass('in')
155
+ this.applyPlacement(tp, placement)
156
+ this.$element.trigger('shown')
157
+ }
158
+ }
159
+
160
+ , applyPlacement: function(offset, placement){
161
+ var $tip = this.tip()
162
+ , width = $tip[0].offsetWidth
163
+ , height = $tip[0].offsetHeight
164
+ , actualWidth
165
+ , actualHeight
166
+ , delta
167
+ , replace
168
+
169
+ $tip
170
+ .offset(offset)
171
+ .addClass(placement)
172
+ .addClass('in')
173
+
174
+ actualWidth = $tip[0].offsetWidth
175
+ actualHeight = $tip[0].offsetHeight
176
+
177
+ if (placement == 'top' && actualHeight != height) {
178
+ offset.top = offset.top + height - actualHeight
179
+ replace = true
150
180
  }
181
+
182
+ if (placement == 'bottom' || placement == 'top') {
183
+ delta = 0
184
+
185
+ if (offset.left < 0){
186
+ delta = offset.left * -2
187
+ offset.left = 0
188
+ $tip.offset(offset)
189
+ actualWidth = $tip[0].offsetWidth
190
+ actualHeight = $tip[0].offsetHeight
191
+ }
192
+
193
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
194
+ } else {
195
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
196
+ }
197
+
198
+ if (replace) $tip.offset(offset)
199
+ }
200
+
201
+ , replaceArrow: function(delta, dimension, position){
202
+ this
203
+ .arrow()
204
+ .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
151
205
  }
152
206
 
153
207
  , setContent: function () {
@@ -161,6 +215,10 @@
161
215
  , hide: function () {
162
216
  var that = this
163
217
  , $tip = this.tip()
218
+ , e = $.Event('hide')
219
+
220
+ this.$element.trigger(e)
221
+ if (e.isDefaultPrevented()) return
164
222
 
165
223
  $tip.removeClass('in')
166
224
 
@@ -179,13 +237,15 @@
179
237
  removeWithAnimation() :
180
238
  $tip.detach()
181
239
 
240
+ this.$element.trigger('hidden')
241
+
182
242
  return this
183
243
  }
184
244
 
185
245
  , fixTitle: function () {
186
246
  var $e = this.$element
187
247
  if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
188
- $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
248
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
189
249
  }
190
250
  }
191
251
 
@@ -193,11 +253,12 @@
193
253
  return this.getTitle()
194
254
  }
195
255
 
196
- , getPosition: function (inside) {
197
- return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
198
- width: this.$element[0].offsetWidth
199
- , height: this.$element[0].offsetHeight
200
- })
256
+ , getPosition: function () {
257
+ var el = this.$element[0]
258
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
259
+ width: el.offsetWidth
260
+ , height: el.offsetHeight
261
+ }, this.$element.offset())
201
262
  }
202
263
 
203
264
  , getTitle: function () {
@@ -215,6 +276,10 @@
215
276
  return this.$tip = this.$tip || $(this.options.template)
216
277
  }
217
278
 
279
+ , arrow: function(){
280
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
281
+ }
282
+
218
283
  , validate: function () {
219
284
  if (!this.$element[0].parentNode) {
220
285
  this.hide()
@@ -236,8 +301,8 @@
236
301
  }
237
302
 
238
303
  , toggle: function (e) {
239
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
240
- self[self.tip().hasClass('in') ? 'hide' : 'show']()
304
+ var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
305
+ self.tip().hasClass('in') ? self.hide() : self.show()
241
306
  }
242
307
 
243
308
  , destroy: function () {
@@ -269,10 +334,11 @@
269
334
  , placement: 'top'
270
335
  , selector: false
271
336
  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
272
- , trigger: 'hover'
337
+ , trigger: 'hover focus'
273
338
  , title: ''
274
339
  , delay: 0
275
340
  , html: false
341
+ , container: false
276
342
  }
277
343
 
278
344
 
@@ -284,4 +350,4 @@
284
350
  return this
285
351
  }
286
352
 
287
- }(window.jQuery);
353
+ }(window.jQuery);
@@ -1,5 +1,5 @@
1
1
  /* ===================================================
2
- * bootstrap-transition.js v2.2.2
2
+ * bootstrap-transition.js v2.3.0
3
3
  * http://twitter.github.com/bootstrap/javascript.html#transitions
4
4
  * ===================================================
5
5
  * Copyright 2012 Twitter, Inc.
@@ -1,5 +1,5 @@
1
1
  /* =============================================================
2
- * bootstrap-typeahead.js v2.2.2
2
+ * bootstrap-typeahead.js v2.3.0
3
3
  * http://twitter.github.com/bootstrap/javascript.html#typeahead
4
4
  * =============================================================
5
5
  * Copyright 2012 Twitter, Inc.
@@ -172,6 +172,7 @@
172
172
 
173
173
  , listen: function () {
174
174
  this.$element
175
+ .on('focus', $.proxy(this.focus, this))
175
176
  .on('blur', $.proxy(this.blur, this))
176
177
  .on('keypress', $.proxy(this.keypress, this))
177
178
  .on('keyup', $.proxy(this.keyup, this))
@@ -183,6 +184,7 @@
183
184
  this.$menu
184
185
  .on('click', $.proxy(this.click, this))
185
186
  .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
187
+ .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
186
188
  }
187
189
 
188
190
  , eventSupported: function(eventName) {
@@ -256,22 +258,33 @@
256
258
  e.preventDefault()
257
259
  }
258
260
 
261
+ , focus: function (e) {
262
+ this.focused = true
263
+ }
264
+
259
265
  , blur: function (e) {
260
- var that = this
261
- setTimeout(function () { that.hide() }, 150)
266
+ this.focused = false
267
+ if (!this.mousedover && this.shown) this.hide()
262
268
  }
263
269
 
264
270
  , click: function (e) {
265
271
  e.stopPropagation()
266
272
  e.preventDefault()
267
273
  this.select()
274
+ this.$element.focus()
268
275
  }
269
276
 
270
277
  , mouseenter: function (e) {
278
+ this.mousedover = true
271
279
  this.$menu.find('.active').removeClass('active')
272
280
  $(e.currentTarget).addClass('active')
273
281
  }
274
282
 
283
+ , mouseleave: function (e) {
284
+ this.mousedover = false
285
+ if (!this.focused && this.shown) this.hide()
286
+ }
287
+
275
288
  }
276
289
 
277
290
 
@@ -316,7 +329,6 @@
316
329
  $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
317
330
  var $this = $(this)
318
331
  if ($this.data('typeahead')) return
319
- e.preventDefault()
320
332
  $this.typeahead($this.data())
321
333
  })
322
334
 
@@ -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
  @include ie7-restore-left-whitespace(); // Give IE7 some love
26
26
  @include 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
  @include 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
  @include buttonBackground($btnPrimaryBackground, $btnPrimaryBackgroundHighlight);
151
147
  }
@@ -219,12 +215,14 @@ input[type="submit"].btn {
219
215
  color: $linkColor;
220
216
  @include 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
  @include transition(.6s ease-in-out left);
24
- }
25
24
 
26
25
  // Account for jankitude on images
27
- > .item > img {
28
- display: block;
29
- line-height: 1;
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
  @include 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
  @include opacity(20);
14
- &:hover {
14
+ &:hover,
15
+ &:focus {
15
16
  color: $black;
16
17
  text-decoration: none;
17
18
  cursor: pointer;