Commit 4fc29077 authored by Mark Otto's avatar Mark Otto

Merge branch 'master' into docs_derp

Conflicts:
	docs-assets/css/docs.css
	docs-assets/js/application.js
parents 0e8baab3 9966d035
{
"always-semicolon": true,
"block-indent": 2,
"colon-space": true,
"color-case": "lower",
"color-shorthand": true,
"combinator-space": true,
"element-case": "lower",
"eof-newline": true,
"leading-zero": false,
"remove-empty-rulesets": true,
"rule-indent": 2,
"stick-brace": true,
"strip-spaces": true,
"unitless-zero": true,
"vendor-prefix-align": true,
"sort-order": [
[
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"display",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"-webkit-box-sizing",
"-moz-box-sizing",
"box-sizing",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-ms-overflow-x",
"-ms-overflow-y",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"-webkit-hyphens",
"-moz-hyphens",
"hyphens",
"line-height",
"color",
"text-align",
"-webkit-text-align-last",
"-moz-text-align-last",
"-ms-text-align-last",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"-moz-tab-size",
"-o-tab-size",
"tab-size",
"white-space",
"vertical-align",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"cursor",
"visibility",
"zoom",
"flex-direction",
"flex-order",
"flex-pack",
"flex-align",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"-webkit-user-select",
"-moz-user-select",
"-ms-user-select",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
"background",
"background-color",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
"filter:progid:DXImageTransform.Microsoft.gradient",
"background-image",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"-webkit-background-clip",
"-moz-background-clip",
"background-clip",
"background-origin",
"-webkit-background-size",
"-moz-background-size",
"-o-background-size",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"-webkit-border-image",
"-moz-border-image",
"-o-border-image",
"border-image",
"-webkit-border-image-source",
"-moz-border-image-source",
"-o-border-image-source",
"border-image-source",
"-webkit-border-image-slice",
"-moz-border-image-slice",
"-o-border-image-slice",
"border-image-slice",
"-webkit-border-image-width",
"-moz-border-image-width",
"-o-border-image-width",
"border-image-width",
"-webkit-border-image-outset",
"-moz-border-image-outset",
"-o-border-image-outset",
"border-image-outset",
"-webkit-border-image-repeat",
"-moz-border-image-repeat",
"-o-border-image-repeat",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"-webkit-box-shadow",
"-moz-box-shadow",
"box-shadow",
"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
"-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
"opacity",
"-ms-interpolation-mode",
"-webkit-transition",
"-moz-transition",
"-ms-transition",
"-o-transition",
"transition",
"-webkit-transition-delay",
"-moz-transition-delay",
"-ms-transition-delay",
"-o-transition-delay",
"transition-delay",
"-webkit-transition-timing-function",
"-moz-transition-timing-function",
"-ms-transition-timing-function",
"-o-transition-timing-function",
"transition-timing-function",
"-webkit-transition-duration",
"-moz-transition-duration",
"-ms-transition-duration",
"-o-transition-duration",
"transition-duration",
"-webkit-transition-property",
"-moz-transition-property",
"-ms-transition-property",
"-o-transition-property",
"transition-property",
"-webkit-transform",
"-moz-transform",
"-ms-transform",
"-o-transform",
"transform",
"-webkit-transform-origin",
"-moz-transform-origin",
"-ms-transform-origin",
"-o-transform-origin",
"transform-origin",
"-webkit-animation",
"-moz-animation",
"-ms-animation",
"-o-animation",
"animation",
"-webkit-animation-name",
"-moz-animation-name",
"-ms-animation-name",
"-o-animation-name",
"animation-name",
"-webkit-animation-duration",
"-moz-animation-duration",
"-ms-animation-duration",
"-o-animation-duration",
"animation-duration",
"-webkit-animation-play-state",
"-moz-animation-play-state",
"-ms-animation-play-state",
"-o-animation-play-state",
"animation-play-state",
"-webkit-animation-timing-function",
"-moz-animation-timing-function",
"-ms-animation-timing-function",
"-o-animation-timing-function",
"animation-timing-function",
"-webkit-animation-delay",
"-moz-animation-delay",
"-ms-animation-delay",
"-o-animation-delay",
"animation-delay",
"-webkit-animation-iteration-count",
"-moz-animation-iteration-count",
"-ms-animation-iteration-count",
"-o-animation-iteration-count",
"animation-iteration-count",
"-webkit-animation-direction",
"-moz-animation-direction",
"-ms-animation-direction",
"-o-animation-direction",
"animation-direction"
]
]
}
{
"adjoining-classes": false,
"box-sizing": false,
"box-model": false,
"compatible-vendor-prefixes": false,
"floats": false,
"font-sizes": false,
"gradients": false,
"important": false,
"known-properties": false,
"outline-none": false,
"qualified-headings": false,
"regex-selectors": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false
}
# Enforce Unix newlines
*.css text eol=lf
*.html text eol=lf
*.js text eol=lf
*.json text eol=lf
*.less text eol=lf
*.md text eol=lf
*.yml text eol=lf
...@@ -6,6 +6,5 @@ before_script: ...@@ -6,6 +6,5 @@ before_script:
- npm install -g grunt-cli - npm install -g grunt-cli
env: env:
global: global:
- secure: Besg41eyU+2mfxrywQ4ydOShMdc34ImaO0S0ENP+aCOBuyNBIgP59wy5tBMmyai2/8eInYeVps4Td96mWInMMxzTe3Bar7eTLG5tWVKRSr/wc4NBPZ/ppoPAmCEsz9Y+VptRH9/FO8n7hsL9EFZ+xBKbG+C0SccGoyBDpA5j7/w= - SAUCE_USERNAME: bootstrap
- secure: Ptiv7phCImFP3ALIz+sMQzrZg8k7C1gLZbFBhWxjnQr3g06wIfX3Ls5y9OHvxid+lOZZjISui3wzBVgpVHqwHUYf96+r0mo6/mJ+F4ffUmShZANVaIMD/JRTnXhUQJbvntGLvxn1EYWPdNM+2IHJrMipnjHxU9tkgAnlel4Zdew= - secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ="
- TWBS_HAVE_OWN_BROWSERSTACK_KEY: ""
...@@ -17,7 +17,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ...@@ -17,7 +17,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso
## Pull requests ## Pull requests
- CSS changes must be done in `.less` files first, never just the compiled `.css` files - CSS changes must be done in `.less` files first, never just in the compiled `.css` files
- If modifying the `.less` files, always recompile and commit the compiled files `bootstrap.css` and `bootstrap.min.css` - If modifying the `.less` files, always recompile and commit the compiled files `bootstrap.css` and `bootstrap.min.css`
- Try not to pollute your pull request with unintended changes--keep them simple and small - Try not to pollute your pull request with unintended changes--keep them simple and small
- Try to share which browsers your code has been tested in before submitting a pull request - Try to share which browsers your code has been tested in before submitting a pull request
...@@ -58,7 +58,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ...@@ -58,7 +58,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso
With v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). We're in the process of collecting permissions from all Bootstrap contributors with code still part of the project to make this happen. For details, please see [#2054](https://github.com/twbs/bootstrap/issues/2054). With v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). We're in the process of collecting permissions from all Bootstrap contributors with code still part of the project to make this happen. For details, please see [#2054](https://github.com/twbs/bootstrap/issues/2054).
By contributing your code, you agree to dual-license your contribution under the [Apache 2](https://github.com/twbs/bootstrap/blob/master/LICENSE) and [MIT](https://github.com/twbs/bootstrap/blob/master/MIT) licenses. By contributing your code, you agree to dual-license your contribution under the [Apache 2](https://github.com/twbs/bootstrap/blob/master/LICENSE) and [MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE-MIT) licenses.
......
/* jshint node: true */ /* jshint node: true */
module.exports = function(grunt) { module.exports = function (grunt) {
"use strict"; 'use strict';
// Force use of Unix newlines
grunt.util.linefeed = '\n';
RegExp.quote = require('regexp-quote') RegExp.quote = require('regexp-quote')
var btoa = require('btoa') var btoa = require('btoa')
...@@ -11,11 +14,9 @@ module.exports = function(grunt) { ...@@ -11,11 +14,9 @@ module.exports = function(grunt) {
// Metadata. // Metadata.
pkg: grunt.file.readJSON('package.json'), pkg: grunt.file.readJSON('package.json'),
banner: '/*!\n' + banner: '/*!\n' +
' * Bootstrap v<%= pkg.version %> by @fat and @mdo\n' + ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + ' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
' * Licensed under <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' + ' * Licensed under <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' +
' *\n' +
' * Designed and built with all the love in the world by @mdo and @fat.\n' +
' */\n\n', ' */\n\n',
jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n', jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n',
...@@ -36,9 +37,34 @@ module.exports = function(grunt) { ...@@ -36,9 +37,34 @@ module.exports = function(grunt) {
}, },
test: { test: {
src: ['js/tests/unit/*.js'] src: ['js/tests/unit/*.js']
},
assets: {
src: ['docs-assets/js/application.js', 'docs-assets/js/customizer.js']
} }
}, },
jscs: {
options: {
config: 'js/.jscs.json',
},
gruntfile: {
src: ['Gruntfile.js']
},
src: {
src: ['js/*.js']
},
test: {
src: ['js/tests/unit/*.js']
}
},
csslint: {
options: {
csslintrc: '.csslintrc'
},
src: ['dist/css/bootstrap.css', 'dist/css/bootstrap-theme.css']
},
concat: { concat: {
options: { options: {
banner: '<%= banner %><%= jqueryCheck %>', banner: '<%= banner %><%= jqueryCheck %>',
...@@ -71,42 +97,74 @@ module.exports = function(grunt) { ...@@ -71,42 +97,74 @@ module.exports = function(grunt) {
bootstrap: { bootstrap: {
src: ['<%= concat.bootstrap.dest %>'], src: ['<%= concat.bootstrap.dest %>'],
dest: 'dist/js/<%= pkg.name %>.min.js' dest: 'dist/js/<%= pkg.name %>.min.js'
},
customize: {
src: [
'docs-assets/js/less.js',
'docs-assets/js/jszip.js',
'docs-assets/js/uglify.js',
'docs-assets/js/filesaver.js',
'docs-assets/js/customizer.js'
],
dest: 'docs-assets/js/customize.js'
} }
}, },
recess: { less: {
options: { compile: {
compile: true,
banner: '<%= banner %>'
},
bootstrap: {
src: ['less/bootstrap.less'],
dest: 'dist/css/<%= pkg.name %>.css'
},
min: {
options: { options: {
compress: true strictMath: true
}, },
src: ['less/bootstrap.less'], files: {
dest: 'dist/css/<%= pkg.name %>.min.css' 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less',
}, 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less'
theme: { }
src: ['less/theme.less'],
dest: 'dist/css/<%= pkg.name %>-theme.css'
}, },
theme_min: { minify: {
options: {
cleancss: true,
report: 'min'
},
files: {
'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'
}
}
},
usebanner: {
dist: {
options: { options: {
compress: true position: 'top',
banner: '<%= banner %>'
}, },
src: ['less/theme.less'], files: {
dest: 'dist/css/<%= pkg.name %>-theme.min.css' src: [
'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>.min.css',
'dist/css/<%= pkg.name %>-theme.css',
'dist/css/<%= pkg.name %>-theme.min.css',
]
}
}
},
csscomb: {
sort: {
options: {
sortOrder: '.csscomb.json'
},
files: {
'dist/css/<%= pkg.name %>.css': ['dist/css/<%= pkg.name %>.css'],
'dist/css/<%= pkg.name %>-theme.css': ['dist/css/<%= pkg.name %>-theme.css'],
}
} }
}, },
copy: { copy: {
fonts: { fonts: {
expand: true, expand: true,
src: ["fonts/*"], src: ['fonts/*'],
dest: 'dist/' dest: 'dist/'
} }
}, },
...@@ -135,12 +193,12 @@ module.exports = function(grunt) { ...@@ -135,12 +193,12 @@ module.exports = function(grunt) {
options: { options: {
reset: true, reset: true,
relaxerror: [ relaxerror: [
"Bad value X-UA-Compatible for attribute http-equiv on element meta.", 'Bad value X-UA-Compatible for attribute http-equiv on element meta.',
"Element img is missing required attribute src." 'Element img is missing required attribute src.'
] ]
}, },
files: { files: {
src: ["_gh_pages/**/*.html"] src: ['_gh_pages/**/*.html']
} }
}, },
...@@ -153,9 +211,9 @@ module.exports = function(grunt) { ...@@ -153,9 +211,9 @@ module.exports = function(grunt) {
files: '<%= jshint.test.src %>', files: '<%= jshint.test.src %>',
tasks: ['jshint:test', 'qunit'] tasks: ['jshint:test', 'qunit']
}, },
recess: { less: {
files: 'less/*.less', files: 'less/*.less',
tasks: ['recess'] tasks: ['less']
} }
}, },
...@@ -168,36 +226,116 @@ module.exports = function(grunt) { ...@@ -168,36 +226,116 @@ module.exports = function(grunt) {
replacement: grunt.option('newver'), replacement: grunt.option('newver'),
recursive: true recursive: true
} }
},
'saucelabs-qunit': {
all: {
options: {
build: process.env.TRAVIS_JOB_ID,
concurrency: 3,
urls: ['http://127.0.0.1:3000/js/tests/index.html'],
browsers: [
// See https://saucelabs.com/docs/platforms/webdriver
{
browserName: 'safari',
version: '6',
platform: 'OS X 10.8'
},
{
browserName: 'chrome',
version: '28',
platform: 'OS X 10.6'
},
/* FIXME: currently fails 1 tooltip test
{
browserName: 'firefox',
version: '25',
platform: 'OS X 10.6'
},*/
// Mac Opera not currently supported by Sauce Labs
/* FIXME: currently fails 1 tooltip test
{
browserName: 'internet explorer',
version: '11',
platform: 'Windows 8.1'
},*/
/*
{
browserName: 'internet explorer',
version: '10',
platform: 'Windows 8'
},
{
browserName: 'internet explorer',
version: '9',
platform: 'Windows 7'
},
{
browserName: 'internet explorer',
version: '8',
platform: 'Windows 7'
},
{// unofficial
browserName: 'internet explorer',
version: '7',
platform: 'Windows XP'
},
*/
{
browserName: 'chrome',
version: '31',
platform: 'Windows 8.1'
},
{
browserName: 'firefox',
version: '25',
platform: 'Windows 8.1'
},
// Win Opera 15+ not currently supported by Sauce Labs
{
browserName: 'iphone',
version: '6.1',
platform: 'OS X 10.8'
},
// iOS Chrome not currently supported by Sauce Labs
// Linux (unofficial)
{
browserName: 'chrome',
version: '30',
platform: 'Linux'
},
{
browserName: 'firefox',
version: '25',
platform: 'Linux'
}
// Android Chrome not currently supported by Sauce Labs
/* Android Browser (super-unofficial)
{
browserName: 'android',
version: '4.0',
platform: 'Linux'
}
*/
],
}
}
} }
}); });
// These plugins provide necessary tasks. // These plugins provide necessary tasks.
grunt.loadNpmTasks('browserstack-runner'); require('load-grunt-tasks')(grunt, {scope: 'devDependencies'});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-html-validation');
grunt.loadNpmTasks('grunt-jekyll');
grunt.loadNpmTasks('grunt-recess');
grunt.loadNpmTasks('grunt-sed');
// Docs HTML validation task // Docs HTML validation task
grunt.registerTask('validate-html', ['jekyll', 'validation']); grunt.registerTask('validate-html', ['jekyll', 'validation']);
// Test task. // Test task.
var testSubtasks = ['dist-css', 'jshint', 'qunit', 'validate-html']; var testSubtasks = ['dist-css', 'jshint', 'jscs', 'qunit', 'validate-html'];
// Only run BrowserStack tests under Travis // Only run Sauce Labs tests if there's a Sauce access key
if (process.env.TRAVIS) { if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined') {
// Only run BrowserStack tests if this is a mainline commit in twbs/bootstrap, or you have your own BrowserStack key testSubtasks.push('connect');
if ((process.env.TRAVIS_REPO_SLUG === 'twbs/bootstrap' && process.env.TRAVIS_PULL_REQUEST === 'false') || process.env.TWBS_HAVE_OWN_BROWSERSTACK_KEY) { testSubtasks.push('saucelabs-qunit');
testSubtasks.push('browserstack_runner');
}
} }
grunt.registerTask('test', testSubtasks); grunt.registerTask('test', testSubtasks);
...@@ -205,7 +343,7 @@ module.exports = function(grunt) { ...@@ -205,7 +343,7 @@ module.exports = function(grunt) {
grunt.registerTask('dist-js', ['concat', 'uglify']); grunt.registerTask('dist-js', ['concat', 'uglify']);
// CSS distribution task. // CSS distribution task.
grunt.registerTask('dist-css', ['recess']); grunt.registerTask('dist-css', ['less', 'csscomb', 'usebanner']);
// Fonts distribution task. // Fonts distribution task.
grunt.registerTask('dist-fonts', ['copy']); grunt.registerTask('dist-fonts', ['copy']);
......
# [Bootstrap](http://getbootstrap.com) [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.png)](http://travis-ci.org/twbs/bootstrap) [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.png)](https://david-dm.org/twbs/bootstrap#info=devDependencies) # [Bootstrap](http://getbootstrap.com) [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.png)](http://travis-ci.org/twbs/bootstrap) [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.png)](https://david-dm.org/twbs/bootstrap#info=devDependencies)
[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap)
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat). Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat).
...@@ -10,7 +11,7 @@ To get started, check out <http://getbootstrap.com>! ...@@ -10,7 +11,7 @@ To get started, check out <http://getbootstrap.com>!
Three quick start options are available: Three quick start options are available:
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.0.2.zip). * [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.0.3.zip).
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. * Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
* Install with [Bower](http://bower.io): `bower install bootstrap`. * Install with [Bower](http://bower.io): `bower install bootstrap`.
...@@ -56,8 +57,9 @@ Bootstrap's documentation, included in this repo in the root directory, is built ...@@ -56,8 +57,9 @@ Bootstrap's documentation, included in this repo in the root directory, is built
### Running documentation locally ### Running documentation locally
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v1.x). 1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v1.x).
- **Windows users:** read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems.
2. From the root `/bootstrap` directory, run `jekyll serve` in the command line. 2. From the root `/bootstrap` directory, run `jekyll serve` in the command line.
- **Windows users:** run `chcp 65001` first to change the command prompt's character encoding ([code page](http://en.wikipedia.org/wiki/Windows_code_page)) to UTF-8 so Jekyll runs without errors. - **Windows users:** For Ruby 2.0.0 run `chcp 65001` first to change the command prompt's character encoding ([code page](http://en.wikipedia.org/wiki/Windows_code_page)) to UTF-8 so Jekyll runs without errors. For Ruby 1.9.3 you can alternatively do `SET LANG=en_EN.UTF-8`. In addition, ensure you have Python installed and added in your `PATH` or the build will fail due to our Pygments dependency.
3. Open <http://localhost:9001> in your browser, and voilà. 3. Open <http://localhost:9001> in your browser, and voilà.
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).
...@@ -122,7 +124,6 @@ Keep track of development and community news. ...@@ -122,7 +124,6 @@ Keep track of development and community news.
* Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). * Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap).
* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com). * Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
* Have a question that's not a feature request or bug report? [Ask on the mailing list.](http://groups.google.com/group/twitter-bootstrap)
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. * Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel.
......
...@@ -11,15 +11,15 @@ exclude: [".editorconfig", ".gitignore", "bower.json", "composer.json", ...@@ -11,15 +11,15 @@ exclude: [".editorconfig", ".gitignore", "bower.json", "composer.json",
port: 9001 port: 9001
# Custom vars # Custom vars
current_version: 3.0.2 current_version: 3.0.3
repo: https://github.com/twbs/bootstrap repo: https://github.com/twbs/bootstrap
download_source: https://github.com/twbs/bootstrap/archive/v3.0.2.zip download_source: https://github.com/twbs/bootstrap/archive/v3.0.3.zip
download_dist: https://github.com/twbs/bootstrap/releases/download/v3.0.2/bootstrap-3.0.2-dist.zip download_dist: https://github.com/twbs/bootstrap/releases/download/v3.0.3/bootstrap-3.0.3-dist.zip
blog: http://blog.getbootstrap.com blog: http://blog.getbootstrap.com
expo: http://expo.getbootstrap.com expo: http://expo.getbootstrap.com
cdn_css: //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css cdn_css: //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css
cdn_theme_css: //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap-theme.min.css cdn_theme_css: //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap-theme.min.css
cdn_js: //netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js cdn_js: //netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js
...@@ -25,23 +25,33 @@ ...@@ -25,23 +25,33 @@
<!-- Bootstrap core JavaScript <!-- Bootstrap core JavaScript
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="{{ page.base_url }}dist/js/bootstrap.js"></script> <script src="{{ page.base_url }}dist/js/bootstrap.min.js"></script>
<script src="http://platform.twitter.com/widgets.js"></script>
<script src="{{ page.base_url }}docs-assets/js/holder.js"></script> <script src="{{ page.base_url }}docs-assets/js/holder.js"></script>
<script src="{{ page.base_url }}docs-assets/js/application.js"></script> <script src="{{ page.base_url }}docs-assets/js/application.js"></script>
{% if page.slug == "customize" %} {% if page.slug == "customize" %}
<script src="{{ page.base_url }}docs-assets/js/less.js"></script>
<script src="{{ page.base_url }}docs-assets/js/jszip.js"></script>
<script src="{{ page.base_url }}docs-assets/js/uglify.js"></script>
<script src="{{ page.base_url }}docs-assets/js/filesaver.js"></script>
<script src="{{ page.base_url }}docs-assets/js/raw-files.js"></script> <script src="{{ page.base_url }}docs-assets/js/raw-files.js"></script>
<script src="{{ page.base_url }}docs-assets/js/customizer.js"></script> <script src="{{ page.base_url }}docs-assets/js/customize.js"></script>
{% endif %} {% endif %}
{% comment %}
Inject Twitter widgets asynchronously. Snippet snipped from Twitter's
JS interface site: https://dev.twitter.com/docs/tfw-javascript
* "js.async=1;" added to add async attribute to the generated script tag.
{% endcomment %}
<script>
window.twttr = (function (d,s,id) {
var t, js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return; js=d.createElement(s); js.id=id; js.async=1;
js.src="https://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);
return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });
}(document, "script", "twitter-wjs"));
</script>
<!-- Analytics <!-- Analytics
================================================== --> ================================================== -->
<script> <script>
......
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="Bootstrap, a sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.">
<meta name="author" content=""> <meta name="keywords" content="HTML, CSS, JS, JavaScript, framework, bootstrap, front-end, frontend, web development">
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
<title> <title>
{% if page.title == "Bootstrap" %} {% if page.title == "Bootstrap" %}
......
...@@ -121,6 +121,7 @@ ...@@ -121,6 +121,7 @@
<li><a href="#list-group-basic">Basic example</a></li> <li><a href="#list-group-basic">Basic example</a></li>
<li><a href="#list-group-badges">Badges</a></li> <li><a href="#list-group-badges">Badges</a></li>
<li><a href="#list-group-linked">Linked items</a></li> <li><a href="#list-group-linked">Linked items</a></li>
<li><a href="#list-group-contextual-classes">Contextual classes</a></li>
<li><a href="#list-group-custom-content">Custom content</a></li> <li><a href="#list-group-custom-content">Custom content</a></li>
</ul> </ul>
</li> </li>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<li><a href="#grid-media-queries">Media queries</a></li> <li><a href="#grid-media-queries">Media queries</a></li>
<li><a href="#grid-options">Grid options</a></li> <li><a href="#grid-options">Grid options</a></li>
<li><a href="#grid-example-basic">Ex: Stacked-to-horizonal</a></li> <li><a href="#grid-example-basic">Ex: Stacked-to-horizonal</a></li>
<li><a href="#grid-example-fluid">Ex: Fluid container</a></li>
<li><a href="#grid-example-mixed">Ex: Mobile and desktops</a></li> <li><a href="#grid-example-mixed">Ex: Mobile and desktops</a></li>
<li><a href="#grid-example-mixed-complete">Ex: Mobile, tablet, desktops</a></li> <li><a href="#grid-example-mixed-complete">Ex: Mobile, tablet, desktops</a></li>
<li><a href="#grid-responsive-resets">Responsive column resets</a></li> <li><a href="#grid-responsive-resets">Responsive column resets</a></li>
...@@ -37,7 +38,14 @@ ...@@ -37,7 +38,14 @@
<li><a href="#type-lists">Lists</a></li> <li><a href="#type-lists">Lists</a></li>
</ul> </ul>
</li> </li>
<li><a href="#code">Code</a></li> <li>
<a href="#code">Code</a>
<ul class="nav">
<li><a href="#code-inline">Inline code</a></li>
<li><a href="#code-user-input">User input</a></li>
<li><a href="#code-block">Blocks of code</a></li>
</ul>
</li>
<li> <li>
<a href="#tables">Tables</a> <a href="#tables">Tables</a>
<ul class="nav"> <ul class="nav">
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
</li> </li>
<li> <li>
<a href="#whats-included">What's included</a> <a href="#whats-included">What's included</a>
<ul class="nav">
<li><a href="#whats-included-precompiled">Precompiled</a></li>
<li><a href="#whats-included-source">Source code</a></li>
</ul>
</li> </li>
<li> <li>
<a href="#template">Basic template</a> <a href="#template">Basic template</a>
......
...@@ -89,7 +89,6 @@ base_url: "../" ...@@ -89,7 +89,6 @@ base_url: "../"
<p class="lead">Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.</p> <p class="lead">Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.</p>
<ul> <ul>
<li>Read and subscribe to <a href="http://blog.getbootstrap.com/">The Official Bootstrap Blog</a>.</li> <li>Read and subscribe to <a href="http://blog.getbootstrap.com/">The Official Bootstrap Blog</a>.</li>
<li>Have a question that's not a feature request or bug report? <a href="http://groups.google.com/group/twitter-bootstrap">Ask on the mailing list.</a></li>
<li>Chat with fellow Bootstrappers using IRC in the <code>irc.freenode.net</code> server, in the <a href="irc://irc.freenode.net/#twitter-bootstrap">##twitter-bootstrap channel</a>.</li> <li>Chat with fellow Bootstrappers using IRC in the <code>irc.freenode.net</code> server, in the <a href="irc://irc.freenode.net/#twitter-bootstrap">##twitter-bootstrap channel</a>.</li>
<li>Find inspiring examples of people building with Bootstrap at the <a href="http://expo.getbootstrap.com">Bootstrap Expo</a>.</li> <li>Find inspiring examples of people building with Bootstrap at the <a href="http://expo.getbootstrap.com">Bootstrap Expo</a>.</li>
</ul> </ul>
...@@ -108,6 +107,8 @@ base_url: "../" ...@@ -108,6 +107,8 @@ base_url: "../"
<li><a href="http://v3.bootcss.com/">Bootstrap 中文文档 (Chinese)</a></li> <li><a href="http://v3.bootcss.com/">Bootstrap 中文文档 (Chinese)</a></li>
<li><a href="http://www.oneskyapp.com/docs/bootstrap/ru">Bootstrap по-русски (Russian)</a></li> <li><a href="http://www.oneskyapp.com/docs/bootstrap/ru">Bootstrap по-русски (Russian)</a></li>
<li><a href="http://www.oneskyapp.com/docs/bootstrap/es">Bootstrap en Español (Spanish)</a></li> <li><a href="http://www.oneskyapp.com/docs/bootstrap/es">Bootstrap en Español (Spanish)</a></li>
<li><a href="http://twbs.site-konstruktor.com.ua">Bootstrap ua Українською (Ukrainian)</a></li>
<li><a href="http://www.oneskyapp.com/docs/bootstrap/fr">Bootstrap en Français (French)</a></li>
</ul> </ul>
<p>Have another language to add, or perhaps a different or better translation? Let us know by <a href="https://github.com/twbs/bootstrap/issues/new">opening an issue</a>.</p> <p>Have another language to add, or perhaps a different or better translation? Let us know by <a href="https://github.com/twbs/bootstrap/issues/new">opening an issue</a>.</p>
</div> </div>
{ {
"name": "bootstrap", "name": "bootstrap",
"version": "3.0.2", "version": "3.0.3",
"main": ["./dist/js/bootstrap.js", "./dist/css/bootstrap.css", "./dist/fonts/*"], "main": [
"./dist/js/bootstrap.js",
"./dist/css/bootstrap.css",
"./dist/fonts/glyphicons-halflings-regular.eot",
"./dist/fonts/glyphicons-halflings-regular.svg",
"./dist/fonts/glyphicons-halflings-regular.ttf",
"./dist/fonts/glyphicons-halflings-regular.woff"
],
"ignore": [ "ignore": [
"**/.*", "**/.*",
"_*", "_*",
...@@ -11,10 +18,7 @@ ...@@ -11,10 +18,7 @@
"js/tests", "js/tests",
"CNAME", "CNAME",
"CONTRIBUTING.md", "CONTRIBUTING.md",
"Gruntfile.js",
"browserstack.json",
"composer.json", "composer.json",
"package.json",
"*.html" "*.html"
], ],
"dependencies": { "dependencies": {
......
{
"username": "--secure--",
"key": "--secure--",
"test_path": "js/tests/index.html",
"browsers": [
{
"browser": "firefox",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "safari",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "chrome",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "firefox",
"browser_version": "latest",
"os": "Windows",
"os_version": "7"
},
{
"browser": "chrome",
"browser_version": "latest",
"os": "Windows",
"os_version": "7"
}
]
}
This diff is collapsed.
...@@ -54,7 +54,8 @@ base_url: "../" ...@@ -54,7 +54,8 @@ base_url: "../"
<p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p> <p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p>
<h3 id="overview-container">Containers</h3> <h3 id="overview-container">Containers</h3>
<p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p> <p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>width</code> at various media query breakpoints to match our grid system.</p>
<p>Note that, due to <code>padding</code> and fixed widths, containers are not nestable by default.</p>
{% highlight html %} {% highlight html %}
<div class="container"> <div class="container">
... ...
...@@ -75,7 +76,7 @@ base_url: "../" ...@@ -75,7 +76,7 @@ base_url: "../"
<h3 id="grid-intro">Introduction</h3> <h3 id="grid-intro">Introduction</h3>
<p>Grid systems are used for creating page layouts through a series of rows and columns that house your content. Here's how the Bootstrap grid system works:</p> <p>Grid systems are used for creating page layouts through a series of rows and columns that house your content. Here's how the Bootstrap grid system works:</p>
<ul> <ul>
<li>Rows must be placed within a <code>.container</code> for proper alignment and padding.</li> <li>Rows must be placed within a <code>.container</code> (fixed-width) or <code>.container-fluid</code> (full-width) for proper alignment and padding.</li>
<li>Use rows to create horizontal groups of columns.</li> <li>Use rows to create horizontal groups of columns.</li>
<li>Content should be placed within columns, and only columns may be immediate children of rows.</li> <li>Content should be placed within columns, and only columns may be immediate children of rows.</li>
<li>Predefined grid classes like <code>.row</code> and <code>.col-xs-4</code> are available for quickly making grid layouts. LESS mixins can also be used for more semantic layouts.</li> <li>Predefined grid classes like <code>.row</code> and <code>.col-xs-4</code> are available for quickly making grid layouts. LESS mixins can also be used for more semantic layouts.</li>
...@@ -144,7 +145,7 @@ base_url: "../" ...@@ -144,7 +145,7 @@ base_url: "../"
<td colspan="3">Collapsed to start, horizontal above breakpoints</td> <td colspan="3">Collapsed to start, horizontal above breakpoints</td>
</tr> </tr>
<tr> <tr>
<th>Max container width</th> <th>Container width</th>
<td>None (auto)</td> <td>None (auto)</td>
<td>750px</td> <td>750px</td>
<td>970px</td> <td>970px</td>
...@@ -178,13 +179,11 @@ base_url: "../" ...@@ -178,13 +179,11 @@ base_url: "../"
</tr> </tr>
<tr> <tr>
<th>Offsets</th> <th>Offsets</th>
<td colspan="1" class="text-muted">N/A</td> <td colspan="4">Yes</td>
<td colspan="3">Yes</td>
</tr> </tr>
<tr> <tr>
<th>Column ordering</th> <th>Column ordering</th>
<td class="text-muted">N/A</td> <td colspan="4">Yes</td>
<td colspan="3">Yes</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
...@@ -250,6 +249,16 @@ base_url: "../" ...@@ -250,6 +249,16 @@ base_url: "../"
<div class="col-md-6">.col-md-6</div> <div class="col-md-6">.col-md-6</div>
<div class="col-md-6">.col-md-6</div> <div class="col-md-6">.col-md-6</div>
</div> </div>
{% endhighlight %}
<h3 id="grid-example-fluid">Example: Fluid container</h3>
<p>Turn any fixed-width grid layout into a full-width layout by changing your outermost <code>.container</code> to <code>.container-fluid</code>.</p>
{% highlight html %}
<div class="container-fluid">
<div class="row">
...
</div>
</div>
{% endhighlight %} {% endhighlight %}
<h3 id="grid-example-mixed">Example: Mobile and desktop</h3> <h3 id="grid-example-mixed">Example: Mobile and desktop</h3>
...@@ -871,7 +880,7 @@ base_url: "../" ...@@ -871,7 +880,7 @@ base_url: "../"
<p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p> <p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p>
<h4>Naming a source</h4> <h4>Naming a source</h4>
<p>Add <code>&lt;small&gt;</code> tag for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p> <p>Add <code>&lt;small&gt;</code> tag or <code>.small</code> class for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>
<div class="bs-example"> <div class="bs-example">
<blockquote> <blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
...@@ -1048,7 +1057,7 @@ base_url: "../" ...@@ -1048,7 +1057,7 @@ base_url: "../"
<h1 id="code">Code</h1> <h1 id="code">Code</h1>
</div> </div>
<h2>Inline</h2> <h2 id="code-inline">Inline</h2>
<p>Wrap inline snippets of code with <code>&lt;code&gt;</code>.</p> <p>Wrap inline snippets of code with <code>&lt;code&gt;</code>.</p>
<div class="bs-example"> <div class="bs-example">
For example, <code>&lt;section&gt;</code> should be wrapped as inline. For example, <code>&lt;section&gt;</code> should be wrapped as inline.
...@@ -1057,7 +1066,16 @@ base_url: "../" ...@@ -1057,7 +1066,16 @@ base_url: "../"
For example, <code>&lt;section&gt;</code> should be wrapped as inline. For example, <code>&lt;section&gt;</code> should be wrapped as inline.
{% endhighlight %} {% endhighlight %}
<h2>Basic block</h2> <h2 id="code-user-input">User input</h2>
<p>Use the <code>&lt;kbd&gt;</code> to indicate input that is typically entered via keyboard.</p>
<div class="bs-example">
To switch directories, type <kbd>cd</kbd> followed the name of the directory.
</div>
{% highlight html %}
To switch directories, type <kbd>cd</kbd> followed the name of the directory.
{% endhighlight %}
<h2 id="code-block">Basic block</h2>
<p>Use <code>&lt;pre&gt;</code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p> <p>Use <code>&lt;pre&gt;</code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p>
<div class="bs-example"> <div class="bs-example">
<pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre> <pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>
...@@ -1328,6 +1346,12 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1328,6 +1346,12 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
</td> </td>
<td>Indicates a dangerous or potentially negative action</td> <td>Indicates a dangerous or potentially negative action</td>
</tr> </tr>
<tr>
<td>
<code>.info</code>
</td>
<td>Indicates a neutral informative change or action</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
...@@ -1384,6 +1408,18 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1384,6 +1408,18 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<td>Column content</td> <td>Column content</td>
<td>Column content</td> <td>Column content</td>
</tr> </tr>
<tr>
<td>8</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="info">
<td>9</td>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
</tbody> </tbody>
</table> </table>
</div><!-- /example --> </div><!-- /example -->
...@@ -1393,6 +1429,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1393,6 +1429,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<tr class="success">...</tr> <tr class="success">...</tr>
<tr class="warning">...</tr> <tr class="warning">...</tr>
<tr class="danger">...</tr> <tr class="danger">...</tr>
<tr class="info">...</tr>
<!-- On cells (`td` or `th`) --> <!-- On cells (`td` or `th`) -->
<tr> <tr>
...@@ -1400,6 +1437,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1400,6 +1437,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<td class="success">...</td> <td class="success">...</td>
<td class="warning">...</td> <td class="warning">...</td>
<td class="danger">...</td> <td class="danger">...</td>
<td class="info">...</td>
</tr> </tr>
{% endhighlight %} {% endhighlight %}
...@@ -1567,7 +1605,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1567,7 +1605,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<h2 id="forms-inline">Inline form</h2> <h2 id="forms-inline">Inline form</h2>
<p>Add <code>.form-inline</code> for left-aligned and inline-block controls for a compact layout.</p> <p>Add <code>.form-inline</code> to your <code>&lt;form&gt;</code> for left-aligned and inline-block controls. <strong>This only applies to forms within viewports that are at least 768px wide.</strong></p>
<div class="bs-callout bs-callout-danger"> <div class="bs-callout bs-callout-danger">
<h4>Requires custom widths</h4> <h4>Requires custom widths</h4>
<p>Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.</p> <p>Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.</p>
......
...@@ -56,7 +56,7 @@ base_url: "../" ...@@ -56,7 +56,7 @@ base_url: "../"
</div> </div>
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" checked value="buttons.less"> <input type="checkbox" checked value="buttons.less" data-dependents="button-groups.less">
Buttons Buttons
</label> </label>
</div> </div>
...@@ -436,7 +436,7 @@ base_url: "../" ...@@ -436,7 +436,7 @@ base_url: "../"
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<label>@headings-font-family</label> <label>@headings-font-family</label>
<input type="text" class="form-control" placeholder="@font-family-base" data-var="@headings-font-family"> <input type="text" class="form-control" placeholder="inherit" data-var="@headings-font-family">
<label>@headings-font-weight</label> <label>@headings-font-weight</label>
<input type="text" class="form-control" placeholder="500" data-var="@headings-font-weight"> <input type="text" class="form-control" placeholder="500" data-var="@headings-font-weight">
</div> </div>
...@@ -1056,7 +1056,7 @@ base_url: "../" ...@@ -1056,7 +1056,7 @@ base_url: "../"
<p class="help-block">Hovered dropdown menu entry text color</p> <p class="help-block">Hovered dropdown menu entry text color</p>
<label>@dropdown-link-hover-bg</label> <label>@dropdown-link-hover-bg</label>
<input type="text" class="form-control" placeholder="#f5f5f5" data-var="@dropdown-link-hover-bg"> <input type="text" class="form-control" placeholder="#f5f5f5" data-var="@dropdown-link-hover-bg">
<p class="help-block">Hovered dropdown menu entry text color</p> <p class="help-block">Hovered dropdown menu entry background color</p>
<label>@dropdown-link-active-color</label> <label>@dropdown-link-active-color</label>
<input type="text" class="form-control" placeholder="@component-active-color" data-var="@dropdown-link-active-color"> <input type="text" class="form-control" placeholder="@component-active-color" data-var="@dropdown-link-active-color">
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
...@@ -624,14 +624,14 @@ h1[id] { ...@@ -624,14 +624,14 @@ h1[id] {
border-color: #faebcc; border-color: #faebcc;
} }
.bs-callout-warning h4 { .bs-callout-warning h4 {
color: #c09853; color: #8a6d3b;
} }
.bs-callout-info { .bs-callout-info {
background-color: #f4f8fa; background-color: #f4f8fa;
border-color: #bce8f1; border-color: #bce8f1;
} }
.bs-callout-info h4 { .bs-callout-info h4 {
color: #3a87ad; color: #34789a;
} }
...@@ -959,7 +959,6 @@ h1[id] { ...@@ -959,7 +959,6 @@ h1[id] {
*/ */
.highlight { .highlight {
display: none; /* hidden by default, until >480px */
padding: 9px 14px; padding: 9px 14px;
margin-bottom: 14px; margin-bottom: 14px;
background-color: #f7f7f9; background-color: #f7f7f9;
...@@ -987,13 +986,6 @@ h1[id] { ...@@ -987,13 +986,6 @@ h1[id] {
color: #bebec5; color: #bebec5;
} }
/* Show code snippets when we have the space */
@media (min-width: 481px) {
.highlight {
display: block;
}
}
/* /*
* Responsive tests * Responsive tests
...@@ -1075,20 +1067,19 @@ h1[id] { ...@@ -1075,20 +1067,19 @@ h1[id] {
*/ */
.bs-glyphicons { .bs-glyphicons {
margin: 0 -19px 20px -16px;
overflow: hidden;
}
.bs-glyphicons-list {
padding-left: 0; padding-left: 0;
padding-bottom: 1px;
margin-bottom: 20px;
margin-left: -1px;
margin-right: -1px;
list-style: none; list-style: none;
overflow: hidden;
} }
.bs-glyphicons li { .bs-glyphicons li {
float: left; float: left;
width: 25%; width: 25%;
height: 115px; height: 115px;
padding: 10px; padding: 10px;
font-size: 12px; font-size: 10px;
line-height: 1.4; line-height: 1.4;
text-align: center; text-align: center;
border: 1px solid #fff; border: 1px solid #fff;
...@@ -1102,6 +1093,7 @@ h1[id] { ...@@ -1102,6 +1093,7 @@ h1[id] {
.bs-glyphicons .glyphicon-class { .bs-glyphicons .glyphicon-class {
display: block; display: block;
text-align: center; text-align: center;
word-wrap: break-word; /* Help out IE10+ with class names */
} }
.bs-glyphicons li:hover { .bs-glyphicons li:hover {
color: #fff; color: #fff;
...@@ -1109,8 +1101,13 @@ h1[id] { ...@@ -1109,8 +1101,13 @@ h1[id] {
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.bs-glyphicons {
margin-left: 0;
margin-right: 0;
}
.bs-glyphicons li { .bs-glyphicons li {
width: 12.5%; width: 12.5%;
font-size: 12px;
} }
} }
......
...@@ -12,19 +12,19 @@ ...@@ -12,19 +12,19 @@
!function ($) { !function ($) {
$(function(){ $(function () {
// IE10 viewport hack for Surface/desktop Windows 8 bug // IE10 viewport hack for Surface/desktop Windows 8 bug
// //
// See Getting Started docs for more information // See Getting Started docs for more information
if (navigator.userAgent.match(/IEMobile\/10\.0/)) { if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
var msViewportStyle = document.createElement("style"); var msViewportStyle = document.createElement('style');
msViewportStyle.appendChild( msViewportStyle.appendChild(
document.createTextNode( document.createTextNode(
"@-ms-viewport{width:auto!important}" '@-ms-viewport{width:auto!important}'
) )
); );
document.getElementsByTagName("head")[0]. document.getElementsByTagName('head')[0].
appendChild(msViewportStyle); appendChild(msViewportStyle);
} }
...@@ -73,29 +73,23 @@ ...@@ -73,29 +73,23 @@
// tooltip demo // tooltip demo
$('.tooltip-demo').tooltip({ $('.tooltip-demo').tooltip({
selector: "[data-toggle=tooltip]", selector: '[data-toggle=tooltip]',
container: "body" container: 'body'
}) })
$('.tooltip-test').tooltip() $('.tooltip-test').tooltip()
$('.popover-test').popover() $('.popover-test').popover()
$('.bs-docs-navbar').tooltip({ $('.bs-docs-navbar').tooltip({
selector: "a[data-toggle=tooltip]", selector: 'a[data-toggle=tooltip]',
container: ".bs-docs-navbar .nav" container: '.bs-docs-navbar .nav'
}) })
// $('.bs-masthead').popover({
// selector: ".btn-lg",
// trigger: "hover",
// placement: "top"
// })
// popover demo // popover demo
$("[data-toggle=popover]").popover() $("[data-toggle=popover]").popover()
// button state demo // button state demo
$('#fat-btn') $('#loading-example-btn')
.click(function () { .click(function () {
var btn = $(this) var btn = $(this)
btn.button('loading') btn.button('loading')
...@@ -103,6 +97,6 @@ ...@@ -103,6 +97,6 @@
btn.button('reset') btn.button('reset')
}, 3000) }, 3000)
}) })
}) })
}(window.jQuery) }(jQuery)
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -5,9 +5,10 @@ ...@@ -5,9 +5,10 @@
* details, see http://creativecommons.org/licenses/by/3.0/. * details, see http://creativecommons.org/licenses/by/3.0/.
*/ */
/* jshint multistr:true */
window.onload = function () { // wait for load in a dumb way because B-0 window.onload = function () { // wait for load in a dumb way because B-0
var cw = '/*!\n * Bootstrap v3.0.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' var cw = '/*!\n * Bootstrap v3.0.3 (http://getbootstrap.com)\n\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\n'
function showError(msg, err) { function showError(msg, err) {
$('<div id="bsCustomizerAlert" class="bs-customizer-alert">\ $('<div id="bsCustomizerAlert" class="bs-customizer-alert">\
...@@ -34,18 +35,18 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -34,18 +35,18 @@ window.onload = function () { // wait for load in a dumb way because B-0
} }
function getQueryParam(key) { function getQueryParam(key) {
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, '\\$&'); // escape RegEx meta chars
var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)")); var match = location.search.match(new RegExp('[?&]' + key + '=([^&]+)(&|$)'));
return match && decodeURIComponent(match[1].replace(/\+/g, " ")); return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
} }
function createGist(configJson) { function createGist(configJson) {
var data = { var data = {
"description": "Bootstrap Customizer Config", 'description': 'Bootstrap Customizer Config',
"public": true, 'public': true,
"files": { 'files': {
"config.json": { 'config.json': {
"content": configJson 'content': configJson
} }
} }
} }
...@@ -55,11 +56,11 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -55,11 +56,11 @@ window.onload = function () { // wait for load in a dumb way because B-0
dataType: 'json', dataType: 'json',
data: JSON.stringify(data) data: JSON.stringify(data)
}) })
.success(function(result) { .success(function (result) {
var origin = window.location.protocol + "//" + window.location.host var origin = window.location.protocol + '//' + window.location.host
history.replaceState(false, document.title, origin + window.location.pathname + '?id=' + result.id) history.replaceState(false, document.title, origin + window.location.pathname + '?id=' + result.id)
}) })
.error(function(err) { .error(function (err) {
showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err) showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)
}) })
} }
...@@ -69,7 +70,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -69,7 +70,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
$('#less-variables-section input') $('#less-variables-section input')
.each(function () { .each(function () {
$(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) $(this).val() && (vars[$(this).prev().text()] = $(this).val())
}) })
var data = { var data = {
...@@ -93,7 +94,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -93,7 +94,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
type: 'GET', type: 'GET',
dataType: 'json' dataType: 'json'
}) })
.success(function(result) { .success(function (result) {
var data = JSON.parse(result.files['config.json'].content) var data = JSON.parse(result.files['config.json'].content)
if (data.js) { if (data.js) {
$('#plugin-section input').each(function () { $('#plugin-section input').each(function () {
...@@ -111,7 +112,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -111,7 +112,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
} }
} }
}) })
.error(function(err) { .error(function (err) {
showError('Error fetching bootstrap config file', err) showError('Error fetching bootstrap config file', err)
}) })
} }
...@@ -130,15 +131,15 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -130,15 +131,15 @@ window.onload = function () { // wait for load in a dumb way because B-0
if (js) { if (js) {
var jsFolder = zip.folder('js') var jsFolder = zip.folder('js')
for (var fileName in js) { for (var jsFileName in js) {
jsFolder.file(fileName, js[fileName]) jsFolder.file(jsFileName, js[jsFileName])
} }
} }
if (fonts) { if (fonts) {
var fontsFolder = zip.folder('fonts') var fontsFolder = zip.folder('fonts')
for (var fileName in fonts) { for (var fontsFileName in fonts) {
fontsFolder.file(fileName, fonts[fileName], {base64: true}) fontsFolder.file(fontsFileName, fonts[fontsFileName], {base64: true})
} }
} }
...@@ -146,7 +147,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -146,7 +147,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
zip.file('config.json', config) zip.file('config.json', config)
} }
var content = zip.generate({type:"blob"}) var content = zip.generate({ type: 'blob' })
complete(content) complete(content)
} }
...@@ -201,7 +202,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -201,7 +202,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
$('#less-variables-section input') $('#less-variables-section input')
.each(function () { .each(function () {
$(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) $(this).val() && (vars[$(this).prev().text()] = $(this).val())
}) })
$.each(bootstrapLessFilenames(), function(index, filename) { $.each(bootstrapLessFilenames(), function(index, filename) {
...@@ -310,22 +311,22 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -310,22 +311,22 @@ window.onload = function () { // wait for load in a dumb way because B-0
generateZip(generateCSS(), generateJavascript(), generateFonts(), configJson, function (blob) { generateZip(generateCSS(), generateJavascript(), generateFonts(), configJson, function (blob) {
$compileBtn.removeAttr('disabled') $compileBtn.removeAttr('disabled')
saveAs(blob, "bootstrap.zip") saveAs(blob, 'bootstrap.zip')
createGist(configJson) createGist(configJson)
}) })
}) })
// browser support alerts // browser support alerts
if (!window.URL && navigator.userAgent.toLowerCase().indexOf('safari') != -1) { if (!window.URL && navigator.userAgent.toLowerCase().indexOf('safari') != -1) {
showCallout("Looks like you're using safari, which sadly doesn't have the best support\ showCallout('Looks like you\'re using safari, which sadly doesn\'t have the best support\
for HTML5 blobs. Because of this your file will be downloaded with the name <code>\"untitled\"</code>.\ for HTML5 blobs. Because of this your file will be downloaded with the name <code>"untitled"</code>.\
However, if you check your downloads folder, just rename this <code>\"untitled\"</code> file\ However, if you check your downloads folder, just rename this <code>"untitled"</code> file\
to <code>\"bootstrap.zip\"</code> and you should be good to go!") to <code>"bootstrap.zip"</code> and you should be good to go!')
} else if (!window.URL && !window.webkitURL) { } else if (!window.URL && !window.webkitURL) {
$('.bs-docs-section, .bs-sidebar').css('display', 'none') $('.bs-docs-section, .bs-sidebar').css('display', 'none')
showCallout("Looks like your current browser doesn't support the Bootstrap Customizer. Please take a second\ showCallout('Looks like your current browser doesn\'t support the Bootstrap Customizer. Please take a second\
to <a href=\"https://www.google.com/intl/en/chrome/browser/\"> upgrade to a more modern browser</a>.", true) to <a href="https://www.google.com/intl/en/chrome/browser/"> upgrade to a more modern browser</a>.', true)
} }
parseUrl() parseUrl()
......
This diff is collapsed.
This diff is collapsed.
...@@ -16,7 +16,9 @@ Usage: ...@@ -16,7 +16,9 @@ Usage:
base64zip = zip.generate(); base64zip = zip.generate();
**/ **/
"use strict"; // We use strict, but it should not be placed outside of a function because
// the environment is shared inside the browser.
// "use strict";
/** /**
* Representation a of zip file in js * Representation a of zip file in js
...@@ -93,8 +95,8 @@ JSZip.support = { ...@@ -93,8 +95,8 @@ JSZip.support = {
catch(e) {} catch(e) {}
try { try {
var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
window.MozBlobBuilder || window.MSBlobBuilder)(); var builder = new BlobBuilder();
builder.append(buffer); builder.append(buffer);
return builder.getBlob('application/zip').size === 0; return builder.getBlob('application/zip').size === 0;
} }
...@@ -161,7 +163,7 @@ JSZip.prototype = (function () { ...@@ -161,7 +163,7 @@ JSZip.prototype = (function () {
return file.asBinary(); return file.asBinary();
} }
return result; return result;
} };
/** /**
* Transform this._data into a string. * Transform this._data into a string.
...@@ -287,9 +289,11 @@ JSZip.prototype = (function () { ...@@ -287,9 +289,11 @@ JSZip.prototype = (function () {
*/ */
var prepareFileAttrs = function (o) { var prepareFileAttrs = function (o) {
o = o || {}; o = o || {};
/*jshint -W041 */
if (o.base64 === true && o.binary == null) { if (o.base64 === true && o.binary == null) {
o.binary = true; o.binary = true;
} }
/*jshint +W041 */
o = extend(o, JSZip.defaults); o = extend(o, JSZip.defaults);
o.date = o.date || new Date(); o.date = o.date || new Date();
if (o.compression !== null) o.compression = o.compression.toUpperCase(); if (o.compression !== null) o.compression = o.compression.toUpperCase();
...@@ -341,7 +345,9 @@ JSZip.prototype = (function () { ...@@ -341,7 +345,9 @@ JSZip.prototype = (function () {
} }
} }
return this.files[name] = new ZipObject(name, data, o); var object = new ZipObject(name, data, o);
this.files[name] = object;
return object;
}; };
...@@ -399,7 +405,7 @@ JSZip.prototype = (function () { ...@@ -399,7 +405,7 @@ JSZip.prototype = (function () {
} else if (file._data.compressionMethod === compression.magic) { } else if (file._data.compressionMethod === compression.magic) {
result.compressedContent = file._data.getCompressedContent(); result.compressedContent = file._data.getCompressedContent();
} else { } else {
content = file._data.getContent() content = file._data.getContent();
// need to decompress / recompress // need to decompress / recompress
result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content)); result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content));
} }
...@@ -756,8 +762,9 @@ JSZip.prototype = (function () { ...@@ -756,8 +762,9 @@ JSZip.prototype = (function () {
case "nodebuffer" : case "nodebuffer" :
writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length); writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);
break; break;
case "base64" : // case "base64" :
default : // case "string" : // case "string" :
default :
writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length); writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);
break; break;
} }
...@@ -1066,8 +1073,8 @@ JSZip.compressions = { ...@@ -1066,8 +1073,8 @@ JSZip.compressions = {
try { try {
// deprecated, browser only, old way // deprecated, browser only, old way
var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
window.MozBlobBuilder || window.MSBlobBuilder)(); var builder = new BlobBuilder();
builder.append(buffer); builder.append(buffer);
return builder.getBlob('application/zip'); return builder.getBlob('application/zip');
} }
...@@ -1095,7 +1102,7 @@ JSZip.compressions = { ...@@ -1095,7 +1102,7 @@ JSZip.compressions = {
*/ */
function identity(input) { function identity(input) {
return input; return input;
}; }
/** /**
* Fill in an array with a string. * Fill in an array with a string.
...@@ -1108,7 +1115,7 @@ JSZip.compressions = { ...@@ -1108,7 +1115,7 @@ JSZip.compressions = {
array[i] = str.charCodeAt(i) & 0xFF; array[i] = str.charCodeAt(i) & 0xFF;
} }
return array; return array;
}; }
/** /**
* Transform an array-like object to a string. * Transform an array-like object to a string.
...@@ -1165,7 +1172,7 @@ JSZip.compressions = { ...@@ -1165,7 +1172,7 @@ JSZip.compressions = {
} }
} }
return result.join(""); return result.join("");
}; }
/** /**
* Copy the data from an array-like to an other array-like. * Copy the data from an array-like to an other array-like.
...@@ -1178,7 +1185,7 @@ JSZip.compressions = { ...@@ -1178,7 +1185,7 @@ JSZip.compressions = {
arrayTo[i] = arrayFrom[i]; arrayTo[i] = arrayFrom[i];
} }
return arrayTo; return arrayTo;
}; }
// a matrix containing functions to transform everything into everything. // a matrix containing functions to transform everything into everything.
var transform = {}; var transform = {};
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
examples/screenshots/jumbotron.jpg

76.1 KB | W: | H:

examples/screenshots/jumbotron.jpg

98.8 KB | W: | H:

examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
  • 2-up
  • Swipe
  • Onion skin
examples/screenshots/theme.jpg

93.2 KB | W: | H:

examples/screenshots/theme.jpg

83.5 KB | W: | H:

examples/screenshots/theme.jpg
examples/screenshots/theme.jpg
examples/screenshots/theme.jpg
examples/screenshots/theme.jpg
  • 2-up
  • Swipe
  • Onion skin
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment