Commit 46c3d274 authored by Mark Otto's avatar Mark Otto

Merge branch 'master' into pr/11435

Conflicts:
	dist/css/bootstrap.css
	dist/css/bootstrap.min.css
parents aad447e2 4c64c1ee
{
"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
...@@ -39,3 +39,4 @@ validation-report.json ...@@ -39,3 +39,4 @@ validation-report.json
# Folders to ignore # Folders to ignore
node_modules node_modules
bower_components
language: node_js language: node_js
node_js: node_js:
- 0.10 - 0.10
before_script: before_install:
- gem install jekyll - time sudo pip install --use-mirrors -r ./test-infra/requirements.txt
- npm install -g grunt-cli install:
- time gem install jekyll
- time npm install -g grunt-cli
- time ./test-infra/node_modules_cache.py download || time npm install
after_script:
- time ./test-infra/node_modules_cache.py upload
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: "" - secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY="
- secure: "Gghh/e3Gsbj1+4RR9Lh2aR/xJl35HWiHqlPIeSUqE9D7uDCVTAwNce/dGL3Ew7uJPfJ6Pgr70wD3zgu3stw0Zmzayax0hiDtGwcQCxVIER08wqGANK9C2Q7PYJkNTNtiTo6ehKWbdV4Z+/U+TEYyQfpQTDbAFYk/vVpsdjp0Lmc="
- secure: "RTbRdx4G/2OTLfrZtP1VbRljxEmd6A1F3GqXboeQTldsnAlwpsES65es5CE3ub/rmixLApOY9ot7OPmNixFgC2Y8xOsV7lNCC62QVpmqQEDyGFFQKb3yO6/dmwQxdsCqGfzf9Np6Wh5V22QFvr50ZLKLd7Uhd9oXMDIk/z1MJ3o="
...@@ -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,4 +58,22 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ...@@ -58,4 +58,22 @@ 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.
## Release checklist
1. Close ship list issue for the release.
2. Close the milestone for the release.
3. Open new release issue that includes this checklist.
4. Ping folks to coordinate release (mainly @jdorfman for BootstrapCDN).
5. Update version numbers using `grunt change-version-number --oldver=A.B.C --newver=X.Y.Z`. Review the changes and stage them manually.
6. Run `grunt` one last time.
7. Push to `master` branch.
8. Merge `master` into `gh-pages`.
9. Generate `bootstrap-X.Y.Z-dist.zip` file for release.
10. Create release on GitHub with `/dist/` folder and release notes.
11. Push `gh-pages`.
12. Publish blog post.
13. Tweet tweet.
/* 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: {
compile: {
options: { options: {
compile: true, strictMath: true
banner: '<%= banner %>'
}, },
bootstrap: { files: {
src: ['less/bootstrap.less'], 'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less',
dest: 'dist/css/<%= pkg.name %>.css' 'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less'
}
}, },
min: { minify: {
options: { options: {
compress: true 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'
}
}
}, },
src: ['less/bootstrap.less'],
dest: 'dist/css/<%= pkg.name %>.min.css' usebanner: {
dist: {
options: {
position: 'top',
banner: '<%= banner %>'
}, },
theme: { files: {
src: ['less/theme.less'], src: [
dest: 'dist/css/<%= pkg.name %>-theme.css' 'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>.min.css',
'dist/css/<%= pkg.name %>-theme.css',
'dist/css/<%= pkg.name %>-theme.min.css',
]
}
}
}, },
theme_min: {
csscomb: {
sort: {
options: { options: {
compress: true sortOrder: '.csscomb.json'
}, },
src: ['less/theme.less'], files: {
dest: 'dist/css/<%= pkg.name %>-theme.min.css' '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: '7',
platform: 'OS X 10.9'
},
{
browserName: 'chrome',
version: '31',
platform: 'OS X 10.9'
},
/* 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
<!-- 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">
...@@ -97,3 +105,11 @@ ...@@ -97,3 +105,11 @@
<li><a href="#responsive-utilities-tests">Test cases</a></li> <li><a href="#responsive-utilities-tests">Test cases</a></li>
</ul> </ul>
</li> </li>
<li>
<a href="#less">Using LESS</a>
<ul class="nav">
<li><a href="#less-variables">Variables</a></li>
<li><a href="#less-mixins-vendor">Vendor mixins</a></li>
<li><a href="#less-mixins-utility">Utility mixins</a></li>
</ul>
</li>
...@@ -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>
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<a href="#modals">Modal</a> <a href="#modals">Modal</a>
<ul class="nav"> <ul class="nav">
<li><a href="#modals-examples">Examples</a></li> <li><a href="#modals-examples">Examples</a></li>
<li><a href="#modals-sizes">Sizes</a></li>
<li><a href="#modals-usage">Usage</a></li> <li><a href="#modals-usage">Usage</a></li>
</ul> </ul>
</li> </li>
......
...@@ -69,7 +69,6 @@ base_url: "../" ...@@ -69,7 +69,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>
...@@ -88,6 +87,8 @@ base_url: "../" ...@@ -88,6 +87,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": [
"**/.*" "**/.*",
"_*",
"docs-assets",
"examples",
"/fonts",
"js/tests",
"CNAME",
"CONTRIBUTING.md",
"composer.json",
"*.html"
], ],
"dependencies": { "dependencies": {
"jquery": ">= 1.9.0" "jquery": ">= 1.9.0"
......
{
"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.
This diff is collapsed.
...@@ -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>
...@@ -399,7 +399,7 @@ base_url: "../" ...@@ -399,7 +399,7 @@ base_url: "../"
<input type="text" class="form-control" placeholder="Georgia, 'Times New Roman', Times, serif" data-var="@font-family-serif"> <input type="text" class="form-control" placeholder="Georgia, 'Times New Roman', Times, serif" data-var="@font-family-serif">
<p class="help-block">Default serif fonts.</p> <p class="help-block">Default serif fonts.</p>
<label>@font-family-monospace</label> <label>@font-family-monospace</label>
<input type="text" class="form-control" placeholder="Monaco, Menlo, Consolas, 'Courier New', monospace" data-var="@font-family-monospace"> <input type="text" class="form-control" placeholder="Menlo, Monaco, Consolas, 'Courier New', monospace" data-var="@font-family-monospace">
<p class="help-block">Default monospace fonts for <code>&lt;code&gt;</code> and <code>&lt;pre&gt;</code>.</p> <p class="help-block">Default monospace fonts for <code>&lt;code&gt;</code> and <code>&lt;pre&gt;</code>.</p>
<h4>Base type styes</h4> <h4>Base type styes</h4>
...@@ -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">
...@@ -1147,6 +1147,8 @@ base_url: "../" ...@@ -1147,6 +1147,8 @@ base_url: "../"
<h3>Wells</h3> <h3>Wells</h3>
<label>@well-bg</label> <label>@well-bg</label>
<input type="text" class="form-control" placeholder="#f5f5f5" data-var="@well-bg"> <input type="text" class="form-control" placeholder="#f5f5f5" data-var="@well-bg">
<label>@well-border</label>
<input type="text" class="form-control" placeholder="darken(@well-bg, 7%)" data-var="@well-border">
<h2 id="variables-accordion">Accordion</h2> <h2 id="variables-accordion">Accordion</h2>
...@@ -1247,6 +1249,11 @@ base_url: "../" ...@@ -1247,6 +1249,11 @@ base_url: "../"
<input type="text" class="form-control" placeholder="#000" data-var="@modal-backdrop-bg"> <input type="text" class="form-control" placeholder="#000" data-var="@modal-backdrop-bg">
<p class="help-block">Modal backdrop background color</p> <p class="help-block">Modal backdrop background color</p>
</div> </div>
<div class="col-md-4">
<label>@modal-backdrop-opacity</label>
<input type="text" class="form-control" placeholder=".5" data-var="@modal-backdrop-opacity">
<p class="help-block">Modal backdrop opacity</p>
</div>
</div> </div>
<h3>Modal header and footer</h3> <h3>Modal header and footer</h3>
......
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.
...@@ -586,17 +586,46 @@ h1[id] { ...@@ -586,17 +586,46 @@ 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;
} }
/*
* Color swatches
*
* Color swatches and associated values for our grayscale and brand colors.
*/
.color-swatches {
margin: 0 -5px;
overflow: hidden; /* clearfix */
}
.color-swatch {
float: left;
width: 100px;
height: 100px;
margin: 0 5px;
border-radius: 3px;
}
.color-swatches .gray-darker { background-color: #222; }
.color-swatches .gray-dark { background-color: #333; }
.color-swatches .gray { background-color: #555; }
.color-swatches .gray-light { background-color: #999; }
.color-swatches .gray-lighter { background-color: #eee; }
.color-swatches .brand-primary { background-color: #428bca; }
.color-swatches .brand-success { background-color: #5cb85c; }
.color-swatches .brand-warning { background-color: #f0ad4e; }
.color-swatches .brand-danger { background-color: #d9534f; }
.color-swatches .brand-info { background-color: #5bc0de; }
/* /*
* Team members * Team members
* *
...@@ -921,7 +950,6 @@ h1[id] { ...@@ -921,7 +950,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;
...@@ -949,13 +977,6 @@ h1[id] { ...@@ -949,13 +977,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
...@@ -998,6 +1019,7 @@ h1[id] { ...@@ -998,6 +1019,7 @@ h1[id] {
margin-bottom: 10px; margin-bottom: 10px;
} }
.responsive-utilities-test span { .responsive-utilities-test span {
display: block;
padding: 15px 10px; padding: 15px 10px;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
...@@ -1037,11 +1059,12 @@ h1[id] { ...@@ -1037,11 +1059,12 @@ 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;
list-style: none; list-style: none;
overflow: hidden;
} }
.bs-glyphicons li { .bs-glyphicons li {
float: left; float: left;
...@@ -1049,7 +1072,7 @@ h1[id] { ...@@ -1049,7 +1072,7 @@ h1[id] {
height: 115px; height: 115px;
padding: 10px; padding: 10px;
margin: 0 -1px -1px 0; margin: 0 -1px -1px 0;
font-size: 12px; font-size: 10px;
line-height: 1.4; line-height: 1.4;
text-align: center; text-align: center;
border: 1px solid #ddd; border: 1px solid #ddd;
...@@ -1062,14 +1085,20 @@ h1[id] { ...@@ -1062,14 +1085,20 @@ 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 {
background-color: rgba(86,61,124,.1); background-color: rgba(86,61,124,.1);
} }
@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,24 +73,24 @@ ...@@ -73,24 +73,24 @@
// 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'
}) })
// popover demo // popover demo
$("[data-toggle=popover]") $('[data-toggle=popover]')
.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')
...@@ -98,6 +98,6 @@ ...@@ -98,6 +98,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 source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
/*
* Globals
*/
/* Links */
a,
a:focus,
a:hover {
color: #fff;
}
/* Custom default button */
.btn-default,
.btn-default:hover,
.btn-default:focus {
color: #333;
text-shadow: none; /* Prevent inheritence from `body` */
background-color: #fff;
border: 1px solid #fff;
}
/*
* Base structure
*/
html,
body {
height: 100%;
background-color: #333;
}
body {
color: #fff;
text-align: center;
text-shadow: 0 1px 3px rgba(0,0,0,.5);
box-shadow: inset 0 0 100px rgba(0,0,0,.5);
}
/* Extra markup and styles for table-esque vertical and horizontal centering */
.site-wrapper {
display: table;
width: 100%;
min-height: 100%;
}
.site-wrapper-inner {
display: table-cell;
vertical-align: top;
}
.cover-container {
margin-left: auto;
margin-right: auto;
}
/* Padding for spacing */
.inner {
padding: 30px;
}
/*
* Header
*/
.masthead-brand {
margin-top: 10px;
margin-bottom: 10px;
}
.masthead-nav > li {
display: inline-block;
}
.masthead-nav > li + li {
margin-left: 20px;
}
.masthead-nav > li > a {
padding-left: 0;
padding-right: 0;
font-size: 16px;
font-weight: bold;
color: #fff; /* IE8 proofing */
color: rgba(255,255,255,.75);
border-bottom: 2px solid transparent;
}
.masthead-nav > li > a:hover,
.masthead-nav > li > a:focus {
background-color: transparent;
border-bottom-color: rgba(255,255,255,.25);
}
.masthead-nav > .active > a,
.masthead-nav > .active > a:hover,
.masthead-nav > .active > a:focus {
color: #fff;
border-bottom-color: #fff;
}
@media (min-width: 768px) {
.masthead-brand {
float: left;
}
.masthead-nav {
float: right;
}
}
/*
* Cover
*/
.cover {
padding: 0 20px;
}
.cover .btn-lg {
padding: 10px 20px;
font-weight: bold;
}
/*
* Footer
*/
.mastfoot {
color: #999; /* IE8 proofing */
color: rgba(255,255,255,.5);
}
/*
* Affix and center
*/
@media (min-width: 768px) {
/* Pull out the header and footer */
.masthead {
position: fixed;
top: 0;
}
.mastfoot {
position: fixed;
bottom: 0;
}
/* Start the vertical centering */
.site-wrapper-inner {
vertical-align: middle;
}
/* Handle the widths */
.masthead,
.mastfoot,
.cover-container {
width: 100%; /* Must be percentage or pixels for horizontal alignment */
}
}
@media (min-width: 992px) {
.masthead,
.mastfoot,
.cover-container {
width: 700px;
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<a class="navbar-brand" href="#">Project name</a> <a class="navbar-brand" href="#">Project name</a>
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<form class="navbar-form navbar-right"> <form class="navbar-form navbar-right" role="form">
<div class="form-group"> <div class="form-group">
<input type="text" placeholder="Email" class="form-control"> <input type="text" placeholder="Email" class="form-control">
</div> </div>
......
...@@ -52,7 +52,8 @@ ...@@ -52,7 +52,8 @@
<!-- Example row of columns --> <!-- Example row of columns -->
<div class="row"> <div class="row">
<div class="col-lg-4"> <div class="col-lg-4">
<h2>Heading</h2> <h2>Safari bug warning!</h2>
<p class="text-danger">Safari exhibits a bug in which resizing your browser horizontally causes rendering errors in the justified nav that are cleared upon refreshing.</p>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p> <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p>
</div> </div>
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
body { body {
padding-top: 70px; padding-top: 70px;
padding-bottom: 30px; padding-bottom: 30px;
min-width: 970px;
} }
/* Finesse the page header spacing */ /* Finesse the page header spacing */
...@@ -63,6 +64,9 @@ body { ...@@ -63,6 +64,9 @@ body {
.navbar-toggle { .navbar-toggle {
display: none; display: none;
} }
.navbar-collapse {
border-top: 0;
}
.navbar-brand { .navbar-brand {
margin-left: -15px; margin-left: -15px;
...@@ -86,7 +90,7 @@ body { ...@@ -86,7 +90,7 @@ body {
} }
/* Undo custom dropdowns */ /* Undo custom dropdowns */
.navbar .open .dropdown-menu { .navbar .navbar-nav .open .dropdown-menu {
position: absolute; position: absolute;
float: left; float: left;
background-color: #fff; background-color: #fff;
...@@ -97,20 +101,20 @@ body { ...@@ -97,20 +101,20 @@ body {
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
} }
.navbar .open .dropdown-menu > li > a { .navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #333; color: #333;
} }
.navbar .open .dropdown-menu > li > a:hover, .navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .open .dropdown-menu > li > a:focus, .navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .open .dropdown-menu > .active > a:hover, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .open .dropdown-menu > .active > a:focus { .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff !important; color: #fff !important;
background-color: #428bca !important; background-color: #428bca !important;
} }
.navbar .open .dropdown-menu > .disabled > a, .navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .open .dropdown-menu > .disabled > a:hover, .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .open .dropdown-menu > .disabled > a:focus { .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #999 !important; color: #999 !important;
background-color: transparent !important; background-color: transparent !important;
} }
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.
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