bootstrap-on-rails 3.2.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -1
  3. data/app/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  4. data/app/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +1 -1
  5. data/app/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  6. data/app/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  7. data/app/assets/javascripts/bootstrap/affix.js +43 -23
  8. data/app/assets/javascripts/bootstrap/alert.js +6 -4
  9. data/app/assets/javascripts/bootstrap/button.js +16 -10
  10. data/app/assets/javascripts/bootstrap/carousel.js +27 -10
  11. data/app/assets/javascripts/bootstrap/collapse.js +69 -28
  12. data/app/assets/javascripts/bootstrap/dropdown.js +20 -10
  13. data/app/assets/javascripts/bootstrap/modal.js +67 -23
  14. data/app/assets/javascripts/bootstrap/popover.js +13 -7
  15. data/app/assets/javascripts/bootstrap/scrollspy.js +12 -7
  16. data/app/assets/javascripts/bootstrap/tab.js +41 -16
  17. data/app/assets/javascripts/bootstrap/tooltip.js +60 -39
  18. data/app/assets/javascripts/bootstrap/transition.js +1 -1
  19. data/app/assets/stylesheets/bootstrap/alerts.less +0 -0
  20. data/app/assets/stylesheets/bootstrap/badges.less +7 -1
  21. data/app/assets/stylesheets/bootstrap/bootstrap.less +0 -0
  22. data/app/assets/stylesheets/bootstrap/breadcrumbs.less +0 -0
  23. data/app/assets/stylesheets/bootstrap/button-groups.less +16 -13
  24. data/app/assets/stylesheets/bootstrap/buttons.less +7 -4
  25. data/app/assets/stylesheets/bootstrap/carousel.less +24 -0
  26. data/app/assets/stylesheets/bootstrap/close.less +0 -0
  27. data/app/assets/stylesheets/bootstrap/code.less +1 -0
  28. data/app/assets/stylesheets/bootstrap/component-animations.less +5 -2
  29. data/app/assets/stylesheets/bootstrap/dropdowns.less +3 -5
  30. data/app/assets/stylesheets/bootstrap/forms.less +46 -40
  31. data/app/assets/stylesheets/bootstrap/glyphicons.less +7 -6
  32. data/app/assets/stylesheets/bootstrap/grid.less +0 -0
  33. data/app/assets/stylesheets/bootstrap/input-groups.less +0 -0
  34. data/app/assets/stylesheets/bootstrap/jumbotron.less +6 -5
  35. data/app/assets/stylesheets/bootstrap/labels.less +0 -0
  36. data/app/assets/stylesheets/bootstrap/list-group.less +1 -8
  37. data/app/assets/stylesheets/bootstrap/media.less +27 -36
  38. data/app/assets/stylesheets/bootstrap/mixins.less +0 -0
  39. data/app/assets/stylesheets/bootstrap/mixins/alerts.less +0 -0
  40. data/app/assets/stylesheets/bootstrap/mixins/background-variant.less +0 -0
  41. data/app/assets/stylesheets/bootstrap/mixins/border-radius.less +0 -0
  42. data/app/assets/stylesheets/bootstrap/mixins/buttons.less +2 -0
  43. data/app/assets/stylesheets/bootstrap/mixins/center-block.less +0 -0
  44. data/app/assets/stylesheets/bootstrap/mixins/clearfix.less +0 -0
  45. data/app/assets/stylesheets/bootstrap/mixins/forms.less +5 -1
  46. data/app/assets/stylesheets/bootstrap/mixins/gradients.less +0 -0
  47. data/app/assets/stylesheets/bootstrap/mixins/grid-framework.less +2 -2
  48. data/app/assets/stylesheets/bootstrap/mixins/grid.less +0 -0
  49. data/app/assets/stylesheets/bootstrap/mixins/hide-text.less +0 -0
  50. data/app/assets/stylesheets/bootstrap/mixins/image.less +0 -1
  51. data/app/assets/stylesheets/bootstrap/mixins/labels.less +1 -1
  52. data/app/assets/stylesheets/bootstrap/mixins/list-group.less +0 -0
  53. data/app/assets/stylesheets/bootstrap/mixins/nav-divider.less +0 -0
  54. data/app/assets/stylesheets/bootstrap/mixins/nav-vertical-align.less +0 -0
  55. data/app/assets/stylesheets/bootstrap/mixins/opacity.less +0 -0
  56. data/app/assets/stylesheets/bootstrap/mixins/pagination.less +0 -0
  57. data/app/assets/stylesheets/bootstrap/mixins/panels.less +0 -0
  58. data/app/assets/stylesheets/bootstrap/mixins/progress-bar.less +0 -0
  59. data/app/assets/stylesheets/bootstrap/mixins/reset-filter.less +0 -0
  60. data/app/assets/stylesheets/bootstrap/mixins/resize.less +0 -0
  61. data/app/assets/stylesheets/bootstrap/mixins/responsive-visibility.less +0 -0
  62. data/app/assets/stylesheets/bootstrap/mixins/size.less +0 -0
  63. data/app/assets/stylesheets/bootstrap/mixins/tab-focus.less +0 -0
  64. data/app/assets/stylesheets/bootstrap/mixins/table-row.less +0 -0
  65. data/app/assets/stylesheets/bootstrap/mixins/text-emphasis.less +0 -0
  66. data/app/assets/stylesheets/bootstrap/mixins/text-overflow.less +0 -0
  67. data/app/assets/stylesheets/bootstrap/mixins/vendor-prefixes.less +6 -3
  68. data/app/assets/stylesheets/bootstrap/modals.less +3 -5
  69. data/app/assets/stylesheets/bootstrap/navbar.less +30 -25
  70. data/app/assets/stylesheets/bootstrap/navs.less +3 -1
  71. data/app/assets/stylesheets/bootstrap/normalize.less +5 -3
  72. data/app/assets/stylesheets/bootstrap/pager.less +1 -2
  73. data/app/assets/stylesheets/bootstrap/pagination.less +1 -1
  74. data/app/assets/stylesheets/bootstrap/panels.less +21 -3
  75. data/app/assets/stylesheets/bootstrap/popovers.less +6 -4
  76. data/app/assets/stylesheets/bootstrap/print.less +102 -96
  77. data/app/assets/stylesheets/bootstrap/progress-bars.less +1 -19
  78. data/app/assets/stylesheets/bootstrap/responsive-embed.less +2 -1
  79. data/app/assets/stylesheets/bootstrap/responsive-utilities.less +0 -0
  80. data/app/assets/stylesheets/bootstrap/scaffolding.less +1 -1
  81. data/app/assets/stylesheets/bootstrap/tables.less +11 -10
  82. data/app/assets/stylesheets/bootstrap/theme.less +23 -9
  83. data/app/assets/stylesheets/bootstrap/thumbnails.less +1 -1
  84. data/app/assets/stylesheets/bootstrap/tooltip.less +12 -4
  85. data/app/assets/stylesheets/bootstrap/type.less +0 -11
  86. data/app/assets/stylesheets/bootstrap/utilities.less +0 -1
  87. data/app/assets/stylesheets/bootstrap/variables.less +31 -20
  88. data/app/assets/stylesheets/bootstrap/wells.less +0 -0
  89. data/lib/bootstrap-on-rails/version.rb +1 -1
  90. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4cce26a83b0a60a92797d88a7e69bc749a2adee
4
- data.tar.gz: 5d43b2f0a93ffe723246771c81f9103c4aec9ed8
3
+ metadata.gz: e997923a46adb12079aa6f878339da5ccaa385e8
4
+ data.tar.gz: c505a69b35432c577cbc14872fc986821705ee06
5
5
  SHA512:
6
- metadata.gz: 252b009d4ef0f9dedec1a2d05f7694450d35d17f504e422b5d962b80a306f580e5fb7581324343c6e85686d57ad1565186c41a95d3d7d2feaf3068a08343d4d9
7
- data.tar.gz: 8f43bfec0fc1249e151d9fcf40a656e7aae993c59a9d4d6fefefc37a1db49ebdc4595700e0f99a97af8164cac22324c5b0346651b52fa1adedbd82a74d9c09aa
6
+ metadata.gz: f6b15ce6077e76c7de3d3ff92c214aa83a72682bc67cf995ba9872537c5f4885ce61a6394868976724ae518856b139fcc30aadb9c10b7f4ab9b98103c95f4148
7
+ data.tar.gz: 2f44ec621b7b67a8c137adf4ef2cb7af59b57f0dfa2f55b45377ef78ab2e4762c6c6788829b49d4d684cbce78512df0abc0f5ffd5a144743002e9d0054ff4fb2
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A simpler implementation of Bootstap 3 for Rails. Only packaged assets. No bloat. Pure Less.
4
4
 
5
- * Current Bootstrap Version: 3.2.0
5
+ * Current Bootstrap Version: 3.3.1
6
6
  * Supports Rails 3.1+ and Rails 4
7
7
  * Less only
8
8
  * Twitter Variables are easily overridable
@@ -56,6 +56,10 @@ To add the bootstrap javascript libraries, add to your application.js file
56
56
 
57
57
  It's important to note that variables.less is taken out of bootstrap and required explicitly to support overriding variables, another motivation why I needed to do this gem.
58
58
 
59
+ ## Upgrading
60
+
61
+ If you're using your own custom variables.less, once in a while you'll get missing variables. Just in case that happens, just look it up on the main variables.less file here: https://github.com/twbs/bootstrap/blob/master/less/variables.less
62
+
59
63
  ## Notes
60
64
 
61
65
  * bootstrap-on-rails now follows the same bootstrap versioning
@@ -226,4 +226,4 @@
226
226
  <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
227
  <glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228
228
  </font>
229
- </defs></svg>
229
+ </defs></svg>
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: affix.js v3.2.0
2
+ * Bootstrap: affix.js v3.3.1
3
3
  * http://getbootstrap.com/javascript/#affix
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -28,7 +28,7 @@
28
28
  this.checkPosition()
29
29
  }
30
30
 
31
- Affix.VERSION = '3.2.0'
31
+ Affix.VERSION = '3.3.1'
32
32
 
33
33
  Affix.RESET = 'affix affix-top affix-bottom'
34
34
 
@@ -37,6 +37,28 @@
37
37
  target: window
38
38
  }
39
39
 
40
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
41
+ var scrollTop = this.$target.scrollTop()
42
+ var position = this.$element.offset()
43
+ var targetHeight = this.$target.height()
44
+
45
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
46
+
47
+ if (this.affixed == 'bottom') {
48
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
49
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
50
+ }
51
+
52
+ var initializing = this.affixed == null
53
+ var colliderTop = initializing ? scrollTop : position.top
54
+ var colliderHeight = initializing ? targetHeight : height
55
+
56
+ if (offsetTop != null && colliderTop <= offsetTop) return 'top'
57
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
58
+
59
+ return false
60
+ }
61
+
40
62
  Affix.prototype.getPinnedOffset = function () {
41
63
  if (this.pinnedOffset) return this.pinnedOffset
42
64
  this.$element.removeClass(Affix.RESET).addClass('affix')
@@ -52,42 +74,40 @@
52
74
  Affix.prototype.checkPosition = function () {
53
75
  if (!this.$element.is(':visible')) return
54
76
 
55
- var scrollHeight = $(document).height()
56
- var scrollTop = this.$target.scrollTop()
57
- var position = this.$element.offset()
77
+ var height = this.$element.height()
58
78
  var offset = this.options.offset
59
79
  var offsetTop = offset.top
60
80
  var offsetBottom = offset.bottom
81
+ var scrollHeight = $('body').height()
61
82
 
62
83
  if (typeof offset != 'object') offsetBottom = offsetTop = offset
63
84
  if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
64
85
  if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
65
86
 
66
- var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
67
- offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
68
- offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
87
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
69
88
 
70
- if (this.affixed === affix) return
71
- if (this.unpin != null) this.$element.css('top', '')
89
+ if (this.affixed != affix) {
90
+ if (this.unpin != null) this.$element.css('top', '')
72
91
 
73
- var affixType = 'affix' + (affix ? '-' + affix : '')
74
- var e = $.Event(affixType + '.bs.affix')
92
+ var affixType = 'affix' + (affix ? '-' + affix : '')
93
+ var e = $.Event(affixType + '.bs.affix')
75
94
 
76
- this.$element.trigger(e)
95
+ this.$element.trigger(e)
77
96
 
78
- if (e.isDefaultPrevented()) return
97
+ if (e.isDefaultPrevented()) return
79
98
 
80
- this.affixed = affix
81
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
99
+ this.affixed = affix
100
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
82
101
 
83
- this.$element
84
- .removeClass(Affix.RESET)
85
- .addClass(affixType)
86
- .trigger($.Event(affixType.replace('affix', 'affixed')))
102
+ this.$element
103
+ .removeClass(Affix.RESET)
104
+ .addClass(affixType)
105
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
106
+ }
87
107
 
88
108
  if (affix == 'bottom') {
89
109
  this.$element.offset({
90
- top: scrollHeight - this.$element.height() - offsetBottom
110
+ top: scrollHeight - height - offsetBottom
91
111
  })
92
112
  }
93
113
  }
@@ -132,8 +152,8 @@
132
152
 
133
153
  data.offset = data.offset || {}
134
154
 
135
- if (data.offsetBottom) data.offset.bottom = data.offsetBottom
136
- if (data.offsetTop) data.offset.top = data.offsetTop
155
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
156
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
137
157
 
138
158
  Plugin.call($spy, data)
139
159
  })
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: alert.js v3.2.0
2
+ * Bootstrap: alert.js v3.3.1
3
3
  * http://getbootstrap.com/javascript/#alerts
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -18,7 +18,9 @@
18
18
  $(el).on('click', dismiss, this.close)
19
19
  }
20
20
 
21
- Alert.VERSION = '3.2.0'
21
+ Alert.VERSION = '3.3.1'
22
+
23
+ Alert.TRANSITION_DURATION = 150
22
24
 
23
25
  Alert.prototype.close = function (e) {
24
26
  var $this = $(this)
@@ -34,7 +36,7 @@
34
36
  if (e) e.preventDefault()
35
37
 
36
38
  if (!$parent.length) {
37
- $parent = $this.hasClass('alert') ? $this : $this.parent()
39
+ $parent = $this.closest('.alert')
38
40
  }
39
41
 
40
42
  $parent.trigger(e = $.Event('close.bs.alert'))
@@ -51,7 +53,7 @@
51
53
  $.support.transition && $parent.hasClass('fade') ?
52
54
  $parent
53
55
  .one('bsTransitionEnd', removeElement)
54
- .emulateTransitionEnd(150) :
56
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
55
57
  removeElement()
56
58
  }
57
59
 
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: button.js v3.2.0
2
+ * Bootstrap: button.js v3.3.1
3
3
  * http://getbootstrap.com/javascript/#buttons
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -19,7 +19,7 @@
19
19
  this.isLoading = false
20
20
  }
21
21
 
22
- Button.VERSION = '3.2.0'
22
+ Button.VERSION = '3.3.1'
23
23
 
24
24
  Button.DEFAULTS = {
25
25
  loadingText: 'loading...'
@@ -35,10 +35,10 @@
35
35
 
36
36
  if (data.resetText == null) $el.data('resetText', $el[val]())
37
37
 
38
- $el[val](data[state] == null ? this.options[state] : data[state])
39
-
40
38
  // push to event loop to allow forms to submit
41
39
  setTimeout($.proxy(function () {
40
+ $el[val](data[state] == null ? this.options[state] : data[state])
41
+
42
42
  if (state == 'loadingText') {
43
43
  this.isLoading = true
44
44
  $el.addClass(d).attr(d, d)
@@ -60,6 +60,8 @@
60
60
  else $parent.find('.active').removeClass('active')
61
61
  }
62
62
  if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
63
+ } else {
64
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
63
65
  }
64
66
 
65
67
  if (changed) this.$element.toggleClass('active')
@@ -100,11 +102,15 @@
100
102
  // BUTTON DATA-API
101
103
  // ===============
102
104
 
103
- $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
104
- var $btn = $(e.target)
105
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
106
- Plugin.call($btn, 'toggle')
107
- e.preventDefault()
108
- })
105
+ $(document)
106
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
107
+ var $btn = $(e.target)
108
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
109
+ Plugin.call($btn, 'toggle')
110
+ e.preventDefault()
111
+ })
112
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
113
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
114
+ })
109
115
 
110
116
  }(jQuery);
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: carousel.js v3.2.0
2
+ * Bootstrap: carousel.js v3.3.1
3
3
  * http://getbootstrap.com/javascript/#carousel
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -14,7 +14,7 @@
14
14
  // =========================
15
15
 
16
16
  var Carousel = function (element, options) {
17
- this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
17
+ this.$element = $(element)
18
18
  this.$indicators = this.$element.find('.carousel-indicators')
19
19
  this.options = options
20
20
  this.paused =
@@ -23,20 +23,26 @@
23
23
  this.$active =
24
24
  this.$items = null
25
25
 
26
- this.options.pause == 'hover' && this.$element
26
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
27
+
28
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
27
29
  .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
28
30
  .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
29
31
  }
30
32
 
31
- Carousel.VERSION = '3.2.0'
33
+ Carousel.VERSION = '3.3.1'
34
+
35
+ Carousel.TRANSITION_DURATION = 600
32
36
 
33
37
  Carousel.DEFAULTS = {
34
38
  interval: 5000,
35
39
  pause: 'hover',
36
- wrap: true
40
+ wrap: true,
41
+ keyboard: true
37
42
  }
38
43
 
39
44
  Carousel.prototype.keydown = function (e) {
45
+ if (/input|textarea/i.test(e.target.tagName)) return
40
46
  switch (e.which) {
41
47
  case 37: this.prev(); break
42
48
  case 39: this.next(); break
@@ -63,6 +69,13 @@
63
69
  return this.$items.index(item || this.$active)
64
70
  }
65
71
 
72
+ Carousel.prototype.getItemForDirection = function (direction, active) {
73
+ var delta = direction == 'prev' ? -1 : 1
74
+ var activeIndex = this.getItemIndex(active)
75
+ var itemIndex = (activeIndex + delta) % this.$items.length
76
+ return this.$items.eq(itemIndex)
77
+ }
78
+
66
79
  Carousel.prototype.to = function (pos) {
67
80
  var that = this
68
81
  var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
@@ -72,7 +85,7 @@
72
85
  if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
73
86
  if (activeIndex == pos) return this.pause().cycle()
74
87
 
75
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
88
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
76
89
  }
77
90
 
78
91
  Carousel.prototype.pause = function (e) {
@@ -100,7 +113,7 @@
100
113
 
101
114
  Carousel.prototype.slide = function (type, next) {
102
115
  var $active = this.$element.find('.item.active')
103
- var $next = next || $active[type]()
116
+ var $next = next || this.getItemForDirection(type, $active)
104
117
  var isCycling = this.interval
105
118
  var direction = type == 'next' ? 'left' : 'right'
106
119
  var fallback = type == 'next' ? 'first' : 'last'
@@ -146,7 +159,7 @@
146
159
  that.$element.trigger(slidEvent)
147
160
  }, 0)
148
161
  })
149
- .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
162
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
150
163
  } else {
151
164
  $active.removeClass('active')
152
165
  $next.addClass('active')
@@ -195,7 +208,7 @@
195
208
  // CAROUSEL DATA-API
196
209
  // =================
197
210
 
198
- $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
211
+ var clickHandler = function (e) {
199
212
  var href
200
213
  var $this = $(this)
201
214
  var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
@@ -211,7 +224,11 @@
211
224
  }
212
225
 
213
226
  e.preventDefault()
214
- })
227
+ }
228
+
229
+ $(document)
230
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
231
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
215
232
 
216
233
  $(window).on('load', function () {
217
234
  $('[data-ride="carousel"]').each(function () {
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: collapse.js v3.2.0
2
+ * Bootstrap: collapse.js v3.3.1
3
3
  * http://getbootstrap.com/javascript/#collapse
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -16,16 +16,25 @@
16
16
  var Collapse = function (element, options) {
17
17
  this.$element = $(element)
18
18
  this.options = $.extend({}, Collapse.DEFAULTS, options)
19
+ this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
19
20
  this.transitioning = null
20
21
 
21
- if (this.options.parent) this.$parent = $(this.options.parent)
22
+ if (this.options.parent) {
23
+ this.$parent = this.getParent()
24
+ } else {
25
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
26
+ }
27
+
22
28
  if (this.options.toggle) this.toggle()
23
29
  }
24
30
 
25
- Collapse.VERSION = '3.2.0'
31
+ Collapse.VERSION = '3.3.1'
32
+
33
+ Collapse.TRANSITION_DURATION = 350
26
34
 
27
35
  Collapse.DEFAULTS = {
28
- toggle: true
36
+ toggle: true,
37
+ trigger: '[data-toggle="collapse"]'
29
38
  }
30
39
 
31
40
  Collapse.prototype.dimension = function () {
@@ -36,17 +45,21 @@
36
45
  Collapse.prototype.show = function () {
37
46
  if (this.transitioning || this.$element.hasClass('in')) return
38
47
 
48
+ var activesData
49
+ var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing')
50
+
51
+ if (actives && actives.length) {
52
+ activesData = actives.data('bs.collapse')
53
+ if (activesData && activesData.transitioning) return
54
+ }
55
+
39
56
  var startEvent = $.Event('show.bs.collapse')
40
57
  this.$element.trigger(startEvent)
41
58
  if (startEvent.isDefaultPrevented()) return
42
59
 
43
- var actives = this.$parent && this.$parent.find('> .panel > .in')
44
-
45
60
  if (actives && actives.length) {
46
- var hasData = actives.data('bs.collapse')
47
- if (hasData && hasData.transitioning) return
48
61
  Plugin.call(actives, 'hide')
49
- hasData || actives.data('bs.collapse', null)
62
+ activesData || actives.data('bs.collapse', null)
50
63
  }
51
64
 
52
65
  var dimension = this.dimension()
@@ -54,6 +67,11 @@
54
67
  this.$element
55
68
  .removeClass('collapse')
56
69
  .addClass('collapsing')[dimension](0)
70
+ .attr('aria-expanded', true)
71
+
72
+ this.$trigger
73
+ .removeClass('collapsed')
74
+ .attr('aria-expanded', true)
57
75
 
58
76
  this.transitioning = 1
59
77
 
@@ -72,7 +90,7 @@
72
90
 
73
91
  this.$element
74
92
  .one('bsTransitionEnd', $.proxy(complete, this))
75
- .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
93
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
76
94
  }
77
95
 
78
96
  Collapse.prototype.hide = function () {
@@ -88,17 +106,21 @@
88
106
 
89
107
  this.$element
90
108
  .addClass('collapsing')
91
- .removeClass('collapse')
92
- .removeClass('in')
109
+ .removeClass('collapse in')
110
+ .attr('aria-expanded', false)
111
+
112
+ this.$trigger
113
+ .addClass('collapsed')
114
+ .attr('aria-expanded', false)
93
115
 
94
116
  this.transitioning = 1
95
117
 
96
118
  var complete = function () {
97
119
  this.transitioning = 0
98
120
  this.$element
99
- .trigger('hidden.bs.collapse')
100
121
  .removeClass('collapsing')
101
122
  .addClass('collapse')
123
+ .trigger('hidden.bs.collapse')
102
124
  }
103
125
 
104
126
  if (!$.support.transition) return complete.call(this)
@@ -106,13 +128,40 @@
106
128
  this.$element
107
129
  [dimension](0)
108
130
  .one('bsTransitionEnd', $.proxy(complete, this))
109
- .emulateTransitionEnd(350)
131
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
110
132
  }
111
133
 
112
134
  Collapse.prototype.toggle = function () {
113
135
  this[this.$element.hasClass('in') ? 'hide' : 'show']()
114
136
  }
115
137
 
138
+ Collapse.prototype.getParent = function () {
139
+ return $(this.options.parent)
140
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
141
+ .each($.proxy(function (i, element) {
142
+ var $element = $(element)
143
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
144
+ }, this))
145
+ .end()
146
+ }
147
+
148
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
149
+ var isOpen = $element.hasClass('in')
150
+
151
+ $element.attr('aria-expanded', isOpen)
152
+ $trigger
153
+ .toggleClass('collapsed', !isOpen)
154
+ .attr('aria-expanded', isOpen)
155
+ }
156
+
157
+ function getTargetFromTrigger($trigger) {
158
+ var href
159
+ var target = $trigger.attr('data-target')
160
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
161
+
162
+ return $(target)
163
+ }
164
+
116
165
 
117
166
  // COLLAPSE PLUGIN DEFINITION
118
167
  // ==========================
@@ -123,7 +172,7 @@
123
172
  var data = $this.data('bs.collapse')
124
173
  var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
125
174
 
126
- if (!data && options.toggle && option == 'show') option = !option
175
+ if (!data && options.toggle && option == 'show') options.toggle = false
127
176
  if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
128
177
  if (typeof option == 'string') data[option]()
129
178
  })
@@ -148,21 +197,13 @@
148
197
  // =================
149
198
 
150
199
  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
151
- var href
152
200
  var $this = $(this)
153
- var target = $this.attr('data-target')
154
- || e.preventDefault()
155
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
156
- var $target = $(target)
157
- var data = $target.data('bs.collapse')
158
- var option = data ? 'toggle' : $this.data()
159
- var parent = $this.attr('data-parent')
160
- var $parent = parent && $(parent)
161
201
 
162
- if (!data || !data.transitioning) {
163
- if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
164
- $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
165
- }
202
+ if (!$this.attr('data-target')) e.preventDefault()
203
+
204
+ var $target = getTargetFromTrigger($this)
205
+ var data = $target.data('bs.collapse')
206
+ var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
166
207
 
167
208
  Plugin.call($target, option)
168
209
  })