api_taster 0.8.2 → 0.8.3

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/api_taster.gemspec +3 -3
  3. data/lib/api_taster.rb +1 -1
  4. data/lib/api_taster/engine.rb +2 -0
  5. data/lib/api_taster/version.rb +1 -1
  6. data/vendor/assets/images/glyphicons-halflings-white.png +0 -0
  7. data/vendor/assets/images/glyphicons-halflings.png +0 -0
  8. data/vendor/assets/javascripts/bootstrap-affix.js +117 -0
  9. data/vendor/assets/javascripts/bootstrap-alert.js +99 -0
  10. data/vendor/assets/javascripts/bootstrap-button.js +105 -0
  11. data/vendor/assets/javascripts/bootstrap-carousel.js +207 -0
  12. data/vendor/assets/javascripts/bootstrap-collapse.js +167 -0
  13. data/vendor/assets/javascripts/bootstrap-dropdown.js +169 -0
  14. data/vendor/assets/javascripts/bootstrap-modal.js +247 -0
  15. data/vendor/assets/javascripts/bootstrap-popover.js +114 -0
  16. data/vendor/assets/javascripts/bootstrap-scrollspy.js +162 -0
  17. data/vendor/assets/javascripts/bootstrap-tab.js +144 -0
  18. data/vendor/assets/javascripts/bootstrap-tooltip.js +361 -0
  19. data/vendor/assets/javascripts/bootstrap-transition.js +60 -0
  20. data/vendor/assets/javascripts/bootstrap-typeahead.js +335 -0
  21. data/vendor/assets/javascripts/bootstrap.js +13 -0
  22. data/vendor/assets/stylesheets/bootstrap-responsive.scss +1 -0
  23. data/vendor/assets/stylesheets/bootstrap.scss +1 -0
  24. data/vendor/assets/stylesheets/bootstrap/_accordion.scss +34 -0
  25. data/vendor/assets/stylesheets/bootstrap/_alerts.scss +79 -0
  26. data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +24 -0
  27. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +229 -0
  28. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +228 -0
  29. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +158 -0
  30. data/vendor/assets/stylesheets/bootstrap/_close.scss +32 -0
  31. data/vendor/assets/stylesheets/bootstrap/_code.scss +61 -0
  32. data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +22 -0
  33. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +248 -0
  34. data/vendor/assets/stylesheets/bootstrap/_forms.scss +689 -0
  35. data/vendor/assets/stylesheets/bootstrap/_grid.scss +21 -0
  36. data/vendor/assets/stylesheets/bootstrap/_hero-unit.scss +25 -0
  37. data/vendor/assets/stylesheets/bootstrap/_labels-badges.scss +83 -0
  38. data/vendor/assets/stylesheets/bootstrap/_layouts.scss +16 -0
  39. data/vendor/assets/stylesheets/bootstrap/_media.scss +55 -0
  40. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +696 -0
  41. data/vendor/assets/stylesheets/bootstrap/_modals.scss +95 -0
  42. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +497 -0
  43. data/vendor/assets/stylesheets/bootstrap/_navs.scss +409 -0
  44. data/vendor/assets/stylesheets/bootstrap/_pager.scss +43 -0
  45. data/vendor/assets/stylesheets/bootstrap/_pagination.scss +123 -0
  46. data/vendor/assets/stylesheets/bootstrap/_popovers.scss +133 -0
  47. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +122 -0
  48. data/vendor/assets/stylesheets/bootstrap/_reset.scss +216 -0
  49. data/vendor/assets/stylesheets/bootstrap/_responsive-1200px-min.scss +28 -0
  50. data/vendor/assets/stylesheets/bootstrap/_responsive-767px-max.scss +193 -0
  51. data/vendor/assets/stylesheets/bootstrap/_responsive-768px-979px.scss +19 -0
  52. data/vendor/assets/stylesheets/bootstrap/_responsive-navbar.scss +189 -0
  53. data/vendor/assets/stylesheets/bootstrap/_responsive-utilities.scss +74 -0
  54. data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +53 -0
  55. data/vendor/assets/stylesheets/bootstrap/_sprites.scss +197 -0
  56. data/vendor/assets/stylesheets/bootstrap/_tables.scss +235 -0
  57. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +53 -0
  58. data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +70 -0
  59. data/vendor/assets/stylesheets/bootstrap/_type.scss +247 -0
  60. data/vendor/assets/stylesheets/bootstrap/_utilities.scss +45 -0
  61. data/vendor/assets/stylesheets/bootstrap/_variables.scss +301 -0
  62. data/vendor/assets/stylesheets/bootstrap/_wells.scss +29 -0
  63. data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +63 -0
  64. data/vendor/assets/stylesheets/bootstrap/responsive.scss +48 -0
  65. metadata +63 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6756ed8eb32f4e2f668e57577a698322ff180ab
4
- data.tar.gz: 0f3d38ad46de334ba31593ebb55ce935d2d2bc8d
3
+ metadata.gz: 00a13ebbb11e0f842dda7cf6edf38b14c4dd3d54
4
+ data.tar.gz: 6502ed27edc05d2087c04b8d3532236f2dba6958
5
5
  SHA512:
6
- metadata.gz: fc89df1319052880c9d6f932c00ec970d683f4d28ef49f6c92b3c638965241ba983551fbae4b2ff2c4c21fefd82375b92b1c4c6324e247141ab2ee8dc59564d0
7
- data.tar.gz: b7d49bd17b4d3486b7e1b8914d2e2406241e9f6186583ce85ce2a352043c6546d9081de40e6e8defbfdc054388301a352eca16fb8e8411152a1296460f527d2e
6
+ metadata.gz: 7737c183d49e7affc5c39fedb25dac0b6f3c6ac0ab2cd8b316606b6ff833e7762edb311c576940a19cb488ca8e060a153a22ff3c87f86adb4d17965497d14373
7
+ data.tar.gz: 5540b61a66a890447891bc8dd269ee7d7a2816374e66db20feb0d3fab1ea3460bbee861acf3aa63a76a7474a3e6067eda3e266b6197aa4d789fd16dfe14d50c3
@@ -5,8 +5,8 @@ require "api_taster/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "api_taster"
7
7
  s.version = ApiTaster::VERSION
8
- s.authors = ["Fred Wu"]
9
- s.email = ["ifredwu@gmail.com"]
8
+ s.authors = ["Fred Wu", "Mario Chavez"]
9
+ s.email = ["ifredwu@gmail.com", "mario.chavez@gmail.com"]
10
10
  s.homepage = "https://github.com/fredwu/api_taster"
11
11
  s.summary = "A quick and easy way to visually test out your application's API."
12
12
  s.description = s.summary
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'rails', '~> 4.1.0'
18
18
  s.add_dependency 'jquery-rails'
19
19
  s.add_dependency 'sass-rails', '~> 4.0.3'
20
- s.add_dependency 'bootstrap-sass', '~> 2.1'
20
+ #s.add_dependency 'bootstrap-sass', '~> 2.1'
21
21
  s.add_dependency 'redcarpet'
22
22
  s.add_dependency 'remotipart', '~> 1.0'
23
23
 
@@ -1,5 +1,5 @@
1
1
  require 'jquery-rails'
2
- require 'bootstrap-sass'
2
+ #require 'bootstrap-sass'
3
3
  require 'remotipart'
4
4
  require 'active_support/dependencies'
5
5
  require 'api_taster/engine'
@@ -6,6 +6,8 @@ module ApiTaster
6
6
  g.test_framework :rspec, :view_specs => false
7
7
  end
8
8
 
9
+ config.assets.precompile += %w( glyphicons-halflings.png glyphicons-halflings-white.png )
10
+
9
11
  silence_warnings do
10
12
  begin
11
13
  require 'pry'
@@ -1,3 +1,3 @@
1
1
  module ApiTaster
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
@@ -0,0 +1,117 @@
1
+ /* ==========================================================
2
+ * bootstrap-affix.js v2.3.2
3
+ * http://twitter.github.com/bootstrap/javascript.html#affix
4
+ * ==========================================================
5
+ * Copyright 2012 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================== */
19
+
20
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* AFFIX CLASS DEFINITION
27
+ * ====================== */
28
+
29
+ var Affix = function (element, options) {
30
+ this.options = $.extend({}, $.fn.affix.defaults, options)
31
+ this.$window = $(window)
32
+ .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
33
+ .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
34
+ this.$element = $(element)
35
+ this.checkPosition()
36
+ }
37
+
38
+ Affix.prototype.checkPosition = function () {
39
+ if (!this.$element.is(':visible')) return
40
+
41
+ var scrollHeight = $(document).height()
42
+ , scrollTop = this.$window.scrollTop()
43
+ , position = this.$element.offset()
44
+ , offset = this.options.offset
45
+ , offsetBottom = offset.bottom
46
+ , offsetTop = offset.top
47
+ , reset = 'affix affix-top affix-bottom'
48
+ , affix
49
+
50
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
51
+ if (typeof offsetTop == 'function') offsetTop = offset.top()
52
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
53
+
54
+ affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
55
+ false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
56
+ 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
57
+ 'top' : false
58
+
59
+ if (this.affixed === affix) return
60
+
61
+ this.affixed = affix
62
+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null
63
+
64
+ this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
65
+ }
66
+
67
+
68
+ /* AFFIX PLUGIN DEFINITION
69
+ * ======================= */
70
+
71
+ var old = $.fn.affix
72
+
73
+ $.fn.affix = function (option) {
74
+ return this.each(function () {
75
+ var $this = $(this)
76
+ , data = $this.data('affix')
77
+ , options = typeof option == 'object' && option
78
+ if (!data) $this.data('affix', (data = new Affix(this, options)))
79
+ if (typeof option == 'string') data[option]()
80
+ })
81
+ }
82
+
83
+ $.fn.affix.Constructor = Affix
84
+
85
+ $.fn.affix.defaults = {
86
+ offset: 0
87
+ }
88
+
89
+
90
+ /* AFFIX NO CONFLICT
91
+ * ================= */
92
+
93
+ $.fn.affix.noConflict = function () {
94
+ $.fn.affix = old
95
+ return this
96
+ }
97
+
98
+
99
+ /* AFFIX DATA-API
100
+ * ============== */
101
+
102
+ $(window).on('load', function () {
103
+ $('[data-spy="affix"]').each(function () {
104
+ var $spy = $(this)
105
+ , data = $spy.data()
106
+
107
+ data.offset = data.offset || {}
108
+
109
+ data.offsetBottom && (data.offset.bottom = data.offsetBottom)
110
+ data.offsetTop && (data.offset.top = data.offsetTop)
111
+
112
+ $spy.affix(data)
113
+ })
114
+ })
115
+
116
+
117
+ }(window.jQuery);
@@ -0,0 +1,99 @@
1
+ /* ==========================================================
2
+ * bootstrap-alert.js v2.3.2
3
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
4
+ * ==========================================================
5
+ * Copyright 2012 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================== */
19
+
20
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* ALERT CLASS DEFINITION
27
+ * ====================== */
28
+
29
+ var dismiss = '[data-dismiss="alert"]'
30
+ , Alert = function (el) {
31
+ $(el).on('click', dismiss, this.close)
32
+ }
33
+
34
+ Alert.prototype.close = function (e) {
35
+ var $this = $(this)
36
+ , selector = $this.attr('data-target')
37
+ , $parent
38
+
39
+ if (!selector) {
40
+ selector = $this.attr('href')
41
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
42
+ }
43
+
44
+ $parent = $(selector)
45
+
46
+ e && e.preventDefault()
47
+
48
+ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
49
+
50
+ $parent.trigger(e = $.Event('close'))
51
+
52
+ if (e.isDefaultPrevented()) return
53
+
54
+ $parent.removeClass('in')
55
+
56
+ function removeElement() {
57
+ $parent
58
+ .trigger('closed')
59
+ .remove()
60
+ }
61
+
62
+ $.support.transition && $parent.hasClass('fade') ?
63
+ $parent.on($.support.transition.end, removeElement) :
64
+ removeElement()
65
+ }
66
+
67
+
68
+ /* ALERT PLUGIN DEFINITION
69
+ * ======================= */
70
+
71
+ var old = $.fn.alert
72
+
73
+ $.fn.alert = function (option) {
74
+ return this.each(function () {
75
+ var $this = $(this)
76
+ , data = $this.data('alert')
77
+ if (!data) $this.data('alert', (data = new Alert(this)))
78
+ if (typeof option == 'string') data[option].call($this)
79
+ })
80
+ }
81
+
82
+ $.fn.alert.Constructor = Alert
83
+
84
+
85
+ /* ALERT NO CONFLICT
86
+ * ================= */
87
+
88
+ $.fn.alert.noConflict = function () {
89
+ $.fn.alert = old
90
+ return this
91
+ }
92
+
93
+
94
+ /* ALERT DATA-API
95
+ * ============== */
96
+
97
+ $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
98
+
99
+ }(window.jQuery);
@@ -0,0 +1,105 @@
1
+ /* ============================================================
2
+ * bootstrap-button.js v2.3.2
3
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
4
+ * ============================================================
5
+ * Copyright 2012 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ============================================================ */
19
+
20
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* BUTTON PUBLIC CLASS DEFINITION
27
+ * ============================== */
28
+
29
+ var Button = function (element, options) {
30
+ this.$element = $(element)
31
+ this.options = $.extend({}, $.fn.button.defaults, options)
32
+ }
33
+
34
+ Button.prototype.setState = function (state) {
35
+ var d = 'disabled'
36
+ , $el = this.$element
37
+ , data = $el.data()
38
+ , val = $el.is('input') ? 'val' : 'html'
39
+
40
+ state = state + 'Text'
41
+ data.resetText || $el.data('resetText', $el[val]())
42
+
43
+ $el[val](data[state] || this.options[state])
44
+
45
+ // push to event loop to allow forms to submit
46
+ setTimeout(function () {
47
+ state == 'loadingText' ?
48
+ $el.addClass(d).attr(d, d) :
49
+ $el.removeClass(d).removeAttr(d)
50
+ }, 0)
51
+ }
52
+
53
+ Button.prototype.toggle = function () {
54
+ var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
55
+
56
+ $parent && $parent
57
+ .find('.active')
58
+ .removeClass('active')
59
+
60
+ this.$element.toggleClass('active')
61
+ }
62
+
63
+
64
+ /* BUTTON PLUGIN DEFINITION
65
+ * ======================== */
66
+
67
+ var old = $.fn.button
68
+
69
+ $.fn.button = function (option) {
70
+ return this.each(function () {
71
+ var $this = $(this)
72
+ , data = $this.data('button')
73
+ , options = typeof option == 'object' && option
74
+ if (!data) $this.data('button', (data = new Button(this, options)))
75
+ if (option == 'toggle') data.toggle()
76
+ else if (option) data.setState(option)
77
+ })
78
+ }
79
+
80
+ $.fn.button.defaults = {
81
+ loadingText: 'loading...'
82
+ }
83
+
84
+ $.fn.button.Constructor = Button
85
+
86
+
87
+ /* BUTTON NO CONFLICT
88
+ * ================== */
89
+
90
+ $.fn.button.noConflict = function () {
91
+ $.fn.button = old
92
+ return this
93
+ }
94
+
95
+
96
+ /* BUTTON DATA-API
97
+ * =============== */
98
+
99
+ $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
100
+ var $btn = $(e.target)
101
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
102
+ $btn.button('toggle')
103
+ })
104
+
105
+ }(window.jQuery);
@@ -0,0 +1,207 @@
1
+ /* ==========================================================
2
+ * bootstrap-carousel.js v2.3.2
3
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
4
+ * ==========================================================
5
+ * Copyright 2012 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================== */
19
+
20
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* CAROUSEL CLASS DEFINITION
27
+ * ========================= */
28
+
29
+ var Carousel = function (element, options) {
30
+ this.$element = $(element)
31
+ this.$indicators = this.$element.find('.carousel-indicators')
32
+ this.options = options
33
+ this.options.pause == 'hover' && this.$element
34
+ .on('mouseenter', $.proxy(this.pause, this))
35
+ .on('mouseleave', $.proxy(this.cycle, this))
36
+ }
37
+
38
+ Carousel.prototype = {
39
+
40
+ cycle: function (e) {
41
+ if (!e) this.paused = false
42
+ if (this.interval) clearInterval(this.interval);
43
+ this.options.interval
44
+ && !this.paused
45
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
46
+ return this
47
+ }
48
+
49
+ , getActiveIndex: function () {
50
+ this.$active = this.$element.find('.item.active')
51
+ this.$items = this.$active.parent().children()
52
+ return this.$items.index(this.$active)
53
+ }
54
+
55
+ , to: function (pos) {
56
+ var activeIndex = this.getActiveIndex()
57
+ , that = this
58
+
59
+ if (pos > (this.$items.length - 1) || pos < 0) return
60
+
61
+ if (this.sliding) {
62
+ return this.$element.one('slid', function () {
63
+ that.to(pos)
64
+ })
65
+ }
66
+
67
+ if (activeIndex == pos) {
68
+ return this.pause().cycle()
69
+ }
70
+
71
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
72
+ }
73
+
74
+ , pause: function (e) {
75
+ if (!e) this.paused = true
76
+ if (this.$element.find('.next, .prev').length && $.support.transition.end) {
77
+ this.$element.trigger($.support.transition.end)
78
+ this.cycle(true)
79
+ }
80
+ clearInterval(this.interval)
81
+ this.interval = null
82
+ return this
83
+ }
84
+
85
+ , next: function () {
86
+ if (this.sliding) return
87
+ return this.slide('next')
88
+ }
89
+
90
+ , prev: function () {
91
+ if (this.sliding) return
92
+ return this.slide('prev')
93
+ }
94
+
95
+ , slide: function (type, next) {
96
+ var $active = this.$element.find('.item.active')
97
+ , $next = next || $active[type]()
98
+ , isCycling = this.interval
99
+ , direction = type == 'next' ? 'left' : 'right'
100
+ , fallback = type == 'next' ? 'first' : 'last'
101
+ , that = this
102
+ , e
103
+
104
+ this.sliding = true
105
+
106
+ isCycling && this.pause()
107
+
108
+ $next = $next.length ? $next : this.$element.find('.item')[fallback]()
109
+
110
+ e = $.Event('slide', {
111
+ relatedTarget: $next[0]
112
+ , direction: direction
113
+ })
114
+
115
+ if ($next.hasClass('active')) return
116
+
117
+ if (this.$indicators.length) {
118
+ this.$indicators.find('.active').removeClass('active')
119
+ this.$element.one('slid', function () {
120
+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
121
+ $nextIndicator && $nextIndicator.addClass('active')
122
+ })
123
+ }
124
+
125
+ if ($.support.transition && this.$element.hasClass('slide')) {
126
+ this.$element.trigger(e)
127
+ if (e.isDefaultPrevented()) return
128
+ $next.addClass(type)
129
+ $next[0].offsetWidth // force reflow
130
+ $active.addClass(direction)
131
+ $next.addClass(direction)
132
+ this.$element.one($.support.transition.end, function () {
133
+ $next.removeClass([type, direction].join(' ')).addClass('active')
134
+ $active.removeClass(['active', direction].join(' '))
135
+ that.sliding = false
136
+ setTimeout(function () { that.$element.trigger('slid') }, 0)
137
+ })
138
+ } else {
139
+ this.$element.trigger(e)
140
+ if (e.isDefaultPrevented()) return
141
+ $active.removeClass('active')
142
+ $next.addClass('active')
143
+ this.sliding = false
144
+ this.$element.trigger('slid')
145
+ }
146
+
147
+ isCycling && this.cycle()
148
+
149
+ return this
150
+ }
151
+
152
+ }
153
+
154
+
155
+ /* CAROUSEL PLUGIN DEFINITION
156
+ * ========================== */
157
+
158
+ var old = $.fn.carousel
159
+
160
+ $.fn.carousel = function (option) {
161
+ return this.each(function () {
162
+ var $this = $(this)
163
+ , data = $this.data('carousel')
164
+ , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
165
+ , action = typeof option == 'string' ? option : options.slide
166
+ if (!data) $this.data('carousel', (data = new Carousel(this, options)))
167
+ if (typeof option == 'number') data.to(option)
168
+ else if (action) data[action]()
169
+ else if (options.interval) data.pause().cycle()
170
+ })
171
+ }
172
+
173
+ $.fn.carousel.defaults = {
174
+ interval: 5000
175
+ , pause: 'hover'
176
+ }
177
+
178
+ $.fn.carousel.Constructor = Carousel
179
+
180
+
181
+ /* CAROUSEL NO CONFLICT
182
+ * ==================== */
183
+
184
+ $.fn.carousel.noConflict = function () {
185
+ $.fn.carousel = old
186
+ return this
187
+ }
188
+
189
+ /* CAROUSEL DATA-API
190
+ * ================= */
191
+
192
+ $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
193
+ var $this = $(this), href
194
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
195
+ , options = $.extend({}, $target.data(), $this.data())
196
+ , slideIndex
197
+
198
+ $target.carousel(options)
199
+
200
+ if (slideIndex = $this.attr('data-slide-to')) {
201
+ $target.data('carousel').pause().to(slideIndex).cycle()
202
+ }
203
+
204
+ e.preventDefault()
205
+ })
206
+
207
+ }(window.jQuery);