aboutsummaryrefslogtreecommitdiff
path: root/docs/assets/js/src
diff options
context:
space:
mode:
Diffstat (limited to 'docs/assets/js/src')
-rw-r--r--docs/assets/js/src/application.js11
-rw-r--r--docs/assets/js/src/customizer.js102
2 files changed, 63 insertions, 50 deletions
diff --git a/docs/assets/js/src/application.js b/docs/assets/js/src/application.js
index 571645e5f..c85c59dae 100644
--- a/docs/assets/js/src/application.js
+++ b/docs/assets/js/src/application.js
@@ -109,6 +109,17 @@
}, 3000)
})
+ // Modal relatedTarget demo
+ $('#exampleModal').on('show.bs.modal', function (event) {
+ var button = $(event.relatedTarget) // Button that triggered the modal
+ var recipient = button.data('whatever') // Extract info from data-* attributes
+ // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
+ // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
+ var modal = $(this)
+ modal.find('.modal-title').text('New message to ' + recipient)
+ modal.find('.modal-body input').val(recipient)
+ })
+
// Activate animated progress bar
$('.bs-docs-activate-animated-progressbar').on('click', function () {
$(this).siblings('.progress').find('.progress-bar-striped').toggleClass('active')
diff --git a/docs/assets/js/src/customizer.js b/docs/assets/js/src/customizer.js
index c1c7d7971..773db8549 100644
--- a/docs/assets/js/src/customizer.js
+++ b/docs/assets/js/src/customizer.js
@@ -6,13 +6,13 @@
* details, see http://creativecommons.org/licenses/by/3.0/.
*/
-/* global JSZip, less, saveAs, UglifyJS, __js, __less, __fonts */
+/* global JSZip, less, autoprefixer, saveAs, UglifyJS, __configBridge, __js, __less, __fonts */
window.onload = function () { // wait for load in a dumb way because B-0
'use strict';
var cw = '/*!\n' +
- ' * Bootstrap v3.2.0 (http://getbootstrap.com)\n' +
- ' * Copyright 2011-2014 Twitter, Inc.\n' +
+ ' * Bootstrap v3.3.0 (http://getbootstrap.com)\n' +
+ ' * Copyright 2011-' + new Date().getFullYear() + ' Twitter, Inc.\n' +
' * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n' +
' */\n\n'
@@ -22,8 +22,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
function showError(msg, err) {
$('<div id="bsCustomizerAlert" class="bs-customizer-alert">' +
'<div class="container">' +
- '<a href="#bsCustomizerAlert" data-dismiss="alert" class="close pull-right">&times;</a>' +
- '<p class="bs-customizer-alert-text"><span class="glyphicon glyphicon-warning-sign"></span>' + msg + '</p>' +
+ '<a href="#bsCustomizerAlert" data-dismiss="alert" class="close pull-right" aria-label="Close" role="button"><span aria-hidden="true">&times;</span></a>' +
+ '<p class="bs-customizer-alert-text"><span class="glyphicon glyphicon-warning-sign" aria-hidden="true"></span><span class="sr-only">Warning:</span>' + msg + '</p>' +
(err.extract ? '<pre class="bs-customizer-alert-extract">' + err.extract.join('\n') + '</pre>' : '') +
'</div>' +
'</div>').appendTo('body').alert()
@@ -32,7 +32,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
function showSuccess(msg) {
$('<div class="bs-callout bs-callout-info">' +
- '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + msg +
+ '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' + msg +
'</div>').insertAfter('.bs-customize-download')
}
@@ -50,7 +50,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
}
function showAlert(type, msg, insertAfter) {
- $('<div class="alert alert-' + type + '">' + msg + '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button></div>')
+ $('<div class="alert alert-' + type + '">' + msg + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button></div>')
.insertAfter(insertAfter)
}
@@ -251,6 +251,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
}
function compileLESS(lessSource, baseFilename, intoResult) {
+ var promise = $.Deferred()
var parser = new less.Parser({
paths: ['variables.less', 'mixins.less'],
optimization: 0,
@@ -259,14 +260,18 @@ window.onload = function () { // wait for load in a dumb way because B-0
parser.parse(lessSource, function (err, tree) {
if (err) {
- return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)
+ return promise.reject(err)
}
intoResult[baseFilename + '.css'] = cw + tree.toCSS()
intoResult[baseFilename + '.min.css'] = cw + tree.toCSS({ compress: true })
+ promise.resolve()
})
+
+ return promise.promise()
}
function generateCSS(preamble) {
+ var promise = $.Deferred()
var oneChecked = false
var lessFileIncludes = {}
$('#less-section input').each(function () {
@@ -290,14 +295,22 @@ window.onload = function () { // wait for load in a dumb way because B-0
var bsLessSource = preamble + generateLESS('bootstrap.less', lessFileIncludes, vars)
var themeLessSource = preamble + generateLESS('theme.less', lessFileIncludes, vars)
- try {
- compileLESS(bsLessSource, 'bootstrap', result)
+ var prefixer = autoprefixer({ browsers: __configBridge.autoprefixerBrowsers })
+
+ $.when(
+ compileLESS(bsLessSource, 'bootstrap', result),
compileLESS(themeLessSource, 'bootstrap-theme', result)
- } catch (err) {
- return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)
- }
+ ).done(function () {
+ for (var key in result) {
+ result[key] = prefixer.process(result[key]).css
+ }
+ promise.resolve(result)
+ }).fail(function (err) {
+ showError('<strong>Ruh roh!</strong> Could not parse less files.', err)
+ promise.reject()
+ })
- return result
+ return promise.promise()
}
function uglify(js) {
@@ -319,19 +332,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
function generateJS(preamble) {
var $checked = $('#plugin-section input:checked')
- var jqueryCheck = [
- 'if (typeof jQuery === \'undefined\') {',
- ' throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\')',
- '}\n'
- ].join('\n')
- var jqueryVersionCheck = [
- '+function ($) {',
- ' var version = $.fn.jquery.split(\' \')[0].split(\'.\')',
- ' if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {',
- ' throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery version 1.9.1 or higher\')',
- ' }',
- '}(jQuery);\n\n'
- ].join('\n')
+ var jqueryCheck = __configBridge.jqueryCheck.join('\n')
+ var jqueryVersionCheck = __configBridge.jqueryVersionCheck.join('\n')
if (!$checked.length) return false
@@ -359,32 +361,26 @@ window.onload = function () { // wait for load in a dumb way because B-0
var file = (e.originalEvent.hasOwnProperty('dataTransfer')) ? e.originalEvent.dataTransfer.files[0] : e.originalEvent.target.files[0]
- if (!file.type.match('application/json')) {
- return showAlert('danger', '<strong>Ruh roh.</strong> We can only read <code>.json</code> files. Please try again.', importDropTarget)
- }
-
var reader = new FileReader()
- reader.onload = (function () {
- return function (e) {
- var text = e.target.result
+ reader.onload = function (e) {
+ var text = e.target.result
- try {
- var json = JSON.parse(text)
-
- if (typeof json != 'object') {
- throw new Error('JSON data from config file is not an object.')
- }
+ try {
+ var json = JSON.parse(text)
- updateCustomizerFromJson(json)
- showAlert('success', '<strong>Woohoo!</strong> Your configuration was successfully uploaded. Tweak your settings, then hit Download.', importDropTarget)
- } catch (err) {
- return showAlert('danger', '<strong>Shucks.</strong> We can only read valid <code>.json</code> files. Please try again.', importDropTarget)
+ if (!$.isPlainObject(json)) {
+ throw new Error('JSON data from config file is not an object.')
}
+
+ updateCustomizerFromJson(json)
+ showAlert('success', '<strong>Woohoo!</strong> Your configuration was successfully uploaded. Tweak your settings, then hit Download.', importDropTarget)
+ } catch (err) {
+ return showAlert('danger', '<strong>Shucks.</strong> We can only read valid <code>.json</code> files. Please try again.', importDropTarget)
}
- })(file)
+ }
- reader.readAsText(file)
+ reader.readAsText(file, 'utf-8')
}
function handleConfigDragOver(e) {
@@ -401,7 +397,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
.on('drop', handleConfigFileSelect)
}
- $('#import-file-select').on('select', handleConfigFileSelect)
+ $('#import-file-select').on('change', handleConfigFileSelect)
$('#import-manual-trigger').on('click', removeImportAlerts)
var inputsComponent = $('#less-section input')
@@ -464,9 +460,15 @@ window.onload = function () { // wait for load in a dumb way because B-0
' * Config saved to config.json and ' + gistUrl + '\n' +
' */\n'
- generateZip(generateCSS(preamble), generateJS(preamble), generateFonts(), configJson, function (blob) {
- $compileBtn.removeAttr('disabled')
- saveAs(blob, 'bootstrap.zip')
+ $.when(
+ generateCSS(preamble),
+ generateJS(preamble),
+ generateFonts()
+ ).done(function (css, js, fonts) {
+ generateZip(css, js, fonts, configJson, function (blob) {
+ $compileBtn.removeAttr('disabled')
+ setTimeout(function () { saveAs(blob, 'bootstrap.zip') }, 0)
+ })
})
})
});