monatomic 0.0.0

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 (145) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +88 -0
  7. data/Rakefile +19 -0
  8. data/bin/console +11 -0
  9. data/bin/setup +7 -0
  10. data/examples/simple.rb +23 -0
  11. data/lib/monatomic.rb +14 -0
  12. data/lib/monatomic/application.rb +52 -0
  13. data/lib/monatomic/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  14. data/lib/monatomic/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
  15. data/lib/monatomic/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  16. data/lib/monatomic/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  17. data/lib/monatomic/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  18. data/lib/monatomic/assets/javascripts/application.js.coffee +20 -0
  19. data/lib/monatomic/assets/javascripts/bootstrap-datepicker.js +1782 -0
  20. data/lib/monatomic/assets/javascripts/bootstrap/affix.js +162 -0
  21. data/lib/monatomic/assets/javascripts/bootstrap/alert.js +94 -0
  22. data/lib/monatomic/assets/javascripts/bootstrap/button.js +116 -0
  23. data/lib/monatomic/assets/javascripts/bootstrap/carousel.js +237 -0
  24. data/lib/monatomic/assets/javascripts/bootstrap/collapse.js +211 -0
  25. data/lib/monatomic/assets/javascripts/bootstrap/dropdown.js +161 -0
  26. data/lib/monatomic/assets/javascripts/bootstrap/modal.js +339 -0
  27. data/lib/monatomic/assets/javascripts/bootstrap/popover.js +108 -0
  28. data/lib/monatomic/assets/javascripts/bootstrap/scrollspy.js +172 -0
  29. data/lib/monatomic/assets/javascripts/bootstrap/tab.js +153 -0
  30. data/lib/monatomic/assets/javascripts/bootstrap/tooltip.js +476 -0
  31. data/lib/monatomic/assets/javascripts/bootstrap/transition.js +59 -0
  32. data/lib/monatomic/assets/javascripts/jquery-2.1.3.min.js +4 -0
  33. data/lib/monatomic/assets/javascripts/jquery_ujs.js +477 -0
  34. data/lib/monatomic/assets/javascripts/selectize.min.js +3 -0
  35. data/lib/monatomic/assets/stylesheets/application.scss +90 -0
  36. data/lib/monatomic/assets/stylesheets/bootstrap-datepicker3.css +752 -0
  37. data/lib/monatomic/assets/stylesheets/bootstrap.scss +60 -0
  38. data/lib/monatomic/assets/stylesheets/bootstrap/_alerts.scss +73 -0
  39. data/lib/monatomic/assets/stylesheets/bootstrap/_badges.scss +68 -0
  40. data/lib/monatomic/assets/stylesheets/bootstrap/_breadcrumbs.scss +26 -0
  41. data/lib/monatomic/assets/stylesheets/bootstrap/_button-groups.scss +243 -0
  42. data/lib/monatomic/assets/stylesheets/bootstrap/_buttons.scss +160 -0
  43. data/lib/monatomic/assets/stylesheets/bootstrap/_carousel.scss +269 -0
  44. data/lib/monatomic/assets/stylesheets/bootstrap/_close.scss +36 -0
  45. data/lib/monatomic/assets/stylesheets/bootstrap/_code.scss +69 -0
  46. data/lib/monatomic/assets/stylesheets/bootstrap/_component-animations.scss +37 -0
  47. data/lib/monatomic/assets/stylesheets/bootstrap/_dropdowns.scss +214 -0
  48. data/lib/monatomic/assets/stylesheets/bootstrap/_forms.scss +578 -0
  49. data/lib/monatomic/assets/stylesheets/bootstrap/_glyphicons.scss +305 -0
  50. data/lib/monatomic/assets/stylesheets/bootstrap/_grid.scss +84 -0
  51. data/lib/monatomic/assets/stylesheets/bootstrap/_input-groups.scss +166 -0
  52. data/lib/monatomic/assets/stylesheets/bootstrap/_jumbotron.scss +50 -0
  53. data/lib/monatomic/assets/stylesheets/bootstrap/_labels.scss +66 -0
  54. data/lib/monatomic/assets/stylesheets/bootstrap/_list-group.scss +124 -0
  55. data/lib/monatomic/assets/stylesheets/bootstrap/_media.scss +61 -0
  56. data/lib/monatomic/assets/stylesheets/bootstrap/_mixins.scss +39 -0
  57. data/lib/monatomic/assets/stylesheets/bootstrap/_modals.scss +150 -0
  58. data/lib/monatomic/assets/stylesheets/bootstrap/_navbar.scss +662 -0
  59. data/lib/monatomic/assets/stylesheets/bootstrap/_navs.scss +242 -0
  60. data/lib/monatomic/assets/stylesheets/bootstrap/_normalize.scss +427 -0
  61. data/lib/monatomic/assets/stylesheets/bootstrap/_pager.scss +54 -0
  62. data/lib/monatomic/assets/stylesheets/bootstrap/_pagination.scss +88 -0
  63. data/lib/monatomic/assets/stylesheets/bootstrap/_panels.scss +265 -0
  64. data/lib/monatomic/assets/stylesheets/bootstrap/_popovers.scss +135 -0
  65. data/lib/monatomic/assets/stylesheets/bootstrap/_print.scss +107 -0
  66. data/lib/monatomic/assets/stylesheets/bootstrap/_progress-bars.scss +87 -0
  67. data/lib/monatomic/assets/stylesheets/bootstrap/_responsive-embed.scss +35 -0
  68. data/lib/monatomic/assets/stylesheets/bootstrap/_responsive-utilities.scss +177 -0
  69. data/lib/monatomic/assets/stylesheets/bootstrap/_scaffolding.scss +162 -0
  70. data/lib/monatomic/assets/stylesheets/bootstrap/_tables.scss +234 -0
  71. data/lib/monatomic/assets/stylesheets/bootstrap/_theme.scss +273 -0
  72. data/lib/monatomic/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
  73. data/lib/monatomic/assets/stylesheets/bootstrap/_tooltip.scss +102 -0
  74. data/lib/monatomic/assets/stylesheets/bootstrap/_type.scss +298 -0
  75. data/lib/monatomic/assets/stylesheets/bootstrap/_utilities.scss +55 -0
  76. data/lib/monatomic/assets/stylesheets/bootstrap/_variables.scss +866 -0
  77. data/lib/monatomic/assets/stylesheets/bootstrap/_wells.scss +29 -0
  78. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
  79. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_background-variant.scss +11 -0
  80. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  81. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_buttons.scss +52 -0
  82. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  83. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  84. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_forms.scss +88 -0
  85. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
  86. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  87. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  88. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  89. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
  90. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  91. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_list-group.scss +31 -0
  92. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  93. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  94. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
  95. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_pagination.scss +23 -0
  96. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
  97. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
  98. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  99. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  100. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
  101. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  102. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  103. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  104. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +11 -0
  105. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  106. data/lib/monatomic/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  107. data/lib/monatomic/assets/stylesheets/selectize.bootstrap3.css +401 -0
  108. data/lib/monatomic/controller.rb +154 -0
  109. data/lib/monatomic/helper.rb +114 -0
  110. data/lib/monatomic/locales/en.yml +21 -0
  111. data/lib/monatomic/models.rb +2 -0
  112. data/lib/monatomic/models/model.rb +248 -0
  113. data/lib/monatomic/models/user.rb +37 -0
  114. data/lib/monatomic/public/assets/application-d537e55235fbe513c876112de81f0334.js +4578 -0
  115. data/lib/monatomic/public/assets/application-d537e55235fbe513c876112de81f0334.js.gz +0 -0
  116. data/lib/monatomic/public/assets/application-e21e062fc2a24448e198c019f9c0721c.css +6865 -0
  117. data/lib/monatomic/public/assets/application-e21e062fc2a24448e198c019f9c0721c.css.gz +0 -0
  118. data/lib/monatomic/public/assets/bootstrap/glyphicons-halflings-regular-513af1c5182439377effce36c7813d33.eot +0 -0
  119. data/lib/monatomic/public/assets/bootstrap/glyphicons-halflings-regular-795f110aa27b39dffe83d4c7debd366f.ttf +0 -0
  120. data/lib/monatomic/public/assets/bootstrap/glyphicons-halflings-regular-9b034d31f97c53cfae213870811ba74d.svg +288 -0
  121. data/lib/monatomic/public/assets/bootstrap/glyphicons-halflings-regular-d2533ee9537f83620bb353cf5cddee17.woff +0 -0
  122. data/lib/monatomic/public/assets/manifest-e8294e69f9d97cc425dcce90af2fa06d.json +1 -0
  123. data/lib/monatomic/task.rb +4 -0
  124. data/lib/monatomic/types.rb +50 -0
  125. data/lib/monatomic/version.rb +3 -0
  126. data/lib/monatomic/views/edit.erb +29 -0
  127. data/lib/monatomic/views/editors/date.erb +6 -0
  128. data/lib/monatomic/views/editors/enumeration.erb +19 -0
  129. data/lib/monatomic/views/editors/integer.erb +6 -0
  130. data/lib/monatomic/views/editors/object.erb +1 -0
  131. data/lib/monatomic/views/editors/password.erb +6 -0
  132. data/lib/monatomic/views/editors/prompt.erb +19 -0
  133. data/lib/monatomic/views/editors/string.erb +6 -0
  134. data/lib/monatomic/views/editors/tags.erb +18 -0
  135. data/lib/monatomic/views/editors/text.erb +6 -0
  136. data/lib/monatomic/views/home.erb +1 -0
  137. data/lib/monatomic/views/index.erb +69 -0
  138. data/lib/monatomic/views/layout.erb +54 -0
  139. data/lib/monatomic/views/login.erb +62 -0
  140. data/lib/monatomic/views/presenters/object.erb +3 -0
  141. data/lib/monatomic/views/presenters/tags.erb +3 -0
  142. data/lib/monatomic/views/presenters/text.erb +1 -0
  143. data/lib/monatomic/views/show.erb +27 -0
  144. data/monatomic.gemspec +33 -0
  145. metadata +328 -0
@@ -0,0 +1,162 @@
1
+ /* ========================================================================
2
+ * Bootstrap: affix.js v3.3.4
3
+ * http://getbootstrap.com/javascript/#affix
4
+ * ========================================================================
5
+ * Copyright 2011-2015 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7
+ * ======================================================================== */
8
+
9
+
10
+ +function ($) {
11
+ 'use strict';
12
+
13
+ // AFFIX CLASS DEFINITION
14
+ // ======================
15
+
16
+ var Affix = function (element, options) {
17
+ this.options = $.extend({}, Affix.DEFAULTS, options)
18
+
19
+ this.$target = $(this.options.target)
20
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
21
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
22
+
23
+ this.$element = $(element)
24
+ this.affixed = null
25
+ this.unpin = null
26
+ this.pinnedOffset = null
27
+
28
+ this.checkPosition()
29
+ }
30
+
31
+ Affix.VERSION = '3.3.4'
32
+
33
+ Affix.RESET = 'affix affix-top affix-bottom'
34
+
35
+ Affix.DEFAULTS = {
36
+ offset: 0,
37
+ target: window
38
+ }
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 && scrollTop <= offsetTop) return 'top'
57
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
58
+
59
+ return false
60
+ }
61
+
62
+ Affix.prototype.getPinnedOffset = function () {
63
+ if (this.pinnedOffset) return this.pinnedOffset
64
+ this.$element.removeClass(Affix.RESET).addClass('affix')
65
+ var scrollTop = this.$target.scrollTop()
66
+ var position = this.$element.offset()
67
+ return (this.pinnedOffset = position.top - scrollTop)
68
+ }
69
+
70
+ Affix.prototype.checkPositionWithEventLoop = function () {
71
+ setTimeout($.proxy(this.checkPosition, this), 1)
72
+ }
73
+
74
+ Affix.prototype.checkPosition = function () {
75
+ if (!this.$element.is(':visible')) return
76
+
77
+ var height = this.$element.height()
78
+ var offset = this.options.offset
79
+ var offsetTop = offset.top
80
+ var offsetBottom = offset.bottom
81
+ var scrollHeight = $(document.body).height()
82
+
83
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
84
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
85
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
86
+
87
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
88
+
89
+ if (this.affixed != affix) {
90
+ if (this.unpin != null) this.$element.css('top', '')
91
+
92
+ var affixType = 'affix' + (affix ? '-' + affix : '')
93
+ var e = $.Event(affixType + '.bs.affix')
94
+
95
+ this.$element.trigger(e)
96
+
97
+ if (e.isDefaultPrevented()) return
98
+
99
+ this.affixed = affix
100
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
101
+
102
+ this.$element
103
+ .removeClass(Affix.RESET)
104
+ .addClass(affixType)
105
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
106
+ }
107
+
108
+ if (affix == 'bottom') {
109
+ this.$element.offset({
110
+ top: scrollHeight - height - offsetBottom
111
+ })
112
+ }
113
+ }
114
+
115
+
116
+ // AFFIX PLUGIN DEFINITION
117
+ // =======================
118
+
119
+ function Plugin(option) {
120
+ return this.each(function () {
121
+ var $this = $(this)
122
+ var data = $this.data('bs.affix')
123
+ var options = typeof option == 'object' && option
124
+
125
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
126
+ if (typeof option == 'string') data[option]()
127
+ })
128
+ }
129
+
130
+ var old = $.fn.affix
131
+
132
+ $.fn.affix = Plugin
133
+ $.fn.affix.Constructor = Affix
134
+
135
+
136
+ // AFFIX NO CONFLICT
137
+ // =================
138
+
139
+ $.fn.affix.noConflict = function () {
140
+ $.fn.affix = old
141
+ return this
142
+ }
143
+
144
+
145
+ // AFFIX DATA-API
146
+ // ==============
147
+
148
+ $(window).on('load', function () {
149
+ $('[data-spy="affix"]').each(function () {
150
+ var $spy = $(this)
151
+ var data = $spy.data()
152
+
153
+ data.offset = data.offset || {}
154
+
155
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
156
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
157
+
158
+ Plugin.call($spy, data)
159
+ })
160
+ })
161
+
162
+ }(jQuery);
@@ -0,0 +1,94 @@
1
+ /* ========================================================================
2
+ * Bootstrap: alert.js v3.3.4
3
+ * http://getbootstrap.com/javascript/#alerts
4
+ * ========================================================================
5
+ * Copyright 2011-2015 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.4'
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.4
3
+ * http://getbootstrap.com/javascript/#buttons
4
+ * ========================================================================
5
+ * Copyright 2011-2015 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.4'
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,237 @@
1
+ /* ========================================================================
2
+ * Bootstrap: carousel.js v3.3.4
3
+ * http://getbootstrap.com/javascript/#carousel
4
+ * ========================================================================
5
+ * Copyright 2011-2015 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 = null
21
+ this.sliding = null
22
+ this.interval = null
23
+ this.$active = null
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.4'
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 activeIndex = this.getItemIndex(active)
74
+ var willWrap = (direction == 'prev' && activeIndex === 0)
75
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
76
+ if (willWrap && !this.options.wrap) return active
77
+ var delta = direction == 'prev' ? -1 : 1
78
+ var itemIndex = (activeIndex + delta) % this.$items.length
79
+ return this.$items.eq(itemIndex)
80
+ }
81
+
82
+ Carousel.prototype.to = function (pos) {
83
+ var that = this
84
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
85
+
86
+ if (pos > (this.$items.length - 1) || pos < 0) return
87
+
88
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
89
+ if (activeIndex == pos) return this.pause().cycle()
90
+
91
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
92
+ }
93
+
94
+ Carousel.prototype.pause = function (e) {
95
+ e || (this.paused = true)
96
+
97
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
98
+ this.$element.trigger($.support.transition.end)
99
+ this.cycle(true)
100
+ }
101
+
102
+ this.interval = clearInterval(this.interval)
103
+
104
+ return this
105
+ }
106
+
107
+ Carousel.prototype.next = function () {
108
+ if (this.sliding) return
109
+ return this.slide('next')
110
+ }
111
+
112
+ Carousel.prototype.prev = function () {
113
+ if (this.sliding) return
114
+ return this.slide('prev')
115
+ }
116
+
117
+ Carousel.prototype.slide = function (type, next) {
118
+ var $active = this.$element.find('.item.active')
119
+ var $next = next || this.getItemForDirection(type, $active)
120
+ var isCycling = this.interval
121
+ var direction = type == 'next' ? 'left' : 'right'
122
+ var that = this
123
+
124
+ if ($next.hasClass('active')) return (this.sliding = false)
125
+
126
+ var relatedTarget = $next[0]
127
+ var slideEvent = $.Event('slide.bs.carousel', {
128
+ relatedTarget: relatedTarget,
129
+ direction: direction
130
+ })
131
+ this.$element.trigger(slideEvent)
132
+ if (slideEvent.isDefaultPrevented()) return
133
+
134
+ this.sliding = true
135
+
136
+ isCycling && this.pause()
137
+
138
+ if (this.$indicators.length) {
139
+ this.$indicators.find('.active').removeClass('active')
140
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
141
+ $nextIndicator && $nextIndicator.addClass('active')
142
+ }
143
+
144
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
145
+ if ($.support.transition && this.$element.hasClass('slide')) {
146
+ $next.addClass(type)
147
+ $next[0].offsetWidth // force reflow
148
+ $active.addClass(direction)
149
+ $next.addClass(direction)
150
+ $active
151
+ .one('bsTransitionEnd', function () {
152
+ $next.removeClass([type, direction].join(' ')).addClass('active')
153
+ $active.removeClass(['active', direction].join(' '))
154
+ that.sliding = false
155
+ setTimeout(function () {
156
+ that.$element.trigger(slidEvent)
157
+ }, 0)
158
+ })
159
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
160
+ } else {
161
+ $active.removeClass('active')
162
+ $next.addClass('active')
163
+ this.sliding = false
164
+ this.$element.trigger(slidEvent)
165
+ }
166
+
167
+ isCycling && this.cycle()
168
+
169
+ return this
170
+ }
171
+
172
+
173
+ // CAROUSEL PLUGIN DEFINITION
174
+ // ==========================
175
+
176
+ function Plugin(option) {
177
+ return this.each(function () {
178
+ var $this = $(this)
179
+ var data = $this.data('bs.carousel')
180
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
181
+ var action = typeof option == 'string' ? option : options.slide
182
+
183
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
184
+ if (typeof option == 'number') data.to(option)
185
+ else if (action) data[action]()
186
+ else if (options.interval) data.pause().cycle()
187
+ })
188
+ }
189
+
190
+ var old = $.fn.carousel
191
+
192
+ $.fn.carousel = Plugin
193
+ $.fn.carousel.Constructor = Carousel
194
+
195
+
196
+ // CAROUSEL NO CONFLICT
197
+ // ====================
198
+
199
+ $.fn.carousel.noConflict = function () {
200
+ $.fn.carousel = old
201
+ return this
202
+ }
203
+
204
+
205
+ // CAROUSEL DATA-API
206
+ // =================
207
+
208
+ var clickHandler = function (e) {
209
+ var href
210
+ var $this = $(this)
211
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
212
+ if (!$target.hasClass('carousel')) return
213
+ var options = $.extend({}, $target.data(), $this.data())
214
+ var slideIndex = $this.attr('data-slide-to')
215
+ if (slideIndex) options.interval = false
216
+
217
+ Plugin.call($target, options)
218
+
219
+ if (slideIndex) {
220
+ $target.data('bs.carousel').to(slideIndex)
221
+ }
222
+
223
+ e.preventDefault()
224
+ }
225
+
226
+ $(document)
227
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
228
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
229
+
230
+ $(window).on('load', function () {
231
+ $('[data-ride="carousel"]').each(function () {
232
+ var $carousel = $(this)
233
+ Plugin.call($carousel, $carousel.data())
234
+ })
235
+ })
236
+
237
+ }(jQuery);