twigg-app 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/assets/javascripts/_bootstrap.js +7 -0
- data/assets/javascripts/_jquery.js +19 -0
- data/assets/javascripts/_tables.js +3 -0
- data/assets/javascripts/_views.js +10 -0
- data/assets/javascripts/application.js +9 -0
- data/{public/application.js → assets/javascripts/views/_commit_set_bar_chart.js} +32 -34
- data/assets/javascripts/views/_russia.js +61 -0
- data/assets/javascripts/views/_tags.js +56 -0
- data/assets/javascripts/views/_tags_word_cloud.js +51 -0
- data/assets/stylesheets/_bootstrap_overrides.scss +15 -0
- data/assets/stylesheets/_footer.scss +28 -0
- data/assets/stylesheets/_global.scss +14 -0
- data/assets/stylesheets/_tables.scss +20 -0
- data/assets/stylesheets/application.scss +10 -0
- data/assets/stylesheets/d3/_bar_chart.scss +25 -0
- data/assets/stylesheets/d3/_bubble_chart.scss +22 -0
- data/lib/twigg-app/app/routes.rb +4 -0
- data/lib/twigg-app/app/server.rb +78 -21
- data/lib/twigg-app/app/version.rb +1 -1
- data/public/vendor/bootstrap/Gruntfile.js +32 -10
- data/public/vendor/bootstrap/README.md +2 -0
- data/public/vendor/bootstrap/_config.yml +5 -10
- data/public/vendor/bootstrap/_includes/footer.html +2 -1
- data/public/vendor/bootstrap/_includes/nav-components.html +33 -31
- data/public/vendor/bootstrap/_includes/nav-css.html +32 -22
- data/public/vendor/bootstrap/_includes/nav-getting-started.html +17 -1
- data/public/vendor/bootstrap/_includes/nav-javascript.html +1 -1
- data/public/vendor/bootstrap/_includes/nav-main.html +1 -1
- data/public/vendor/bootstrap/_includes/social-buttons.html +1 -1
- data/public/vendor/bootstrap/_layouts/default.html +18 -14
- data/public/vendor/bootstrap/_layouts/home.html +9 -6
- data/public/vendor/bootstrap/assets/css/docs.css +584 -396
- data/public/vendor/bootstrap/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
- data/public/vendor/bootstrap/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
- data/public/vendor/bootstrap/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
- data/public/vendor/bootstrap/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
- data/public/vendor/bootstrap/assets/ico/favicon.png +0 -0
- data/public/vendor/bootstrap/assets/js/application.js +2 -1
- data/public/vendor/bootstrap/assets/js/customizer.js +160 -45
- data/public/vendor/bootstrap/assets/js/filesaver.js +169 -0
- data/public/vendor/bootstrap/assets/js/jquery.js +6 -5
- data/public/vendor/bootstrap/assets/js/raw-files.js +3 -0
- data/public/vendor/bootstrap/bower.json +1 -1
- data/public/vendor/bootstrap/components.html +787 -364
- data/public/vendor/bootstrap/composer.json +1 -1
- data/public/vendor/bootstrap/css.html +413 -248
- data/public/vendor/bootstrap/customize.html +413 -447
- data/public/vendor/bootstrap/dist/css/bootstrap-theme.css +384 -0
- data/public/vendor/bootstrap/dist/css/bootstrap-theme.min.css +1 -0
- data/public/vendor/bootstrap/dist/css/bootstrap.css +3033 -1807
- data/public/vendor/bootstrap/dist/css/bootstrap.min.css +1 -1
- data/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +228 -0
- data/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/vendor/bootstrap/dist/js/bootstrap.js +18 -12
- data/public/vendor/bootstrap/dist/js/bootstrap.min.js +1 -1
- data/public/vendor/bootstrap/examples/carousel/carousel.css +128 -0
- data/public/vendor/bootstrap/examples/carousel/index.html +201 -0
- data/public/vendor/bootstrap/examples/grid/grid.css +28 -0
- data/public/vendor/bootstrap/examples/grid/index.html +119 -0
- data/public/vendor/bootstrap/examples/jumbotron/index.html +111 -0
- data/public/vendor/bootstrap/examples/jumbotron/jumbotron.css +5 -0
- data/public/vendor/bootstrap/examples/jumbotron-narrow/index.html +78 -0
- data/public/vendor/bootstrap/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
- data/public/vendor/bootstrap/examples/justified-nav/index.html +79 -0
- data/public/vendor/bootstrap/examples/justified-nav/justified-nav.css +88 -0
- data/public/vendor/bootstrap/examples/navbar/index.html +83 -0
- data/public/vendor/bootstrap/examples/navbar/navbar.css +7 -0
- data/public/vendor/bootstrap/examples/navbar-fixed-top/index.html +86 -0
- data/public/vendor/bootstrap/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
- data/public/vendor/bootstrap/examples/navbar-static-top/index.html +87 -0
- data/public/vendor/bootstrap/examples/navbar-static-top/navbar-static-top.css +7 -0
- data/public/vendor/bootstrap/examples/non-responsive/index.html +96 -0
- data/public/vendor/bootstrap/examples/non-responsive/non-responsive.css +117 -0
- data/public/vendor/bootstrap/examples/offcanvas/index.html +127 -0
- data/public/vendor/bootstrap/examples/offcanvas/offcanvas.css +48 -0
- data/public/vendor/bootstrap/examples/offcanvas/offcanvas.js +5 -0
- data/public/vendor/bootstrap/examples/screenshots/carousel.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/grid.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/jumbotron-narrow.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/jumbotron.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/justified-nav.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/navbar-fixed.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/navbar-static.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/navbar.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/non-responsive.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/offcanvas.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/sign-in.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/starter-template.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/sticky-footer-navbar.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/sticky-footer.jpg +0 -0
- data/public/vendor/bootstrap/examples/screenshots/theme.jpg +0 -0
- data/public/vendor/bootstrap/examples/signin/index.html +46 -0
- data/public/vendor/bootstrap/examples/signin/signin.css +40 -0
- data/public/vendor/bootstrap/examples/starter-template/index.html +63 -0
- data/public/vendor/bootstrap/examples/starter-template/starter-template.css +7 -0
- data/public/vendor/bootstrap/examples/sticky-footer/index.html +51 -0
- data/public/vendor/bootstrap/examples/sticky-footer/sticky-footer.css +39 -0
- data/public/vendor/bootstrap/examples/sticky-footer-navbar/index.html +86 -0
- data/public/vendor/bootstrap/examples/sticky-footer-navbar/sticky-footer-navbar.css +46 -0
- data/public/vendor/bootstrap/examples/theme/index.html +387 -0
- data/public/vendor/bootstrap/examples/theme/theme.css +14 -0
- data/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg +228 -0
- data/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/vendor/bootstrap/getting-started.html +513 -22
- data/public/vendor/bootstrap/index.html +3 -4
- data/public/vendor/bootstrap/javascript.html +123 -115
- data/public/vendor/bootstrap/js/dropdown.js +3 -3
- data/public/vendor/bootstrap/js/modal.js +5 -3
- data/public/vendor/bootstrap/js/tests/unit/modal.js +19 -0
- data/public/vendor/bootstrap/js/tests/vendor/jquery.js +6 -5
- data/public/vendor/bootstrap/js/tooltip.js +9 -5
- data/public/vendor/bootstrap/js/transition.js +1 -1
- data/public/vendor/bootstrap/less/alerts.less +7 -11
- data/public/vendor/bootstrap/less/bootstrap.less +17 -21
- data/public/vendor/bootstrap/less/button-groups.less +14 -10
- data/public/vendor/bootstrap/less/buttons.less +3 -2
- data/public/vendor/bootstrap/less/carousel.less +6 -1
- data/public/vendor/bootstrap/less/dropdowns.less +22 -5
- data/public/vendor/bootstrap/less/forms.less +36 -15
- data/public/vendor/bootstrap/less/glyphicons.less +232 -0
- data/public/vendor/bootstrap/less/grid.less +9 -3
- data/public/vendor/bootstrap/less/input-groups.less +1 -1
- data/public/vendor/bootstrap/less/jumbotron.less +16 -5
- data/public/vendor/bootstrap/less/labels.less +9 -5
- data/public/vendor/bootstrap/less/mixins.less +73 -43
- data/public/vendor/bootstrap/less/modals.less +8 -0
- data/public/vendor/bootstrap/less/navbar.less +251 -189
- data/public/vendor/bootstrap/less/navs.less +13 -12
- data/public/vendor/bootstrap/less/pager.less +1 -1
- data/public/vendor/bootstrap/less/pagination.less +20 -9
- data/public/vendor/bootstrap/less/panels.less +28 -8
- data/public/vendor/bootstrap/less/progress-bars.less +6 -10
- data/public/vendor/bootstrap/less/responsive-utilities.less +120 -49
- data/public/vendor/bootstrap/less/scaffolding.less +37 -18
- data/public/vendor/bootstrap/less/tables.less +84 -59
- data/public/vendor/bootstrap/less/theme.less +232 -0
- data/public/vendor/bootstrap/less/thumbnails.less +8 -19
- data/public/vendor/bootstrap/less/type.less +2 -2
- data/public/vendor/bootstrap/less/variables.less +63 -50
- data/public/vendor/bootstrap/package.json +2 -1
- data/public/vendor/components-backbone/LICENSE +22 -0
- data/public/vendor/components-backbone/README.md +10 -0
- data/public/vendor/components-backbone/backbone-min.js +4 -0
- data/public/vendor/components-backbone/backbone.js +1571 -0
- data/public/vendor/components-backbone/bower.json +17 -0
- data/public/vendor/components-backbone/component.json +21 -0
- data/public/vendor/components-backbone/composer.json +37 -0
- data/public/vendor/components-backbone/package.json +24 -0
- data/public/vendor/d3.layout.cloud.js +401 -0
- data/public/vendor/replacejs/CHANGELOG.md +4 -0
- data/public/vendor/replacejs/replace.js +21 -2
- data/public/vendor/underscore/CNAME +1 -0
- data/public/vendor/underscore/CONTRIBUTING.md +9 -0
- data/public/vendor/underscore/LICENSE +22 -0
- data/public/vendor/underscore/README.md +19 -0
- data/public/vendor/underscore/Rakefile +10 -0
- data/public/vendor/underscore/docs/docco.css +192 -0
- data/public/vendor/underscore/docs/favicon.ico +0 -0
- data/public/vendor/underscore/docs/images/background.png +0 -0
- data/public/vendor/underscore/docs/images/underscore.png +0 -0
- data/public/vendor/underscore/docs/underscore.html +823 -0
- data/public/vendor/underscore/favicon.ico +0 -0
- data/public/vendor/underscore/index.html +2467 -0
- data/public/vendor/underscore/index.js +1 -0
- data/public/vendor/underscore/package.json +16 -0
- data/public/vendor/underscore/test/arrays.js +200 -0
- data/public/vendor/underscore/test/chaining.js +59 -0
- data/public/vendor/underscore/test/collections.js +453 -0
- data/public/vendor/underscore/test/functions.js +265 -0
- data/public/vendor/underscore/test/index.html +44 -0
- data/public/vendor/underscore/test/objects.js +570 -0
- data/public/vendor/underscore/test/speed.js +75 -0
- data/public/vendor/underscore/test/utility.js +266 -0
- data/public/vendor/underscore/test/vendor/jquery.js +9404 -0
- data/public/vendor/underscore/test/vendor/jslitmus.js +670 -0
- data/public/vendor/underscore/test/vendor/qunit.css +235 -0
- data/public/vendor/underscore/test/vendor/qunit.js +1977 -0
- data/public/vendor/underscore/test/vendor/runner.js +98 -0
- data/public/vendor/underscore/underscore-min.js +1 -0
- data/public/vendor/underscore/underscore.js +1226 -0
- data/views/dashboard.haml +1 -1
- data/views/layout.haml +8 -4
- metadata +132 -25
- data/public/vendor/bootstrap/_layouts/customize.html +0 -52
- data/public/vendor/bootstrap/assets/js/jquery.bbq.min.js +0 -1287
- data/public/vendor/bootstrap-glyphicons/CHANGELOG.md +0 -3
- data/public/vendor/bootstrap-glyphicons/CNAME +0 -1
- data/public/vendor/bootstrap-glyphicons/CONTRIBUTING.md +0 -54
- data/public/vendor/bootstrap-glyphicons/LICENSE +0 -19
- data/public/vendor/bootstrap-glyphicons/README.md +0 -61
- data/public/vendor/bootstrap-glyphicons/_config.yml +0 -12
- data/public/vendor/bootstrap-glyphicons/composer.json +0 -9
- data/public/vendor/bootstrap-glyphicons/css/bootstrap-glyphicons.css +0 -2
- data/public/vendor/bootstrap-glyphicons/css/bootstrap.css +0 -9
- data/public/vendor/bootstrap-glyphicons/css/docs.css +0 -160
- data/public/vendor/bootstrap-glyphicons/fonts/glyphiconshalflings-regular.eot +0 -0
- data/public/vendor/bootstrap-glyphicons/fonts/glyphiconshalflings-regular.otf +0 -0
- data/public/vendor/bootstrap-glyphicons/fonts/glyphiconshalflings-regular.svg +0 -175
- data/public/vendor/bootstrap-glyphicons/fonts/glyphiconshalflings-regular.ttf +0 -0
- data/public/vendor/bootstrap-glyphicons/fonts/glyphiconshalflings-regular.woff +0 -0
- data/public/vendor/bootstrap-glyphicons/index.html +0 -255
- data/public/vendor/bootstrap-glyphicons/less/bootstrap-glyphicons.less +0 -201
- data/public/vendor/bootstrap-glyphicons/package.json +0 -18
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,7 +1,61 @@
|
|
|
1
1
|
window.onload = function () { // wait for load in a dumb way because B-0
|
|
2
|
-
var cw = '/*!\n * Bootstrap v3.0.0
|
|
2
|
+
var cw = '/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\n */\n\n'
|
|
3
|
+
|
|
4
|
+
function showError(msg, err) {
|
|
5
|
+
$('<div id="bsCustomizerAlert" class="bs-customizer-alert">\
|
|
6
|
+
<div class="container">\
|
|
7
|
+
<a href="#bsCustomizerAlert" data-dismiss="alert" class="close pull-right">×</a>\
|
|
8
|
+
<p class="bs-customizer-alert-text"><span class="glyphicon glyphicon-warning-sign"></span>' + msg + '</p>' +
|
|
9
|
+
(err.extract ? '<pre class="bs-customizer-alert-extract">' + err.extract.join('\n') + '</pre>' : '') + '\
|
|
10
|
+
</div>\
|
|
11
|
+
</div>').appendTo('body').alert()
|
|
12
|
+
throw err
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function showCallout(msg, showUpTop) {
|
|
16
|
+
var callout = $('<div class="bs-callout bs-callout-danger">\
|
|
17
|
+
<h4>Attention!</h4>\
|
|
18
|
+
<p>' + msg + '</p>\
|
|
19
|
+
</div>')
|
|
20
|
+
|
|
21
|
+
if (showUpTop) {
|
|
22
|
+
callout.appendTo('.bs-docs-container')
|
|
23
|
+
} else {
|
|
24
|
+
callout.insertAfter('.bs-customize-download')
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getQueryParam(key) {
|
|
29
|
+
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars
|
|
30
|
+
var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)"));
|
|
31
|
+
return match && decodeURIComponent(match[1].replace(/\+/g, " "));
|
|
32
|
+
}
|
|
3
33
|
|
|
4
|
-
function
|
|
34
|
+
function createGist(configData) {
|
|
35
|
+
var data = {
|
|
36
|
+
"description": "Bootstrap Customizer Config",
|
|
37
|
+
"public": true,
|
|
38
|
+
"files": {
|
|
39
|
+
"config.json": {
|
|
40
|
+
"content": JSON.stringify(configData, null, 2)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
$.ajax({
|
|
45
|
+
url: 'https://api.github.com/gists',
|
|
46
|
+
type: 'POST',
|
|
47
|
+
dataType: 'json',
|
|
48
|
+
data: JSON.stringify(data)
|
|
49
|
+
})
|
|
50
|
+
.success(function(result) {
|
|
51
|
+
history.replaceState(false, document.title, window.location.origin + window.location.pathname + '?id=' + result.id)
|
|
52
|
+
})
|
|
53
|
+
.error(function(err) {
|
|
54
|
+
showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function getCustomizerData() {
|
|
5
59
|
var vars = {}
|
|
6
60
|
|
|
7
61
|
$('#less-variables-section input')
|
|
@@ -11,39 +65,50 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
11
65
|
|
|
12
66
|
var data = {
|
|
13
67
|
vars: vars,
|
|
14
|
-
css: $('#less-section input:
|
|
15
|
-
js:
|
|
68
|
+
css: $('#less-section input:checked') .map(function () { return this.value }).toArray(),
|
|
69
|
+
js: $('#plugin-section input:checked').map(function () { return this.value }).toArray()
|
|
16
70
|
}
|
|
17
71
|
|
|
18
72
|
if ($.isEmptyObject(data.vars) && !data.css.length && !data.js.length) return
|
|
19
73
|
|
|
20
|
-
|
|
74
|
+
return data
|
|
21
75
|
}
|
|
22
76
|
|
|
23
77
|
function parseUrl() {
|
|
24
|
-
var
|
|
78
|
+
var id = getQueryParam('id')
|
|
25
79
|
|
|
26
|
-
if (
|
|
27
|
-
for (var i = 0; i < data.js.length; i++) {
|
|
28
|
-
var input = $('input[value="'+data.js[i]+'"]')
|
|
29
|
-
input && input.prop('checked', false)
|
|
30
|
-
}
|
|
31
|
-
}
|
|
80
|
+
if (!id) return
|
|
32
81
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
82
|
+
$.ajax({
|
|
83
|
+
url: 'https://api.github.com/gists/' + id,
|
|
84
|
+
type: 'GET',
|
|
85
|
+
dataType: 'json'
|
|
86
|
+
})
|
|
87
|
+
.success(function(result) {
|
|
88
|
+
var data = JSON.parse(result.files['config.json'].content)
|
|
89
|
+
if (data.js) {
|
|
90
|
+
$('#plugin-section input').each(function () {
|
|
91
|
+
$(this).prop('checked', ~$.inArray(this.value, data.js))
|
|
92
|
+
})
|
|
37
93
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
94
|
+
if (data.css) {
|
|
95
|
+
$('#less-section input').each(function () {
|
|
96
|
+
$(this).prop('checked', ~$.inArray(this.value, data.css))
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
if (data.vars) {
|
|
100
|
+
for (var i in data.vars) {
|
|
101
|
+
$('input[data-var="' + i + '"]').val(data.vars[i])
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
.error(function(err) {
|
|
106
|
+
showError('Error fetching bootstrap config file', err)
|
|
107
|
+
})
|
|
43
108
|
}
|
|
44
109
|
|
|
45
|
-
function generateZip(css, js, complete) {
|
|
46
|
-
if (!css && !js) return
|
|
110
|
+
function generateZip(css, js, fonts, complete) {
|
|
111
|
+
if (!css && !js) return showError('<strong>Ruh roh!</strong> No Bootstrap files selected.', new Error('no Bootstrap'))
|
|
47
112
|
|
|
48
113
|
var zip = new JSZip()
|
|
49
114
|
|
|
@@ -61,11 +126,16 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
61
126
|
}
|
|
62
127
|
}
|
|
63
128
|
|
|
64
|
-
|
|
129
|
+
if (fonts) {
|
|
130
|
+
var fontsFolder = zip.folder('fonts')
|
|
131
|
+
for (var fileName in fonts) {
|
|
132
|
+
fontsFolder.file(fileName, fonts[fileName])
|
|
133
|
+
}
|
|
134
|
+
}
|
|
65
135
|
|
|
66
|
-
|
|
136
|
+
var content = zip.generate({type:"blob"})
|
|
67
137
|
|
|
68
|
-
complete()
|
|
138
|
+
complete(content)
|
|
69
139
|
}
|
|
70
140
|
|
|
71
141
|
function generateCustomCSS(vars) {
|
|
@@ -78,6 +148,13 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
78
148
|
return result + '\n\n'
|
|
79
149
|
}
|
|
80
150
|
|
|
151
|
+
function generateFonts() {
|
|
152
|
+
var glyphicons = $('#less-section [value="glyphicons.less"]:checked')
|
|
153
|
+
if (glyphicons.length) {
|
|
154
|
+
return __fonts
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
81
158
|
function generateCSS() {
|
|
82
159
|
var $checked = $('#less-section input:checked')
|
|
83
160
|
|
|
@@ -95,6 +172,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
95
172
|
css += __less['variables.less']
|
|
96
173
|
if (vars) css += generateCustomCSS(vars)
|
|
97
174
|
css += __less['mixins.less']
|
|
175
|
+
css += __less['normalize.less']
|
|
176
|
+
css += __less['scaffolding.less']
|
|
98
177
|
css += $checked
|
|
99
178
|
.map(function () { return __less[this.value] })
|
|
100
179
|
.toArray()
|
|
@@ -108,15 +187,16 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
108
187
|
, optimization: 0
|
|
109
188
|
, filename: 'bootstrap.css'
|
|
110
189
|
}).parse(css, function (err, tree) {
|
|
111
|
-
if (err)
|
|
112
|
-
|
|
190
|
+
if (err) {
|
|
191
|
+
return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)
|
|
192
|
+
}
|
|
113
193
|
result = {
|
|
114
194
|
'bootstrap.css' : cw + tree.toCSS(),
|
|
115
195
|
'bootstrap.min.css' : cw + tree.toCSS({ compress: true })
|
|
116
196
|
}
|
|
117
197
|
})
|
|
118
198
|
} catch (err) {
|
|
119
|
-
return
|
|
199
|
+
return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)
|
|
120
200
|
}
|
|
121
201
|
|
|
122
202
|
return result
|
|
@@ -137,17 +217,6 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
137
217
|
}
|
|
138
218
|
}
|
|
139
219
|
|
|
140
|
-
var $downloadBtn = $('#btn-download').on('click', function (e) {
|
|
141
|
-
e.preventDefault()
|
|
142
|
-
$downloadBtn.addClass('loading')
|
|
143
|
-
generateZip(generateCSS(), generateJavascript(), function () {
|
|
144
|
-
$downloadBtn.removeClass('loading')
|
|
145
|
-
setTimeout(function () {
|
|
146
|
-
generateUrl()
|
|
147
|
-
}, 1)
|
|
148
|
-
})
|
|
149
|
-
})
|
|
150
|
-
|
|
151
220
|
var inputsComponent = $('#less-section input')
|
|
152
221
|
var inputsPlugin = $('#plugin-section input')
|
|
153
222
|
var inputsVariables = $('#less-variables-section input')
|
|
@@ -167,9 +236,55 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
|
|
167
236
|
inputsVariables.val('')
|
|
168
237
|
})
|
|
169
238
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
239
|
+
$('[data-dependencies]').on('click', function () {
|
|
240
|
+
if (!$(this).is(':checked')) return
|
|
241
|
+
var dependencies = this.getAttribute('data-dependencies')
|
|
242
|
+
if (!dependencies) return
|
|
243
|
+
dependencies = dependencies.split(',')
|
|
244
|
+
for (var i = 0; i < dependencies.length; i++) {
|
|
245
|
+
var dependency = $('[value="' + dependencies[i] + '"]')
|
|
246
|
+
dependency && dependency.prop('checked', true)
|
|
247
|
+
}
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
$('[data-dependents]').on('click', function () {
|
|
251
|
+
if ($(this).is(':checked')) return
|
|
252
|
+
var dependents = this.getAttribute('data-dependents')
|
|
253
|
+
if (!dependents) return
|
|
254
|
+
dependents = dependents.split(',')
|
|
255
|
+
for (var i = 0; i < dependents.length; i++) {
|
|
256
|
+
var dependent = $('[value="' + dependents[i] + '"]')
|
|
257
|
+
dependent && dependent.prop('checked', false)
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
var $compileBtn = $('#btn-compile')
|
|
262
|
+
var $downloadBtn = $('#btn-download')
|
|
263
|
+
|
|
264
|
+
$compileBtn.on('click', function (e) {
|
|
265
|
+
e.preventDefault()
|
|
266
|
+
|
|
267
|
+
$compileBtn.attr('disabled', 'disabled')
|
|
268
|
+
|
|
269
|
+
generateZip(generateCSS(), generateJavascript(), generateFonts(), function (blob) {
|
|
270
|
+
$compileBtn.removeAttr('disabled')
|
|
271
|
+
saveAs(blob, "bootstrap.zip")
|
|
272
|
+
createGist(getCustomizerData())
|
|
273
|
+
})
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
// browser support alerts
|
|
277
|
+
if (!window.URL && navigator.userAgent.toLowerCase().indexOf('safari') != -1) {
|
|
278
|
+
showCallout("Looks like you're using safari, which sadly doesn't have the best support\
|
|
279
|
+
for HTML5 blobs. Because of this your file will be downloaded with the name <code>\"untitled\"</code>.\
|
|
280
|
+
However, if you check your downloads folder, just rename this <code>\"untitled\"</code> file\
|
|
281
|
+
to <code>\"bootstrap.zip\"</code> and you should be good to go!")
|
|
282
|
+
} else if (!window.URL && !window.webkitURL) {
|
|
283
|
+
$('.bs-docs-section, .bs-sidebar').css('display', 'none')
|
|
284
|
+
|
|
285
|
+
showCallout("Looks like your current browser doesn't support the Bootstrap Customizer. Please take a second\
|
|
286
|
+
to <a href=\"https://www.google.com/intl/en/chrome/browser/\"> upgrade to a more modern browser</a>.", true)
|
|
174
287
|
}
|
|
175
|
-
|
|
288
|
+
|
|
289
|
+
parseUrl()
|
|
290
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/* Blob.js
|
|
2
|
+
* A Blob implementation.
|
|
3
|
+
* 2013-06-20
|
|
4
|
+
*
|
|
5
|
+
* By Eli Grey, http://eligrey.com
|
|
6
|
+
* By Devin Samarin, https://github.com/eboyjr
|
|
7
|
+
* License: X11/MIT
|
|
8
|
+
* See LICENSE.md
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*global self, unescape */
|
|
12
|
+
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
|
|
13
|
+
plusplus: true */
|
|
14
|
+
|
|
15
|
+
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
|
|
16
|
+
|
|
17
|
+
if (typeof Blob !== "function" || typeof URL === "undefined")
|
|
18
|
+
if (typeof Blob === "function" && typeof webkitURL !== "undefined") self.URL = webkitURL;
|
|
19
|
+
else var Blob = (function (view) {
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) {
|
|
23
|
+
var
|
|
24
|
+
get_class = function(object) {
|
|
25
|
+
return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
|
|
26
|
+
}
|
|
27
|
+
, FakeBlobBuilder = function BlobBuilder() {
|
|
28
|
+
this.data = [];
|
|
29
|
+
}
|
|
30
|
+
, FakeBlob = function Blob(data, type, encoding) {
|
|
31
|
+
this.data = data;
|
|
32
|
+
this.size = data.length;
|
|
33
|
+
this.type = type;
|
|
34
|
+
this.encoding = encoding;
|
|
35
|
+
}
|
|
36
|
+
, FBB_proto = FakeBlobBuilder.prototype
|
|
37
|
+
, FB_proto = FakeBlob.prototype
|
|
38
|
+
, FileReaderSync = view.FileReaderSync
|
|
39
|
+
, FileException = function(type) {
|
|
40
|
+
this.code = this[this.name = type];
|
|
41
|
+
}
|
|
42
|
+
, file_ex_codes = (
|
|
43
|
+
"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
|
|
44
|
+
+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
|
|
45
|
+
).split(" ")
|
|
46
|
+
, file_ex_code = file_ex_codes.length
|
|
47
|
+
, real_URL = view.URL || view.webkitURL || view
|
|
48
|
+
, real_create_object_URL = real_URL.createObjectURL
|
|
49
|
+
, real_revoke_object_URL = real_URL.revokeObjectURL
|
|
50
|
+
, URL = real_URL
|
|
51
|
+
, btoa = view.btoa
|
|
52
|
+
, atob = view.atob
|
|
53
|
+
|
|
54
|
+
, ArrayBuffer = view.ArrayBuffer
|
|
55
|
+
, Uint8Array = view.Uint8Array
|
|
56
|
+
;
|
|
57
|
+
FakeBlob.fake = FB_proto.fake = true;
|
|
58
|
+
while (file_ex_code--) {
|
|
59
|
+
FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
|
|
60
|
+
}
|
|
61
|
+
if (!real_URL.createObjectURL) {
|
|
62
|
+
URL = view.URL = {};
|
|
63
|
+
}
|
|
64
|
+
URL.createObjectURL = function(blob) {
|
|
65
|
+
var
|
|
66
|
+
type = blob.type
|
|
67
|
+
, data_URI_header
|
|
68
|
+
;
|
|
69
|
+
if (type === null) {
|
|
70
|
+
type = "application/octet-stream";
|
|
71
|
+
}
|
|
72
|
+
if (blob instanceof FakeBlob) {
|
|
73
|
+
data_URI_header = "data:" + type;
|
|
74
|
+
if (blob.encoding === "base64") {
|
|
75
|
+
return data_URI_header + ";base64," + blob.data;
|
|
76
|
+
} else if (blob.encoding === "URI") {
|
|
77
|
+
return data_URI_header + "," + decodeURIComponent(blob.data);
|
|
78
|
+
} if (btoa) {
|
|
79
|
+
return data_URI_header + ";base64," + btoa(blob.data);
|
|
80
|
+
} else {
|
|
81
|
+
return data_URI_header + "," + encodeURIComponent(blob.data);
|
|
82
|
+
}
|
|
83
|
+
} else if (real_create_object_URL) {
|
|
84
|
+
return real_create_object_URL.call(real_URL, blob);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
URL.revokeObjectURL = function(object_URL) {
|
|
88
|
+
if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
|
|
89
|
+
real_revoke_object_URL.call(real_URL, object_URL);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
FBB_proto.append = function(data/*, endings*/) {
|
|
93
|
+
var bb = this.data;
|
|
94
|
+
// decode data to a binary string
|
|
95
|
+
if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
|
|
96
|
+
var
|
|
97
|
+
str = ""
|
|
98
|
+
, buf = new Uint8Array(data)
|
|
99
|
+
, i = 0
|
|
100
|
+
, buf_len = buf.length
|
|
101
|
+
;
|
|
102
|
+
for (; i < buf_len; i++) {
|
|
103
|
+
str += String.fromCharCode(buf[i]);
|
|
104
|
+
}
|
|
105
|
+
bb.push(str);
|
|
106
|
+
} else if (get_class(data) === "Blob" || get_class(data) === "File") {
|
|
107
|
+
if (FileReaderSync) {
|
|
108
|
+
var fr = new FileReaderSync;
|
|
109
|
+
bb.push(fr.readAsBinaryString(data));
|
|
110
|
+
} else {
|
|
111
|
+
// async FileReader won't work as BlobBuilder is sync
|
|
112
|
+
throw new FileException("NOT_READABLE_ERR");
|
|
113
|
+
}
|
|
114
|
+
} else if (data instanceof FakeBlob) {
|
|
115
|
+
if (data.encoding === "base64" && atob) {
|
|
116
|
+
bb.push(atob(data.data));
|
|
117
|
+
} else if (data.encoding === "URI") {
|
|
118
|
+
bb.push(decodeURIComponent(data.data));
|
|
119
|
+
} else if (data.encoding === "raw") {
|
|
120
|
+
bb.push(data.data);
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
if (typeof data !== "string") {
|
|
124
|
+
data += ""; // convert unsupported types to strings
|
|
125
|
+
}
|
|
126
|
+
// decode UTF-16 to binary string
|
|
127
|
+
bb.push(unescape(encodeURIComponent(data)));
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
FBB_proto.getBlob = function(type) {
|
|
131
|
+
if (!arguments.length) {
|
|
132
|
+
type = null;
|
|
133
|
+
}
|
|
134
|
+
return new FakeBlob(this.data.join(""), type, "raw");
|
|
135
|
+
};
|
|
136
|
+
FBB_proto.toString = function() {
|
|
137
|
+
return "[object BlobBuilder]";
|
|
138
|
+
};
|
|
139
|
+
FB_proto.slice = function(start, end, type) {
|
|
140
|
+
var args = arguments.length;
|
|
141
|
+
if (args < 3) {
|
|
142
|
+
type = null;
|
|
143
|
+
}
|
|
144
|
+
return new FakeBlob(
|
|
145
|
+
this.data.slice(start, args > 1 ? end : this.data.length)
|
|
146
|
+
, type
|
|
147
|
+
, this.encoding
|
|
148
|
+
);
|
|
149
|
+
};
|
|
150
|
+
FB_proto.toString = function() {
|
|
151
|
+
return "[object Blob]";
|
|
152
|
+
};
|
|
153
|
+
return FakeBlobBuilder;
|
|
154
|
+
}(view));
|
|
155
|
+
|
|
156
|
+
return function Blob(blobParts, options) {
|
|
157
|
+
var type = options ? (options.type || "") : "";
|
|
158
|
+
var builder = new BlobBuilder();
|
|
159
|
+
if (blobParts) {
|
|
160
|
+
for (var i = 0, len = blobParts.length; i < len; i++) {
|
|
161
|
+
builder.append(blobParts[i]);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return builder.getBlob(type);
|
|
165
|
+
};
|
|
166
|
+
}(self));
|
|
167
|
+
|
|
168
|
+
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
|
|
169
|
+
var saveAs=saveAs||(navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator))||(function(h){"use strict";var r=h.document,l=function(){return h.URL||h.webkitURL||h},e=h.URL||h.webkitURL||h,n=r.createElementNS("http://www.w3.org/1999/xhtml","a"),g=!h.externalHost&&"download" in n,j=function(t){var s=r.createEvent("MouseEvents");s.initMouseEvent("click",true,false,h,0,0,0,0,0,false,false,false,false,0,null);t.dispatchEvent(s)},o=h.webkitRequestFileSystem,p=h.requestFileSystem||o||h.mozRequestFileSystem,m=function(s){(h.setImmediate||h.setTimeout)(function(){throw s},0)},c="application/octet-stream",k=0,b=[],i=function(){var t=b.length;while(t--){var s=b[t];if(typeof s==="string"){e.revokeObjectURL(s)}else{s.remove()}}b.length=0},q=function(t,s,w){s=[].concat(s);var v=s.length;while(v--){var x=t["on"+s[v]];if(typeof x==="function"){try{x.call(t,w||t)}catch(u){m(u)}}}},f=function(t,u){var v=this,B=t.type,E=false,x,w,s=function(){var F=l().createObjectURL(t);b.push(F);return F},A=function(){q(v,"writestart progress write writeend".split(" "))},D=function(){if(E||!x){x=s(t)}if(w){w.location.href=x}else{window.open(x,"_blank")}v.readyState=v.DONE;A()},z=function(F){return function(){if(v.readyState!==v.DONE){return F.apply(this,arguments)}}},y={create:true,exclusive:false},C;v.readyState=v.INIT;if(!u){u="download"}if(g){x=s(t);n.href=x;n.download=u;j(n);v.readyState=v.DONE;A();return}if(h.chrome&&B&&B!==c){C=t.slice||t.webkitSlice;t=C.call(t,0,t.size,c);E=true}if(o&&u!=="download"){u+=".download"}if(B===c||o){w=h}if(!p){D();return}k+=t.size;p(h.TEMPORARY,k,z(function(F){F.root.getDirectory("saved",y,z(function(G){var H=function(){G.getFile(u,y,z(function(I){I.createWriter(z(function(J){J.onwriteend=function(K){w.location.href=I.toURL();b.push(I);v.readyState=v.DONE;q(v,"writeend",K)};J.onerror=function(){var K=J.error;if(K.code!==K.ABORT_ERR){D()}};"writestart progress write abort".split(" ").forEach(function(K){J["on"+K]=v["on"+K]});J.write(t);v.abort=function(){J.abort();v.readyState=v.DONE};v.readyState=v.WRITING}),D)}),D)};G.getFile(u,{create:false},z(function(I){I.remove();H()}),z(function(I){if(I.code===I.NOT_FOUND_ERR){H()}else{D()}}))}),D)}),D)},d=f.prototype,a=function(s,t){return new f(s,t)};d.abort=function(){var s=this;s.readyState=s.DONE;q(s,"abort")};d.readyState=d.INIT=0;d.WRITING=1;d.DONE=2;d.error=d.onwritestart=d.onprogress=d.onwrite=d.onabort=d.onerror=d.onwriteend=null;h.addEventListener("unload",i,false);return a}(self));
|