problem_child 0.0.1

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 (63) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +10 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/Procfile +1 -0
  7. data/README.md +53 -0
  8. data/Rakefile +8 -0
  9. data/bower.json +13 -0
  10. data/config.ru +3 -0
  11. data/lib/problem_child.rb +126 -0
  12. data/lib/problem_child/public/vendor/bootstrap/.bower.json +47 -0
  13. data/lib/problem_child/public/vendor/bootstrap/Gruntfile.js +472 -0
  14. data/lib/problem_child/public/vendor/bootstrap/LICENSE +21 -0
  15. data/lib/problem_child/public/vendor/bootstrap/README.md +129 -0
  16. data/lib/problem_child/public/vendor/bootstrap/bower.json +38 -0
  17. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap-theme.css +470 -0
  18. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
  19. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap-theme.min.css +5 -0
  20. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap.css +6332 -0
  21. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap.css.map +1 -0
  22. data/lib/problem_child/public/vendor/bootstrap/dist/css/bootstrap.min.css +5 -0
  23. data/lib/problem_child/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  24. data/lib/problem_child/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  25. data/lib/problem_child/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  26. data/lib/problem_child/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  27. data/lib/problem_child/public/vendor/bootstrap/dist/js/bootstrap.js +2320 -0
  28. data/lib/problem_child/public/vendor/bootstrap/dist/js/bootstrap.min.js +7 -0
  29. data/lib/problem_child/public/vendor/bootstrap/dist/js/npm.js +13 -0
  30. data/lib/problem_child/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  31. data/lib/problem_child/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
  32. data/lib/problem_child/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  33. data/lib/problem_child/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  34. data/lib/problem_child/public/vendor/bootstrap/js/.jscsrc +34 -0
  35. data/lib/problem_child/public/vendor/bootstrap/js/.jshintrc +15 -0
  36. data/lib/problem_child/public/vendor/bootstrap/js/affix.js +162 -0
  37. data/lib/problem_child/public/vendor/bootstrap/js/alert.js +94 -0
  38. data/lib/problem_child/public/vendor/bootstrap/js/button.js +116 -0
  39. data/lib/problem_child/public/vendor/bootstrap/js/carousel.js +240 -0
  40. data/lib/problem_child/public/vendor/bootstrap/js/collapse.js +211 -0
  41. data/lib/problem_child/public/vendor/bootstrap/js/dropdown.js +161 -0
  42. data/lib/problem_child/public/vendor/bootstrap/js/modal.js +324 -0
  43. data/lib/problem_child/public/vendor/bootstrap/js/popover.js +119 -0
  44. data/lib/problem_child/public/vendor/bootstrap/js/scrollspy.js +175 -0
  45. data/lib/problem_child/public/vendor/bootstrap/js/tab.js +153 -0
  46. data/lib/problem_child/public/vendor/bootstrap/js/tooltip.js +478 -0
  47. data/lib/problem_child/public/vendor/bootstrap/js/transition.js +59 -0
  48. data/lib/problem_child/public/vendor/bootstrap/package.json +82 -0
  49. data/lib/problem_child/public/vendor/jquery/.bower.json +37 -0
  50. data/lib/problem_child/public/vendor/jquery/MIT-LICENSE.txt +21 -0
  51. data/lib/problem_child/public/vendor/jquery/bower.json +27 -0
  52. data/lib/problem_child/public/vendor/jquery/dist/jquery.js +9205 -0
  53. data/lib/problem_child/public/vendor/jquery/dist/jquery.min.js +5 -0
  54. data/lib/problem_child/public/vendor/jquery/dist/jquery.min.map +1 -0
  55. data/lib/problem_child/version.rb +3 -0
  56. data/lib/problem_child/views/form.erb +22 -0
  57. data/lib/problem_child/views/layout.erb +27 -0
  58. data/problem_child.gemspec +32 -0
  59. data/script/bootstrap +1 -0
  60. data/script/console +1 -0
  61. data/script/release +38 -0
  62. data/script/server +1 -0
  63. metadata +260 -0
@@ -0,0 +1,94 @@
1
+ /* ========================================================================
2
+ * Bootstrap: alert.js v3.3.1
3
+ * http://getbootstrap.com/javascript/#alerts
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // ALERT CLASS DEFINITION
14
+ // ======================
15
+
16
+ var dismiss = '[data-dismiss="alert"]'
17
+ var Alert = function (el) {
18
+ $(el).on('click', dismiss, this.close)
19
+ }
20
+
21
+ Alert.VERSION = '3.3.1'
22
+
23
+ Alert.TRANSITION_DURATION = 150
24
+
25
+ Alert.prototype.close = function (e) {
26
+ var $this = $(this)
27
+ var selector = $this.attr('data-target')
28
+
29
+ if (!selector) {
30
+ selector = $this.attr('href')
31
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
32
+ }
33
+
34
+ var $parent = $(selector)
35
+
36
+ if (e) e.preventDefault()
37
+
38
+ if (!$parent.length) {
39
+ $parent = $this.closest('.alert')
40
+ }
41
+
42
+ $parent.trigger(e = $.Event('close.bs.alert'))
43
+
44
+ if (e.isDefaultPrevented()) return
45
+
46
+ $parent.removeClass('in')
47
+
48
+ function removeElement() {
49
+ // detach from parent, fire event then clean up data
50
+ $parent.detach().trigger('closed.bs.alert').remove()
51
+ }
52
+
53
+ $.support.transition && $parent.hasClass('fade') ?
54
+ $parent
55
+ .one('bsTransitionEnd', removeElement)
56
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
57
+ removeElement()
58
+ }
59
+
60
+
61
+ // ALERT PLUGIN DEFINITION
62
+ // =======================
63
+
64
+ function Plugin(option) {
65
+ return this.each(function () {
66
+ var $this = $(this)
67
+ var data = $this.data('bs.alert')
68
+
69
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
70
+ if (typeof option == 'string') data[option].call($this)
71
+ })
72
+ }
73
+
74
+ var old = $.fn.alert
75
+
76
+ $.fn.alert = Plugin
77
+ $.fn.alert.Constructor = Alert
78
+
79
+
80
+ // ALERT NO CONFLICT
81
+ // =================
82
+
83
+ $.fn.alert.noConflict = function () {
84
+ $.fn.alert = old
85
+ return this
86
+ }
87
+
88
+
89
+ // ALERT DATA-API
90
+ // ==============
91
+
92
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
93
+
94
+ }(jQuery);
@@ -0,0 +1,116 @@
1
+ /* ========================================================================
2
+ * Bootstrap: button.js v3.3.1
3
+ * http://getbootstrap.com/javascript/#buttons
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // BUTTON PUBLIC CLASS DEFINITION
14
+ // ==============================
15
+
16
+ var Button = function (element, options) {
17
+ this.$element = $(element)
18
+ this.options = $.extend({}, Button.DEFAULTS, options)
19
+ this.isLoading = false
20
+ }
21
+
22
+ Button.VERSION = '3.3.1'
23
+
24
+ Button.DEFAULTS = {
25
+ loadingText: 'loading...'
26
+ }
27
+
28
+ Button.prototype.setState = function (state) {
29
+ var d = 'disabled'
30
+ var $el = this.$element
31
+ var val = $el.is('input') ? 'val' : 'html'
32
+ var data = $el.data()
33
+
34
+ state = state + 'Text'
35
+
36
+ if (data.resetText == null) $el.data('resetText', $el[val]())
37
+
38
+ // push to event loop to allow forms to submit
39
+ setTimeout($.proxy(function () {
40
+ $el[val](data[state] == null ? this.options[state] : data[state])
41
+
42
+ if (state == 'loadingText') {
43
+ this.isLoading = true
44
+ $el.addClass(d).attr(d, d)
45
+ } else if (this.isLoading) {
46
+ this.isLoading = false
47
+ $el.removeClass(d).removeAttr(d)
48
+ }
49
+ }, this), 0)
50
+ }
51
+
52
+ Button.prototype.toggle = function () {
53
+ var changed = true
54
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
55
+
56
+ if ($parent.length) {
57
+ var $input = this.$element.find('input')
58
+ if ($input.prop('type') == 'radio') {
59
+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
60
+ else $parent.find('.active').removeClass('active')
61
+ }
62
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
63
+ } else {
64
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
65
+ }
66
+
67
+ if (changed) this.$element.toggleClass('active')
68
+ }
69
+
70
+
71
+ // BUTTON PLUGIN DEFINITION
72
+ // ========================
73
+
74
+ function Plugin(option) {
75
+ return this.each(function () {
76
+ var $this = $(this)
77
+ var data = $this.data('bs.button')
78
+ var options = typeof option == 'object' && option
79
+
80
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
81
+
82
+ if (option == 'toggle') data.toggle()
83
+ else if (option) data.setState(option)
84
+ })
85
+ }
86
+
87
+ var old = $.fn.button
88
+
89
+ $.fn.button = Plugin
90
+ $.fn.button.Constructor = Button
91
+
92
+
93
+ // BUTTON NO CONFLICT
94
+ // ==================
95
+
96
+ $.fn.button.noConflict = function () {
97
+ $.fn.button = old
98
+ return this
99
+ }
100
+
101
+
102
+ // BUTTON DATA-API
103
+ // ===============
104
+
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
+ })
115
+
116
+ }(jQuery);
@@ -0,0 +1,240 @@
1
+ /* ========================================================================
2
+ * Bootstrap: carousel.js v3.3.1
3
+ * http://getbootstrap.com/javascript/#carousel
4
+ * ========================================================================
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // CAROUSEL CLASS DEFINITION
14
+ // =========================
15
+
16
+ var Carousel = function (element, options) {
17
+ this.$element = $(element)
18
+ this.$indicators = this.$element.find('.carousel-indicators')
19
+ this.options = options
20
+ this.paused =
21
+ this.sliding =
22
+ this.interval =
23
+ this.$active =
24
+ this.$items = null
25
+
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
29
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
30
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
31
+ }
32
+
33
+ Carousel.VERSION = '3.3.1'
34
+
35
+ Carousel.TRANSITION_DURATION = 600
36
+
37
+ Carousel.DEFAULTS = {
38
+ interval: 5000,
39
+ pause: 'hover',
40
+ wrap: true,
41
+ keyboard: true
42
+ }
43
+
44
+ Carousel.prototype.keydown = function (e) {
45
+ if (/input|textarea/i.test(e.target.tagName)) return
46
+ switch (e.which) {
47
+ case 37: this.prev(); break
48
+ case 39: this.next(); break
49
+ default: return
50
+ }
51
+
52
+ e.preventDefault()
53
+ }
54
+
55
+ Carousel.prototype.cycle = function (e) {
56
+ e || (this.paused = false)
57
+
58
+ this.interval && clearInterval(this.interval)
59
+
60
+ this.options.interval
61
+ && !this.paused
62
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
63
+
64
+ return this
65
+ }
66
+
67
+ Carousel.prototype.getItemIndex = function (item) {
68
+ this.$items = item.parent().children('.item')
69
+ return this.$items.index(item || this.$active)
70
+ }
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
+
79
+ Carousel.prototype.to = function (pos) {
80
+ var that = this
81
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
82
+
83
+ if (pos > (this.$items.length - 1) || pos < 0) return
84
+
85
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
86
+ if (activeIndex == pos) return this.pause().cycle()
87
+
88
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
89
+ }
90
+
91
+ Carousel.prototype.pause = function (e) {
92
+ e || (this.paused = true)
93
+
94
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
95
+ this.$element.trigger($.support.transition.end)
96
+ this.cycle(true)
97
+ }
98
+
99
+ this.interval = clearInterval(this.interval)
100
+
101
+ return this
102
+ }
103
+
104
+ Carousel.prototype.next = function () {
105
+ if (this.sliding) return
106
+ return this.slide('next')
107
+ }
108
+
109
+ Carousel.prototype.prev = function () {
110
+ if (this.sliding) return
111
+ return this.slide('prev')
112
+ }
113
+
114
+ Carousel.prototype.slide = function (type, next) {
115
+ var $active = this.$element.find('.item.active')
116
+ var $next = next || this.getItemForDirection(type, $active)
117
+ var isCycling = this.interval
118
+ var direction = type == 'next' ? 'left' : 'right'
119
+ var fallback = type == 'next' ? 'first' : 'last'
120
+ var that = this
121
+
122
+ if (!$next.length) {
123
+ if (!this.options.wrap) return
124
+ $next = this.$element.find('.item')[fallback]()
125
+ }
126
+
127
+ if ($next.hasClass('active')) return (this.sliding = false)
128
+
129
+ var relatedTarget = $next[0]
130
+ var slideEvent = $.Event('slide.bs.carousel', {
131
+ relatedTarget: relatedTarget,
132
+ direction: direction
133
+ })
134
+ this.$element.trigger(slideEvent)
135
+ if (slideEvent.isDefaultPrevented()) return
136
+
137
+ this.sliding = true
138
+
139
+ isCycling && this.pause()
140
+
141
+ if (this.$indicators.length) {
142
+ this.$indicators.find('.active').removeClass('active')
143
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
144
+ $nextIndicator && $nextIndicator.addClass('active')
145
+ }
146
+
147
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
148
+ if ($.support.transition && this.$element.hasClass('slide')) {
149
+ $next.addClass(type)
150
+ $next[0].offsetWidth // force reflow
151
+ $active.addClass(direction)
152
+ $next.addClass(direction)
153
+ $active
154
+ .one('bsTransitionEnd', function () {
155
+ $next.removeClass([type, direction].join(' ')).addClass('active')
156
+ $active.removeClass(['active', direction].join(' '))
157
+ that.sliding = false
158
+ setTimeout(function () {
159
+ that.$element.trigger(slidEvent)
160
+ }, 0)
161
+ })
162
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
163
+ } else {
164
+ $active.removeClass('active')
165
+ $next.addClass('active')
166
+ this.sliding = false
167
+ this.$element.trigger(slidEvent)
168
+ }
169
+
170
+ isCycling && this.cycle()
171
+
172
+ return this
173
+ }
174
+
175
+
176
+ // CAROUSEL PLUGIN DEFINITION
177
+ // ==========================
178
+
179
+ function Plugin(option) {
180
+ return this.each(function () {
181
+ var $this = $(this)
182
+ var data = $this.data('bs.carousel')
183
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
184
+ var action = typeof option == 'string' ? option : options.slide
185
+
186
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
187
+ if (typeof option == 'number') data.to(option)
188
+ else if (action) data[action]()
189
+ else if (options.interval) data.pause().cycle()
190
+ })
191
+ }
192
+
193
+ var old = $.fn.carousel
194
+
195
+ $.fn.carousel = Plugin
196
+ $.fn.carousel.Constructor = Carousel
197
+
198
+
199
+ // CAROUSEL NO CONFLICT
200
+ // ====================
201
+
202
+ $.fn.carousel.noConflict = function () {
203
+ $.fn.carousel = old
204
+ return this
205
+ }
206
+
207
+
208
+ // CAROUSEL DATA-API
209
+ // =================
210
+
211
+ var clickHandler = function (e) {
212
+ var href
213
+ var $this = $(this)
214
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
215
+ if (!$target.hasClass('carousel')) return
216
+ var options = $.extend({}, $target.data(), $this.data())
217
+ var slideIndex = $this.attr('data-slide-to')
218
+ if (slideIndex) options.interval = false
219
+
220
+ Plugin.call($target, options)
221
+
222
+ if (slideIndex) {
223
+ $target.data('bs.carousel').to(slideIndex)
224
+ }
225
+
226
+ e.preventDefault()
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)
232
+
233
+ $(window).on('load', function () {
234
+ $('[data-ride="carousel"]').each(function () {
235
+ var $carousel = $(this)
236
+ Plugin.call($carousel, $carousel.data())
237
+ })
238
+ })
239
+
240
+ }(jQuery);