1 window.onload = function () { // wait for load in a dumb way because B-0
2 var cw = '/*!\n * Bootstrap v3.0.0-rc.2\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'
4 function generateUrl() {
7 $('#less-variables-section input')
9 $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())
14 css: $('#less-section input:not(:checked)').map(function () { return this.value }).toArray(),
15 js: $('#plugin-section input:not(:checked)').map(function () { return this.value }).toArray()
18 if ($.isEmptyObject(data.vars) && !data.css.length && !data.js.length) return
20 window.location = jQuery.param.querystring('/customize/', data)
24 var data = jQuery.deparam.querystring()
27 for (var i = 0; i < data.js.length; i++) {
28 var input = $('input[value="'+data.js[i]+'"]')
29 input && input.prop('checked', false)
34 for (var i = 0; i < data.css.length; i++) {
35 var input = $('input[value="'+data.css[i]+'"]')
36 input && input.prop('checked', false)
45 function generateZip(css, js, complete) {
46 if (!css && !js) return alert('you want to build nothing… o_O')
51 var cssFolder = zip.folder('css')
52 for (var fileName in css) {
53 cssFolder.file(fileName, css[fileName])
58 var jsFolder = zip.folder('js')
59 for (var fileName in js) {
60 jsFolder.file(fileName, js[fileName])
64 var content = zip.generate()
66 location.href = 'data:application/zip;base64,' + content
71 function generateCustomCSS(vars) {
74 for (var key in vars) {
75 result += key + ': ' + vars[key] + ';\n'
78 return result + '\n\n'
81 function generateCSS() {
82 var $checked = $('#less-section input:checked')
84 if (!$checked.length) return false
90 $('#less-variables-section input')
92 $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())
95 css += __less['variables.less']
96 if (vars) css += generateCustomCSS(vars)
97 css += __less['mixins.less']
99 .map(function () { return __less[this.value] })
103 css = css.replace(/@import[^\n]*/gi, '') //strip any imports
106 var parser = new less.Parser({
107 paths: ['variables.less', 'mixins.less']
109 , filename: 'bootstrap.css'
110 }).parse(css, function (err, tree) {
111 if (err) return alert(err)
114 'bootstrap.css' : cw + tree.toCSS(),
115 'bootstrap.min.css' : cw + tree.toCSS({ compress: true })
125 function generateJavascript() {
126 var $checked = $('#plugin-section input:checked')
127 if (!$checked.length) return false
130 .map(function () { return __js[this.value] })
136 'bootstrap.min.js': cw + uglify(js)
140 var $downloadBtn = $('#btn-download').on('click', function (e) {
142 $downloadBtn.addClass('loading')
143 generateZip(generateCSS(), generateJavascript(), function () {
144 $downloadBtn.removeClass('loading')
145 setTimeout(function () {
151 var inputsComponent = $('#less-section input')
152 var inputsPlugin = $('#plugin-section input')
153 var inputsVariables = $('#less-variables-section input')
155 $('#less-section .toggle').on('click', function (e) {
157 inputsComponent.prop('checked', !inputsComponent.is(':checked'))
160 $('#plugin-section .toggle').on('click', function (e) {
162 inputsPlugin.prop('checked', !inputsPlugin.is(':checked'))
165 $('#less-variables-section .toggle').on('click', function (e) {
167 inputsVariables.val('')
173 // maybe alert user that we can't parse their url