fennec 2.0.6 → 2.0.7
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.
- data/fennec.gemspec +3 -3
- data/lib/fennec/version.rb +1 -1
- data/vendor/assets/javascripts/application.js +184 -0
- data/vendor/assets/javascripts/bootstrap-alert.js +28 -32
- data/vendor/assets/javascripts/bootstrap-button.js +29 -33
- data/vendor/assets/javascripts/bootstrap-carousel.js +27 -19
- data/vendor/assets/javascripts/bootstrap-collapse.js +45 -26
- data/vendor/assets/javascripts/bootstrap-dropdown.js +18 -10
- data/vendor/assets/javascripts/bootstrap-modal.js +25 -17
- data/vendor/assets/javascripts/bootstrap-popover.js +13 -10
- data/vendor/assets/javascripts/bootstrap-scrollspy.js +44 -18
- data/vendor/assets/javascripts/bootstrap-tab.js +12 -7
- data/vendor/assets/javascripts/bootstrap-tooltip.js +40 -35
- data/vendor/assets/javascripts/bootstrap-transition.js +30 -20
- data/vendor/assets/javascripts/bootstrap-typeahead.js +24 -10
- data/vendor/assets/javascripts/bootstrap.js +336 -237
- data/vendor/assets/javascripts/bootstrap.min.js +1 -1
- data/vendor/assets/javascripts/google-code-prettify/prettify.css +30 -0
- data/vendor/assets/javascripts/google-code-prettify/prettify.js +28 -0
- data/vendor/assets/javascripts/jquery.js +9252 -0
- data/vendor/assets/stylesheets/bootstrap-responsive.css +10 -3
- data/vendor/assets/stylesheets/bootstrap.css +130 -107
- data/vendor/assets/stylesheets/docs.css +7 -5
- metadata +44 -14
data/fennec.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency "railties", "~> 3.
|
21
|
+
s.add_dependency "railties", "~> 3.2"
|
22
22
|
s.add_dependency "thor", "~> 0.14"
|
23
|
-
s.add_development_dependency "bundler", "~> 1.
|
24
|
-
s.add_development_dependency "rails", "~> 3.
|
23
|
+
s.add_development_dependency "bundler", "~> 1.1.4"
|
24
|
+
s.add_development_dependency "rails", "~> 3.2"
|
25
25
|
end
|
data/lib/fennec/version.rb
CHANGED
@@ -0,0 +1,184 @@
|
|
1
|
+
// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
|
2
|
+
// IT'S ALL JUST JUNK FOR OUR DOCS!
|
3
|
+
// ++++++++++++++++++++++++++++++++++++++++++
|
4
|
+
|
5
|
+
!function ($) {
|
6
|
+
|
7
|
+
$(function(){
|
8
|
+
|
9
|
+
// Disable certain links in docs
|
10
|
+
$('section [href^=#]').click(function (e) {
|
11
|
+
e.preventDefault()
|
12
|
+
})
|
13
|
+
|
14
|
+
// make code pretty
|
15
|
+
window.prettyPrint && prettyPrint()
|
16
|
+
|
17
|
+
// add-ons
|
18
|
+
$('.add-on :checkbox').on('click', function () {
|
19
|
+
var $this = $(this)
|
20
|
+
, method = $this.attr('checked') ? 'addClass' : 'removeClass'
|
21
|
+
$(this).parents('.add-on')[method]('active')
|
22
|
+
})
|
23
|
+
|
24
|
+
// position static twipsies for components page
|
25
|
+
if ($(".twipsies a").length) {
|
26
|
+
$(window).on('load resize', function () {
|
27
|
+
$(".twipsies a").each(function () {
|
28
|
+
$(this)
|
29
|
+
.tooltip({
|
30
|
+
placement: $(this).attr('title')
|
31
|
+
, trigger: 'manual'
|
32
|
+
})
|
33
|
+
.tooltip('show')
|
34
|
+
})
|
35
|
+
})
|
36
|
+
}
|
37
|
+
|
38
|
+
// add tipsies to grid for scaffolding
|
39
|
+
if ($('#grid-system').length) {
|
40
|
+
$('#grid-system').tooltip({
|
41
|
+
selector: '.show-grid > div'
|
42
|
+
, title: function () { return $(this).width() + 'px' }
|
43
|
+
})
|
44
|
+
}
|
45
|
+
|
46
|
+
// fix sub nav on scroll
|
47
|
+
var $win = $(window)
|
48
|
+
, $nav = $('.subnav')
|
49
|
+
, navTop = $('.subnav').length && $('.subnav').offset().top - 40
|
50
|
+
, isFixed = 0
|
51
|
+
|
52
|
+
processScroll()
|
53
|
+
|
54
|
+
// hack sad times - holdover until rewrite for 2.1
|
55
|
+
$nav.on('click', function () {
|
56
|
+
if (!isFixed) setTimeout(function () { $win.scrollTop($win.scrollTop() - 47) }, 10)
|
57
|
+
})
|
58
|
+
|
59
|
+
$win.on('scroll', processScroll)
|
60
|
+
|
61
|
+
function processScroll() {
|
62
|
+
var i, scrollTop = $win.scrollTop()
|
63
|
+
if (scrollTop >= navTop && !isFixed) {
|
64
|
+
isFixed = 1
|
65
|
+
$nav.addClass('subnav-fixed')
|
66
|
+
} else if (scrollTop <= navTop && isFixed) {
|
67
|
+
isFixed = 0
|
68
|
+
$nav.removeClass('subnav-fixed')
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
// tooltip demo
|
73
|
+
$('.tooltip-demo.well').tooltip({
|
74
|
+
selector: "a[rel=tooltip]"
|
75
|
+
})
|
76
|
+
|
77
|
+
$('.tooltip-test').tooltip()
|
78
|
+
$('.popover-test').popover()
|
79
|
+
|
80
|
+
// popover demo
|
81
|
+
$("a[rel=popover]")
|
82
|
+
.popover()
|
83
|
+
.click(function(e) {
|
84
|
+
e.preventDefault()
|
85
|
+
})
|
86
|
+
|
87
|
+
// button state demo
|
88
|
+
$('#fat-btn')
|
89
|
+
.click(function () {
|
90
|
+
var btn = $(this)
|
91
|
+
btn.button('loading')
|
92
|
+
setTimeout(function () {
|
93
|
+
btn.button('reset')
|
94
|
+
}, 3000)
|
95
|
+
})
|
96
|
+
|
97
|
+
// carousel demo
|
98
|
+
$('#myCarousel').carousel()
|
99
|
+
|
100
|
+
// javascript build logic
|
101
|
+
var inputsComponent = $("#components.download input")
|
102
|
+
, inputsPlugin = $("#plugins.download input")
|
103
|
+
, inputsVariables = $("#variables.download input")
|
104
|
+
|
105
|
+
// toggle all plugin checkboxes
|
106
|
+
$('#components.download .toggle-all').on('click', function (e) {
|
107
|
+
e.preventDefault()
|
108
|
+
inputsComponent.attr('checked', !inputsComponent.is(':checked'))
|
109
|
+
})
|
110
|
+
|
111
|
+
$('#plugins.download .toggle-all').on('click', function (e) {
|
112
|
+
e.preventDefault()
|
113
|
+
inputsPlugin.attr('checked', !inputsPlugin.is(':checked'))
|
114
|
+
})
|
115
|
+
|
116
|
+
$('#variables.download .toggle-all').on('click', function (e) {
|
117
|
+
e.preventDefault()
|
118
|
+
inputsVariables.val('')
|
119
|
+
})
|
120
|
+
|
121
|
+
// request built javascript
|
122
|
+
$('.download-btn').on('click', function () {
|
123
|
+
|
124
|
+
var css = $("#components.download input:checked")
|
125
|
+
.map(function () { return this.value })
|
126
|
+
.toArray()
|
127
|
+
, js = $("#plugins.download input:checked")
|
128
|
+
.map(function () { return this.value })
|
129
|
+
.toArray()
|
130
|
+
, vars = {}
|
131
|
+
, img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png']
|
132
|
+
|
133
|
+
$("#variables.download input")
|
134
|
+
.each(function () {
|
135
|
+
$(this).val() && (vars[ $(this).prev().text() ] = $(this).val())
|
136
|
+
})
|
137
|
+
|
138
|
+
$.ajax({
|
139
|
+
type: 'POST'
|
140
|
+
, url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com'
|
141
|
+
, dataType: 'jsonpi'
|
142
|
+
, params: {
|
143
|
+
js: js
|
144
|
+
, css: css
|
145
|
+
, vars: vars
|
146
|
+
, img: img
|
147
|
+
}
|
148
|
+
})
|
149
|
+
})
|
150
|
+
})
|
151
|
+
|
152
|
+
// Modified from the original jsonpi https://github.com/benvinegar/jquery-jsonpi
|
153
|
+
$.ajaxTransport('jsonpi', function(opts, originalOptions, jqXHR) {
|
154
|
+
var url = opts.url;
|
155
|
+
|
156
|
+
return {
|
157
|
+
send: function(_, completeCallback) {
|
158
|
+
var name = 'jQuery_iframe_' + jQuery.now()
|
159
|
+
, iframe, form
|
160
|
+
|
161
|
+
iframe = $('<iframe>')
|
162
|
+
.attr('name', name)
|
163
|
+
.appendTo('head')
|
164
|
+
|
165
|
+
form = $('<form>')
|
166
|
+
.attr('method', opts.type) // GET or POST
|
167
|
+
.attr('action', url)
|
168
|
+
.attr('target', name)
|
169
|
+
|
170
|
+
$.each(opts.params, function(k, v) {
|
171
|
+
|
172
|
+
$('<input>')
|
173
|
+
.attr('type', 'hidden')
|
174
|
+
.attr('name', k)
|
175
|
+
.attr('value', typeof v == 'string' ? v : JSON.stringify(v))
|
176
|
+
.appendTo(form)
|
177
|
+
})
|
178
|
+
|
179
|
+
form.appendTo('body').submit()
|
180
|
+
}
|
181
|
+
}
|
182
|
+
})
|
183
|
+
|
184
|
+
}(window.jQuery)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* ==========================================================
|
2
|
-
* bootstrap-alert.js v2.0.
|
2
|
+
* bootstrap-alert.js v2.0.4
|
3
3
|
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
4
4
|
* ==========================================================
|
5
5
|
* Copyright 2012 Twitter, Inc.
|
@@ -18,61 +18,57 @@
|
|
18
18
|
* ========================================================== */
|
19
19
|
|
20
20
|
|
21
|
-
!function(
|
21
|
+
!function ($) {
|
22
|
+
|
23
|
+
"use strict"; // jshint ;_;
|
22
24
|
|
23
|
-
"use strict"
|
24
25
|
|
25
26
|
/* ALERT CLASS DEFINITION
|
26
27
|
* ====================== */
|
27
28
|
|
28
29
|
var dismiss = '[data-dismiss="alert"]'
|
29
|
-
, Alert = function (
|
30
|
+
, Alert = function (el) {
|
30
31
|
$(el).on('click', dismiss, this.close)
|
31
32
|
}
|
32
33
|
|
33
|
-
Alert.prototype = {
|
34
|
-
|
35
|
-
|
34
|
+
Alert.prototype.close = function (e) {
|
35
|
+
var $this = $(this)
|
36
|
+
, selector = $this.attr('data-target')
|
37
|
+
, $parent
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
if (!selector) {
|
40
|
+
selector = $this.attr('href')
|
41
|
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
42
|
+
}
|
41
43
|
|
42
|
-
|
43
|
-
selector = $this.attr('href')
|
44
|
-
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
45
|
-
}
|
44
|
+
$parent = $(selector)
|
46
45
|
|
47
|
-
|
48
|
-
$parent.trigger('close')
|
46
|
+
e && e.preventDefault()
|
49
47
|
|
50
|
-
|
48
|
+
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
|
51
49
|
|
52
|
-
|
50
|
+
$parent.trigger(e = $.Event('close'))
|
53
51
|
|
54
|
-
|
55
|
-
.trigger('close')
|
56
|
-
.removeClass('in')
|
52
|
+
if (e.isDefaultPrevented()) return
|
57
53
|
|
58
|
-
|
59
|
-
$parent
|
60
|
-
.trigger('closed')
|
61
|
-
.remove()
|
62
|
-
}
|
54
|
+
$parent.removeClass('in')
|
63
55
|
|
64
|
-
|
65
|
-
|
66
|
-
|
56
|
+
function removeElement() {
|
57
|
+
$parent
|
58
|
+
.trigger('closed')
|
59
|
+
.remove()
|
67
60
|
}
|
68
61
|
|
62
|
+
$.support.transition && $parent.hasClass('fade') ?
|
63
|
+
$parent.on($.support.transition.end, removeElement) :
|
64
|
+
removeElement()
|
69
65
|
}
|
70
66
|
|
71
67
|
|
72
68
|
/* ALERT PLUGIN DEFINITION
|
73
69
|
* ======================= */
|
74
70
|
|
75
|
-
$.fn.alert = function (
|
71
|
+
$.fn.alert = function (option) {
|
76
72
|
return this.each(function () {
|
77
73
|
var $this = $(this)
|
78
74
|
, data = $this.data('alert')
|
@@ -91,4 +87,4 @@
|
|
91
87
|
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
|
92
88
|
})
|
93
89
|
|
94
|
-
}(
|
90
|
+
}(window.jQuery);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* ============================================================
|
2
|
-
* bootstrap-button.js v2.0.
|
2
|
+
* bootstrap-button.js v2.0.4
|
3
3
|
* http://twitter.github.com/bootstrap/javascript.html#buttons
|
4
4
|
* ============================================================
|
5
5
|
* Copyright 2012 Twitter, Inc.
|
@@ -17,58 +17,54 @@
|
|
17
17
|
* limitations under the License.
|
18
18
|
* ============================================================ */
|
19
19
|
|
20
|
-
!function( $ ){
|
21
20
|
|
22
|
-
|
21
|
+
!function ($) {
|
22
|
+
|
23
|
+
"use strict"; // jshint ;_;
|
24
|
+
|
23
25
|
|
24
26
|
/* BUTTON PUBLIC CLASS DEFINITION
|
25
27
|
* ============================== */
|
26
28
|
|
27
|
-
var Button = function (
|
29
|
+
var Button = function (element, options) {
|
28
30
|
this.$element = $(element)
|
29
31
|
this.options = $.extend({}, $.fn.button.defaults, options)
|
30
32
|
}
|
31
33
|
|
32
|
-
Button.prototype = {
|
33
|
-
|
34
|
-
|
34
|
+
Button.prototype.setState = function (state) {
|
35
|
+
var d = 'disabled'
|
36
|
+
, $el = this.$element
|
37
|
+
, data = $el.data()
|
38
|
+
, val = $el.is('input') ? 'val' : 'html'
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
, $el = this.$element
|
39
|
-
, data = $el.data()
|
40
|
-
, val = $el.is('input') ? 'val' : 'html'
|
40
|
+
state = state + 'Text'
|
41
|
+
data.resetText || $el.data('resetText', $el[val]())
|
41
42
|
|
42
|
-
|
43
|
-
data.resetText || $el.data('resetText', $el[val]())
|
43
|
+
$el[val](data[state] || this.options[state])
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
}, 0)
|
53
|
-
}
|
54
|
-
|
55
|
-
, toggle: function () {
|
56
|
-
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
|
45
|
+
// push to event loop to allow forms to submit
|
46
|
+
setTimeout(function () {
|
47
|
+
state == 'loadingText' ?
|
48
|
+
$el.addClass(d).attr(d, d) :
|
49
|
+
$el.removeClass(d).removeAttr(d)
|
50
|
+
}, 0)
|
51
|
+
}
|
57
52
|
|
58
|
-
|
59
|
-
|
60
|
-
.removeClass('active')
|
53
|
+
Button.prototype.toggle = function () {
|
54
|
+
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
|
61
55
|
|
62
|
-
|
63
|
-
|
56
|
+
$parent && $parent
|
57
|
+
.find('.active')
|
58
|
+
.removeClass('active')
|
64
59
|
|
60
|
+
this.$element.toggleClass('active')
|
65
61
|
}
|
66
62
|
|
67
63
|
|
68
64
|
/* BUTTON PLUGIN DEFINITION
|
69
65
|
* ======================== */
|
70
66
|
|
71
|
-
$.fn.button = function (
|
67
|
+
$.fn.button = function (option) {
|
72
68
|
return this.each(function () {
|
73
69
|
var $this = $(this)
|
74
70
|
, data = $this.data('button')
|
@@ -97,4 +93,4 @@
|
|
97
93
|
})
|
98
94
|
})
|
99
95
|
|
100
|
-
}(
|
96
|
+
}(window.jQuery);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* ==========================================================
|
2
|
-
* bootstrap-carousel.js v2.0.
|
2
|
+
* bootstrap-carousel.js v2.0.4
|
3
3
|
* http://twitter.github.com/bootstrap/javascript.html#carousel
|
4
4
|
* ==========================================================
|
5
5
|
* Copyright 2012 Twitter, Inc.
|
@@ -18,16 +18,17 @@
|
|
18
18
|
* ========================================================== */
|
19
19
|
|
20
20
|
|
21
|
-
!function(
|
21
|
+
!function ($) {
|
22
|
+
|
23
|
+
"use strict"; // jshint ;_;
|
22
24
|
|
23
|
-
"use strict"
|
24
25
|
|
25
26
|
/* CAROUSEL CLASS DEFINITION
|
26
27
|
* ========================= */
|
27
28
|
|
28
29
|
var Carousel = function (element, options) {
|
29
30
|
this.$element = $(element)
|
30
|
-
this.options =
|
31
|
+
this.options = options
|
31
32
|
this.options.slide && this.slide(this.options.slide)
|
32
33
|
this.options.pause == 'hover' && this.$element
|
33
34
|
.on('mouseenter', $.proxy(this.pause, this))
|
@@ -36,8 +37,11 @@
|
|
36
37
|
|
37
38
|
Carousel.prototype = {
|
38
39
|
|
39
|
-
cycle: function () {
|
40
|
-
|
40
|
+
cycle: function (e) {
|
41
|
+
if (!e) this.paused = false
|
42
|
+
this.options.interval
|
43
|
+
&& !this.paused
|
44
|
+
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
41
45
|
return this
|
42
46
|
}
|
43
47
|
|
@@ -62,7 +66,8 @@
|
|
62
66
|
return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
|
63
67
|
}
|
64
68
|
|
65
|
-
, pause: function () {
|
69
|
+
, pause: function (e) {
|
70
|
+
if (!e) this.paused = true
|
66
71
|
clearInterval(this.interval)
|
67
72
|
this.interval = null
|
68
73
|
return this
|
@@ -85,6 +90,7 @@
|
|
85
90
|
, direction = type == 'next' ? 'left' : 'right'
|
86
91
|
, fallback = type == 'next' ? 'first' : 'last'
|
87
92
|
, that = this
|
93
|
+
, e = $.Event('slide')
|
88
94
|
|
89
95
|
this.sliding = true
|
90
96
|
|
@@ -94,24 +100,26 @@
|
|
94
100
|
|
95
101
|
if ($next.hasClass('active')) return
|
96
102
|
|
97
|
-
if (
|
98
|
-
this.$element.trigger(
|
99
|
-
|
100
|
-
$next.addClass('active')
|
101
|
-
this.sliding = false
|
102
|
-
this.$element.trigger('slid')
|
103
|
-
} else {
|
103
|
+
if ($.support.transition && this.$element.hasClass('slide')) {
|
104
|
+
this.$element.trigger(e)
|
105
|
+
if (e.isDefaultPrevented()) return
|
104
106
|
$next.addClass(type)
|
105
107
|
$next[0].offsetWidth // force reflow
|
106
108
|
$active.addClass(direction)
|
107
109
|
$next.addClass(direction)
|
108
|
-
this.$element.trigger('slide')
|
109
110
|
this.$element.one($.support.transition.end, function () {
|
110
111
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
111
112
|
$active.removeClass(['active', direction].join(' '))
|
112
113
|
that.sliding = false
|
113
114
|
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
114
115
|
})
|
116
|
+
} else {
|
117
|
+
this.$element.trigger(e)
|
118
|
+
if (e.isDefaultPrevented()) return
|
119
|
+
$active.removeClass('active')
|
120
|
+
$next.addClass('active')
|
121
|
+
this.sliding = false
|
122
|
+
this.$element.trigger('slid')
|
115
123
|
}
|
116
124
|
|
117
125
|
isCycling && this.cycle()
|
@@ -125,15 +133,15 @@
|
|
125
133
|
/* CAROUSEL PLUGIN DEFINITION
|
126
134
|
* ========================== */
|
127
135
|
|
128
|
-
$.fn.carousel = function (
|
136
|
+
$.fn.carousel = function (option) {
|
129
137
|
return this.each(function () {
|
130
138
|
var $this = $(this)
|
131
139
|
, data = $this.data('carousel')
|
132
|
-
, options = typeof option == 'object' && option
|
140
|
+
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
|
133
141
|
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
134
142
|
if (typeof option == 'number') data.to(option)
|
135
143
|
else if (typeof option == 'string' || (option = options.slide)) data[option]()
|
136
|
-
else data.cycle()
|
144
|
+
else if (options.interval) data.cycle()
|
137
145
|
})
|
138
146
|
}
|
139
147
|
|
@@ -158,4 +166,4 @@
|
|
158
166
|
})
|
159
167
|
})
|
160
168
|
|
161
|
-
}(
|
169
|
+
}(window.jQuery);
|