bootstrap-sass 2.2.2.0 → 2.3.0.0

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

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;