toronto 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 (217) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +28 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +179 -0
  7. data/Rakefile +147 -0
  8. data/lib/generators/toronto/install/install_generator.rb +68 -0
  9. data/lib/generators/toronto/install/templates/assets/stylesheets/bootstrap-variables.less +861 -0
  10. data/lib/generators/toronto/install/templates/assets/stylesheets/bootstrap-variables.scss +866 -0
  11. data/lib/generators/toronto/install/templates/assets/stylesheets/starter.css +22 -0
  12. data/lib/generators/toronto/install/templates/assets/stylesheets/starter.less +23 -0
  13. data/lib/generators/toronto/install/templates/assets/stylesheets/starter.scss +23 -0
  14. data/lib/generators/toronto/install/templates/config/initializers/locales.rb +4 -0
  15. data/lib/generators/toronto/install/templates/form_builders/form_builder/_form.html.erb +39 -0
  16. data/lib/generators/toronto/install/templates/form_builders/form_builder/_form.html.haml +26 -0
  17. data/lib/generators/toronto/install/templates/form_builders/form_builder/_form.html.slim +21 -0
  18. data/lib/generators/toronto/install/templates/helpers/menu_helper.rb +7 -0
  19. data/lib/generators/toronto/install/templates/layouts/starter.html.erb +57 -0
  20. data/lib/generators/toronto/install/templates/layouts/starter.html.haml +48 -0
  21. data/lib/generators/toronto/install/templates/layouts/starter.html.slim +53 -0
  22. data/lib/generators/toronto/install/templates/lib/rails/generators/haml/scaffold/scaffold_generator.rb +51 -0
  23. data/lib/generators/toronto/install/templates/lib/templates/erb/controller/view.html.erb +4 -0
  24. data/lib/generators/toronto/install/templates/lib/templates/erb/scaffold/edit.html.erb +13 -0
  25. data/lib/generators/toronto/install/templates/lib/templates/erb/scaffold/index.html.erb +33 -0
  26. data/lib/generators/toronto/install/templates/lib/templates/erb/scaffold/new.html.erb +9 -0
  27. data/lib/generators/toronto/install/templates/lib/templates/erb/scaffold/show.html.erb +19 -0
  28. data/lib/generators/toronto/install/templates/lib/templates/haml/controller/view.html.haml +3 -0
  29. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/edit.html.haml +10 -0
  30. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/en.yml +23 -0
  31. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/fr.yml +23 -0
  32. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/index.html.haml +30 -0
  33. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/new.html.haml +7 -0
  34. data/lib/generators/toronto/install/templates/lib/templates/haml/scaffold/show.html.haml +18 -0
  35. data/lib/generators/toronto/install/templates/lib/templates/slim/controller/view.html.slim +5 -0
  36. data/lib/generators/toronto/install/templates/lib/templates/slim/scaffold/edit.html.slim +12 -0
  37. data/lib/generators/toronto/install/templates/lib/templates/slim/scaffold/index.html.slim +31 -0
  38. data/lib/generators/toronto/install/templates/lib/templates/slim/scaffold/new.html.slim +9 -0
  39. data/lib/generators/toronto/install/templates/lib/templates/slim/scaffold/show.html.slim +16 -0
  40. data/lib/toronto/version.rb +3 -0
  41. data/lib/toronto.rb +22 -0
  42. data/readme-template.md.erb +163 -0
  43. data/test/dummy/Rakefile +7 -0
  44. data/test/dummy/app/assets/javascripts/application.js +13 -0
  45. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  46. data/test/dummy/config/application.rb +68 -0
  47. data/test/dummy/config/boot.rb +6 -0
  48. data/test/dummy/config/environment.rb +5 -0
  49. data/test/dummy/config/environments/test.rb +39 -0
  50. data/test/dummy/config.ru +4 -0
  51. data/test/generators/bootstrap/install_generator_test.rb +104 -0
  52. data/test/test_helper.rb +7 -0
  53. data/toronto.gemspec +30 -0
  54. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
  55. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
  56. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  57. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  58. data/vendor/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  59. data/vendor/assets/javascripts/bootstrap/affix.js +162 -0
  60. data/vendor/assets/javascripts/bootstrap/alert.js +94 -0
  61. data/vendor/assets/javascripts/bootstrap/button.js +116 -0
  62. data/vendor/assets/javascripts/bootstrap/carousel.js +237 -0
  63. data/vendor/assets/javascripts/bootstrap/collapse.js +211 -0
  64. data/vendor/assets/javascripts/bootstrap/dropdown.js +161 -0
  65. data/vendor/assets/javascripts/bootstrap/modal.js +339 -0
  66. data/vendor/assets/javascripts/bootstrap/popover.js +108 -0
  67. data/vendor/assets/javascripts/bootstrap/scrollspy.js +172 -0
  68. data/vendor/assets/javascripts/bootstrap/tab.js +153 -0
  69. data/vendor/assets/javascripts/bootstrap/tooltip.js +476 -0
  70. data/vendor/assets/javascripts/bootstrap/transition.js +59 -0
  71. data/vendor/assets/javascripts/bootstrap.js +12 -0
  72. data/vendor/assets/stylesheets/bootstrap.css.erb +6584 -0
  73. data/vendor/assets/stylesheets/bootstrap.css.map +1 -0
  74. data/vendor/twitter/bootstrap/less/alerts.less +73 -0
  75. data/vendor/twitter/bootstrap/less/badges.less +66 -0
  76. data/vendor/twitter/bootstrap/less/bootstrap.less +50 -0
  77. data/vendor/twitter/bootstrap/less/breadcrumbs.less +26 -0
  78. data/vendor/twitter/bootstrap/less/button-groups.less +243 -0
  79. data/vendor/twitter/bootstrap/less/buttons.less +160 -0
  80. data/vendor/twitter/bootstrap/less/carousel.less +269 -0
  81. data/vendor/twitter/bootstrap/less/close.less +34 -0
  82. data/vendor/twitter/bootstrap/less/code.less +69 -0
  83. data/vendor/twitter/bootstrap/less/component-animations.less +33 -0
  84. data/vendor/twitter/bootstrap/less/dropdowns.less +214 -0
  85. data/vendor/twitter/bootstrap/less/forms.less +574 -0
  86. data/vendor/twitter/bootstrap/less/glyphicons.less +305 -0
  87. data/vendor/twitter/bootstrap/less/grid.less +84 -0
  88. data/vendor/twitter/bootstrap/less/input-groups.less +166 -0
  89. data/vendor/twitter/bootstrap/less/jumbotron.less +50 -0
  90. data/vendor/twitter/bootstrap/less/labels.less +64 -0
  91. data/vendor/twitter/bootstrap/less/list-group.less +124 -0
  92. data/vendor/twitter/bootstrap/less/media.less +61 -0
  93. data/vendor/twitter/bootstrap/less/mixins/alerts.less +14 -0
  94. data/vendor/twitter/bootstrap/less/mixins/background-variant.less +8 -0
  95. data/vendor/twitter/bootstrap/less/mixins/border-radius.less +18 -0
  96. data/vendor/twitter/bootstrap/less/mixins/buttons.less +52 -0
  97. data/vendor/twitter/bootstrap/less/mixins/center-block.less +7 -0
  98. data/vendor/twitter/bootstrap/less/mixins/clearfix.less +22 -0
  99. data/vendor/twitter/bootstrap/less/mixins/forms.less +85 -0
  100. data/vendor/twitter/bootstrap/less/mixins/gradients.less +59 -0
  101. data/vendor/twitter/bootstrap/less/mixins/grid-framework.less +91 -0
  102. data/vendor/twitter/bootstrap/less/mixins/grid.less +122 -0
  103. data/vendor/twitter/bootstrap/less/mixins/hide-text.less +21 -0
  104. data/vendor/twitter/bootstrap/less/mixins/image.less +33 -0
  105. data/vendor/twitter/bootstrap/less/mixins/labels.less +12 -0
  106. data/vendor/twitter/bootstrap/less/mixins/list-group.less +29 -0
  107. data/vendor/twitter/bootstrap/less/mixins/nav-divider.less +10 -0
  108. data/vendor/twitter/bootstrap/less/mixins/nav-vertical-align.less +9 -0
  109. data/vendor/twitter/bootstrap/less/mixins/opacity.less +8 -0
  110. data/vendor/twitter/bootstrap/less/mixins/pagination.less +23 -0
  111. data/vendor/twitter/bootstrap/less/mixins/panels.less +24 -0
  112. data/vendor/twitter/bootstrap/less/mixins/progress-bar.less +10 -0
  113. data/vendor/twitter/bootstrap/less/mixins/reset-filter.less +8 -0
  114. data/vendor/twitter/bootstrap/less/mixins/resize.less +6 -0
  115. data/vendor/twitter/bootstrap/less/mixins/responsive-visibility.less +15 -0
  116. data/vendor/twitter/bootstrap/less/mixins/size.less +10 -0
  117. data/vendor/twitter/bootstrap/less/mixins/tab-focus.less +9 -0
  118. data/vendor/twitter/bootstrap/less/mixins/table-row.less +28 -0
  119. data/vendor/twitter/bootstrap/less/mixins/text-emphasis.less +8 -0
  120. data/vendor/twitter/bootstrap/less/mixins/text-overflow.less +8 -0
  121. data/vendor/twitter/bootstrap/less/mixins/vendor-prefixes.less +227 -0
  122. data/vendor/twitter/bootstrap/less/mixins.less +39 -0
  123. data/vendor/twitter/bootstrap/less/modals.less +150 -0
  124. data/vendor/twitter/bootstrap/less/navbar.less +660 -0
  125. data/vendor/twitter/bootstrap/less/navs.less +242 -0
  126. data/vendor/twitter/bootstrap/less/normalize.less +427 -0
  127. data/vendor/twitter/bootstrap/less/pager.less +54 -0
  128. data/vendor/twitter/bootstrap/less/pagination.less +88 -0
  129. data/vendor/twitter/bootstrap/less/panels.less +265 -0
  130. data/vendor/twitter/bootstrap/less/popovers.less +135 -0
  131. data/vendor/twitter/bootstrap/less/print.less +107 -0
  132. data/vendor/twitter/bootstrap/less/progress-bars.less +87 -0
  133. data/vendor/twitter/bootstrap/less/responsive-embed.less +35 -0
  134. data/vendor/twitter/bootstrap/less/responsive-utilities.less +194 -0
  135. data/vendor/twitter/bootstrap/less/scaffolding.less +162 -0
  136. data/vendor/twitter/bootstrap/less/tables.less +234 -0
  137. data/vendor/twitter/bootstrap/less/theme.less +273 -0
  138. data/vendor/twitter/bootstrap/less/thumbnails.less +36 -0
  139. data/vendor/twitter/bootstrap/less/tooltip.less +102 -0
  140. data/vendor/twitter/bootstrap/less/type.less +302 -0
  141. data/vendor/twitter/bootstrap/less/utilities.less +55 -0
  142. data/vendor/twitter/bootstrap/less/variables.less +861 -0
  143. data/vendor/twitter/bootstrap/less/wells.less +29 -0
  144. data/vendor/twitter/bootstrap/sass/_bootstrap-compass.scss +9 -0
  145. data/vendor/twitter/bootstrap/sass/_bootstrap-mincer.scss +19 -0
  146. data/vendor/twitter/bootstrap/sass/_bootstrap-sprockets.scss +9 -0
  147. data/vendor/twitter/bootstrap/sass/_bootstrap.scss +50 -0
  148. data/vendor/twitter/bootstrap/sass/bootstrap/_alerts.scss +73 -0
  149. data/vendor/twitter/bootstrap/sass/bootstrap/_badges.scss +68 -0
  150. data/vendor/twitter/bootstrap/sass/bootstrap/_breadcrumbs.scss +26 -0
  151. data/vendor/twitter/bootstrap/sass/bootstrap/_button-groups.scss +243 -0
  152. data/vendor/twitter/bootstrap/sass/bootstrap/_buttons.scss +160 -0
  153. data/vendor/twitter/bootstrap/sass/bootstrap/_carousel.scss +269 -0
  154. data/vendor/twitter/bootstrap/sass/bootstrap/_close.scss +36 -0
  155. data/vendor/twitter/bootstrap/sass/bootstrap/_code.scss +69 -0
  156. data/vendor/twitter/bootstrap/sass/bootstrap/_component-animations.scss +37 -0
  157. data/vendor/twitter/bootstrap/sass/bootstrap/_dropdowns.scss +214 -0
  158. data/vendor/twitter/bootstrap/sass/bootstrap/_forms.scss +578 -0
  159. data/vendor/twitter/bootstrap/sass/bootstrap/_glyphicons.scss +305 -0
  160. data/vendor/twitter/bootstrap/sass/bootstrap/_grid.scss +84 -0
  161. data/vendor/twitter/bootstrap/sass/bootstrap/_input-groups.scss +166 -0
  162. data/vendor/twitter/bootstrap/sass/bootstrap/_jumbotron.scss +50 -0
  163. data/vendor/twitter/bootstrap/sass/bootstrap/_labels.scss +66 -0
  164. data/vendor/twitter/bootstrap/sass/bootstrap/_list-group.scss +124 -0
  165. data/vendor/twitter/bootstrap/sass/bootstrap/_media.scss +61 -0
  166. data/vendor/twitter/bootstrap/sass/bootstrap/_mixins.scss +39 -0
  167. data/vendor/twitter/bootstrap/sass/bootstrap/_modals.scss +150 -0
  168. data/vendor/twitter/bootstrap/sass/bootstrap/_navbar.scss +662 -0
  169. data/vendor/twitter/bootstrap/sass/bootstrap/_navs.scss +242 -0
  170. data/vendor/twitter/bootstrap/sass/bootstrap/_normalize.scss +427 -0
  171. data/vendor/twitter/bootstrap/sass/bootstrap/_pager.scss +54 -0
  172. data/vendor/twitter/bootstrap/sass/bootstrap/_pagination.scss +88 -0
  173. data/vendor/twitter/bootstrap/sass/bootstrap/_panels.scss +265 -0
  174. data/vendor/twitter/bootstrap/sass/bootstrap/_popovers.scss +135 -0
  175. data/vendor/twitter/bootstrap/sass/bootstrap/_print.scss +107 -0
  176. data/vendor/twitter/bootstrap/sass/bootstrap/_progress-bars.scss +87 -0
  177. data/vendor/twitter/bootstrap/sass/bootstrap/_responsive-embed.scss +35 -0
  178. data/vendor/twitter/bootstrap/sass/bootstrap/_responsive-utilities.scss +177 -0
  179. data/vendor/twitter/bootstrap/sass/bootstrap/_scaffolding.scss +162 -0
  180. data/vendor/twitter/bootstrap/sass/bootstrap/_tables.scss +234 -0
  181. data/vendor/twitter/bootstrap/sass/bootstrap/_theme.scss +273 -0
  182. data/vendor/twitter/bootstrap/sass/bootstrap/_thumbnails.scss +38 -0
  183. data/vendor/twitter/bootstrap/sass/bootstrap/_tooltip.scss +102 -0
  184. data/vendor/twitter/bootstrap/sass/bootstrap/_type.scss +298 -0
  185. data/vendor/twitter/bootstrap/sass/bootstrap/_utilities.scss +55 -0
  186. data/vendor/twitter/bootstrap/sass/bootstrap/_variables.scss +866 -0
  187. data/vendor/twitter/bootstrap/sass/bootstrap/_wells.scss +29 -0
  188. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_alerts.scss +14 -0
  189. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_background-variant.scss +11 -0
  190. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_border-radius.scss +18 -0
  191. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_buttons.scss +52 -0
  192. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_center-block.scss +7 -0
  193. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_clearfix.scss +22 -0
  194. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_forms.scss +88 -0
  195. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_gradients.scss +58 -0
  196. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_grid-framework.scss +81 -0
  197. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_grid.scss +122 -0
  198. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_hide-text.scss +21 -0
  199. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_image.scss +33 -0
  200. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_labels.scss +12 -0
  201. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_list-group.scss +31 -0
  202. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_nav-divider.scss +10 -0
  203. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  204. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_opacity.scss +8 -0
  205. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_pagination.scss +23 -0
  206. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_panels.scss +24 -0
  207. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_progress-bar.scss +10 -0
  208. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_reset-filter.scss +8 -0
  209. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_resize.scss +6 -0
  210. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_responsive-visibility.scss +21 -0
  211. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_size.scss +10 -0
  212. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_tab-focus.scss +9 -0
  213. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_table-row.scss +28 -0
  214. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_text-emphasis.scss +11 -0
  215. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_text-overflow.scss +8 -0
  216. data/vendor/twitter/bootstrap/sass/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  217. metadata +312 -0
@@ -0,0 +1,476 @@
1
+ /* ========================================================================
2
+ * Bootstrap: tooltip.js v3.3.4
3
+ * http://getbootstrap.com/javascript/#tooltip
4
+ * Inspired by the original jQuery.tipsy by Jason Frame
5
+ * ========================================================================
6
+ * Copyright 2011-2015 Twitter, Inc.
7
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
8
+ * ======================================================================== */
9
+
10
+
11
+ +function ($) {
12
+ 'use strict';
13
+
14
+ // TOOLTIP PUBLIC CLASS DEFINITION
15
+ // ===============================
16
+
17
+ var Tooltip = function (element, options) {
18
+ this.type = null
19
+ this.options = null
20
+ this.enabled = null
21
+ this.timeout = null
22
+ this.hoverState = null
23
+ this.$element = null
24
+
25
+ this.init('tooltip', element, options)
26
+ }
27
+
28
+ Tooltip.VERSION = '3.3.4'
29
+
30
+ Tooltip.TRANSITION_DURATION = 150
31
+
32
+ Tooltip.DEFAULTS = {
33
+ animation: true,
34
+ placement: 'top',
35
+ selector: false,
36
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
37
+ trigger: 'hover focus',
38
+ title: '',
39
+ delay: 0,
40
+ html: false,
41
+ container: false,
42
+ viewport: {
43
+ selector: 'body',
44
+ padding: 0
45
+ }
46
+ }
47
+
48
+ Tooltip.prototype.init = function (type, element, options) {
49
+ this.enabled = true
50
+ this.type = type
51
+ this.$element = $(element)
52
+ this.options = this.getOptions(options)
53
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
54
+
55
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
56
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
57
+ }
58
+
59
+ var triggers = this.options.trigger.split(' ')
60
+
61
+ for (var i = triggers.length; i--;) {
62
+ var trigger = triggers[i]
63
+
64
+ if (trigger == 'click') {
65
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
66
+ } else if (trigger != 'manual') {
67
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
68
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
69
+
70
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
71
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
72
+ }
73
+ }
74
+
75
+ this.options.selector ?
76
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
77
+ this.fixTitle()
78
+ }
79
+
80
+ Tooltip.prototype.getDefaults = function () {
81
+ return Tooltip.DEFAULTS
82
+ }
83
+
84
+ Tooltip.prototype.getOptions = function (options) {
85
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
86
+
87
+ if (options.delay && typeof options.delay == 'number') {
88
+ options.delay = {
89
+ show: options.delay,
90
+ hide: options.delay
91
+ }
92
+ }
93
+
94
+ return options
95
+ }
96
+
97
+ Tooltip.prototype.getDelegateOptions = function () {
98
+ var options = {}
99
+ var defaults = this.getDefaults()
100
+
101
+ this._options && $.each(this._options, function (key, value) {
102
+ if (defaults[key] != value) options[key] = value
103
+ })
104
+
105
+ return options
106
+ }
107
+
108
+ Tooltip.prototype.enter = function (obj) {
109
+ var self = obj instanceof this.constructor ?
110
+ obj : $(obj.currentTarget).data('bs.' + this.type)
111
+
112
+ if (self && self.$tip && self.$tip.is(':visible')) {
113
+ self.hoverState = 'in'
114
+ return
115
+ }
116
+
117
+ if (!self) {
118
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
119
+ $(obj.currentTarget).data('bs.' + this.type, self)
120
+ }
121
+
122
+ clearTimeout(self.timeout)
123
+
124
+ self.hoverState = 'in'
125
+
126
+ if (!self.options.delay || !self.options.delay.show) return self.show()
127
+
128
+ self.timeout = setTimeout(function () {
129
+ if (self.hoverState == 'in') self.show()
130
+ }, self.options.delay.show)
131
+ }
132
+
133
+ Tooltip.prototype.leave = function (obj) {
134
+ var self = obj instanceof this.constructor ?
135
+ obj : $(obj.currentTarget).data('bs.' + this.type)
136
+
137
+ if (!self) {
138
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
139
+ $(obj.currentTarget).data('bs.' + this.type, self)
140
+ }
141
+
142
+ clearTimeout(self.timeout)
143
+
144
+ self.hoverState = 'out'
145
+
146
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
147
+
148
+ self.timeout = setTimeout(function () {
149
+ if (self.hoverState == 'out') self.hide()
150
+ }, self.options.delay.hide)
151
+ }
152
+
153
+ Tooltip.prototype.show = function () {
154
+ var e = $.Event('show.bs.' + this.type)
155
+
156
+ if (this.hasContent() && this.enabled) {
157
+ this.$element.trigger(e)
158
+
159
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
160
+ if (e.isDefaultPrevented() || !inDom) return
161
+ var that = this
162
+
163
+ var $tip = this.tip()
164
+
165
+ var tipId = this.getUID(this.type)
166
+
167
+ this.setContent()
168
+ $tip.attr('id', tipId)
169
+ this.$element.attr('aria-describedby', tipId)
170
+
171
+ if (this.options.animation) $tip.addClass('fade')
172
+
173
+ var placement = typeof this.options.placement == 'function' ?
174
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
175
+ this.options.placement
176
+
177
+ var autoToken = /\s?auto?\s?/i
178
+ var autoPlace = autoToken.test(placement)
179
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
180
+
181
+ $tip
182
+ .detach()
183
+ .css({ top: 0, left: 0, display: 'block' })
184
+ .addClass(placement)
185
+ .data('bs.' + this.type, this)
186
+
187
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
188
+
189
+ var pos = this.getPosition()
190
+ var actualWidth = $tip[0].offsetWidth
191
+ var actualHeight = $tip[0].offsetHeight
192
+
193
+ if (autoPlace) {
194
+ var orgPlacement = placement
195
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
196
+ var containerDim = this.getPosition($container)
197
+
198
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
199
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
200
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
201
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
202
+ placement
203
+
204
+ $tip
205
+ .removeClass(orgPlacement)
206
+ .addClass(placement)
207
+ }
208
+
209
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
210
+
211
+ this.applyPlacement(calculatedOffset, placement)
212
+
213
+ var complete = function () {
214
+ var prevHoverState = that.hoverState
215
+ that.$element.trigger('shown.bs.' + that.type)
216
+ that.hoverState = null
217
+
218
+ if (prevHoverState == 'out') that.leave(that)
219
+ }
220
+
221
+ $.support.transition && this.$tip.hasClass('fade') ?
222
+ $tip
223
+ .one('bsTransitionEnd', complete)
224
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
225
+ complete()
226
+ }
227
+ }
228
+
229
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
230
+ var $tip = this.tip()
231
+ var width = $tip[0].offsetWidth
232
+ var height = $tip[0].offsetHeight
233
+
234
+ // manually read margins because getBoundingClientRect includes difference
235
+ var marginTop = parseInt($tip.css('margin-top'), 10)
236
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
237
+
238
+ // we must check for NaN for ie 8/9
239
+ if (isNaN(marginTop)) marginTop = 0
240
+ if (isNaN(marginLeft)) marginLeft = 0
241
+
242
+ offset.top = offset.top + marginTop
243
+ offset.left = offset.left + marginLeft
244
+
245
+ // $.fn.offset doesn't round pixel values
246
+ // so we use setOffset directly with our own function B-0
247
+ $.offset.setOffset($tip[0], $.extend({
248
+ using: function (props) {
249
+ $tip.css({
250
+ top: Math.round(props.top),
251
+ left: Math.round(props.left)
252
+ })
253
+ }
254
+ }, offset), 0)
255
+
256
+ $tip.addClass('in')
257
+
258
+ // check to see if placing tip in new offset caused the tip to resize itself
259
+ var actualWidth = $tip[0].offsetWidth
260
+ var actualHeight = $tip[0].offsetHeight
261
+
262
+ if (placement == 'top' && actualHeight != height) {
263
+ offset.top = offset.top + height - actualHeight
264
+ }
265
+
266
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
267
+
268
+ if (delta.left) offset.left += delta.left
269
+ else offset.top += delta.top
270
+
271
+ var isVertical = /top|bottom/.test(placement)
272
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
273
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
274
+
275
+ $tip.offset(offset)
276
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
277
+ }
278
+
279
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
280
+ this.arrow()
281
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
282
+ .css(isVertical ? 'top' : 'left', '')
283
+ }
284
+
285
+ Tooltip.prototype.setContent = function () {
286
+ var $tip = this.tip()
287
+ var title = this.getTitle()
288
+
289
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
290
+ $tip.removeClass('fade in top bottom left right')
291
+ }
292
+
293
+ Tooltip.prototype.hide = function (callback) {
294
+ var that = this
295
+ var $tip = $(this.$tip)
296
+ var e = $.Event('hide.bs.' + this.type)
297
+
298
+ function complete() {
299
+ if (that.hoverState != 'in') $tip.detach()
300
+ that.$element
301
+ .removeAttr('aria-describedby')
302
+ .trigger('hidden.bs.' + that.type)
303
+ callback && callback()
304
+ }
305
+
306
+ this.$element.trigger(e)
307
+
308
+ if (e.isDefaultPrevented()) return
309
+
310
+ $tip.removeClass('in')
311
+
312
+ $.support.transition && $tip.hasClass('fade') ?
313
+ $tip
314
+ .one('bsTransitionEnd', complete)
315
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
316
+ complete()
317
+
318
+ this.hoverState = null
319
+
320
+ return this
321
+ }
322
+
323
+ Tooltip.prototype.fixTitle = function () {
324
+ var $e = this.$element
325
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
326
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
327
+ }
328
+ }
329
+
330
+ Tooltip.prototype.hasContent = function () {
331
+ return this.getTitle()
332
+ }
333
+
334
+ Tooltip.prototype.getPosition = function ($element) {
335
+ $element = $element || this.$element
336
+
337
+ var el = $element[0]
338
+ var isBody = el.tagName == 'BODY'
339
+
340
+ var elRect = el.getBoundingClientRect()
341
+ if (elRect.width == null) {
342
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
343
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
344
+ }
345
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
346
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
347
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
348
+
349
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
350
+ }
351
+
352
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
353
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
354
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
355
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
356
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
357
+
358
+ }
359
+
360
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
361
+ var delta = { top: 0, left: 0 }
362
+ if (!this.$viewport) return delta
363
+
364
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
365
+ var viewportDimensions = this.getPosition(this.$viewport)
366
+
367
+ if (/right|left/.test(placement)) {
368
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
369
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
370
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
371
+ delta.top = viewportDimensions.top - topEdgeOffset
372
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
373
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
374
+ }
375
+ } else {
376
+ var leftEdgeOffset = pos.left - viewportPadding
377
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
378
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
379
+ delta.left = viewportDimensions.left - leftEdgeOffset
380
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
381
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
382
+ }
383
+ }
384
+
385
+ return delta
386
+ }
387
+
388
+ Tooltip.prototype.getTitle = function () {
389
+ var title
390
+ var $e = this.$element
391
+ var o = this.options
392
+
393
+ title = $e.attr('data-original-title')
394
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
395
+
396
+ return title
397
+ }
398
+
399
+ Tooltip.prototype.getUID = function (prefix) {
400
+ do prefix += ~~(Math.random() * 1000000)
401
+ while (document.getElementById(prefix))
402
+ return prefix
403
+ }
404
+
405
+ Tooltip.prototype.tip = function () {
406
+ return (this.$tip = this.$tip || $(this.options.template))
407
+ }
408
+
409
+ Tooltip.prototype.arrow = function () {
410
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
411
+ }
412
+
413
+ Tooltip.prototype.enable = function () {
414
+ this.enabled = true
415
+ }
416
+
417
+ Tooltip.prototype.disable = function () {
418
+ this.enabled = false
419
+ }
420
+
421
+ Tooltip.prototype.toggleEnabled = function () {
422
+ this.enabled = !this.enabled
423
+ }
424
+
425
+ Tooltip.prototype.toggle = function (e) {
426
+ var self = this
427
+ if (e) {
428
+ self = $(e.currentTarget).data('bs.' + this.type)
429
+ if (!self) {
430
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
431
+ $(e.currentTarget).data('bs.' + this.type, self)
432
+ }
433
+ }
434
+
435
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
436
+ }
437
+
438
+ Tooltip.prototype.destroy = function () {
439
+ var that = this
440
+ clearTimeout(this.timeout)
441
+ this.hide(function () {
442
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
443
+ })
444
+ }
445
+
446
+
447
+ // TOOLTIP PLUGIN DEFINITION
448
+ // =========================
449
+
450
+ function Plugin(option) {
451
+ return this.each(function () {
452
+ var $this = $(this)
453
+ var data = $this.data('bs.tooltip')
454
+ var options = typeof option == 'object' && option
455
+
456
+ if (!data && /destroy|hide/.test(option)) return
457
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
458
+ if (typeof option == 'string') data[option]()
459
+ })
460
+ }
461
+
462
+ var old = $.fn.tooltip
463
+
464
+ $.fn.tooltip = Plugin
465
+ $.fn.tooltip.Constructor = Tooltip
466
+
467
+
468
+ // TOOLTIP NO CONFLICT
469
+ // ===================
470
+
471
+ $.fn.tooltip.noConflict = function () {
472
+ $.fn.tooltip = old
473
+ return this
474
+ }
475
+
476
+ }(jQuery);
@@ -0,0 +1,59 @@
1
+ /* ========================================================================
2
+ * Bootstrap: transition.js v3.3.4
3
+ * http://getbootstrap.com/javascript/#transitions
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
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
14
+ // ============================================================
15
+
16
+ function transitionEnd() {
17
+ var el = document.createElement('bootstrap')
18
+
19
+ var transEndEventNames = {
20
+ WebkitTransition : 'webkitTransitionEnd',
21
+ MozTransition : 'transitionend',
22
+ OTransition : 'oTransitionEnd otransitionend',
23
+ transition : 'transitionend'
24
+ }
25
+
26
+ for (var name in transEndEventNames) {
27
+ if (el.style[name] !== undefined) {
28
+ return { end: transEndEventNames[name] }
29
+ }
30
+ }
31
+
32
+ return false // explicit for ie8 ( ._.)
33
+ }
34
+
35
+ // http://blog.alexmaccaw.com/css-transitions
36
+ $.fn.emulateTransitionEnd = function (duration) {
37
+ var called = false
38
+ var $el = this
39
+ $(this).one('bsTransitionEnd', function () { called = true })
40
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
41
+ setTimeout(callback, duration)
42
+ return this
43
+ }
44
+
45
+ $(function () {
46
+ $.support.transition = transitionEnd()
47
+
48
+ if (!$.support.transition) return
49
+
50
+ $.event.special.bsTransitionEnd = {
51
+ bindType: $.support.transition.end,
52
+ delegateType: $.support.transition.end,
53
+ handle: function (e) {
54
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
55
+ }
56
+ }
57
+ })
58
+
59
+ }(jQuery);
@@ -0,0 +1,12 @@
1
+ //= require bootstrap/collapse
2
+ //= require bootstrap/modal
3
+ //= require bootstrap/button
4
+ //= require bootstrap/affix
5
+ //= require bootstrap/tab
6
+ //= require bootstrap/alert
7
+ //= require bootstrap/transition
8
+ //= require bootstrap/tooltip
9
+ //= require bootstrap/popover
10
+ //= require bootstrap/scrollspy
11
+ //= require bootstrap/dropdown
12
+ //= require bootstrap/carousel