diff options
Diffstat (limited to 'docs/assets/js/src')
| -rw-r--r-- | docs/assets/js/src/application.js | 11 | ||||
| -rw-r--r-- | docs/assets/js/src/customizer.js | 102 |
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">×</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">×</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">×</button>' + msg + + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</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">×</button></div>') + $('<div class="alert alert-' + type + '">' + msg + '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</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) + }) }) }) }); |
