genus 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 (99) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +29 -0
  4. data/Rakefile +2 -0
  5. data/app/assets/fonts/FontAwesome.otf +0 -0
  6. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  7. data/app/assets/fonts/fontawesome-webfont.svg +520 -0
  8. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  9. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  10. data/app/assets/javascripts/bootstrap/affix.js +142 -0
  11. data/app/assets/javascripts/bootstrap/alert.js +92 -0
  12. data/app/assets/javascripts/bootstrap/button.js +110 -0
  13. data/app/assets/javascripts/bootstrap/carousel.js +223 -0
  14. data/app/assets/javascripts/bootstrap/collapse.js +170 -0
  15. data/app/assets/javascripts/bootstrap/dropdown.js +151 -0
  16. data/app/assets/javascripts/bootstrap/modal.js +280 -0
  17. data/app/assets/javascripts/bootstrap/popover.js +113 -0
  18. data/app/assets/javascripts/bootstrap/scrollspy.js +170 -0
  19. data/app/assets/javascripts/bootstrap/tab.js +128 -0
  20. data/app/assets/javascripts/bootstrap/tooltip.js +457 -0
  21. data/app/assets/javascripts/bootstrap/transition.js +59 -0
  22. data/app/assets/javascripts/bootstrap.js +12 -0
  23. data/app/assets/javascripts/genus.js.coffee +4 -0
  24. data/app/assets/stylesheets/bootstrap/_alerts.scss +68 -0
  25. data/app/assets/stylesheets/bootstrap/_badges.scss +57 -0
  26. data/app/assets/stylesheets/bootstrap/_breadcrumbs.scss +26 -0
  27. data/app/assets/stylesheets/bootstrap/_button-groups.scss +240 -0
  28. data/app/assets/stylesheets/bootstrap/_buttons.scss +157 -0
  29. data/app/assets/stylesheets/bootstrap/_carousel.scss +243 -0
  30. data/app/assets/stylesheets/bootstrap/_close.scss +35 -0
  31. data/app/assets/stylesheets/bootstrap/_code.scss +68 -0
  32. data/app/assets/stylesheets/bootstrap/_component-animations.scss +35 -0
  33. data/app/assets/stylesheets/bootstrap/_dropdowns.scss +215 -0
  34. data/app/assets/stylesheets/bootstrap/_forms.scss +538 -0
  35. data/app/assets/stylesheets/bootstrap/_glyphicons.scss +237 -0
  36. data/app/assets/stylesheets/bootstrap/_grid.scss +84 -0
  37. data/app/assets/stylesheets/bootstrap/_input-groups.scss +166 -0
  38. data/app/assets/stylesheets/bootstrap/_jumbotron.scss +48 -0
  39. data/app/assets/stylesheets/bootstrap/_labels.scss +66 -0
  40. data/app/assets/stylesheets/bootstrap/_list-group.scss +131 -0
  41. data/app/assets/stylesheets/bootstrap/_media.scss +56 -0
  42. data/app/assets/stylesheets/bootstrap/_mixins.scss +39 -0
  43. data/app/assets/stylesheets/bootstrap/_modals.scss +150 -0
  44. data/app/assets/stylesheets/bootstrap/_navbar.scss +659 -0
  45. data/app/assets/stylesheets/bootstrap/_navs.scss +242 -0
  46. data/app/assets/stylesheets/bootstrap/_normalize.scss +425 -0
  47. data/app/assets/stylesheets/bootstrap/_pager.scss +55 -0
  48. data/app/assets/stylesheets/bootstrap/_pagination.scss +88 -0
  49. data/app/assets/stylesheets/bootstrap/_panels.scss +243 -0
  50. data/app/assets/stylesheets/bootstrap/_popovers.scss +133 -0
  51. data/app/assets/stylesheets/bootstrap/_print.scss +101 -0
  52. data/app/assets/stylesheets/bootstrap/_progress-bars.scss +105 -0
  53. data/app/assets/stylesheets/bootstrap/_responsive-embed.scss +34 -0
  54. data/app/assets/stylesheets/bootstrap/_responsive-utilities.scss +174 -0
  55. data/app/assets/stylesheets/bootstrap/_scaffolding.scss +150 -0
  56. data/app/assets/stylesheets/bootstrap/_tables.scss +233 -0
  57. data/app/assets/stylesheets/bootstrap/_theme.scss +258 -0
  58. data/app/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
  59. data/app/assets/stylesheets/bootstrap/_tooltip.scss +95 -0
  60. data/app/assets/stylesheets/bootstrap/_type.scss +304 -0
  61. data/app/assets/stylesheets/bootstrap/_utilities.scss +57 -0
  62. data/app/assets/stylesheets/bootstrap/_variables.scss +850 -0
  63. data/app/assets/stylesheets/bootstrap/_wells.scss +29 -0
  64. data/app/assets/stylesheets/bootstrap/bootstrap.scss +50 -0
  65. data/app/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
  66. data/app/assets/stylesheets/bootstrap/mixins/_background-variant.scss +11 -0
  67. data/app/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  68. data/app/assets/stylesheets/bootstrap/mixins/_buttons.scss +50 -0
  69. data/app/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  70. data/app/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  71. data/app/assets/stylesheets/bootstrap/mixins/_forms.scss +84 -0
  72. data/app/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
  73. data/app/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  74. data/app/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  75. data/app/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  76. data/app/assets/stylesheets/bootstrap/mixins/_image.scss +34 -0
  77. data/app/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  78. data/app/assets/stylesheets/bootstrap/mixins/_list-group.scss +31 -0
  79. data/app/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  80. data/app/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  81. data/app/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
  82. data/app/assets/stylesheets/bootstrap/mixins/_pagination.scss +23 -0
  83. data/app/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
  84. data/app/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
  85. data/app/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  86. data/app/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  87. data/app/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
  88. data/app/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  89. data/app/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  90. data/app/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  91. data/app/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +11 -0
  92. data/app/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  93. data/app/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +219 -0
  94. data/app/assets/stylesheets/bootstrap.scss +50 -0
  95. data/app/assets/stylesheets/font-awesome.css.erb +1677 -0
  96. data/app/assets/stylesheets/genus.css.scss +15 -0
  97. data/lib/genus/version.rb +3 -0
  98. data/lib/genus.rb +6 -0
  99. metadata +211 -0
@@ -0,0 +1,457 @@
1
+ /* ========================================================================
2
+ * Bootstrap: tooltip.js v3.2.0
3
+ * http://getbootstrap.com/javascript/#tooltip
4
+ * Inspired by the original jQuery.tipsy by Jason Frame
5
+ * ========================================================================
6
+ * Copyright 2011-2014 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 =
19
+ this.options =
20
+ this.enabled =
21
+ this.timeout =
22
+ this.hoverState =
23
+ this.$element = null
24
+
25
+ this.init('tooltip', element, options)
26
+ }
27
+
28
+ Tooltip.VERSION = '3.2.0'
29
+
30
+ Tooltip.DEFAULTS = {
31
+ animation: true,
32
+ placement: 'top',
33
+ selector: false,
34
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
35
+ trigger: 'hover focus',
36
+ title: '',
37
+ delay: 0,
38
+ html: false,
39
+ container: false,
40
+ viewport: {
41
+ selector: 'body',
42
+ padding: 0
43
+ }
44
+ }
45
+
46
+ Tooltip.prototype.init = function (type, element, options) {
47
+ this.enabled = true
48
+ this.type = type
49
+ this.$element = $(element)
50
+ this.options = this.getOptions(options)
51
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
52
+
53
+ var triggers = this.options.trigger.split(' ')
54
+
55
+ for (var i = triggers.length; i--;) {
56
+ var trigger = triggers[i]
57
+
58
+ if (trigger == 'click') {
59
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
60
+ } else if (trigger != 'manual') {
61
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
62
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
63
+
64
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
65
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
66
+ }
67
+ }
68
+
69
+ this.options.selector ?
70
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
71
+ this.fixTitle()
72
+ }
73
+
74
+ Tooltip.prototype.getDefaults = function () {
75
+ return Tooltip.DEFAULTS
76
+ }
77
+
78
+ Tooltip.prototype.getOptions = function (options) {
79
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
80
+
81
+ if (options.delay && typeof options.delay == 'number') {
82
+ options.delay = {
83
+ show: options.delay,
84
+ hide: options.delay
85
+ }
86
+ }
87
+
88
+ return options
89
+ }
90
+
91
+ Tooltip.prototype.getDelegateOptions = function () {
92
+ var options = {}
93
+ var defaults = this.getDefaults()
94
+
95
+ this._options && $.each(this._options, function (key, value) {
96
+ if (defaults[key] != value) options[key] = value
97
+ })
98
+
99
+ return options
100
+ }
101
+
102
+ Tooltip.prototype.enter = function (obj) {
103
+ var self = obj instanceof this.constructor ?
104
+ obj : $(obj.currentTarget).data('bs.' + this.type)
105
+
106
+ if (!self) {
107
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
108
+ $(obj.currentTarget).data('bs.' + this.type, self)
109
+ }
110
+
111
+ clearTimeout(self.timeout)
112
+
113
+ self.hoverState = 'in'
114
+
115
+ if (!self.options.delay || !self.options.delay.show) return self.show()
116
+
117
+ self.timeout = setTimeout(function () {
118
+ if (self.hoverState == 'in') self.show()
119
+ }, self.options.delay.show)
120
+ }
121
+
122
+ Tooltip.prototype.leave = function (obj) {
123
+ var self = obj instanceof this.constructor ?
124
+ obj : $(obj.currentTarget).data('bs.' + this.type)
125
+
126
+ if (!self) {
127
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
128
+ $(obj.currentTarget).data('bs.' + this.type, self)
129
+ }
130
+
131
+ clearTimeout(self.timeout)
132
+
133
+ self.hoverState = 'out'
134
+
135
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
136
+
137
+ self.timeout = setTimeout(function () {
138
+ if (self.hoverState == 'out') self.hide()
139
+ }, self.options.delay.hide)
140
+ }
141
+
142
+ Tooltip.prototype.show = function () {
143
+ var e = $.Event('show.bs.' + this.type)
144
+
145
+ if (this.hasContent() && this.enabled) {
146
+ this.$element.trigger(e)
147
+
148
+ var inDom = $.contains(document.documentElement, this.$element[0])
149
+ if (e.isDefaultPrevented() || !inDom) return
150
+ var that = this
151
+
152
+ var $tip = this.tip()
153
+
154
+ var tipId = this.getUID(this.type)
155
+
156
+ this.setContent()
157
+ $tip.attr('id', tipId)
158
+ this.$element.attr('aria-describedby', tipId)
159
+
160
+ if (this.options.animation) $tip.addClass('fade')
161
+
162
+ var placement = typeof this.options.placement == 'function' ?
163
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
164
+ this.options.placement
165
+
166
+ var autoToken = /\s?auto?\s?/i
167
+ var autoPlace = autoToken.test(placement)
168
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
169
+
170
+ $tip
171
+ .detach()
172
+ .css({ top: 0, left: 0, display: 'block' })
173
+ .addClass(placement)
174
+ .data('bs.' + this.type, this)
175
+
176
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
177
+
178
+ var pos = this.getPosition()
179
+ var actualWidth = $tip[0].offsetWidth
180
+ var actualHeight = $tip[0].offsetHeight
181
+
182
+ if (autoPlace) {
183
+ var orgPlacement = placement
184
+ var $parent = this.$element.parent()
185
+ var parentDim = this.getPosition($parent)
186
+
187
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
188
+ placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
189
+ placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
190
+ placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
191
+ placement
192
+
193
+ $tip
194
+ .removeClass(orgPlacement)
195
+ .addClass(placement)
196
+ }
197
+
198
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
199
+
200
+ this.applyPlacement(calculatedOffset, placement)
201
+
202
+ var complete = function () {
203
+ that.$element.trigger('shown.bs.' + that.type)
204
+ that.hoverState = null
205
+ }
206
+
207
+ $.support.transition && this.$tip.hasClass('fade') ?
208
+ $tip
209
+ .one('bsTransitionEnd', complete)
210
+ .emulateTransitionEnd(150) :
211
+ complete()
212
+ }
213
+ }
214
+
215
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
216
+ var $tip = this.tip()
217
+ var width = $tip[0].offsetWidth
218
+ var height = $tip[0].offsetHeight
219
+
220
+ // manually read margins because getBoundingClientRect includes difference
221
+ var marginTop = parseInt($tip.css('margin-top'), 10)
222
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
223
+
224
+ // we must check for NaN for ie 8/9
225
+ if (isNaN(marginTop)) marginTop = 0
226
+ if (isNaN(marginLeft)) marginLeft = 0
227
+
228
+ offset.top = offset.top + marginTop
229
+ offset.left = offset.left + marginLeft
230
+
231
+ // $.fn.offset doesn't round pixel values
232
+ // so we use setOffset directly with our own function B-0
233
+ $.offset.setOffset($tip[0], $.extend({
234
+ using: function (props) {
235
+ $tip.css({
236
+ top: Math.round(props.top),
237
+ left: Math.round(props.left)
238
+ })
239
+ }
240
+ }, offset), 0)
241
+
242
+ $tip.addClass('in')
243
+
244
+ // check to see if placing tip in new offset caused the tip to resize itself
245
+ var actualWidth = $tip[0].offsetWidth
246
+ var actualHeight = $tip[0].offsetHeight
247
+
248
+ if (placement == 'top' && actualHeight != height) {
249
+ offset.top = offset.top + height - actualHeight
250
+ }
251
+
252
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
253
+
254
+ if (delta.left) offset.left += delta.left
255
+ else offset.top += delta.top
256
+
257
+ var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
258
+ var arrowPosition = delta.left ? 'left' : 'top'
259
+ var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
260
+
261
+ $tip.offset(offset)
262
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
263
+ }
264
+
265
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
266
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
267
+ }
268
+
269
+ Tooltip.prototype.setContent = function () {
270
+ var $tip = this.tip()
271
+ var title = this.getTitle()
272
+
273
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
274
+ $tip.removeClass('fade in top bottom left right')
275
+ }
276
+
277
+ Tooltip.prototype.hide = function () {
278
+ var that = this
279
+ var $tip = this.tip()
280
+ var e = $.Event('hide.bs.' + this.type)
281
+
282
+ this.$element.removeAttr('aria-describedby')
283
+
284
+ function complete() {
285
+ if (that.hoverState != 'in') $tip.detach()
286
+ that.$element.trigger('hidden.bs.' + that.type)
287
+ }
288
+
289
+ this.$element.trigger(e)
290
+
291
+ if (e.isDefaultPrevented()) return
292
+
293
+ $tip.removeClass('in')
294
+
295
+ $.support.transition && this.$tip.hasClass('fade') ?
296
+ $tip
297
+ .one('bsTransitionEnd', complete)
298
+ .emulateTransitionEnd(150) :
299
+ complete()
300
+
301
+ this.hoverState = null
302
+
303
+ return this
304
+ }
305
+
306
+ Tooltip.prototype.fixTitle = function () {
307
+ var $e = this.$element
308
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
309
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
310
+ }
311
+ }
312
+
313
+ Tooltip.prototype.hasContent = function () {
314
+ return this.getTitle()
315
+ }
316
+
317
+ Tooltip.prototype.getPosition = function ($element) {
318
+ $element = $element || this.$element
319
+ var el = $element[0]
320
+ var isBody = el.tagName == 'BODY'
321
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
322
+ scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
323
+ width: isBody ? $(window).width() : $element.outerWidth(),
324
+ height: isBody ? $(window).height() : $element.outerHeight()
325
+ }, isBody ? { top: 0, left: 0 } : $element.offset())
326
+ }
327
+
328
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
329
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
330
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
331
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
332
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
333
+
334
+ }
335
+
336
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
337
+ var delta = { top: 0, left: 0 }
338
+ if (!this.$viewport) return delta
339
+
340
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
341
+ var viewportDimensions = this.getPosition(this.$viewport)
342
+
343
+ if (/right|left/.test(placement)) {
344
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
345
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
346
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
347
+ delta.top = viewportDimensions.top - topEdgeOffset
348
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
349
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
350
+ }
351
+ } else {
352
+ var leftEdgeOffset = pos.left - viewportPadding
353
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
354
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
355
+ delta.left = viewportDimensions.left - leftEdgeOffset
356
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
357
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
358
+ }
359
+ }
360
+
361
+ return delta
362
+ }
363
+
364
+ Tooltip.prototype.getTitle = function () {
365
+ var title
366
+ var $e = this.$element
367
+ var o = this.options
368
+
369
+ title = $e.attr('data-original-title')
370
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
371
+
372
+ return title
373
+ }
374
+
375
+ Tooltip.prototype.getUID = function (prefix) {
376
+ do prefix += ~~(Math.random() * 1000000)
377
+ while (document.getElementById(prefix))
378
+ return prefix
379
+ }
380
+
381
+ Tooltip.prototype.tip = function () {
382
+ return (this.$tip = this.$tip || $(this.options.template))
383
+ }
384
+
385
+ Tooltip.prototype.arrow = function () {
386
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
387
+ }
388
+
389
+ Tooltip.prototype.validate = function () {
390
+ if (!this.$element[0].parentNode) {
391
+ this.hide()
392
+ this.$element = null
393
+ this.options = null
394
+ }
395
+ }
396
+
397
+ Tooltip.prototype.enable = function () {
398
+ this.enabled = true
399
+ }
400
+
401
+ Tooltip.prototype.disable = function () {
402
+ this.enabled = false
403
+ }
404
+
405
+ Tooltip.prototype.toggleEnabled = function () {
406
+ this.enabled = !this.enabled
407
+ }
408
+
409
+ Tooltip.prototype.toggle = function (e) {
410
+ var self = this
411
+ if (e) {
412
+ self = $(e.currentTarget).data('bs.' + this.type)
413
+ if (!self) {
414
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
415
+ $(e.currentTarget).data('bs.' + this.type, self)
416
+ }
417
+ }
418
+
419
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
420
+ }
421
+
422
+ Tooltip.prototype.destroy = function () {
423
+ clearTimeout(this.timeout)
424
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
425
+ }
426
+
427
+
428
+ // TOOLTIP PLUGIN DEFINITION
429
+ // =========================
430
+
431
+ function Plugin(option) {
432
+ return this.each(function () {
433
+ var $this = $(this)
434
+ var data = $this.data('bs.tooltip')
435
+ var options = typeof option == 'object' && option
436
+
437
+ if (!data && option == 'destroy') return
438
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
439
+ if (typeof option == 'string') data[option]()
440
+ })
441
+ }
442
+
443
+ var old = $.fn.tooltip
444
+
445
+ $.fn.tooltip = Plugin
446
+ $.fn.tooltip.Constructor = Tooltip
447
+
448
+
449
+ // TOOLTIP NO CONFLICT
450
+ // ===================
451
+
452
+ $.fn.tooltip.noConflict = function () {
453
+ $.fn.tooltip = old
454
+ return this
455
+ }
456
+
457
+ }(jQuery);
@@ -0,0 +1,59 @@
1
+ /* ========================================================================
2
+ * Bootstrap: transition.js v3.2.0
3
+ * http://getbootstrap.com/javascript/#transitions
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
+ // 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/affix
2
+ //= require ./bootstrap/alert
3
+ //= require ./bootstrap/button
4
+ //= require ./bootstrap/carousel
5
+ //= require ./bootstrap/collapse
6
+ //= require ./bootstrap/dropdown
7
+ //= require ./bootstrap/tab
8
+ //= require ./bootstrap/transition
9
+ //= require ./bootstrap/scrollspy
10
+ //= require ./bootstrap/modal
11
+ //= require ./bootstrap/tooltip
12
+ //= require ./bootstrap/popover
@@ -0,0 +1,4 @@
1
+ # genus.js.coffee -- Imports required CSS/SCSS files
2
+ # for a simple one-line import in the end application.
3
+ #
4
+ #= require bootstrap
@@ -0,0 +1,68 @@
1
+ //
2
+ // Alerts
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Base styles
7
+ // -------------------------
8
+
9
+ .alert {
10
+ padding: $alert-padding;
11
+ margin-bottom: $line-height-computed;
12
+ border: 1px solid transparent;
13
+ border-radius: $alert-border-radius;
14
+
15
+ // Headings for larger alerts
16
+ h4 {
17
+ margin-top: 0;
18
+ // Specified for the h4 to prevent conflicts of changing $headings-color
19
+ color: inherit;
20
+ }
21
+ // Provide class for links that match alerts
22
+ .alert-link {
23
+ font-weight: $alert-link-font-weight;
24
+ }
25
+
26
+ // Improve alignment and spacing of inner content
27
+ > p,
28
+ > ul {
29
+ margin-bottom: 0;
30
+ }
31
+ > p + p {
32
+ margin-top: 5px;
33
+ }
34
+ }
35
+
36
+ // Dismissible alerts
37
+ //
38
+ // Expand the right padding and account for the close button's positioning.
39
+
40
+ .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
41
+ .alert-dismissible {
42
+ padding-right: ($alert-padding + 20);
43
+
44
+ // Adjust close link position
45
+ .close {
46
+ position: relative;
47
+ top: -2px;
48
+ right: -21px;
49
+ color: inherit;
50
+ }
51
+ }
52
+
53
+ // Alternate styles
54
+ //
55
+ // Generate contextual modifier classes for colorizing the alert.
56
+
57
+ .alert-success {
58
+ @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);
59
+ }
60
+ .alert-info {
61
+ @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);
62
+ }
63
+ .alert-warning {
64
+ @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);
65
+ }
66
+ .alert-danger {
67
+ @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);
68
+ }
@@ -0,0 +1,57 @@
1
+ //
2
+ // Badges
3
+ // --------------------------------------------------
4
+
5
+
6
+ // Base class
7
+ .badge {
8
+ display: inline-block;
9
+ min-width: 10px;
10
+ padding: 3px 7px;
11
+ font-size: $font-size-small;
12
+ font-weight: $badge-font-weight;
13
+ color: $badge-color;
14
+ line-height: $badge-line-height;
15
+ vertical-align: baseline;
16
+ white-space: nowrap;
17
+ text-align: center;
18
+ background-color: $badge-bg;
19
+ border-radius: $badge-border-radius;
20
+
21
+ // Empty badges collapse automatically (not available in IE8)
22
+ &:empty {
23
+ display: none;
24
+ }
25
+
26
+ // Quick fix for badges in buttons
27
+ .btn & {
28
+ position: relative;
29
+ top: -1px;
30
+ }
31
+ .btn-xs & {
32
+ top: 0;
33
+ padding: 1px 5px;
34
+ }
35
+
36
+ // [converter] extracted a& to a.badge
37
+
38
+ // Account for badges in navs
39
+ a.list-group-item.active > &,
40
+ .nav-pills > .active > a > & {
41
+ color: $badge-active-color;
42
+ background-color: $badge-active-bg;
43
+ }
44
+ .nav-pills > li > a > & {
45
+ margin-left: 3px;
46
+ }
47
+ }
48
+
49
+ // Hover state, but only for links
50
+ a.badge {
51
+ &:hover,
52
+ &:focus {
53
+ color: $badge-link-hover-color;
54
+ text-decoration: none;
55
+ cursor: pointer;
56
+ }
57
+ }
@@ -0,0 +1,26 @@
1
+ //
2
+ // Breadcrumbs
3
+ // --------------------------------------------------
4
+
5
+
6
+ .breadcrumb {
7
+ padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal;
8
+ margin-bottom: $line-height-computed;
9
+ list-style: none;
10
+ background-color: $breadcrumb-bg;
11
+ border-radius: $border-radius-base;
12
+
13
+ > li {
14
+ display: inline-block;
15
+
16
+ + li:before {
17
+ content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18
+ padding: 0 5px;
19
+ color: $breadcrumb-color;
20
+ }
21
+ }
22
+
23
+ > .active {
24
+ color: $breadcrumb-active-color;
25
+ }
26
+ }