twitter-bootstrap-rails 3.2.0 → 3.2.1.rc1

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +85 -121
  3. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  4. data/app/assets/fonts/fontawesome-webfont.svg +479 -463
  5. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  6. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  7. data/app/assets/javascripts/twitter/bootstrap/affix.js +19 -14
  8. data/app/assets/javascripts/twitter/bootstrap/alert.js +10 -6
  9. data/app/assets/javascripts/twitter/bootstrap/button.js +11 -8
  10. data/app/assets/javascripts/twitter/bootstrap/carousel.js +49 -31
  11. data/app/assets/javascripts/twitter/bootstrap/collapse.js +22 -22
  12. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +17 -13
  13. data/app/assets/javascripts/twitter/bootstrap/modal.js +66 -29
  14. data/app/assets/javascripts/twitter/bootstrap/popover.js +10 -7
  15. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +40 -23
  16. data/app/assets/javascripts/twitter/bootstrap/tab.js +11 -8
  17. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +115 -57
  18. data/app/assets/javascripts/twitter/bootstrap/transition.js +18 -7
  19. data/app/assets/stylesheets/twitter-bootstrap-static/fontawesome.css.erb +1670 -2
  20. data/app/helpers/bootstrap_flash_helper.rb +1 -1
  21. data/app/helpers/form_errors_helper.rb +11 -11
  22. data/app/helpers/glyph_helper.rb +2 -1
  23. data/app/helpers/modal_helper.rb +3 -3
  24. data/lib/generators/bootstrap/install/templates/bootstrap_and_overrides.less +6 -3
  25. data/lib/generators/bootstrap/layout/templates/layout.html.erb +5 -5
  26. data/lib/generators/bootstrap/layout/templates/layout.html.haml +3 -3
  27. data/lib/generators/bootstrap/layout/templates/layout.html.slim +3 -5
  28. data/lib/generators/bootstrap/themed/templates/_form.html.erb +12 -9
  29. data/lib/generators/bootstrap/themed/templates/_form.html.haml +7 -5
  30. data/lib/generators/bootstrap/themed/templates/_form.html.slim +8 -6
  31. data/lib/generators/bootstrap/themed/templates/edit.html.slim +1 -1
  32. data/lib/generators/bootstrap/themed/templates/index.html.slim +2 -3
  33. data/lib/generators/bootstrap/themed/templates/new.html.slim +1 -1
  34. data/lib/generators/bootstrap/themed/templates/show.html.slim +1 -1
  35. data/lib/twitter/bootstrap/rails/engine.rb +16 -12
  36. data/lib/twitter/bootstrap/rails/version.rb +1 -1
  37. data/spec/lib/breadcrumbs_spec.rb +2 -2
  38. data/spec/lib/twitter_bootstrap_rails/badge_label_helper_spec.rb +10 -4
  39. data/spec/lib/twitter_bootstrap_rails/form_errors_helper_spec.rb +148 -0
  40. data/spec/lib/twitter_bootstrap_rails/glyph_helper_spec.rb +24 -0
  41. data/spec/lib/twitter_bootstrap_rails/modal_helper_spec.rb +1 -1
  42. data/spec/lib/twitter_bootstrap_rails/navbar_helper_spec.rb +1 -1
  43. data/vendor/assets/stylesheets/twitter-bootstrap-static/bootstrap.css.erb +1 -3
  44. data/vendor/toolkit/fontawesome/core.less +3 -4
  45. data/vendor/toolkit/fontawesome/font-awesome.less +1 -1
  46. data/vendor/toolkit/fontawesome/icons.less +48 -2
  47. data/vendor/toolkit/fontawesome/list.less +1 -1
  48. data/vendor/toolkit/fontawesome/mixins.less +9 -4
  49. data/vendor/toolkit/fontawesome/path.less +5 -5
  50. data/vendor/toolkit/fontawesome/rotated-flipped.less +11 -0
  51. data/vendor/toolkit/fontawesome/spinning.less +15 -18
  52. data/vendor/toolkit/fontawesome/variables.less +49 -3
  53. data/vendor/toolkit/twitter/bootstrap/bootstrap.less +0 -1
  54. data/vendor/toolkit/twitter/bootstrap/glyphicons.less +6 -5
  55. metadata +59 -25
  56. data/app/assets/images/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  57. data/app/assets/images/twitter/bootstrap/glyphicons-halflings.png +0 -0
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: affix.js v3.1.1
2
+ * Bootstrap: affix.js v3.2.0
3
3
  * http://getbootstrap.com/javascript/#affix
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -15,7 +15,8 @@
15
15
 
16
16
  var Affix = function (element, options) {
17
17
  this.options = $.extend({}, Affix.DEFAULTS, options)
18
- this.$window = $(window)
18
+
19
+ this.$target = $(this.options.target)
19
20
  .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
20
21
  .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
21
22
 
@@ -27,16 +28,19 @@
27
28
  this.checkPosition()
28
29
  }
29
30
 
30
- Affix.RESET = 'affix affix-top affix-bottom'
31
+ Affix.VERSION = '3.2.0'
32
+
33
+ Affix.RESET = 'affix affix-top affix-bottom'
31
34
 
32
35
  Affix.DEFAULTS = {
33
- offset: 0
36
+ offset: 0,
37
+ target: window
34
38
  }
35
39
 
36
40
  Affix.prototype.getPinnedOffset = function () {
37
41
  if (this.pinnedOffset) return this.pinnedOffset
38
42
  this.$element.removeClass(Affix.RESET).addClass('affix')
39
- var scrollTop = this.$window.scrollTop()
43
+ var scrollTop = this.$target.scrollTop()
40
44
  var position = this.$element.offset()
41
45
  return (this.pinnedOffset = position.top - scrollTop)
42
46
  }
@@ -49,14 +53,12 @@
49
53
  if (!this.$element.is(':visible')) return
50
54
 
51
55
  var scrollHeight = $(document).height()
52
- var scrollTop = this.$window.scrollTop()
56
+ var scrollTop = this.$target.scrollTop()
53
57
  var position = this.$element.offset()
54
58
  var offset = this.options.offset
55
59
  var offsetTop = offset.top
56
60
  var offsetBottom = offset.bottom
57
61
 
58
- if (this.affixed == 'top') position.top += scrollTop
59
-
60
62
  if (typeof offset != 'object') offsetBottom = offsetTop = offset
61
63
  if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
62
64
  if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
@@ -66,7 +68,7 @@
66
68
  offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
67
69
 
68
70
  if (this.affixed === affix) return
69
- if (this.unpin) this.$element.css('top', '')
71
+ if (this.unpin != null) this.$element.css('top', '')
70
72
 
71
73
  var affixType = 'affix' + (affix ? '-' + affix : '')
72
74
  var e = $.Event(affixType + '.bs.affix')
@@ -84,7 +86,9 @@
84
86
  .trigger($.Event(affixType.replace('affix', 'affixed')))
85
87
 
86
88
  if (affix == 'bottom') {
87
- this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
89
+ this.$element.offset({
90
+ top: scrollHeight - this.$element.height() - offsetBottom
91
+ })
88
92
  }
89
93
  }
90
94
 
@@ -92,9 +96,7 @@
92
96
  // AFFIX PLUGIN DEFINITION
93
97
  // =======================
94
98
 
95
- var old = $.fn.affix
96
-
97
- $.fn.affix = function (option) {
99
+ function Plugin(option) {
98
100
  return this.each(function () {
99
101
  var $this = $(this)
100
102
  var data = $this.data('bs.affix')
@@ -105,6 +107,9 @@
105
107
  })
106
108
  }
107
109
 
110
+ var old = $.fn.affix
111
+
112
+ $.fn.affix = Plugin
108
113
  $.fn.affix.Constructor = Affix
109
114
 
110
115
 
@@ -130,7 +135,7 @@
130
135
  if (data.offsetBottom) data.offset.bottom = data.offsetBottom
131
136
  if (data.offsetTop) data.offset.top = data.offsetTop
132
137
 
133
- $spy.affix(data)
138
+ Plugin.call($spy, data)
134
139
  })
135
140
  })
136
141
 
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: alert.js v3.1.1
2
+ * Bootstrap: alert.js v3.2.0
3
3
  * http://getbootstrap.com/javascript/#alerts
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -18,6 +18,8 @@
18
18
  $(el).on('click', dismiss, this.close)
19
19
  }
20
20
 
21
+ Alert.VERSION = '3.2.0'
22
+
21
23
  Alert.prototype.close = function (e) {
22
24
  var $this = $(this)
23
25
  var selector = $this.attr('data-target')
@@ -42,12 +44,13 @@
42
44
  $parent.removeClass('in')
43
45
 
44
46
  function removeElement() {
45
- $parent.trigger('closed.bs.alert').remove()
47
+ // detach from parent, fire event then clean up data
48
+ $parent.detach().trigger('closed.bs.alert').remove()
46
49
  }
47
50
 
48
51
  $.support.transition && $parent.hasClass('fade') ?
49
52
  $parent
50
- .one($.support.transition.end, removeElement)
53
+ .one('bsTransitionEnd', removeElement)
51
54
  .emulateTransitionEnd(150) :
52
55
  removeElement()
53
56
  }
@@ -56,9 +59,7 @@
56
59
  // ALERT PLUGIN DEFINITION
57
60
  // =======================
58
61
 
59
- var old = $.fn.alert
60
-
61
- $.fn.alert = function (option) {
62
+ function Plugin(option) {
62
63
  return this.each(function () {
63
64
  var $this = $(this)
64
65
  var data = $this.data('bs.alert')
@@ -68,6 +69,9 @@
68
69
  })
69
70
  }
70
71
 
72
+ var old = $.fn.alert
73
+
74
+ $.fn.alert = Plugin
71
75
  $.fn.alert.Constructor = Alert
72
76
 
73
77
 
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: button.js v3.1.1
2
+ * Bootstrap: button.js v3.2.0
3
3
  * http://getbootstrap.com/javascript/#buttons
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -19,6 +19,8 @@
19
19
  this.isLoading = false
20
20
  }
21
21
 
22
+ Button.VERSION = '3.2.0'
23
+
22
24
  Button.DEFAULTS = {
23
25
  loadingText: 'loading...'
24
26
  }
@@ -31,9 +33,9 @@
31
33
 
32
34
  state = state + 'Text'
33
35
 
34
- if (!data.resetText) $el.data('resetText', $el[val]())
36
+ if (data.resetText == null) $el.data('resetText', $el[val]())
35
37
 
36
- $el[val](data[state] || this.options[state])
38
+ $el[val](data[state] == null ? this.options[state] : data[state])
37
39
 
38
40
  // push to event loop to allow forms to submit
39
41
  setTimeout($.proxy(function () {
@@ -67,9 +69,7 @@
67
69
  // BUTTON PLUGIN DEFINITION
68
70
  // ========================
69
71
 
70
- var old = $.fn.button
71
-
72
- $.fn.button = function (option) {
72
+ function Plugin(option) {
73
73
  return this.each(function () {
74
74
  var $this = $(this)
75
75
  var data = $this.data('bs.button')
@@ -82,6 +82,9 @@
82
82
  })
83
83
  }
84
84
 
85
+ var old = $.fn.button
86
+
87
+ $.fn.button = Plugin
85
88
  $.fn.button.Constructor = Button
86
89
 
87
90
 
@@ -97,10 +100,10 @@
97
100
  // BUTTON DATA-API
98
101
  // ===============
99
102
 
100
- $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
103
+ $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
101
104
  var $btn = $(e.target)
102
105
  if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
103
- $btn.button('toggle')
106
+ Plugin.call($btn, 'toggle')
104
107
  e.preventDefault()
105
108
  })
106
109
 
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: carousel.js v3.1.1
2
+ * Bootstrap: carousel.js v3.2.0
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)
17
+ this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
18
18
  this.$indicators = this.$element.find('.carousel-indicators')
19
19
  this.options = options
20
20
  this.paused =
@@ -24,17 +24,29 @@
24
24
  this.$items = null
25
25
 
26
26
  this.options.pause == 'hover' && this.$element
27
- .on('mouseenter', $.proxy(this.pause, this))
28
- .on('mouseleave', $.proxy(this.cycle, this))
27
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
28
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
29
29
  }
30
30
 
31
+ Carousel.VERSION = '3.2.0'
32
+
31
33
  Carousel.DEFAULTS = {
32
34
  interval: 5000,
33
35
  pause: 'hover',
34
36
  wrap: true
35
37
  }
36
38
 
37
- Carousel.prototype.cycle = function (e) {
39
+ Carousel.prototype.keydown = function (e) {
40
+ switch (e.which) {
41
+ case 37: this.prev(); break
42
+ case 39: this.next(); break
43
+ default: return
44
+ }
45
+
46
+ e.preventDefault()
47
+ }
48
+
49
+ Carousel.prototype.cycle = function (e) {
38
50
  e || (this.paused = false)
39
51
 
40
52
  this.interval && clearInterval(this.interval)
@@ -46,20 +58,18 @@
46
58
  return this
47
59
  }
48
60
 
49
- Carousel.prototype.getActiveIndex = function () {
50
- this.$active = this.$element.find('.item.active')
51
- this.$items = this.$active.parent().children()
52
-
53
- return this.$items.index(this.$active)
61
+ Carousel.prototype.getItemIndex = function (item) {
62
+ this.$items = item.parent().children('.item')
63
+ return this.$items.index(item || this.$active)
54
64
  }
55
65
 
56
66
  Carousel.prototype.to = function (pos) {
57
67
  var that = this
58
- var activeIndex = this.getActiveIndex()
68
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
59
69
 
60
70
  if (pos > (this.$items.length - 1) || pos < 0) return
61
71
 
62
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
72
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
63
73
  if (activeIndex == pos) return this.pause().cycle()
64
74
 
65
75
  return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
@@ -101,11 +111,15 @@
101
111
  $next = this.$element.find('.item')[fallback]()
102
112
  }
103
113
 
104
- if ($next.hasClass('active')) return this.sliding = false
114
+ if ($next.hasClass('active')) return (this.sliding = false)
105
115
 
106
- var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
107
- this.$element.trigger(e)
108
- if (e.isDefaultPrevented()) return
116
+ var relatedTarget = $next[0]
117
+ var slideEvent = $.Event('slide.bs.carousel', {
118
+ relatedTarget: relatedTarget,
119
+ direction: direction
120
+ })
121
+ this.$element.trigger(slideEvent)
122
+ if (slideEvent.isDefaultPrevented()) return
109
123
 
110
124
  this.sliding = true
111
125
 
@@ -113,30 +127,31 @@
113
127
 
114
128
  if (this.$indicators.length) {
115
129
  this.$indicators.find('.active').removeClass('active')
116
- this.$element.one('slid.bs.carousel', function () {
117
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
118
- $nextIndicator && $nextIndicator.addClass('active')
119
- })
130
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
131
+ $nextIndicator && $nextIndicator.addClass('active')
120
132
  }
121
133
 
134
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
122
135
  if ($.support.transition && this.$element.hasClass('slide')) {
123
136
  $next.addClass(type)
124
137
  $next[0].offsetWidth // force reflow
125
138
  $active.addClass(direction)
126
139
  $next.addClass(direction)
127
140
  $active
128
- .one($.support.transition.end, function () {
141
+ .one('bsTransitionEnd', function () {
129
142
  $next.removeClass([type, direction].join(' ')).addClass('active')
130
143
  $active.removeClass(['active', direction].join(' '))
131
144
  that.sliding = false
132
- setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
145
+ setTimeout(function () {
146
+ that.$element.trigger(slidEvent)
147
+ }, 0)
133
148
  })
134
149
  .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
135
150
  } else {
136
151
  $active.removeClass('active')
137
152
  $next.addClass('active')
138
153
  this.sliding = false
139
- this.$element.trigger('slid.bs.carousel')
154
+ this.$element.trigger(slidEvent)
140
155
  }
141
156
 
142
157
  isCycling && this.cycle()
@@ -148,9 +163,7 @@
148
163
  // CAROUSEL PLUGIN DEFINITION
149
164
  // ==========================
150
165
 
151
- var old = $.fn.carousel
152
-
153
- $.fn.carousel = function (option) {
166
+ function Plugin(option) {
154
167
  return this.each(function () {
155
168
  var $this = $(this)
156
169
  var data = $this.data('bs.carousel')
@@ -164,6 +177,9 @@
164
177
  })
165
178
  }
166
179
 
180
+ var old = $.fn.carousel
181
+
182
+ $.fn.carousel = Plugin
167
183
  $.fn.carousel.Constructor = Carousel
168
184
 
169
185
 
@@ -180,15 +196,17 @@
180
196
  // =================
181
197
 
182
198
  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
183
- var $this = $(this), href
184
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
199
+ var href
200
+ var $this = $(this)
201
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
202
+ if (!$target.hasClass('carousel')) return
185
203
  var options = $.extend({}, $target.data(), $this.data())
186
204
  var slideIndex = $this.attr('data-slide-to')
187
205
  if (slideIndex) options.interval = false
188
206
 
189
- $target.carousel(options)
207
+ Plugin.call($target, options)
190
208
 
191
- if (slideIndex = $this.attr('data-slide-to')) {
209
+ if (slideIndex) {
192
210
  $target.data('bs.carousel').to(slideIndex)
193
211
  }
194
212
 
@@ -198,7 +216,7 @@
198
216
  $(window).on('load', function () {
199
217
  $('[data-ride="carousel"]').each(function () {
200
218
  var $carousel = $(this)
201
- $carousel.carousel($carousel.data())
219
+ Plugin.call($carousel, $carousel.data())
202
220
  })
203
221
  })
204
222
 
@@ -1,5 +1,5 @@
1
1
  /* ========================================================================
2
- * Bootstrap: collapse.js v3.1.1
2
+ * Bootstrap: collapse.js v3.2.0
3
3
  * http://getbootstrap.com/javascript/#collapse
4
4
  * ========================================================================
5
5
  * Copyright 2011-2014 Twitter, Inc.
@@ -22,6 +22,8 @@
22
22
  if (this.options.toggle) this.toggle()
23
23
  }
24
24
 
25
+ Collapse.VERSION = '3.2.0'
26
+
25
27
  Collapse.DEFAULTS = {
26
28
  toggle: true
27
29
  }
@@ -43,7 +45,7 @@
43
45
  if (actives && actives.length) {
44
46
  var hasData = actives.data('bs.collapse')
45
47
  if (hasData && hasData.transitioning) return
46
- actives.collapse('hide')
48
+ Plugin.call(actives, 'hide')
47
49
  hasData || actives.data('bs.collapse', null)
48
50
  }
49
51
 
@@ -51,18 +53,17 @@
51
53
 
52
54
  this.$element
53
55
  .removeClass('collapse')
54
- .addClass('collapsing')
55
- [dimension](0)
56
+ .addClass('collapsing')[dimension](0)
56
57
 
57
58
  this.transitioning = 1
58
59
 
59
60
  var complete = function () {
60
61
  this.$element
61
62
  .removeClass('collapsing')
62
- .addClass('collapse in')
63
- [dimension]('auto')
63
+ .addClass('collapse in')[dimension]('')
64
64
  this.transitioning = 0
65
- this.$element.trigger('shown.bs.collapse')
65
+ this.$element
66
+ .trigger('shown.bs.collapse')
66
67
  }
67
68
 
68
69
  if (!$.support.transition) return complete.call(this)
@@ -70,9 +71,8 @@
70
71
  var scrollSize = $.camelCase(['scroll', dimension].join('-'))
71
72
 
72
73
  this.$element
73
- .one($.support.transition.end, $.proxy(complete, this))
74
- .emulateTransitionEnd(350)
75
- [dimension](this.$element[0][scrollSize])
74
+ .one('bsTransitionEnd', $.proxy(complete, this))
75
+ .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
76
76
  }
77
77
 
78
78
  Collapse.prototype.hide = function () {
@@ -84,9 +84,7 @@
84
84
 
85
85
  var dimension = this.dimension()
86
86
 
87
- this.$element
88
- [dimension](this.$element[dimension]())
89
- [0].offsetHeight
87
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
90
88
 
91
89
  this.$element
92
90
  .addClass('collapsing')
@@ -107,7 +105,7 @@
107
105
 
108
106
  this.$element
109
107
  [dimension](0)
110
- .one($.support.transition.end, $.proxy(complete, this))
108
+ .one('bsTransitionEnd', $.proxy(complete, this))
111
109
  .emulateTransitionEnd(350)
112
110
  }
113
111
 
@@ -119,9 +117,7 @@
119
117
  // COLLAPSE PLUGIN DEFINITION
120
118
  // ==========================
121
119
 
122
- var old = $.fn.collapse
123
-
124
- $.fn.collapse = function (option) {
120
+ function Plugin(option) {
125
121
  return this.each(function () {
126
122
  var $this = $(this)
127
123
  var data = $this.data('bs.collapse')
@@ -133,6 +129,9 @@
133
129
  })
134
130
  }
135
131
 
132
+ var old = $.fn.collapse
133
+
134
+ $.fn.collapse = Plugin
136
135
  $.fn.collapse.Constructor = Collapse
137
136
 
138
137
 
@@ -148,11 +147,12 @@
148
147
  // COLLAPSE DATA-API
149
148
  // =================
150
149
 
151
- $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
152
- var $this = $(this), href
150
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
151
+ var href
152
+ var $this = $(this)
153
153
  var target = $this.attr('data-target')
154
154
  || e.preventDefault()
155
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
155
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
156
156
  var $target = $(target)
157
157
  var data = $target.data('bs.collapse')
158
158
  var option = data ? 'toggle' : $this.data()
@@ -160,11 +160,11 @@
160
160
  var $parent = parent && $(parent)
161
161
 
162
162
  if (!data || !data.transitioning) {
163
- if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
163
+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
164
164
  $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
165
165
  }
166
166
 
167
- $target.collapse(option)
167
+ Plugin.call($target, option)
168
168
  })
169
169
 
170
170
  }(jQuery);