anjlab-bootstrap-rails 3.0.0.rc1 → 3.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -12
  3. data/Rakefile +3 -2
  4. data/app/assets/javascripts/twitter/bootstrap.js +2 -1
  5. data/app/assets/javascripts/twitter/bootstrap/button.js +4 -2
  6. data/app/assets/javascripts/twitter/bootstrap/carousel.js +6 -2
  7. data/app/assets/javascripts/twitter/bootstrap/collapse.js +2 -2
  8. data/app/assets/javascripts/twitter/bootstrap/modal.js +19 -16
  9. data/app/assets/javascripts/twitter/bootstrap/popover.js +7 -5
  10. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +39 -21
  11. data/app/assets/javascripts/twitter/bootstrap/transition.js +2 -2
  12. data/app/assets/stylesheets/twitter/bootstrap/_alerts.scss +21 -19
  13. data/app/assets/stylesheets/twitter/bootstrap/_badges.scss +5 -5
  14. data/app/assets/stylesheets/twitter/bootstrap/_bootstrap.scss +1 -1
  15. data/app/assets/stylesheets/twitter/bootstrap/_button-groups.scss +96 -23
  16. data/app/assets/stylesheets/twitter/bootstrap/_buttons.scss +24 -18
  17. data/app/assets/stylesheets/twitter/bootstrap/_carousel.scss +10 -11
  18. data/app/assets/stylesheets/twitter/bootstrap/_close.scss +1 -1
  19. data/app/assets/stylesheets/twitter/bootstrap/_code.scss +4 -3
  20. data/app/assets/stylesheets/twitter/bootstrap/_dropdowns.scss +23 -18
  21. data/app/assets/stylesheets/twitter/bootstrap/_forms.scss +65 -160
  22. data/app/assets/stylesheets/twitter/bootstrap/_grid.scss +244 -59
  23. data/app/assets/stylesheets/twitter/bootstrap/_input-groups.scss +127 -0
  24. data/app/assets/stylesheets/twitter/bootstrap/_labels.scss +12 -4
  25. data/app/assets/stylesheets/twitter/bootstrap/_list-group.scss +36 -36
  26. data/app/assets/stylesheets/twitter/bootstrap/_mixins.scss +227 -52
  27. data/app/assets/stylesheets/twitter/bootstrap/_modals.scss +6 -9
  28. data/app/assets/stylesheets/twitter/bootstrap/_navbar.scss +268 -82
  29. data/app/assets/stylesheets/twitter/bootstrap/_navs.scss +10 -18
  30. data/app/assets/stylesheets/twitter/bootstrap/_pagination.scss +5 -41
  31. data/app/assets/stylesheets/twitter/bootstrap/_panels.scss +83 -57
  32. data/app/assets/stylesheets/twitter/bootstrap/_popovers.scss +0 -2
  33. data/app/assets/stylesheets/twitter/bootstrap/_progress-bars.scss +2 -8
  34. data/app/assets/stylesheets/twitter/bootstrap/_responsive-utilities.scss +76 -21
  35. data/app/assets/stylesheets/twitter/bootstrap/_scaffolding.scss +18 -2
  36. data/app/assets/stylesheets/twitter/bootstrap/_tables.scss +1 -1
  37. data/app/assets/stylesheets/twitter/bootstrap/_thumbnails.scss +2 -2
  38. data/app/assets/stylesheets/twitter/bootstrap/_tooltip.scss +1 -1
  39. data/app/assets/stylesheets/twitter/bootstrap/_type.scss +19 -13
  40. data/app/assets/stylesheets/twitter/bootstrap/_utilities.scss +3 -2
  41. data/app/assets/stylesheets/twitter/bootstrap/_variables.scss +86 -46
  42. data/app/assets/stylesheets/twitter/bootstrap/_wells.scss +2 -2
  43. data/lib/bootstrap-rails/version.rb +1 -1
  44. data/vendor/assets/javascripts/holder.js +419 -0
  45. metadata +4 -3
  46. data/app/assets/stylesheets/twitter/bootstrap/_accordion.scss +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93eb1f78519c959376535845631eda96564eccd0
4
- data.tar.gz: 5633ec827387a80e54b8abb0e9974a9c65732495
3
+ metadata.gz: 02076357f17eb8e5ca47387b96b1bf7fcb0ba95c
4
+ data.tar.gz: 2d9c58549fd13b52a665504e497eace699da950a
5
5
  SHA512:
6
- metadata.gz: bb4349be7d58d73e33be08fde9e2598b8d7f2864d2f920cf162a7284b9c2a962b9e48c4b9d5a31febe10115cb5b16e298f8ac5199c6e3d1b87df7643f33f76c3
7
- data.tar.gz: ab5385af14c3d07ce73e84696fca7efa99ceb1c8c9f265aa8dd22192f38e78ae0dfba3ac147b712cf9f69479af5e2366ea7f2b63f09cfccfb0e4375d5afefd28
6
+ metadata.gz: b70552bdae48dea07da181ef08f2d087a1d5d5b741b91af488ff856e5e1594f32b2b46472f7ae4178ada229c5cdbe1990f81f4033bad7259b5eed8284d62ac2c
7
+ data.tar.gz: ced4c11f9d83cd79b6546f6f474f6059883e48825b8be1497d7be24310b5cb977644b68088b91c96441b0ce8b5b08fa0d6df204ed3840f435c24572467a1f5bc
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Twitter Bootstrap v3.0.0.alpha1 for Rails 3/4
1
+ # Twitter Bootstrap v3.0.0.rc2 for Rails 3/4
2
2
  Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites.
3
3
  It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.
4
4
 
@@ -23,16 +23,9 @@ and run bundle install.
23
23
 
24
24
  ## Stylesheets
25
25
 
26
- Add necessary stylesheet file to app/assets/stylesheets/application.css
27
-
28
- ``` css
29
- *= require twitter/bootstrap
30
- ```
31
-
32
- You can override bootstrap variables:
33
-
34
- 1. rename application.css to application.css.scss
35
- 2. override vars above `@import "twitter/bootstrap";`
26
+ 1. Rename application.css to application.css.scss
27
+ 2. Import twitter bootstrap `@import "twitter/bootstrap";`
28
+ 3. You can override vars above `@import "twitter/bootstrap";`
36
29
 
37
30
  ```scss
38
31
 
@@ -65,7 +58,6 @@ Add necessary javascript(s) files to app/assets/javascripts/application.js
65
58
  //= require twitter/bootstrap/button
66
59
  //= require twitter/bootstrap/collapse
67
60
  //= require twitter/bootstrap/carousel
68
- //= require twitter/bootstrap/typeahead
69
61
  //= require twitter/bootstrap/affix
70
62
  ```
71
63
 
data/Rakefile CHANGED
@@ -33,8 +33,9 @@ namespace :twitter do
33
33
  order = %w{transition.js alert.js button.js carousel.js collapse.js dropdown.js modal.js tooltip.js popover.js scrollspy.js tab.js affix.js}
34
34
  order.each_with_index {|o, i| js[o] = i }
35
35
 
36
- list = js.to_a.sort {|a,b| a[1] <=> b[1]}.map{|p| p[0]}
37
- File.write "app/assets/javascripts/twitter/bootstrap.js", list.map {|f| "//= require twitter/bootstrap/#{f}"}.join("\n")
36
+ list = js.to_a.sort {|a,b| a[1] <=> b[1]}.map{|p| "twitter/bootstrap/#{p[0]}"}
37
+ list << "holder.js"
38
+ File.write "app/assets/javascripts/twitter/bootstrap.js", list.map {|f| "//= require #{f}"}.join("\n")
38
39
  end
39
40
 
40
41
  desc "Update Twitter's Bootstrap SCSS"
@@ -9,4 +9,5 @@
9
9
  //= require twitter/bootstrap/popover.js
10
10
  //= require twitter/bootstrap/scrollspy.js
11
11
  //= require twitter/bootstrap/tab.js
12
- //= require twitter/bootstrap/affix.js
12
+ //= require twitter/bootstrap/affix.js
13
+ //= require holder.js
@@ -56,7 +56,9 @@
56
56
  var $parent = this.$element.closest('[data-toggle="buttons"]')
57
57
 
58
58
  if ($parent.length) {
59
- var $input = this.$element.find('input').prop('checked', !this.$element.hasClass('active'))
59
+ var $input = this.$element.find('input')
60
+ .prop('checked', !this.$element.hasClass('active'))
61
+ .trigger('change')
60
62
  if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')
61
63
  }
62
64
 
@@ -72,7 +74,7 @@
72
74
  $.fn.button = function (option) {
73
75
  return this.each(function () {
74
76
  var $this = $(this)
75
- var data = $this.data('button')
77
+ var data = $this.data('bs.button')
76
78
  var options = typeof option == 'object' && option
77
79
 
78
80
  if (!data) $this.data('bs.button', (data = new Button(this, options)))
@@ -41,6 +41,7 @@
41
41
  Carousel.DEFAULTS = {
42
42
  interval: 5000
43
43
  , pause: 'hover'
44
+ , wrap: true
44
45
  }
45
46
 
46
47
  Carousel.prototype.cycle = function (e) {
@@ -105,12 +106,15 @@
105
106
  var fallback = type == 'next' ? 'first' : 'last'
106
107
  var that = this
107
108
 
109
+ if (!$next.length) {
110
+ if (!this.options.wrap) return
111
+ $next = this.$element.find('.item')[fallback]()
112
+ }
113
+
108
114
  this.sliding = true
109
115
 
110
116
  isCycling && this.pause()
111
117
 
112
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
113
-
114
118
  var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
115
119
 
116
120
  if ($next.hasClass('active')) return
@@ -48,7 +48,7 @@
48
48
  this.$element.trigger(startEvent)
49
49
  if (startEvent.isDefaultPrevented()) return
50
50
 
51
- var actives = this.$parent && this.$parent.find('> .accordion-group > .in')
51
+ var actives = this.$parent && this.$parent.find('> .panel > .in')
52
52
 
53
53
  if (actives && actives.length) {
54
54
  var hasData = actives.data('bs.collapse')
@@ -169,7 +169,7 @@
169
169
  var $parent = parent && $(parent)
170
170
 
171
171
  if (!data || !data.transitioning) {
172
- if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed')
172
+ if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
173
173
  $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
174
174
  }
175
175
 
@@ -29,7 +29,7 @@
29
29
  this.$backdrop =
30
30
  this.isShown = null
31
31
 
32
- if (this.options.remote) this.$element.find('.modal-body').load(this.options.remote)
32
+ if (this.options.remote) this.$element.load(this.options.remote)
33
33
  }
34
34
 
35
35
  Modal.DEFAULTS = {
@@ -38,13 +38,13 @@
38
38
  , show: true
39
39
  }
40
40
 
41
- Modal.prototype.toggle = function () {
42
- return this[!this.isShown ? 'show' : 'hide']()
41
+ Modal.prototype.toggle = function (_relatedTarget) {
42
+ return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
43
43
  }
44
44
 
45
- Modal.prototype.show = function () {
45
+ Modal.prototype.show = function (_relatedTarget) {
46
46
  var that = this
47
- var e = $.Event('show.bs.modal')
47
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
48
48
 
49
49
  this.$element.trigger(e)
50
50
 
@@ -73,13 +73,15 @@
73
73
 
74
74
  that.enforceFocus()
75
75
 
76
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
77
+
76
78
  transition ?
77
79
  that.$element
78
80
  .one($.support.transition.end, function () {
79
- that.$element.focus().trigger('shown.bs.modal')
81
+ that.$element.focus().trigger(e)
80
82
  })
81
83
  .emulateTransitionEnd(300) :
82
- that.$element.focus().trigger('shown.bs.modal')
84
+ that.$element.focus().trigger(e)
83
85
  })
84
86
  }
85
87
 
@@ -101,6 +103,7 @@
101
103
  this.$element
102
104
  .removeClass('in')
103
105
  .attr('aria-hidden', true)
106
+ .off('click.dismiss.modal')
104
107
 
105
108
  $.support.transition && this.$element.hasClass('fade') ?
106
109
  this.$element
@@ -153,7 +156,7 @@
153
156
  this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
154
157
  .appendTo(document.body)
155
158
 
156
- this.$element.on('click', $.proxy(function (e) {
159
+ this.$element.on('click.dismiss.modal', $.proxy(function (e) {
157
160
  if (e.target !== e.currentTarget) return
158
161
  this.options.backdrop == 'static'
159
162
  ? this.$element[0].focus.call(this.$element[0])
@@ -192,15 +195,15 @@
192
195
 
193
196
  var old = $.fn.modal
194
197
 
195
- $.fn.modal = function (option) {
198
+ $.fn.modal = function (option, _relatedTarget) {
196
199
  return this.each(function () {
197
200
  var $this = $(this)
198
201
  var data = $this.data('bs.modal')
199
202
  var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
200
203
 
201
204
  if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
202
- if (typeof option == 'string') data[option]()
203
- else if (options.show) data.show()
205
+ if (typeof option == 'string') data[option](_relatedTarget)
206
+ else if (options.show) data.show(_relatedTarget)
204
207
  })
205
208
  }
206
209
 
@@ -223,19 +226,19 @@
223
226
  var $this = $(this)
224
227
  var href = $this.attr('href')
225
228
  var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
226
- var option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
229
+ var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
227
230
 
228
231
  e.preventDefault()
229
232
 
230
233
  $target
231
- .modal(option)
234
+ .modal(option, this)
232
235
  .one('hide', function () {
233
236
  $this.is(':visible') && $this.focus()
234
237
  })
235
238
  })
236
239
 
237
- var $body = $(document.body)
238
- .on('shown.bs.modal', '.modal', function () { $body.addClass('modal-open') })
239
- .on('hidden.bs.modal', '.modal', function () { $body.removeClass('modal-open') })
240
+ $(document)
241
+ .on('shown.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
242
+ .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
240
243
 
241
244
  }(window.jQuery);
@@ -58,7 +58,9 @@
58
58
 
59
59
  $tip.removeClass('fade top bottom left right in')
60
60
 
61
- $tip.find('.popover-title:empty').hide()
61
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
62
+ // this manually by checking the contents.
63
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
62
64
  }
63
65
 
64
66
  Popover.prototype.hasContent = function () {
@@ -75,15 +77,15 @@
75
77
  o.content)
76
78
  }
77
79
 
80
+ Popover.prototype.arrow = function () {
81
+ return this.$arrow = this.$arrow || this.tip().find('.arrow')
82
+ }
83
+
78
84
  Popover.prototype.tip = function () {
79
85
  if (!this.$tip) this.$tip = $(this.options.template)
80
86
  return this.$tip
81
87
  }
82
88
 
83
- Popover.prototype.destroy = function () {
84
- this.hide().$element.off('.' + this.type).removeData(this.type)
85
- }
86
-
87
89
 
88
90
  // POPOVER PLUGIN DEFINITION
89
91
  // =========================
@@ -1,6 +1,6 @@
1
1
  /* ========================================================================
2
2
  * Bootstrap: tooltip.js v3.0.0
3
- * http://twbs.github.com/bootstrap/javascript.html#affix
3
+ * http://twbs.github.com/bootstrap/javascript.html#tooltip
4
4
  * Inspired by the original jQuery.tipsy by Jason Frame
5
5
  * ========================================================================
6
6
  * Copyright 2012 Twitter, Inc.
@@ -64,7 +64,7 @@
64
64
  var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
65
65
  var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
66
66
 
67
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
67
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
68
68
  this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
69
69
  }
70
70
  }
@@ -91,16 +91,20 @@
91
91
  return options
92
92
  }
93
93
 
94
- Tooltip.prototype.enter = function (obj) {
95
- var defaults = this.getDefaults()
94
+ Tooltip.prototype.getDelegateOptions = function () {
96
95
  var options = {}
96
+ var defaults = this.getDefaults()
97
97
 
98
98
  this._options && $.each(this._options, function (key, value) {
99
99
  if (defaults[key] != value) options[key] = value
100
100
  })
101
101
 
102
+ return options
103
+ }
104
+
105
+ Tooltip.prototype.enter = function (obj) {
102
106
  var self = obj instanceof this.constructor ?
103
- obj : $(obj.currentTarget)[this.type](options).data('bs.' + this.type)
107
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
104
108
 
105
109
  clearTimeout(self.timeout)
106
110
 
@@ -114,7 +118,7 @@
114
118
 
115
119
  Tooltip.prototype.leave = function (obj) {
116
120
  var self = obj instanceof this.constructor ?
117
- obj : $(obj.currentTarget)[this.type](this._options).data('bs.' + this.type)
121
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
118
122
 
119
123
  clearTimeout(self.timeout)
120
124
 
@@ -179,12 +183,9 @@
179
183
  .addClass(placement)
180
184
  }
181
185
 
182
- var tp = placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
183
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
184
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
185
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
186
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
186
187
 
187
- this.applyPlacement(tp, placement)
188
+ this.applyPlacement(calculatedOffset, placement)
188
189
  this.$element.trigger('shown.bs.' + this.type)
189
190
  }
190
191
  }
@@ -196,25 +197,33 @@
196
197
  var height = $tip[0].offsetHeight
197
198
 
198
199
  // manually read margins because getBoundingClientRect includes difference
199
- offset.top = offset.top + parseInt($tip.css('margin-top'), 10)
200
- offset.left = offset.left + parseInt($tip.css('margin-left'), 10)
200
+ var marginTop = parseInt($tip.css('margin-top'), 10)
201
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
202
+
203
+ // we must check for NaN for ie 8/9
204
+ if (isNaN(marginTop)) marginTop = 0
205
+ if (isNaN(marginLeft)) marginLeft = 0
206
+
207
+ offset.top = offset.top + marginTop
208
+ offset.left = offset.left + marginLeft
201
209
 
202
210
  $tip
203
211
  .offset(offset)
204
212
  .addClass('in')
205
213
 
214
+ // check to see if placing tip in new offset caused the tip to resize itself
206
215
  var actualWidth = $tip[0].offsetWidth
207
216
  var actualHeight = $tip[0].offsetHeight
208
217
 
209
218
  if (placement == 'top' && actualHeight != height) {
210
219
  replace = true
211
- offset.top = offset.top + height - actualHeight
220
+ offset.top = offset.top + height - actualHeight
212
221
  }
213
222
 
214
- if (placement == 'bottom' || placement == 'top') {
223
+ if (/bottom|top/.test(placement)) {
215
224
  var delta = 0
216
225
 
217
- if (offset.left < 0){
226
+ if (offset.left < 0) {
218
227
  delta = offset.left * -2
219
228
  offset.left = 0
220
229
 
@@ -249,6 +258,8 @@
249
258
  var $tip = this.tip()
250
259
  var e = $.Event('hide.bs.' + this.type)
251
260
 
261
+ function complete() { $tip.detach() }
262
+
252
263
  this.$element.trigger(e)
253
264
 
254
265
  if (e.isDefaultPrevented()) return
@@ -257,9 +268,9 @@
257
268
 
258
269
  $.support.transition && this.$tip.hasClass('fade') ?
259
270
  $tip
260
- .one($.support.transition.end, $tip.detach)
271
+ .one($.support.transition.end, complete)
261
272
  .emulateTransitionEnd(150) :
262
- $tip.detach()
273
+ complete()
263
274
 
264
275
  this.$element.trigger('hidden.bs.' + this.type)
265
276
 
@@ -285,6 +296,13 @@
285
296
  }, this.$element.offset())
286
297
  }
287
298
 
299
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
300
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
301
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
302
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
303
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
304
+ }
305
+
288
306
  Tooltip.prototype.getTitle = function () {
289
307
  var title
290
308
  var $e = this.$element
@@ -300,8 +318,8 @@
300
318
  return this.$tip = this.$tip || $(this.options.template)
301
319
  }
302
320
 
303
- Tooltip.prototype.arrow =function(){
304
- return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
321
+ Tooltip.prototype.arrow = function () {
322
+ return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
305
323
  }
306
324
 
307
325
  Tooltip.prototype.validate = function () {
@@ -325,7 +343,7 @@
325
343
  }
326
344
 
327
345
  Tooltip.prototype.toggle = function (e) {
328
- var self = e ? $(e.currentTarget)[this.type](this._options).data('bs.' + this.type) : this
346
+ var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
329
347
  self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
330
348
  }
331
349
 
@@ -43,8 +43,8 @@
43
43
  // http://blog.alexmaccaw.com/css-transitions
44
44
  $.fn.emulateTransitionEnd = function (duration) {
45
45
  var called = false, $el = this
46
- $(this).one('webkitTransitionEnd', function () { called = true })
47
- var callback = function () { if (!called) $($el).trigger('webkitTransitionEnd') }
46
+ $(this).one($.support.transition.end, function () { called = true })
47
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
48
48
  setTimeout(callback, duration)
49
49
  return this
50
50
  }
@@ -7,7 +7,7 @@
7
7
  // -------------------------
8
8
 
9
9
  .alert {
10
- padding: 10px 35px 10px 15px;
10
+ padding: $alert-padding;
11
11
  margin-bottom: $line-height-computed;
12
12
  color: $alert-text;
13
13
  background-color: $alert-bg;
@@ -26,10 +26,27 @@
26
26
  }
27
27
  // Provide class for links that match alerts
28
28
  .alert-link {
29
- font-weight: 500;
29
+ font-weight: $alert-link-font-weight;
30
30
  color: darken($alert-text, 10%);
31
31
  }
32
32
 
33
+ // Improve alignment and spacing of inner content
34
+ > p,
35
+ > ul {
36
+ margin-bottom: 0;
37
+ }
38
+ > p + p {
39
+ margin-top: 5px;
40
+ }
41
+ }
42
+
43
+ // Dismissable alerts
44
+ //
45
+ // Expand the right padding and account for the close button's positioning.
46
+
47
+ .alert-dismissable {
48
+ padding-right: ($alert-padding + 20);
49
+
33
50
  // Adjust close link position
34
51
  .close {
35
52
  position: relative;
@@ -40,7 +57,8 @@
40
57
  }
41
58
 
42
59
  // Alternate styles
43
- // -------------------------
60
+ //
61
+ // Generate contextual modifier classes for colorizing the alert.
44
62
 
45
63
  .alert-success {
46
64
  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
@@ -51,19 +69,3 @@
51
69
  .alert-info {
52
70
  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
53
71
  }
54
-
55
- // Block alerts
56
- // -------------------------
57
-
58
- .alert-block {
59
- padding-top: 15px;
60
- padding-bottom: 15px;
61
-
62
- > p,
63
- > ul {
64
- margin-bottom: 0;
65
- }
66
- p + p {
67
- margin-top: 5px;
68
- }
69
- }